ngwr 8.0.0 → 9.0.1

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 (431) hide show
  1. package/README.md +76 -29
  2. package/action-sheet/styles/_index.scss +93 -0
  3. package/alert/styles/_index.scss +10 -10
  4. package/anchor/styles/_index.scss +3 -3
  5. package/back-top/styles/_index.scss +1 -1
  6. package/badge/styles/_tag.scss +3 -3
  7. package/bar-chart/styles/_index.scss +4 -4
  8. package/border-glow/styles/_index.scss +3 -3
  9. package/breadcrumbs/styles/_index.scss +3 -3
  10. package/burger/styles/_index.scss +1 -1
  11. package/button/styles/_index.scss +4 -4
  12. package/calendar/styles/_index.scss +4 -4
  13. package/calendar-heatmap/styles/_index.scss +3 -3
  14. package/card/styles/_index.scss +5 -5
  15. package/carousel/styles/_index.scss +5 -5
  16. package/cascader/styles/_index.scss +15 -15
  17. package/checkbox/styles/_index.scss +20 -5
  18. package/collapse/styles/_index.scss +6 -6
  19. package/color-picker/styles/_index.scss +15 -9
  20. package/command-palette/styles/_index.scss +19 -16
  21. package/compare/styles/_index.scss +3 -3
  22. package/context-menu/styles/_index.scss +16 -6
  23. package/counter/styles/_index.scss +12 -1
  24. package/date-picker/styles/_index.scss +8 -8
  25. package/descriptions/styles/_index.scss +9 -9
  26. package/dialog/styles/_index.scss +7 -6
  27. package/divider/styles/_index.scss +2 -2
  28. package/donut-chart/styles/_index.scss +3 -3
  29. package/drag-drop/styles/_index.scss +11 -6
  30. package/drawer/styles/_index.scss +15 -6
  31. package/dropdown/styles/_index.scss +5 -5
  32. package/empty/styles/_index.scss +4 -4
  33. package/fesm2022/ngwr-action-sheet.mjs +81 -0
  34. package/fesm2022/ngwr-action-sheet.mjs.map +1 -0
  35. package/fesm2022/ngwr-affix.mjs +3 -3
  36. package/fesm2022/ngwr-alert.mjs +4 -4
  37. package/fesm2022/ngwr-alert.mjs.map +1 -1
  38. package/fesm2022/ngwr-anchor.mjs +4 -4
  39. package/fesm2022/ngwr-anchor.mjs.map +1 -1
  40. package/fesm2022/ngwr-aurora.mjs +5 -4
  41. package/fesm2022/ngwr-aurora.mjs.map +1 -1
  42. package/fesm2022/ngwr-avatar.mjs +4 -4
  43. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  44. package/fesm2022/ngwr-back-top.mjs +4 -4
  45. package/fesm2022/ngwr-back-top.mjs.map +1 -1
  46. package/fesm2022/ngwr-badge.mjs +8 -8
  47. package/fesm2022/ngwr-badge.mjs.map +1 -1
  48. package/fesm2022/ngwr-bar-chart.mjs +4 -4
  49. package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
  50. package/fesm2022/ngwr-blur-text.mjs +3 -3
  51. package/fesm2022/ngwr-border-glow.mjs +4 -4
  52. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  53. package/fesm2022/ngwr-breadcrumbs.mjs +8 -8
  54. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  55. package/fesm2022/ngwr-burger.mjs +4 -4
  56. package/fesm2022/ngwr-burger.mjs.map +1 -1
  57. package/fesm2022/ngwr-button.mjs +8 -8
  58. package/fesm2022/ngwr-button.mjs.map +1 -1
  59. package/fesm2022/ngwr-calendar-heatmap.mjs +4 -4
  60. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  61. package/fesm2022/ngwr-calendar.mjs +4 -4
  62. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  63. package/fesm2022/ngwr-card.mjs +11 -11
  64. package/fesm2022/ngwr-card.mjs.map +1 -1
  65. package/fesm2022/ngwr-carousel.mjs +7 -7
  66. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  67. package/fesm2022/ngwr-cascader.mjs +52 -60
  68. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  69. package/fesm2022/ngwr-checkbox.mjs +74 -106
  70. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  71. package/fesm2022/ngwr-circular-text.mjs +5 -4
  72. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  73. package/fesm2022/ngwr-click-spark.mjs +5 -4
  74. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  75. package/fesm2022/ngwr-clipboard.mjs +4 -4
  76. package/fesm2022/ngwr-clipboard.mjs.map +1 -1
  77. package/fesm2022/ngwr-collapse.mjs +12 -12
  78. package/fesm2022/ngwr-collapse.mjs.map +1 -1
  79. package/fesm2022/ngwr-color-picker.mjs +58 -66
  80. package/fesm2022/ngwr-color-picker.mjs.map +1 -1
  81. package/fesm2022/ngwr-command-palette.mjs +4 -4
  82. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  83. package/fesm2022/ngwr-compare.mjs +4 -4
  84. package/fesm2022/ngwr-compare.mjs.map +1 -1
  85. package/fesm2022/ngwr-confetti.mjs +3 -3
  86. package/fesm2022/ngwr-context-menu.mjs +86 -15
  87. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  88. package/fesm2022/ngwr-cookie.mjs +19 -6
  89. package/fesm2022/ngwr-cookie.mjs.map +1 -1
  90. package/fesm2022/ngwr-counter.mjs +26 -12
  91. package/fesm2022/ngwr-counter.mjs.map +1 -1
  92. package/fesm2022/ngwr-date-adapter-fns.mjs +3 -3
  93. package/fesm2022/ngwr-date-adapter-luxon.mjs +3 -3
  94. package/fesm2022/ngwr-date-adapter.mjs +10 -5
  95. package/fesm2022/ngwr-date-adapter.mjs.map +1 -1
  96. package/fesm2022/ngwr-date-picker.mjs +128 -123
  97. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  98. package/fesm2022/ngwr-decrypt-text.mjs +3 -3
  99. package/fesm2022/ngwr-density.mjs +7 -7
  100. package/fesm2022/ngwr-density.mjs.map +1 -1
  101. package/fesm2022/ngwr-descriptions.mjs +7 -7
  102. package/fesm2022/ngwr-descriptions.mjs.map +1 -1
  103. package/fesm2022/ngwr-dialog.mjs +16 -16
  104. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  105. package/fesm2022/ngwr-directives.mjs +21 -15
  106. package/fesm2022/ngwr-directives.mjs.map +1 -1
  107. package/fesm2022/ngwr-divider.mjs +4 -4
  108. package/fesm2022/ngwr-divider.mjs.map +1 -1
  109. package/fesm2022/ngwr-donut-chart.mjs +4 -4
  110. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  111. package/fesm2022/ngwr-drag-drop.mjs +10 -9
  112. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  113. package/fesm2022/ngwr-drawer.mjs +19 -18
  114. package/fesm2022/ngwr-drawer.mjs.map +1 -1
  115. package/fesm2022/ngwr-dropdown.mjs +13 -12
  116. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  117. package/fesm2022/ngwr-empty.mjs +4 -4
  118. package/fesm2022/ngwr-empty.mjs.map +1 -1
  119. package/fesm2022/ngwr-falling-text.mjs +5 -4
  120. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  121. package/fesm2022/ngwr-file-upload.mjs +58 -60
  122. package/fesm2022/ngwr-file-upload.mjs.map +1 -1
  123. package/fesm2022/ngwr-form.mjs +11 -11
  124. package/fesm2022/ngwr-form.mjs.map +1 -1
  125. package/fesm2022/ngwr-fuzzy-text.mjs +5 -4
  126. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  127. package/fesm2022/ngwr-gauge.mjs +4 -4
  128. package/fesm2022/ngwr-gauge.mjs.map +1 -1
  129. package/fesm2022/ngwr-glitch-text.mjs +4 -4
  130. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  131. package/fesm2022/ngwr-gradient-text.mjs +4 -4
  132. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  133. package/fesm2022/ngwr-hotkey.mjs +7 -7
  134. package/fesm2022/ngwr-hotkey.mjs.map +1 -1
  135. package/fesm2022/ngwr-i18n.mjs +10 -10
  136. package/fesm2022/ngwr-i18n.mjs.map +1 -1
  137. package/fesm2022/ngwr-icon-adapters-lucide.mjs +6 -7
  138. package/fesm2022/ngwr-icon-adapters-lucide.mjs.map +1 -1
  139. package/fesm2022/ngwr-icon.mjs +4 -4
  140. package/fesm2022/ngwr-icon.mjs.map +1 -1
  141. package/fesm2022/ngwr-image-cropper.mjs +6 -5
  142. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  143. package/fesm2022/ngwr-input-number.mjs +56 -73
  144. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  145. package/fesm2022/ngwr-input-otp.mjs +46 -52
  146. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  147. package/fesm2022/ngwr-input.mjs +17 -17
  148. package/fesm2022/ngwr-input.mjs.map +1 -1
  149. package/fesm2022/ngwr-keyboard.mjs +4 -4
  150. package/fesm2022/ngwr-keyboard.mjs.map +1 -1
  151. package/fesm2022/ngwr-knob.mjs +47 -58
  152. package/fesm2022/ngwr-knob.mjs.map +1 -1
  153. package/fesm2022/ngwr-layout.mjs +16 -16
  154. package/fesm2022/ngwr-layout.mjs.map +1 -1
  155. package/fesm2022/ngwr-lightbox.mjs +7 -6
  156. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  157. package/fesm2022/ngwr-line-chart.mjs +4 -4
  158. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  159. package/fesm2022/ngwr-list.mjs +8 -8
  160. package/fesm2022/ngwr-list.mjs.map +1 -1
  161. package/fesm2022/ngwr-loading-bar.mjs +7 -7
  162. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  163. package/fesm2022/ngwr-marquee.mjs +6 -5
  164. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  165. package/fesm2022/ngwr-media.mjs +4 -4
  166. package/fesm2022/ngwr-media.mjs.map +1 -1
  167. package/fesm2022/ngwr-mention.mjs +15 -9
  168. package/fesm2022/ngwr-mention.mjs.map +1 -1
  169. package/fesm2022/ngwr-meta.mjs +7 -7
  170. package/fesm2022/ngwr-meta.mjs.map +1 -1
  171. package/fesm2022/ngwr-meter-group.mjs +4 -4
  172. package/fesm2022/ngwr-meter-group.mjs.map +1 -1
  173. package/fesm2022/ngwr-overlay.mjs +9 -4
  174. package/fesm2022/ngwr-overlay.mjs.map +1 -1
  175. package/fesm2022/ngwr-page-header.mjs +4 -4
  176. package/fesm2022/ngwr-page-header.mjs.map +1 -1
  177. package/fesm2022/ngwr-pagination.mjs +4 -4
  178. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  179. package/fesm2022/ngwr-pipes.mjs +21 -21
  180. package/fesm2022/ngwr-platform.mjs +169 -5
  181. package/fesm2022/ngwr-platform.mjs.map +1 -1
  182. package/fesm2022/ngwr-popconfirm.mjs +7 -7
  183. package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
  184. package/fesm2022/ngwr-popover.mjs +7 -7
  185. package/fesm2022/ngwr-popover.mjs.map +1 -1
  186. package/fesm2022/ngwr-progress.mjs +4 -4
  187. package/fesm2022/ngwr-progress.mjs.map +1 -1
  188. package/fesm2022/ngwr-pull-to-refresh.mjs +172 -0
  189. package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -0
  190. package/fesm2022/ngwr-qr.mjs +5 -5
  191. package/fesm2022/ngwr-qr.mjs.map +1 -1
  192. package/fesm2022/ngwr-radio.mjs +27 -52
  193. package/fesm2022/ngwr-radio.mjs.map +1 -1
  194. package/fesm2022/ngwr-rating.mjs +35 -48
  195. package/fesm2022/ngwr-rating.mjs.map +1 -1
  196. package/fesm2022/ngwr-result.mjs +13 -13
  197. package/fesm2022/ngwr-result.mjs.map +1 -1
  198. package/fesm2022/ngwr-rotating-text.mjs +15 -4
  199. package/fesm2022/ngwr-rotating-text.mjs.map +1 -1
  200. package/fesm2022/ngwr-scroll.mjs +4 -4
  201. package/fesm2022/ngwr-scroll.mjs.map +1 -1
  202. package/fesm2022/ngwr-segmented.mjs +3 -3
  203. package/fesm2022/ngwr-segmented.mjs.map +1 -1
  204. package/fesm2022/ngwr-select.mjs +289 -85
  205. package/fesm2022/ngwr-select.mjs.map +1 -1
  206. package/fesm2022/ngwr-shiny-text.mjs +7 -7
  207. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  208. package/fesm2022/ngwr-sidebar.mjs +4 -4
  209. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  210. package/fesm2022/ngwr-skeleton.mjs +4 -4
  211. package/fesm2022/ngwr-skeleton.mjs.map +1 -1
  212. package/fesm2022/ngwr-slider.mjs +79 -73
  213. package/fesm2022/ngwr-slider.mjs.map +1 -1
  214. package/fesm2022/ngwr-sparkline.mjs +4 -4
  215. package/fesm2022/ngwr-sparkline.mjs.map +1 -1
  216. package/fesm2022/ngwr-speed-dial.mjs +13 -5
  217. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  218. package/fesm2022/ngwr-spinner.mjs +4 -4
  219. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  220. package/fesm2022/ngwr-splash-cursor.mjs +4 -4
  221. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
  222. package/fesm2022/ngwr-split-text.mjs +3 -3
  223. package/fesm2022/ngwr-splitter.mjs +4 -4
  224. package/fesm2022/ngwr-splitter.mjs.map +1 -1
  225. package/fesm2022/ngwr-spotlight-card.mjs +7 -7
  226. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  227. package/fesm2022/ngwr-squircle.mjs +7 -7
  228. package/fesm2022/ngwr-squircle.mjs.map +1 -1
  229. package/fesm2022/ngwr-star-border.mjs +4 -4
  230. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  231. package/fesm2022/ngwr-statistic.mjs +65 -10
  232. package/fesm2022/ngwr-statistic.mjs.map +1 -1
  233. package/fesm2022/ngwr-stepper.mjs +8 -8
  234. package/fesm2022/ngwr-stepper.mjs.map +1 -1
  235. package/fesm2022/ngwr-storage.mjs +4 -4
  236. package/fesm2022/ngwr-storage.mjs.map +1 -1
  237. package/fesm2022/ngwr-switch.mjs +16 -48
  238. package/fesm2022/ngwr-switch.mjs.map +1 -1
  239. package/fesm2022/ngwr-table.mjs +824 -20
  240. package/fesm2022/ngwr-table.mjs.map +1 -1
  241. package/fesm2022/ngwr-tabs.mjs +9 -8
  242. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  243. package/fesm2022/ngwr-textarea.mjs +18 -50
  244. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  245. package/fesm2022/ngwr-theme.mjs +20 -5
  246. package/fesm2022/ngwr-theme.mjs.map +1 -1
  247. package/fesm2022/ngwr-tilt-card.mjs +27 -11
  248. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  249. package/fesm2022/ngwr-timeline.mjs +7 -7
  250. package/fesm2022/ngwr-timeline.mjs.map +1 -1
  251. package/fesm2022/ngwr-toast.mjs +10 -10
  252. package/fesm2022/ngwr-toast.mjs.map +1 -1
  253. package/fesm2022/ngwr-toolbar.mjs +4 -4
  254. package/fesm2022/ngwr-toolbar.mjs.map +1 -1
  255. package/fesm2022/ngwr-tree.mjs +280 -84
  256. package/fesm2022/ngwr-tree.mjs.map +1 -1
  257. package/fesm2022/ngwr-typewriter.mjs +10 -5
  258. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  259. package/fesm2022/ngwr-typography.mjs +4 -4
  260. package/fesm2022/ngwr-typography.mjs.map +1 -1
  261. package/fesm2022/ngwr-validators.mjs +1 -1
  262. package/fesm2022/ngwr-validators.mjs.map +1 -1
  263. package/fesm2022/ngwr-version.mjs +1 -1
  264. package/fesm2022/ngwr-version.mjs.map +1 -1
  265. package/fesm2022/ngwr-virtual-scroll.mjs +9 -7
  266. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  267. package/fesm2022/ngwr-waves.mjs +6 -5
  268. package/fesm2022/ngwr-waves.mjs.map +1 -1
  269. package/fesm2022/ngwr-window.mjs +16 -15
  270. package/fesm2022/ngwr-window.mjs.map +1 -1
  271. package/file-upload/styles/_index.scss +11 -11
  272. package/form/styles/_index.scss +4 -4
  273. package/gauge/styles/_index.scss +2 -2
  274. package/glitch-text/styles/_index.scss +1 -1
  275. package/gradient-text/styles/_index.scss +1 -1
  276. package/image-cropper/styles/_index.scss +5 -4
  277. package/input/styles/_index.scss +9 -9
  278. package/input-number/styles/_index.scss +1 -1
  279. package/input-otp/styles/_index.scss +5 -5
  280. package/keyboard/styles/_index.scss +5 -5
  281. package/knob/styles/_index.scss +6 -2
  282. package/layout/styles/_index.scss +12 -12
  283. package/lightbox/styles/_index.scss +10 -8
  284. package/line-chart/styles/_index.scss +5 -5
  285. package/list/styles/_index.scss +3 -3
  286. package/llms-full.txt +31 -5
  287. package/llms.txt +48 -32
  288. package/marquee/styles/_index.scss +1 -1
  289. package/mention/styles/_index.scss +4 -4
  290. package/meter-group/styles/_index.scss +4 -4
  291. package/overlay/styles/_index.scss +8 -0
  292. package/package.json +21 -9
  293. package/page-header/styles/_index.scss +4 -4
  294. package/pagination/styles/_index.scss +3 -3
  295. package/popconfirm/styles/_index.scss +3 -3
  296. package/popover/styles/_index.scss +5 -5
  297. package/progress/styles/_index.scss +1 -1
  298. package/pull-to-refresh/styles/_index.scss +38 -0
  299. package/radio/styles/_index.scss +4 -4
  300. package/rating/styles/_index.scss +1 -1
  301. package/result/styles/_index.scss +3 -3
  302. package/schematics/migrations/v9/index.js +71 -0
  303. package/schematics/migrations.json +5 -0
  304. package/schematics/ng-add/schema.json +1 -1
  305. package/schematics/use/symbol-map.json +13 -0
  306. package/segmented/styles/_index.scss +4 -4
  307. package/select/styles/_index.scss +53 -18
  308. package/shiny-text/styles/_index.scss +4 -4
  309. package/sidebar/styles/_index.scss +12 -12
  310. package/slider/styles/_index.scss +5 -5
  311. package/speed-dial/styles/_index.scss +22 -6
  312. package/splash-cursor/styles/_index.scss +1 -0
  313. package/splitter/styles/_index.scss +7 -4
  314. package/spotlight-card/styles/_index.scss +7 -7
  315. package/star-border/styles/_index.scss +3 -3
  316. package/statistic/styles/_index.scss +51 -4
  317. package/stepper/styles/_index.scss +6 -6
  318. package/styles/_typography.scss +4 -1
  319. package/styles.scss +2 -0
  320. package/switch/styles/_index.scss +4 -4
  321. package/table/styles/_index.scss +447 -17
  322. package/tabs/styles/_index.scss +3 -3
  323. package/textarea/styles/_index.scss +7 -7
  324. package/theme/styles/_colors.scss +27 -3
  325. package/tilt-card/styles/_index.scss +4 -4
  326. package/timeline/styles/_index.scss +7 -6
  327. package/toast/styles/_index.scss +11 -11
  328. package/toolbar/styles/_index.scss +4 -4
  329. package/tree/styles/_index.scss +45 -15
  330. package/types/ngwr-action-sheet.d.ts +75 -0
  331. package/types/ngwr-alert.d.ts +1 -1
  332. package/types/ngwr-anchor.d.ts +1 -1
  333. package/types/ngwr-avatar.d.ts +1 -1
  334. package/types/ngwr-back-top.d.ts +1 -1
  335. package/types/ngwr-badge.d.ts +4 -4
  336. package/types/ngwr-bar-chart.d.ts +1 -1
  337. package/types/ngwr-breadcrumbs.d.ts +1 -1
  338. package/types/ngwr-burger.d.ts +1 -1
  339. package/types/ngwr-button.d.ts +3 -3
  340. package/types/ngwr-calendar-heatmap.d.ts +1 -1
  341. package/types/ngwr-calendar.d.ts +1 -1
  342. package/types/ngwr-card.d.ts +1 -1
  343. package/types/ngwr-carousel.d.ts +1 -1
  344. package/types/ngwr-cascader.d.ts +27 -16
  345. package/types/ngwr-checkbox.d.ts +63 -43
  346. package/types/ngwr-clipboard.d.ts +1 -1
  347. package/types/ngwr-collapse.d.ts +3 -3
  348. package/types/ngwr-color-picker.d.ts +24 -19
  349. package/types/ngwr-command-palette.d.ts +1 -1
  350. package/types/ngwr-compare.d.ts +1 -1
  351. package/types/ngwr-context-menu.d.ts +25 -1
  352. package/types/ngwr-cookie.d.ts +7 -1
  353. package/types/ngwr-counter.d.ts +9 -2
  354. package/types/ngwr-date-picker.d.ts +36 -23
  355. package/types/ngwr-density.d.ts +1 -1
  356. package/types/ngwr-descriptions.d.ts +1 -1
  357. package/types/ngwr-dialog.d.ts +1 -1
  358. package/types/ngwr-directives.d.ts +1 -0
  359. package/types/ngwr-divider.d.ts +2 -2
  360. package/types/ngwr-donut-chart.d.ts +1 -1
  361. package/types/ngwr-drag-drop.d.ts +1 -1
  362. package/types/ngwr-drawer.d.ts +1 -1
  363. package/types/ngwr-dropdown.d.ts +1 -1
  364. package/types/ngwr-empty.d.ts +1 -1
  365. package/types/ngwr-file-upload.d.ts +28 -17
  366. package/types/ngwr-form.d.ts +2 -2
  367. package/types/ngwr-gauge.d.ts +1 -1
  368. package/types/ngwr-hotkey.d.ts +1 -1
  369. package/types/ngwr-i18n.d.ts +1 -1
  370. package/types/ngwr-icon-adapters-lucide.d.ts +5 -3
  371. package/types/ngwr-icon.d.ts +1 -1
  372. package/types/ngwr-image-cropper.d.ts +1 -1
  373. package/types/ngwr-input-number.d.ts +25 -19
  374. package/types/ngwr-input-otp.d.ts +23 -17
  375. package/types/ngwr-input.d.ts +2 -2
  376. package/types/ngwr-keyboard.d.ts +1 -1
  377. package/types/ngwr-knob.d.ts +24 -19
  378. package/types/ngwr-layout.d.ts +1 -1
  379. package/types/ngwr-lightbox.d.ts +1 -1
  380. package/types/ngwr-line-chart.d.ts +1 -1
  381. package/types/ngwr-list.d.ts +1 -1
  382. package/types/ngwr-loading-bar.d.ts +1 -1
  383. package/types/ngwr-marquee.d.ts +1 -1
  384. package/types/ngwr-media.d.ts +1 -1
  385. package/types/ngwr-mention.d.ts +1 -1
  386. package/types/ngwr-meta.d.ts +1 -1
  387. package/types/ngwr-meter-group.d.ts +1 -1
  388. package/types/ngwr-page-header.d.ts +1 -1
  389. package/types/ngwr-pagination.d.ts +1 -1
  390. package/types/ngwr-platform.d.ts +93 -2
  391. package/types/ngwr-popconfirm.d.ts +3 -3
  392. package/types/ngwr-progress.d.ts +2 -2
  393. package/types/ngwr-pull-to-refresh.d.ts +69 -0
  394. package/types/ngwr-qr.d.ts +1 -1
  395. package/types/ngwr-radio.d.ts +25 -22
  396. package/types/ngwr-rating.d.ts +28 -20
  397. package/types/ngwr-result.d.ts +1 -1
  398. package/types/ngwr-rotating-text.d.ts +1 -0
  399. package/types/ngwr-scroll.d.ts +1 -1
  400. package/types/ngwr-segmented.d.ts +1 -1
  401. package/types/ngwr-select.d.ts +93 -26
  402. package/types/ngwr-sidebar.d.ts +1 -1
  403. package/types/ngwr-skeleton.d.ts +2 -2
  404. package/types/ngwr-slider.d.ts +35 -21
  405. package/types/ngwr-sparkline.d.ts +1 -1
  406. package/types/ngwr-speed-dial.d.ts +8 -2
  407. package/types/ngwr-spinner.d.ts +1 -1
  408. package/types/ngwr-splitter.d.ts +1 -1
  409. package/types/ngwr-squircle.d.ts +1 -1
  410. package/types/ngwr-statistic.d.ts +40 -5
  411. package/types/ngwr-stepper.d.ts +2 -2
  412. package/types/ngwr-storage.d.ts +1 -1
  413. package/types/ngwr-switch.d.ts +20 -16
  414. package/types/ngwr-table.d.ts +417 -6
  415. package/types/ngwr-tabs.d.ts +1 -1
  416. package/types/ngwr-textarea.d.ts +21 -18
  417. package/types/ngwr-theme.d.ts +7 -2
  418. package/types/ngwr-tilt-card.d.ts +3 -0
  419. package/types/ngwr-timeline.d.ts +1 -1
  420. package/types/ngwr-toast.d.ts +1 -1
  421. package/types/ngwr-toolbar.d.ts +1 -1
  422. package/types/ngwr-tree.d.ts +100 -19
  423. package/types/ngwr-typography.d.ts +1 -1
  424. package/types/ngwr-validators.d.ts +1 -1
  425. package/types/ngwr-version.d.ts +1 -1
  426. package/types/ngwr-virtual-scroll.d.ts +1 -1
  427. package/types/ngwr-window.d.ts +1 -1
  428. package/typography/styles/_index.scss +11 -11
  429. package/virtual-scroll/styles/_index.scss +1 -1
  430. package/waves/styles/_index.scss +1 -1
  431. package/window/styles/_index.scss +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"ngwr-sparkline.mjs","sources":["../../../projects/lib/sparkline/sparkline.ts","../../../projects/lib/sparkline/sparkline.html","../../../projects/lib/sparkline/ngwr-sparkline.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { Component, ViewEncapsulation, computed, input } from '@angular/core';\n\n/**\n * Tiny inline trend line. SVG path drawn from `[data]: number[]` — no\n * axes, no labels, just the shape. Optional area fill + tip dot.\n *\n * @example\n * ```html\n * <wr-sparkline [data]=\"[12, 14, 9, 17, 21, 18, 23]\" />\n * <wr-sparkline [data]=\"prices\" [showArea]=\"true\" color=\"var(--wr-color-success)\" />\n * ```\n *\n * @see https://ngwr.dev/components/sparkline\n */\n@Component({\n selector: 'wr-sparkline',\n templateUrl: './sparkline.html',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'wr-sparkline' },\n})\nexport class WrSparkline {\n readonly data = input<readonly number[]>([]);\n\n /** Stroke colour. @default `var(--wr-color-primary)` */\n readonly color = input<string>('var(--wr-color-primary)');\n\n /** Stroke width in viewBox units. @default 1.5 */\n readonly strokeWidth = input(1.5, {\n transform: (v: unknown): number => Math.max(0.1, coerceNumberProperty(v, 1.5)),\n });\n\n /** Fill the area below the line. @default false */\n readonly showArea = input(false, { transform: coerceBooleanProperty });\n\n /** Show a dot at the last data point. @default true */\n readonly showTip = input(true, { transform: coerceBooleanProperty });\n\n /** CSS width. @default '8rem' */\n readonly width = input<string>('8rem');\n\n /** CSS height. @default '2rem' */\n readonly height = input<string>('2rem');\n\n // Drawn in a 100×40 viewBox — scales smoothly to any CSS size.\n private readonly vbW = 100;\n private readonly vbH = 40;\n private readonly padding = 2;\n\n /** Mapped `{ x, y }` points for the path. */\n protected readonly points = computed(() => {\n const data = this.data();\n if (data.length === 0) return [] as readonly { x: number; y: number }[];\n if (data.length === 1) return [{ x: this.vbW / 2, y: this.vbH / 2 }];\n\n let min = data[0];\n let max = data[0];\n for (const v of data) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n const span = max - min || 1;\n const pad = this.padding;\n const w = this.vbW - pad * 2;\n const h = this.vbH - pad * 2;\n return data.map((v, i) => ({\n x: pad + (i / (data.length - 1)) * w,\n y: pad + h - ((v - min) / span) * h,\n }));\n });\n\n protected readonly linePath = computed(() =>\n this.points()\n .map((p, i) => `${i === 0 ? 'M' : 'L'} ${p.x.toFixed(2)} ${p.y.toFixed(2)}`)\n .join(' ')\n );\n\n protected readonly areaPath = computed(() => {\n const pts = this.points();\n if (pts.length < 2) return '';\n const baseY = this.vbH - this.padding;\n const start = `M ${pts[0].x.toFixed(2)} ${baseY}`;\n const line = pts.map(p => `L ${p.x.toFixed(2)} ${p.y.toFixed(2)}`).join(' ');\n const close = `L ${pts[pts.length - 1].x.toFixed(2)} ${baseY} Z`;\n return `${start} ${line} ${close}`;\n });\n\n protected readonly tipPoint = computed(() => {\n const pts = this.points();\n return pts.length > 0 ? pts[pts.length - 1] : null;\n });\n\n protected readonly viewBox = `0 0 ${this.vbW} ${this.vbH}`;\n}\n","<svg [attr.viewBox]=\"viewBox\" [style.width]=\"width()\" [style.height]=\"height()\" preserveAspectRatio=\"none\">\n @if (showArea() && areaPath()) {\n <path class=\"wr-sparkline__area\" [attr.d]=\"areaPath()\" [attr.fill]=\"color()\" fill-opacity=\"0.15\" stroke=\"none\" />\n }\n @if (linePath()) {\n <path\n class=\"wr-sparkline__line\"\n [attr.d]=\"linePath()\"\n fill=\"none\"\n [attr.stroke]=\"color()\"\n [attr.stroke-width]=\"strokeWidth()\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n vector-effect=\"non-scaling-stroke\"\n />\n }\n @if (showTip() && tipPoint(); as tip) {\n <circle class=\"wr-sparkline__tip\" [attr.cx]=\"tip.x\" [attr.cy]=\"tip.y\" r=\"1.5\" [attr.fill]=\"color()\" />\n }\n</svg>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngwr-sparkline.mjs","sources":["../../../projects/lib/sparkline/sparkline.ts","../../../projects/lib/sparkline/sparkline.html","../../../projects/lib/sparkline/ngwr-sparkline.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { Component, ViewEncapsulation, computed, input } from '@angular/core';\n\n/**\n * Tiny inline trend line. SVG path drawn from `[data]: number[]` — no\n * axes, no labels, just the shape. Optional area fill + tip dot.\n *\n * @example\n * ```html\n * <wr-sparkline [data]=\"[12, 14, 9, 17, 21, 18, 23]\" />\n * <wr-sparkline [data]=\"prices\" [showArea]=\"true\" color=\"var(--wr-color-success)\" />\n * ```\n *\n * @see https://ngwr.dev/reference/components/sparkline\n */\n@Component({\n selector: 'wr-sparkline',\n templateUrl: './sparkline.html',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'wr-sparkline' },\n})\nexport class WrSparkline {\n readonly data = input<readonly number[]>([]);\n\n /** Stroke colour. @default `var(--wr-color-primary)` */\n readonly color = input<string>('var(--wr-color-primary)');\n\n /** Stroke width in viewBox units. @default 1.5 */\n readonly strokeWidth = input(1.5, {\n transform: (v: unknown): number => Math.max(0.1, coerceNumberProperty(v, 1.5)),\n });\n\n /** Fill the area below the line. @default false */\n readonly showArea = input(false, { transform: coerceBooleanProperty });\n\n /** Show a dot at the last data point. @default true */\n readonly showTip = input(true, { transform: coerceBooleanProperty });\n\n /** CSS width. @default '8rem' */\n readonly width = input<string>('8rem');\n\n /** CSS height. @default '2rem' */\n readonly height = input<string>('2rem');\n\n // Drawn in a 100×40 viewBox — scales smoothly to any CSS size.\n private readonly vbW = 100;\n private readonly vbH = 40;\n private readonly padding = 2;\n\n /** Mapped `{ x, y }` points for the path. */\n protected readonly points = computed(() => {\n const data = this.data();\n if (data.length === 0) return [] as readonly { x: number; y: number }[];\n if (data.length === 1) return [{ x: this.vbW / 2, y: this.vbH / 2 }];\n\n let min = data[0];\n let max = data[0];\n for (const v of data) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n const span = max - min || 1;\n const pad = this.padding;\n const w = this.vbW - pad * 2;\n const h = this.vbH - pad * 2;\n return data.map((v, i) => ({\n x: pad + (i / (data.length - 1)) * w,\n y: pad + h - ((v - min) / span) * h,\n }));\n });\n\n protected readonly linePath = computed(() =>\n this.points()\n .map((p, i) => `${i === 0 ? 'M' : 'L'} ${p.x.toFixed(2)} ${p.y.toFixed(2)}`)\n .join(' ')\n );\n\n protected readonly areaPath = computed(() => {\n const pts = this.points();\n if (pts.length < 2) return '';\n const baseY = this.vbH - this.padding;\n const start = `M ${pts[0].x.toFixed(2)} ${baseY}`;\n const line = pts.map(p => `L ${p.x.toFixed(2)} ${p.y.toFixed(2)}`).join(' ');\n const close = `L ${pts[pts.length - 1].x.toFixed(2)} ${baseY} Z`;\n return `${start} ${line} ${close}`;\n });\n\n protected readonly tipPoint = computed(() => {\n const pts = this.points();\n return pts.length > 0 ? pts[pts.length - 1] : null;\n });\n\n protected readonly viewBox = `0 0 ${this.vbW} ${this.vbH}`;\n}\n","<svg [attr.viewBox]=\"viewBox\" [style.width]=\"width()\" [style.height]=\"height()\" preserveAspectRatio=\"none\">\n @if (showArea() && areaPath()) {\n <path class=\"wr-sparkline__area\" [attr.d]=\"areaPath()\" [attr.fill]=\"color()\" fill-opacity=\"0.15\" stroke=\"none\" />\n }\n @if (linePath()) {\n <path\n class=\"wr-sparkline__line\"\n [attr.d]=\"linePath()\"\n fill=\"none\"\n [attr.stroke]=\"color()\"\n [attr.stroke-width]=\"strokeWidth()\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n vector-effect=\"non-scaling-stroke\"\n />\n }\n @if (showTip() && tipPoint(); as tip) {\n <circle class=\"wr-sparkline__tip\" [attr.cx]=\"tip.x\" [attr.cy]=\"tip.y\" r=\"1.5\" [attr.fill]=\"color()\" />\n }\n</svg>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ import { WrIcon } from 'ngwr/icon';
25
25
  * />
26
26
  * ```
27
27
  *
28
- * @see https://ngwr.dev/components/speed-dial
28
+ * @see https://ngwr.dev/reference/components/speed-dial
29
29
  */
30
30
  class WrSpeedDial {
31
31
  actions = input([], /* @ts-ignore */
@@ -41,6 +41,12 @@ class WrSpeedDial {
41
41
  ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
42
42
  /** Disable interaction. @default false */
43
43
  disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
44
+ /**
45
+ * Pad the host toward the dial `direction` with `env(safe-area-inset-*)`.
46
+ * Only matters when the consumer pins the dial to that edge of the
47
+ * viewport; otherwise it has no effect. @default false
48
+ */
49
+ safeArea = input(false, { ...(ngDevMode ? { debugName: "safeArea" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
44
50
  /** Fires when the user picks one of the actions. */
45
51
  pick = output();
46
52
  classes = computed(() => {
@@ -49,6 +55,8 @@ class WrSpeedDial {
49
55
  parts.push('wr-speed-dial--open');
50
56
  if (this.disabled())
51
57
  parts.push('wr-speed-dial--disabled');
58
+ if (this.safeArea())
59
+ parts.push('wr-speed-dial--safe-area');
52
60
  return parts.join(' ');
53
61
  }, /* @ts-ignore */
54
62
  ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
@@ -63,13 +71,13 @@ class WrSpeedDial {
63
71
  this.pick.emit(action);
64
72
  this.open.set(false);
65
73
  }
66
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: WrSpeedDial, deps: [], target: i0.ɵɵFactoryTarget.Component });
67
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: WrSpeedDial, isStandalone: true, selector: "wr-speed-dial", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", pick: "pick" }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"wr-speed-dial__trigger\"\n [attr.aria-expanded]=\"open()\"\n aria-haspopup=\"menu\"\n [disabled]=\"disabled()\"\n (click)=\"onTrigger()\"\n>\n <wr-icon [name]=\"icon()\" />\n</button>\n\n<ul class=\"wr-speed-dial__actions\" role=\"menu\">\n @for (action of actions(); track action.id) {\n <li class=\"wr-speed-dial__action-wrap\" [style.--wr-speed-dial-i]=\"$index + 1\">\n <button\n type=\"button\"\n class=\"wr-speed-dial__action\"\n role=\"menuitem\"\n [attr.aria-label]=\"action.label\"\n [title]=\"action.label\"\n (click)=\"onPick(action)\"\n >\n @if (action.icon) {\n <wr-icon [name]=\"action.icon\" />\n } @else {\n <span>{{ action.label.charAt(0) }}</span>\n }\n </button>\n </li>\n }\n</ul>\n", dependencies: [{ kind: "component", type: WrIcon, selector: "wr-icon", inputs: ["name"] }], encapsulation: i0.ViewEncapsulation.None });
74
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: WrSpeedDial, deps: [], target: i0.ɵɵFactoryTarget.Component });
75
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: WrSpeedDial, isStandalone: true, selector: "wr-speed-dial", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, safeArea: { classPropertyName: "safeArea", publicName: "safeArea", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", pick: "pick" }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"wr-speed-dial__trigger\"\n [attr.aria-expanded]=\"open()\"\n aria-haspopup=\"menu\"\n [disabled]=\"disabled()\"\n (click)=\"onTrigger()\"\n>\n <wr-icon [name]=\"icon()\" />\n</button>\n\n<ul class=\"wr-speed-dial__actions\" role=\"menu\">\n @for (action of actions(); track action.id) {\n <li class=\"wr-speed-dial__action-wrap\" [style.--wr-speed-dial-i]=\"$index + 1\">\n <button\n type=\"button\"\n class=\"wr-speed-dial__action\"\n role=\"menuitem\"\n [attr.aria-label]=\"action.label\"\n [title]=\"action.label\"\n (click)=\"onPick(action)\"\n >\n @if (action.icon) {\n <wr-icon [name]=\"action.icon\" />\n } @else {\n <span>{{ action.label.charAt(0) }}</span>\n }\n </button>\n </li>\n }\n</ul>\n", dependencies: [{ kind: "component", type: WrIcon, selector: "wr-icon", inputs: ["name"] }], encapsulation: i0.ViewEncapsulation.None });
68
76
  }
69
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: WrSpeedDial, decorators: [{
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: WrSpeedDial, decorators: [{
70
78
  type: Component,
71
79
  args: [{ selector: 'wr-speed-dial', encapsulation: ViewEncapsulation.None, host: { '[class]': 'classes()' }, imports: [WrIcon], template: "<button\n type=\"button\"\n class=\"wr-speed-dial__trigger\"\n [attr.aria-expanded]=\"open()\"\n aria-haspopup=\"menu\"\n [disabled]=\"disabled()\"\n (click)=\"onTrigger()\"\n>\n <wr-icon [name]=\"icon()\" />\n</button>\n\n<ul class=\"wr-speed-dial__actions\" role=\"menu\">\n @for (action of actions(); track action.id) {\n <li class=\"wr-speed-dial__action-wrap\" [style.--wr-speed-dial-i]=\"$index + 1\">\n <button\n type=\"button\"\n class=\"wr-speed-dial__action\"\n role=\"menuitem\"\n [attr.aria-label]=\"action.label\"\n [title]=\"action.label\"\n (click)=\"onPick(action)\"\n >\n @if (action.icon) {\n <wr-icon [name]=\"action.icon\" />\n } @else {\n <span>{{ action.label.charAt(0) }}</span>\n }\n </button>\n </li>\n }\n</ul>\n" }]
72
- }], propDecorators: { actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], pick: [{ type: i0.Output, args: ["pick"] }] } });
80
+ }], propDecorators: { actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], safeArea: [{ type: i0.Input, args: [{ isSignal: true, alias: "safeArea", required: false }] }], pick: [{ type: i0.Output, args: ["pick"] }] } });
73
81
 
74
82
  /**
75
83
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"ngwr-speed-dial.mjs","sources":["../../../projects/lib/speed-dial/speed-dial.ts","../../../projects/lib/speed-dial/speed-dial.html","../../../projects/lib/speed-dial/ngwr-speed-dial.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, ViewEncapsulation, computed, input, model, output } from '@angular/core';\n\nimport { WrIcon, type WrIconName } from 'ngwr/icon';\n\nimport type { WrSpeedDialAction, WrSpeedDialDirection } from './interfaces';\n\n/**\n * Floating action button that expands into a fan of secondary actions on\n * click / hover. Place inside a positioned container or near `position: fixed`\n * — the component itself doesn't pin to the viewport.\n *\n * @example\n * ```html\n * <wr-speed-dial\n * [actions]=\"[\n * { id: 'new', label: 'New', icon: 'add' },\n * { id: 'edit', label: 'Edit', icon: 'cog' }\n * ]\"\n * (pick)=\"onPick($event)\"\n * />\n * ```\n *\n * @see https://ngwr.dev/components/speed-dial\n */\n@Component({\n selector: 'wr-speed-dial',\n templateUrl: './speed-dial.html',\n encapsulation: ViewEncapsulation.None,\n host: { '[class]': 'classes()' },\n imports: [WrIcon],\n})\nexport class WrSpeedDial {\n readonly actions = input<readonly WrSpeedDialAction[]>([]);\n\n /** Direction the actions fan out. @default 'up' */\n readonly direction = input<WrSpeedDialDirection>('up');\n\n /** Two-way bindable open state. @default false */\n readonly open = model(false);\n\n /** Icon for the main trigger button. @default 'add' */\n readonly icon = input<WrIconName>('add');\n\n /** Disable interaction. @default false */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n /** Fires when the user picks one of the actions. */\n readonly pick = output<WrSpeedDialAction>();\n\n protected readonly classes = computed(() => {\n const parts = ['wr-speed-dial', `wr-speed-dial--${this.direction()}`];\n if (this.open()) parts.push('wr-speed-dial--open');\n if (this.disabled()) parts.push('wr-speed-dial--disabled');\n return parts.join(' ');\n });\n\n protected onTrigger(): void {\n if (this.disabled()) return;\n this.open.update(v => !v);\n }\n\n protected onPick(action: WrSpeedDialAction): void {\n if (this.disabled()) return;\n this.pick.emit(action);\n this.open.set(false);\n }\n}\n\nexport type { WrSpeedDialAction, WrSpeedDialDirection } from './interfaces';\n","<button\n type=\"button\"\n class=\"wr-speed-dial__trigger\"\n [attr.aria-expanded]=\"open()\"\n aria-haspopup=\"menu\"\n [disabled]=\"disabled()\"\n (click)=\"onTrigger()\"\n>\n <wr-icon [name]=\"icon()\" />\n</button>\n\n<ul class=\"wr-speed-dial__actions\" role=\"menu\">\n @for (action of actions(); track action.id) {\n <li class=\"wr-speed-dial__action-wrap\" [style.--wr-speed-dial-i]=\"$index + 1\">\n <button\n type=\"button\"\n class=\"wr-speed-dial__action\"\n role=\"menuitem\"\n [attr.aria-label]=\"action.label\"\n [title]=\"action.label\"\n (click)=\"onPick(action)\"\n >\n @if (action.icon) {\n <wr-icon [name]=\"action.icon\" />\n } @else {\n <span>{{ action.label.charAt(0) }}</span>\n }\n </button>\n </li>\n }\n</ul>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngwr-speed-dial.mjs","sources":["../../../projects/lib/speed-dial/speed-dial.ts","../../../projects/lib/speed-dial/speed-dial.html","../../../projects/lib/speed-dial/ngwr-speed-dial.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, ViewEncapsulation, computed, input, model, output } from '@angular/core';\n\nimport { WrIcon, type WrIconName } from 'ngwr/icon';\n\nimport type { WrSpeedDialAction, WrSpeedDialDirection } from './interfaces';\n\n/**\n * Floating action button that expands into a fan of secondary actions on\n * click / hover. Place inside a positioned container or near `position: fixed`\n * — the component itself doesn't pin to the viewport.\n *\n * @example\n * ```html\n * <wr-speed-dial\n * [actions]=\"[\n * { id: 'new', label: 'New', icon: 'add' },\n * { id: 'edit', label: 'Edit', icon: 'cog' }\n * ]\"\n * (pick)=\"onPick($event)\"\n * />\n * ```\n *\n * @see https://ngwr.dev/reference/components/speed-dial\n */\n@Component({\n selector: 'wr-speed-dial',\n templateUrl: './speed-dial.html',\n encapsulation: ViewEncapsulation.None,\n host: { '[class]': 'classes()' },\n imports: [WrIcon],\n})\nexport class WrSpeedDial {\n readonly actions = input<readonly WrSpeedDialAction[]>([]);\n\n /** Direction the actions fan out. @default 'up' */\n readonly direction = input<WrSpeedDialDirection>('up');\n\n /** Two-way bindable open state. @default false */\n readonly open = model(false);\n\n /** Icon for the main trigger button. @default 'add' */\n readonly icon = input<WrIconName>('add');\n\n /** Disable interaction. @default false */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n /**\n * Pad the host toward the dial `direction` with `env(safe-area-inset-*)`.\n * Only matters when the consumer pins the dial to that edge of the\n * viewport; otherwise it has no effect. @default false\n */\n readonly safeArea = input(false, { transform: coerceBooleanProperty });\n\n /** Fires when the user picks one of the actions. */\n readonly pick = output<WrSpeedDialAction>();\n\n protected readonly classes = computed(() => {\n const parts = ['wr-speed-dial', `wr-speed-dial--${this.direction()}`];\n if (this.open()) parts.push('wr-speed-dial--open');\n if (this.disabled()) parts.push('wr-speed-dial--disabled');\n if (this.safeArea()) parts.push('wr-speed-dial--safe-area');\n return parts.join(' ');\n });\n\n protected onTrigger(): void {\n if (this.disabled()) return;\n this.open.update(v => !v);\n }\n\n protected onPick(action: WrSpeedDialAction): void {\n if (this.disabled()) return;\n this.pick.emit(action);\n this.open.set(false);\n }\n}\n\nexport type { WrSpeedDialAction, WrSpeedDialDirection } from './interfaces';\n","<button\n type=\"button\"\n class=\"wr-speed-dial__trigger\"\n [attr.aria-expanded]=\"open()\"\n aria-haspopup=\"menu\"\n [disabled]=\"disabled()\"\n (click)=\"onTrigger()\"\n>\n <wr-icon [name]=\"icon()\" />\n</button>\n\n<ul class=\"wr-speed-dial__actions\" role=\"menu\">\n @for (action of actions(); track action.id) {\n <li class=\"wr-speed-dial__action-wrap\" [style.--wr-speed-dial-i]=\"$index + 1\">\n <button\n type=\"button\"\n class=\"wr-speed-dial__action\"\n role=\"menuitem\"\n [attr.aria-label]=\"action.label\"\n [title]=\"action.label\"\n (click)=\"onPick(action)\"\n >\n @if (action.icon) {\n <wr-icon [name]=\"action.icon\" />\n } @else {\n <span>{{ action.label.charAt(0) }}</span>\n }\n </button>\n </li>\n }\n</ul>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ import { input, computed, ViewEncapsulation, Component } from '@angular/core';
18
18
  * <wr-spinner size="lg" />
19
19
  * ```
20
20
  *
21
- * @see https://ngwr.dev/components/spinner
21
+ * @see https://ngwr.dev/reference/components/spinner
22
22
  */
23
23
  class WrSpinner {
24
24
  /**
@@ -33,10 +33,10 @@ class WrSpinner {
33
33
  return size === 'md' ? 'wr-spinner' : `wr-spinner wr-spinner--${size}`;
34
34
  }, /* @ts-ignore */
35
35
  ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
36
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: WrSpinner, deps: [], target: i0.ɵɵFactoryTarget.Component });
37
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.4", type: WrSpinner, isStandalone: true, selector: "wr-spinner", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "status", "aria-label": "Loading" }, properties: { "class": "classes()" } }, ngImport: i0, template: "<svg viewBox=\"0 0 50 50\" aria-hidden=\"true\">\n <circle class=\"wr-spinner__path\" cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" stroke-width=\"5\" />\n</svg>\n", encapsulation: i0.ViewEncapsulation.None });
36
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: WrSpinner, deps: [], target: i0.ɵɵFactoryTarget.Component });
37
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: WrSpinner, isStandalone: true, selector: "wr-spinner", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "status", "aria-label": "Loading" }, properties: { "class": "classes()" } }, ngImport: i0, template: "<svg viewBox=\"0 0 50 50\" aria-hidden=\"true\">\n <circle class=\"wr-spinner__path\" cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" stroke-width=\"5\" />\n</svg>\n", encapsulation: i0.ViewEncapsulation.None });
38
38
  }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: WrSpinner, decorators: [{
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: WrSpinner, decorators: [{
40
40
  type: Component,
41
41
  args: [{ selector: 'wr-spinner', encapsulation: ViewEncapsulation.None, host: {
42
42
  role: 'status',
@@ -1 +1 @@
1
- {"version":3,"file":"ngwr-spinner.mjs","sources":["../../../projects/lib/spinner/spinner.ts","../../../projects/lib/spinner/spinner.html","../../../projects/lib/spinner/ngwr-spinner.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { Component, ViewEncapsulation, computed, input } from '@angular/core';\n\nimport type { WrSpinnerSize } from './interfaces';\n\n/**\n * Inline loading indicator.\n *\n * Inherits color from the surrounding text (uses `currentColor`).\n *\n * @example\n * ```html\n * <wr-spinner />\n * <wr-spinner size=\"lg\" />\n * ```\n *\n * @see https://ngwr.dev/components/spinner\n */\n@Component({\n selector: 'wr-spinner',\n templateUrl: './spinner.html',\n encapsulation: ViewEncapsulation.None,\n host: {\n role: 'status',\n 'aria-label': 'Loading',\n '[class]': 'classes()',\n },\n})\nexport class WrSpinner {\n /**\n * Size variant. Em-based — scales with surrounding font-size.\n *\n * @default 'md'\n */\n readonly size = input<WrSpinnerSize>('md');\n\n protected readonly classes = computed(() => {\n const size = this.size();\n return size === 'md' ? 'wr-spinner' : `wr-spinner wr-spinner--${size}`;\n });\n}\n","<svg viewBox=\"0 0 50 50\" aria-hidden=\"true\">\n <circle class=\"wr-spinner__path\" cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" stroke-width=\"5\" />\n</svg>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAMH;;;;;;;;;;;;AAYG;MAWU,SAAS,CAAA;AACpB;;;;AAIG;IACM,IAAI,GAAG,KAAK,CAAgB,IAAI;6EAAC;AAEvB,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,OAAO,IAAI,KAAK,IAAI,GAAG,YAAY,GAAG,CAAA,uBAAA,EAA0B,IAAI,EAAE;IACxE,CAAC;gFAAC;uGAXS,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,kTClCtB,mKAGA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FD+Ba,SAAS,EAAA,UAAA,EAAA,CAAA;kBAVrB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,aAAA,EAEP,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,YAAY,EAAE,SAAS;AACvB,wBAAA,SAAS,EAAE,WAAW;AACvB,qBAAA,EAAA,QAAA,EAAA,mKAAA,EAAA;;;AEhCH;;AAEG;;;;"}
1
+ {"version":3,"file":"ngwr-spinner.mjs","sources":["../../../projects/lib/spinner/spinner.ts","../../../projects/lib/spinner/spinner.html","../../../projects/lib/spinner/ngwr-spinner.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { Component, ViewEncapsulation, computed, input } from '@angular/core';\n\nimport type { WrSpinnerSize } from './interfaces';\n\n/**\n * Inline loading indicator.\n *\n * Inherits color from the surrounding text (uses `currentColor`).\n *\n * @example\n * ```html\n * <wr-spinner />\n * <wr-spinner size=\"lg\" />\n * ```\n *\n * @see https://ngwr.dev/reference/components/spinner\n */\n@Component({\n selector: 'wr-spinner',\n templateUrl: './spinner.html',\n encapsulation: ViewEncapsulation.None,\n host: {\n role: 'status',\n 'aria-label': 'Loading',\n '[class]': 'classes()',\n },\n})\nexport class WrSpinner {\n /**\n * Size variant. Em-based — scales with surrounding font-size.\n *\n * @default 'md'\n */\n readonly size = input<WrSpinnerSize>('md');\n\n protected readonly classes = computed(() => {\n const size = this.size();\n return size === 'md' ? 'wr-spinner' : `wr-spinner wr-spinner--${size}`;\n });\n}\n","<svg viewBox=\"0 0 50 50\" aria-hidden=\"true\">\n <circle class=\"wr-spinner__path\" cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" stroke-width=\"5\" />\n</svg>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAMH;;;;;;;;;;;;AAYG;MAWU,SAAS,CAAA;AACpB;;;;AAIG;IACM,IAAI,GAAG,KAAK,CAAgB,IAAI;6EAAC;AAEvB,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,OAAO,IAAI,KAAK,IAAI,GAAG,YAAY,GAAG,CAAA,uBAAA,EAA0B,IAAI,EAAE;IACxE,CAAC;gFAAC;uGAXS,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,kTClCtB,mKAGA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FD+Ba,SAAS,EAAA,UAAA,EAAA,CAAA;kBAVrB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,aAAA,EAEP,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,YAAY,EAAE,SAAS;AACvB,wBAAA,SAAS,EAAE,WAAW;AACvB,qBAAA,EAAA,QAAA,EAAA,mKAAA,EAAA;;;AEhCH;;AAEG;;;;"}
@@ -951,15 +951,15 @@ class WrSplashCursor {
951
951
  onCleanup(teardown);
952
952
  });
953
953
  }
954
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: WrSplashCursor, deps: [], target: i0.ɵɵFactoryTarget.Component });
955
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.4", type: WrSplashCursor, isStandalone: true, selector: "wr-splash-cursor", inputs: { fullscreen: { classPropertyName: "fullscreen", publicName: "fullscreen", isSignal: true, isRequired: false, transformFunction: null }, simResolution: { classPropertyName: "simResolution", publicName: "simResolution", isSignal: true, isRequired: false, transformFunction: null }, dyeResolution: { classPropertyName: "dyeResolution", publicName: "dyeResolution", isSignal: true, isRequired: false, transformFunction: null }, densityDissipation: { classPropertyName: "densityDissipation", publicName: "densityDissipation", isSignal: true, isRequired: false, transformFunction: null }, velocityDissipation: { classPropertyName: "velocityDissipation", publicName: "velocityDissipation", isSignal: true, isRequired: false, transformFunction: null }, pressure: { classPropertyName: "pressure", publicName: "pressure", isSignal: true, isRequired: false, transformFunction: null }, pressureIterations: { classPropertyName: "pressureIterations", publicName: "pressureIterations", isSignal: true, isRequired: false, transformFunction: null }, curl: { classPropertyName: "curl", publicName: "curl", isSignal: true, isRequired: false, transformFunction: null }, splatRadius: { classPropertyName: "splatRadius", publicName: "splatRadius", isSignal: true, isRequired: false, transformFunction: null }, splatForce: { classPropertyName: "splatForce", publicName: "splatForce", isSignal: true, isRequired: false, transformFunction: null }, shading: { classPropertyName: "shading", publicName: "shading", isSignal: true, isRequired: false, transformFunction: null }, colorUpdateSpeed: { classPropertyName: "colorUpdateSpeed", publicName: "colorUpdateSpeed", isSignal: true, isRequired: false, transformFunction: null }, rainbow: { classPropertyName: "rainbow", publicName: "rainbow", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.wr-splash-cursor--contained": "!fullscreen()" }, classAttribute: "wr-splash-cursor" }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true, isSignal: true }], ngImport: i0, template: '<canvas #canvas class="wr-splash-cursor__canvas"></canvas>', isInline: true, styles: [".wr-splash-cursor{position:fixed;inset:0;z-index:50;display:block;pointer-events:none}.wr-splash-cursor__canvas{display:block;width:100vw;height:100vh}.wr-splash-cursor--contained{position:absolute;z-index:0}.wr-splash-cursor--contained .wr-splash-cursor__canvas{width:100%;height:100%}\n"], encapsulation: i0.ViewEncapsulation.None });
954
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: WrSplashCursor, deps: [], target: i0.ɵɵFactoryTarget.Component });
955
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.0", type: WrSplashCursor, isStandalone: true, selector: "wr-splash-cursor", inputs: { fullscreen: { classPropertyName: "fullscreen", publicName: "fullscreen", isSignal: true, isRequired: false, transformFunction: null }, simResolution: { classPropertyName: "simResolution", publicName: "simResolution", isSignal: true, isRequired: false, transformFunction: null }, dyeResolution: { classPropertyName: "dyeResolution", publicName: "dyeResolution", isSignal: true, isRequired: false, transformFunction: null }, densityDissipation: { classPropertyName: "densityDissipation", publicName: "densityDissipation", isSignal: true, isRequired: false, transformFunction: null }, velocityDissipation: { classPropertyName: "velocityDissipation", publicName: "velocityDissipation", isSignal: true, isRequired: false, transformFunction: null }, pressure: { classPropertyName: "pressure", publicName: "pressure", isSignal: true, isRequired: false, transformFunction: null }, pressureIterations: { classPropertyName: "pressureIterations", publicName: "pressureIterations", isSignal: true, isRequired: false, transformFunction: null }, curl: { classPropertyName: "curl", publicName: "curl", isSignal: true, isRequired: false, transformFunction: null }, splatRadius: { classPropertyName: "splatRadius", publicName: "splatRadius", isSignal: true, isRequired: false, transformFunction: null }, splatForce: { classPropertyName: "splatForce", publicName: "splatForce", isSignal: true, isRequired: false, transformFunction: null }, shading: { classPropertyName: "shading", publicName: "shading", isSignal: true, isRequired: false, transformFunction: null }, colorUpdateSpeed: { classPropertyName: "colorUpdateSpeed", publicName: "colorUpdateSpeed", isSignal: true, isRequired: false, transformFunction: null }, rainbow: { classPropertyName: "rainbow", publicName: "rainbow", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.wr-splash-cursor--contained": "!fullscreen()" }, classAttribute: "wr-splash-cursor" }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true, isSignal: true }], ngImport: i0, template: '<canvas #canvas class="wr-splash-cursor__canvas"></canvas>', isInline: true, styles: [".wr-splash-cursor{position:fixed;inset:0;z-index:50;display:block;pointer-events:none}.wr-splash-cursor__canvas{display:block;width:100vw;height:100vh;height:100dvh}.wr-splash-cursor--contained{position:absolute;z-index:0}.wr-splash-cursor--contained .wr-splash-cursor__canvas{width:100%;height:100%}\n"], encapsulation: i0.ViewEncapsulation.None });
956
956
  }
957
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: WrSplashCursor, decorators: [{
957
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: WrSplashCursor, decorators: [{
958
958
  type: Component,
959
959
  args: [{ selector: 'wr-splash-cursor', template: '<canvas #canvas class="wr-splash-cursor__canvas"></canvas>', encapsulation: ViewEncapsulation.None, host: {
960
960
  class: 'wr-splash-cursor',
961
961
  '[class.wr-splash-cursor--contained]': '!fullscreen()',
962
- }, styles: [".wr-splash-cursor{position:fixed;inset:0;z-index:50;display:block;pointer-events:none}.wr-splash-cursor__canvas{display:block;width:100vw;height:100vh}.wr-splash-cursor--contained{position:absolute;z-index:0}.wr-splash-cursor--contained .wr-splash-cursor__canvas{width:100%;height:100%}\n"] }]
962
+ }, styles: [".wr-splash-cursor{position:fixed;inset:0;z-index:50;display:block;pointer-events:none}.wr-splash-cursor__canvas{display:block;width:100vw;height:100vh;height:100dvh}.wr-splash-cursor--contained{position:absolute;z-index:0}.wr-splash-cursor--contained .wr-splash-cursor__canvas{width:100%;height:100%}\n"] }]
963
963
  }], ctorParameters: () => [], propDecorators: { fullscreen: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullscreen", required: false }] }], simResolution: [{ type: i0.Input, args: [{ isSignal: true, alias: "simResolution", required: false }] }], dyeResolution: [{ type: i0.Input, args: [{ isSignal: true, alias: "dyeResolution", required: false }] }], densityDissipation: [{ type: i0.Input, args: [{ isSignal: true, alias: "densityDissipation", required: false }] }], velocityDissipation: [{ type: i0.Input, args: [{ isSignal: true, alias: "velocityDissipation", required: false }] }], pressure: [{ type: i0.Input, args: [{ isSignal: true, alias: "pressure", required: false }] }], pressureIterations: [{ type: i0.Input, args: [{ isSignal: true, alias: "pressureIterations", required: false }] }], curl: [{ type: i0.Input, args: [{ isSignal: true, alias: "curl", required: false }] }], splatRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "splatRadius", required: false }] }], splatForce: [{ type: i0.Input, args: [{ isSignal: true, alias: "splatForce", required: false }] }], shading: [{ type: i0.Input, args: [{ isSignal: true, alias: "shading", required: false }] }], colorUpdateSpeed: [{ type: i0.Input, args: [{ isSignal: true, alias: "colorUpdateSpeed", required: false }] }], rainbow: [{ type: i0.Input, args: [{ isSignal: true, alias: "rainbow", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], canvasRef: [{ type: i0.ViewChild, args: ['canvas', { isSignal: true }] }] } });
964
964
 
965
965
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ngwr-splash-cursor.mjs","sources":["../../../projects/lib/splash-cursor/fluid.ts","../../../projects/lib/splash-cursor/splash-cursor.ts","../../../projects/lib/splash-cursor/ngwr-splash-cursor.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n *\n * WebGL fluid simulation behind `<wr-splash-cursor>`. Port of the engine\n * used by reactbits.dev's SplashCursor (itself based on Pavel Dobryakov's\n * WebGL-Fluid-Simulation, MIT).\n *\n * Framework-free on purpose: `createFluidSimulation(canvas, config)` boots\n * the sim and returns a teardown, or `null` when WebGL isn't available.\n */\n\n/* eslint-disable no-bitwise -- GL bitmasks + string hashing are inherently bitwise */\n\ninterface WrFluidConfig {\n readonly simResolution: number;\n readonly dyeResolution: number;\n readonly densityDissipation: number;\n readonly velocityDissipation: number;\n readonly pressure: number;\n readonly pressureIterations: number;\n readonly curl: number;\n readonly splatRadius: number;\n readonly splatForce: number;\n readonly shading: boolean;\n readonly colorUpdateSpeed: number;\n /** Cycle splat colours through the rainbow; `false` uses `color`. */\n readonly rainbow: boolean;\n /** Fixed splat colour (hex) when `rainbow` is off. */\n readonly color: string;\n}\n\ninterface RGB {\n r: number;\n g: number;\n b: number;\n}\n\ninterface TexFormat {\n readonly internalFormat: number;\n readonly format: number;\n}\n\ninterface GlExt {\n readonly formatRGBA: TexFormat;\n readonly formatRG: TexFormat;\n readonly formatR: TexFormat;\n readonly halfFloatTexType: number;\n readonly supportLinearFiltering: boolean;\n}\n\ninterface FBO {\n readonly texture: WebGLTexture;\n readonly fbo: WebGLFramebuffer;\n readonly width: number;\n readonly height: number;\n readonly texelSizeX: number;\n readonly texelSizeY: number;\n attach(id: number): number;\n}\n\ninterface DoubleFBO {\n width: number;\n height: number;\n texelSizeX: number;\n texelSizeY: number;\n read: FBO;\n write: FBO;\n swap(): void;\n}\n\ninterface Pointer {\n texcoordX: number;\n texcoordY: number;\n prevTexcoordX: number;\n prevTexcoordY: number;\n deltaX: number;\n deltaY: number;\n moved: boolean;\n color: RGB;\n}\n\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\ntype Uniforms = Record<string, WebGLUniformLocation | null>;\n\nfunction createFluidSimulation(canvas: HTMLCanvasElement, config: WrFluidConfig): (() => void) | null {\n const ctx = getWebGLContext(canvas);\n if (!ctx) return null;\n const { gl, ext } = ctx;\n\n let dyeResolution = config.dyeResolution;\n let shading = config.shading;\n if (!ext.supportLinearFiltering) {\n dyeResolution = 256;\n shading = false;\n }\n\n let active = true;\n let rafId = 0;\n\n const pointer: Pointer = {\n texcoordX: 0,\n texcoordY: 0,\n prevTexcoordX: 0,\n prevTexcoordY: 0,\n deltaX: 0,\n deltaY: 0,\n moved: false,\n color: { r: 0, g: 0, b: 0 },\n };\n\n // Shader plumbing\n\n function compile(type: number, source: string, keywords?: readonly string[]): WebGLShader {\n const prefixed = keywords ? keywords.map(k => `#define ${k}\\n`).join('') + source : source;\n const shader = gl.createShader(type)!;\n gl.shaderSource(shader, prefixed);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n // eslint-disable-next-line no-console -- GPU shader failures are otherwise invisible\n console.error('wr-splash-cursor shader error:', gl.getShaderInfoLog(shader));\n }\n return shader;\n }\n\n function link(vertex: WebGLShader, fragment: WebGLShader): WebGLProgram {\n const program = gl.createProgram();\n gl.attachShader(program, vertex);\n gl.attachShader(program, fragment);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n // eslint-disable-next-line no-console -- GPU link failures are otherwise invisible\n console.error('wr-splash-cursor program error:', gl.getProgramInfoLog(program));\n }\n return program;\n }\n\n function uniformsOf(program: WebGLProgram): Uniforms {\n const out: Uniforms = {};\n const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS) as number;\n for (let i = 0; i < count; i++) {\n const name = gl.getActiveUniform(program, i)!.name;\n out[name] = gl.getUniformLocation(program, name);\n }\n return out;\n }\n\n class ShaderProgram {\n readonly program: WebGLProgram;\n readonly uniforms: Uniforms;\n\n constructor(vertex: WebGLShader, fragment: WebGLShader) {\n this.program = link(vertex, fragment);\n this.uniforms = uniformsOf(this.program);\n }\n\n bind(): void {\n gl.useProgram(this.program);\n }\n }\n\n /** Display shader with `#define`-keyword program variants. */\n class DisplayMaterial {\n private readonly programs = new Map<number, WebGLProgram>();\n private activeProgram: WebGLProgram | null = null;\n uniforms: Uniforms = {};\n\n constructor(\n private readonly vertex: WebGLShader,\n private readonly fragmentSource: string\n ) {}\n\n setKeywords(keywords: readonly string[]): void {\n let hash = 0;\n for (const k of keywords) hash += hashCode(k);\n let program = this.programs.get(hash);\n if (!program) {\n program = link(this.vertex, compile(gl.FRAGMENT_SHADER, this.fragmentSource, keywords));\n this.programs.set(hash, program);\n }\n if (program === this.activeProgram) return;\n this.uniforms = uniformsOf(program);\n this.activeProgram = program;\n }\n\n bind(): void {\n gl.useProgram(this.activeProgram);\n }\n }\n\n // Shaders\n\n const baseVertexShader = compile(\n gl.VERTEX_SHADER,\n `\n precision highp float;\n attribute vec2 aPosition;\n varying vec2 vUv;\n varying vec2 vL;\n varying vec2 vR;\n varying vec2 vT;\n varying vec2 vB;\n uniform vec2 texelSize;\n\n void main () {\n vUv = aPosition * 0.5 + 0.5;\n vL = vUv - vec2(texelSize.x, 0.0);\n vR = vUv + vec2(texelSize.x, 0.0);\n vT = vUv + vec2(0.0, texelSize.y);\n vB = vUv - vec2(0.0, texelSize.y);\n gl_Position = vec4(aPosition, 0.0, 1.0);\n }\n `\n );\n\n const copyShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n uniform sampler2D uTexture;\n\n void main () {\n gl_FragColor = texture2D(uTexture, vUv);\n }\n `\n );\n\n const clearShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n uniform sampler2D uTexture;\n uniform float value;\n\n void main () {\n gl_FragColor = value * texture2D(uTexture, vUv);\n }\n `\n );\n\n const displayShaderSource = `\n precision highp float;\n precision highp sampler2D;\n varying vec2 vUv;\n varying vec2 vL;\n varying vec2 vR;\n varying vec2 vT;\n varying vec2 vB;\n uniform sampler2D uTexture;\n uniform vec2 texelSize;\n\n void main () {\n vec3 c = texture2D(uTexture, vUv).rgb;\n #ifdef SHADING\n vec3 lc = texture2D(uTexture, vL).rgb;\n vec3 rc = texture2D(uTexture, vR).rgb;\n vec3 tc = texture2D(uTexture, vT).rgb;\n vec3 bc = texture2D(uTexture, vB).rgb;\n\n float dx = length(rc) - length(lc);\n float dy = length(tc) - length(bc);\n\n vec3 n = normalize(vec3(dx, dy, length(texelSize)));\n vec3 l = vec3(0.0, 0.0, 1.0);\n\n float diffuse = clamp(dot(n, l) + 0.7, 0.7, 1.0);\n c *= diffuse;\n #endif\n\n float a = max(c.r, max(c.g, c.b));\n gl_FragColor = vec4(c, a);\n }\n `;\n\n const splatShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision highp float;\n precision highp sampler2D;\n varying vec2 vUv;\n uniform sampler2D uTarget;\n uniform float aspectRatio;\n uniform vec3 color;\n uniform vec2 point;\n uniform float radius;\n\n void main () {\n vec2 p = vUv - point.xy;\n p.x *= aspectRatio;\n vec3 splat = exp(-dot(p, p) / radius) * color;\n vec3 base = texture2D(uTarget, vUv).xyz;\n gl_FragColor = vec4(base + splat, 1.0);\n }\n `\n );\n\n const advectionShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision highp float;\n precision highp sampler2D;\n varying vec2 vUv;\n uniform sampler2D uVelocity;\n uniform sampler2D uSource;\n uniform vec2 texelSize;\n uniform vec2 dyeTexelSize;\n uniform float dt;\n uniform float dissipation;\n\n vec4 bilerp (sampler2D sam, vec2 uv, vec2 tsize) {\n vec2 st = uv / tsize - 0.5;\n vec2 iuv = floor(st);\n vec2 fuv = fract(st);\n\n vec4 a = texture2D(sam, (iuv + vec2(0.5, 0.5)) * tsize);\n vec4 b = texture2D(sam, (iuv + vec2(1.5, 0.5)) * tsize);\n vec4 c = texture2D(sam, (iuv + vec2(0.5, 1.5)) * tsize);\n vec4 d = texture2D(sam, (iuv + vec2(1.5, 1.5)) * tsize);\n\n return mix(mix(a, b, fuv.x), mix(c, d, fuv.x), fuv.y);\n }\n\n void main () {\n #ifdef MANUAL_FILTERING\n vec2 coord = vUv - dt * bilerp(uVelocity, vUv, texelSize).xy * texelSize;\n vec4 result = bilerp(uSource, coord, dyeTexelSize);\n #else\n vec2 coord = vUv - dt * texture2D(uVelocity, vUv).xy * texelSize;\n vec4 result = texture2D(uSource, coord);\n #endif\n float decay = 1.0 + dissipation * dt;\n gl_FragColor = result / decay;\n }\n `,\n ext.supportLinearFiltering ? undefined : ['MANUAL_FILTERING']\n );\n\n const divergenceShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n varying highp vec2 vL;\n varying highp vec2 vR;\n varying highp vec2 vT;\n varying highp vec2 vB;\n uniform sampler2D uVelocity;\n\n void main () {\n float L = texture2D(uVelocity, vL).x;\n float R = texture2D(uVelocity, vR).x;\n float T = texture2D(uVelocity, vT).y;\n float B = texture2D(uVelocity, vB).y;\n\n vec2 C = texture2D(uVelocity, vUv).xy;\n if (vL.x < 0.0) { L = -C.x; }\n if (vR.x > 1.0) { R = -C.x; }\n if (vT.y > 1.0) { T = -C.y; }\n if (vB.y < 0.0) { B = -C.y; }\n\n float div = 0.5 * (R - L + T - B);\n gl_FragColor = vec4(div, 0.0, 0.0, 1.0);\n }\n `\n );\n\n const curlShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n varying highp vec2 vL;\n varying highp vec2 vR;\n varying highp vec2 vT;\n varying highp vec2 vB;\n uniform sampler2D uVelocity;\n\n void main () {\n float L = texture2D(uVelocity, vL).y;\n float R = texture2D(uVelocity, vR).y;\n float T = texture2D(uVelocity, vT).x;\n float B = texture2D(uVelocity, vB).x;\n float vorticity = R - L - T + B;\n gl_FragColor = vec4(0.5 * vorticity, 0.0, 0.0, 1.0);\n }\n `\n );\n\n const vorticityShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision highp float;\n precision highp sampler2D;\n varying vec2 vUv;\n varying vec2 vL;\n varying vec2 vR;\n varying vec2 vT;\n varying vec2 vB;\n uniform sampler2D uVelocity;\n uniform sampler2D uCurl;\n uniform float curl;\n uniform float dt;\n\n void main () {\n float L = texture2D(uCurl, vL).x;\n float R = texture2D(uCurl, vR).x;\n float T = texture2D(uCurl, vT).x;\n float B = texture2D(uCurl, vB).x;\n float C = texture2D(uCurl, vUv).x;\n\n vec2 force = 0.5 * vec2(abs(T) - abs(B), abs(R) - abs(L));\n force /= length(force) + 0.0001;\n force *= curl * C;\n force.y *= -1.0;\n\n vec2 velocity = texture2D(uVelocity, vUv).xy;\n velocity += force * dt;\n velocity = min(max(velocity, -1000.0), 1000.0);\n gl_FragColor = vec4(velocity, 0.0, 1.0);\n }\n `\n );\n\n const pressureShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n varying highp vec2 vL;\n varying highp vec2 vR;\n varying highp vec2 vT;\n varying highp vec2 vB;\n uniform sampler2D uPressure;\n uniform sampler2D uDivergence;\n\n void main () {\n float L = texture2D(uPressure, vL).x;\n float R = texture2D(uPressure, vR).x;\n float T = texture2D(uPressure, vT).x;\n float B = texture2D(uPressure, vB).x;\n float C = texture2D(uPressure, vUv).x;\n float divergence = texture2D(uDivergence, vUv).x;\n float pressure = (L + R + B + T - divergence) * 0.25;\n gl_FragColor = vec4(pressure, 0.0, 0.0, 1.0);\n }\n `\n );\n\n const gradientSubtractShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n varying highp vec2 vL;\n varying highp vec2 vR;\n varying highp vec2 vT;\n varying highp vec2 vB;\n uniform sampler2D uPressure;\n uniform sampler2D uVelocity;\n\n void main () {\n float L = texture2D(uPressure, vL).x;\n float R = texture2D(uPressure, vR).x;\n float T = texture2D(uPressure, vT).x;\n float B = texture2D(uPressure, vB).x;\n vec2 velocity = texture2D(uVelocity, vUv).xy;\n velocity.xy -= vec2(R - L, T - B);\n gl_FragColor = vec4(velocity, 0.0, 1.0);\n }\n `\n );\n\n // Fullscreen blit\n\n gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, -1, 1, 1, 1, 1, -1]), gl.STATIC_DRAW);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, gl.createBuffer());\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([0, 1, 2, 0, 2, 3]), gl.STATIC_DRAW);\n gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(0);\n\n function blit(target: FBO | null, clear = false): void {\n if (target === null) {\n gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n } else {\n gl.viewport(0, 0, target.width, target.height);\n gl.bindFramebuffer(gl.FRAMEBUFFER, target.fbo);\n }\n if (clear) {\n gl.clearColor(0.0, 0.0, 0.0, 1.0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n }\n gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);\n }\n\n // Framebuffers\n\n function createFBO(w: number, h: number, internalFormat: number, format: number, type: number, param: number): FBO {\n gl.activeTexture(gl.TEXTURE0);\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, param);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, param);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, w, h, 0, format, type, null);\n\n const fbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n gl.viewport(0, 0, w, h);\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n return {\n texture,\n fbo,\n width: w,\n height: h,\n texelSizeX: 1 / w,\n texelSizeY: 1 / h,\n attach(id: number): number {\n gl.activeTexture(gl.TEXTURE0 + id);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n return id;\n },\n };\n }\n\n function createDoubleFBO(\n w: number,\n h: number,\n internalFormat: number,\n format: number,\n type: number,\n param: number\n ): DoubleFBO {\n let fbo1 = createFBO(w, h, internalFormat, format, type, param);\n let fbo2 = createFBO(w, h, internalFormat, format, type, param);\n return {\n width: w,\n height: h,\n texelSizeX: fbo1.texelSizeX,\n texelSizeY: fbo1.texelSizeY,\n get read() {\n return fbo1;\n },\n set read(value: FBO) {\n fbo1 = value;\n },\n get write() {\n return fbo2;\n },\n set write(value: FBO) {\n fbo2 = value;\n },\n swap(): void {\n const temp = fbo1;\n fbo1 = fbo2;\n fbo2 = temp;\n },\n };\n }\n\n function resizeFBO(\n target: FBO,\n w: number,\n h: number,\n internalFormat: number,\n format: number,\n type: number,\n param: number\n ): FBO {\n const newFBO = createFBO(w, h, internalFormat, format, type, param);\n copyProgram.bind();\n gl.uniform1i(copyProgram.uniforms['uTexture'], target.attach(0));\n blit(newFBO);\n return newFBO;\n }\n\n function resizeDoubleFBO(\n target: DoubleFBO,\n w: number,\n h: number,\n internalFormat: number,\n format: number,\n type: number,\n param: number\n ): DoubleFBO {\n if (target.width === w && target.height === h) return target;\n target.read = resizeFBO(target.read, w, h, internalFormat, format, type, param);\n target.write = createFBO(w, h, internalFormat, format, type, param);\n target.width = w;\n target.height = h;\n target.texelSizeX = 1 / w;\n target.texelSizeY = 1 / h;\n return target;\n }\n\n // Programs + state\n\n const copyProgram = new ShaderProgram(baseVertexShader, copyShader);\n const clearProgram = new ShaderProgram(baseVertexShader, clearShader);\n const splatProgram = new ShaderProgram(baseVertexShader, splatShader);\n const advectionProgram = new ShaderProgram(baseVertexShader, advectionShader);\n const divergenceProgram = new ShaderProgram(baseVertexShader, divergenceShader);\n const curlProgram = new ShaderProgram(baseVertexShader, curlShader);\n const vorticityProgram = new ShaderProgram(baseVertexShader, vorticityShader);\n const pressureProgram = new ShaderProgram(baseVertexShader, pressureShader);\n const gradientSubtractProgram = new ShaderProgram(baseVertexShader, gradientSubtractShader);\n const displayMaterial = new DisplayMaterial(baseVertexShader, displayShaderSource);\n\n let dye!: DoubleFBO;\n let velocity!: DoubleFBO;\n let divergence!: FBO;\n let curl!: FBO;\n let pressure!: DoubleFBO;\n\n function initFramebuffers(): void {\n const simRes = getResolution(config.simResolution);\n const dyeRes = getResolution(dyeResolution);\n const texType = ext.halfFloatTexType;\n const rgba = ext.formatRGBA;\n const rg = ext.formatRG;\n const r = ext.formatR;\n const filtering = ext.supportLinearFiltering ? gl.LINEAR : gl.NEAREST;\n gl.disable(gl.BLEND);\n\n dye = dye\n ? resizeDoubleFBO(dye, dyeRes.width, dyeRes.height, rgba.internalFormat, rgba.format, texType, filtering)\n : createDoubleFBO(dyeRes.width, dyeRes.height, rgba.internalFormat, rgba.format, texType, filtering);\n\n velocity = velocity\n ? resizeDoubleFBO(velocity, simRes.width, simRes.height, rg.internalFormat, rg.format, texType, filtering)\n : createDoubleFBO(simRes.width, simRes.height, rg.internalFormat, rg.format, texType, filtering);\n\n divergence = createFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST);\n curl = createFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST);\n pressure = createDoubleFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST);\n }\n\n displayMaterial.setKeywords(shading ? ['SHADING'] : []);\n initFramebuffers();\n let lastUpdateTime = Date.now();\n let colorUpdateTimer = 0;\n\n // Frame loop\n\n function updateFrame(): void {\n if (!active) return;\n const dt = calcDeltaTime();\n if (resizeCanvas()) initFramebuffers();\n updateColors(dt);\n applyInputs();\n step(dt);\n render();\n rafId = requestAnimationFrame(updateFrame);\n }\n\n function calcDeltaTime(): number {\n const now = Date.now();\n const dt = Math.min((now - lastUpdateTime) / 1000, 0.016666);\n lastUpdateTime = now;\n return dt;\n }\n\n function resizeCanvas(): boolean {\n const width = scaleByPixelRatio(canvas.clientWidth);\n const height = scaleByPixelRatio(canvas.clientHeight);\n if (canvas.width !== width || canvas.height !== height) {\n canvas.width = width;\n canvas.height = height;\n return true;\n }\n return false;\n }\n\n function updateColors(dt: number): void {\n colorUpdateTimer += dt * config.colorUpdateSpeed;\n if (colorUpdateTimer >= 1) {\n colorUpdateTimer = wrap(colorUpdateTimer, 0, 1);\n pointer.color = generateColor();\n }\n }\n\n function applyInputs(): void {\n if (pointer.moved) {\n pointer.moved = false;\n splatPointer();\n }\n }\n\n function step(dt: number): void {\n gl.disable(gl.BLEND);\n curlProgram.bind();\n gl.uniform2f(curlProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n gl.uniform1i(curlProgram.uniforms['uVelocity'], velocity.read.attach(0));\n blit(curl);\n\n vorticityProgram.bind();\n gl.uniform2f(vorticityProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n gl.uniform1i(vorticityProgram.uniforms['uVelocity'], velocity.read.attach(0));\n gl.uniform1i(vorticityProgram.uniforms['uCurl'], curl.attach(1));\n gl.uniform1f(vorticityProgram.uniforms['curl'], config.curl);\n gl.uniform1f(vorticityProgram.uniforms['dt'], dt);\n blit(velocity.write);\n velocity.swap();\n\n divergenceProgram.bind();\n gl.uniform2f(divergenceProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n gl.uniform1i(divergenceProgram.uniforms['uVelocity'], velocity.read.attach(0));\n blit(divergence);\n\n clearProgram.bind();\n gl.uniform1i(clearProgram.uniforms['uTexture'], pressure.read.attach(0));\n gl.uniform1f(clearProgram.uniforms['value'], config.pressure);\n blit(pressure.write);\n pressure.swap();\n\n pressureProgram.bind();\n gl.uniform2f(pressureProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n gl.uniform1i(pressureProgram.uniforms['uDivergence'], divergence.attach(0));\n for (let i = 0; i < config.pressureIterations; i++) {\n gl.uniform1i(pressureProgram.uniforms['uPressure'], pressure.read.attach(1));\n blit(pressure.write);\n pressure.swap();\n }\n\n gradientSubtractProgram.bind();\n gl.uniform2f(gradientSubtractProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n gl.uniform1i(gradientSubtractProgram.uniforms['uPressure'], pressure.read.attach(0));\n gl.uniform1i(gradientSubtractProgram.uniforms['uVelocity'], velocity.read.attach(1));\n blit(velocity.write);\n velocity.swap();\n\n advectionProgram.bind();\n gl.uniform2f(advectionProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n if (!ext.supportLinearFiltering) {\n gl.uniform2f(advectionProgram.uniforms['dyeTexelSize'], velocity.texelSizeX, velocity.texelSizeY);\n }\n const velocityId = velocity.read.attach(0);\n gl.uniform1i(advectionProgram.uniforms['uVelocity'], velocityId);\n gl.uniform1i(advectionProgram.uniforms['uSource'], velocityId);\n gl.uniform1f(advectionProgram.uniforms['dt'], dt);\n gl.uniform1f(advectionProgram.uniforms['dissipation'], config.velocityDissipation);\n blit(velocity.write);\n velocity.swap();\n\n if (!ext.supportLinearFiltering) {\n gl.uniform2f(advectionProgram.uniforms['dyeTexelSize'], dye.texelSizeX, dye.texelSizeY);\n }\n gl.uniform1i(advectionProgram.uniforms['uVelocity'], velocity.read.attach(0));\n gl.uniform1i(advectionProgram.uniforms['uSource'], dye.read.attach(1));\n gl.uniform1f(advectionProgram.uniforms['dissipation'], config.densityDissipation);\n blit(dye.write);\n dye.swap();\n }\n\n function render(): void {\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n gl.enable(gl.BLEND);\n displayMaterial.bind();\n if (shading) {\n gl.uniform2f(displayMaterial.uniforms['texelSize'], 1 / gl.drawingBufferWidth, 1 / gl.drawingBufferHeight);\n }\n gl.uniform1i(displayMaterial.uniforms['uTexture'], dye.read.attach(0));\n blit(null);\n }\n\n // Splats\n\n function splatPointer(): void {\n const dx = pointer.deltaX * config.splatForce;\n const dy = pointer.deltaY * config.splatForce;\n splat(pointer.texcoordX, pointer.texcoordY, dx, dy, pointer.color);\n }\n\n function clickSplat(): void {\n const color = generateColor();\n color.r *= 10;\n color.g *= 10;\n color.b *= 10;\n const dx = 10 * (Math.random() - 0.5);\n const dy = 30 * (Math.random() - 0.5);\n splat(pointer.texcoordX, pointer.texcoordY, dx, dy, color);\n }\n\n function splat(x: number, y: number, dx: number, dy: number, color: RGB): void {\n splatProgram.bind();\n gl.uniform1i(splatProgram.uniforms['uTarget'], velocity.read.attach(0));\n gl.uniform1f(splatProgram.uniforms['aspectRatio'], canvas.width / canvas.height);\n gl.uniform2f(splatProgram.uniforms['point'], x, y);\n gl.uniform3f(splatProgram.uniforms['color'], dx, dy, 0);\n gl.uniform1f(splatProgram.uniforms['radius'], correctRadius(config.splatRadius / 100));\n blit(velocity.write);\n velocity.swap();\n\n gl.uniform1i(splatProgram.uniforms['uTarget'], dye.read.attach(0));\n gl.uniform3f(splatProgram.uniforms['color'], color.r, color.g, color.b);\n blit(dye.write);\n dye.swap();\n }\n\n function correctRadius(radius: number): number {\n const aspectRatio = canvas.width / canvas.height;\n return aspectRatio > 1 ? radius * aspectRatio : radius;\n }\n\n // Pointer\n\n function pointerDown(posX: number, posY: number): void {\n pointer.moved = false;\n pointer.texcoordX = posX / canvas.width;\n pointer.texcoordY = 1 - posY / canvas.height;\n pointer.prevTexcoordX = pointer.texcoordX;\n pointer.prevTexcoordY = pointer.texcoordY;\n pointer.deltaX = 0;\n pointer.deltaY = 0;\n pointer.color = generateColor();\n }\n\n function pointerMove(posX: number, posY: number, color: RGB): void {\n pointer.prevTexcoordX = pointer.texcoordX;\n pointer.prevTexcoordY = pointer.texcoordY;\n pointer.texcoordX = posX / canvas.width;\n pointer.texcoordY = 1 - posY / canvas.height;\n pointer.deltaX = correctDeltaX(pointer.texcoordX - pointer.prevTexcoordX);\n pointer.deltaY = correctDeltaY(pointer.texcoordY - pointer.prevTexcoordY);\n pointer.moved = Math.abs(pointer.deltaX) > 0 || Math.abs(pointer.deltaY) > 0;\n pointer.color = color;\n }\n\n function correctDeltaX(delta: number): number {\n const aspectRatio = canvas.width / canvas.height;\n return aspectRatio < 1 ? delta * aspectRatio : delta;\n }\n\n function correctDeltaY(delta: number): number {\n const aspectRatio = canvas.width / canvas.height;\n return aspectRatio > 1 ? delta / aspectRatio : delta;\n }\n\n // Colours\n\n function hexToRGB(hex: string): RGB {\n let val = hex.replace('#', '');\n if (val.length === 3) val = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\n return {\n r: (Number.parseInt(val.slice(0, 2), 16) / 255) * 0.15,\n g: (Number.parseInt(val.slice(2, 4), 16) / 255) * 0.15,\n b: (Number.parseInt(val.slice(4, 6), 16) / 255) * 0.15,\n };\n }\n\n function generateColor(): RGB {\n if (!config.rainbow) return hexToRGB(config.color);\n const c = hsvToRgb(Math.random(), 1, 1);\n c.r *= 0.15;\n c.g *= 0.15;\n c.b *= 0.15;\n return c;\n }\n\n function hsvToRgb(h: number, s: number, v: number): RGB {\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0:\n return { r: v, g: t, b: p };\n case 1:\n return { r: q, g: v, b: p };\n case 2:\n return { r: p, g: v, b: t };\n case 3:\n return { r: p, g: q, b: v };\n case 4:\n return { r: t, g: p, b: v };\n default:\n return { r: v, g: p, b: q };\n }\n }\n\n function wrap(value: number, min: number, max: number): number {\n const range = max - min;\n if (range === 0) return min;\n return ((value - min) % range) + min;\n }\n\n function getResolution(resolution: number): { width: number; height: number } {\n let aspectRatio = gl.drawingBufferWidth / gl.drawingBufferHeight;\n if (aspectRatio < 1) aspectRatio = 1 / aspectRatio;\n const min = Math.round(resolution);\n const max = Math.round(resolution * aspectRatio);\n return gl.drawingBufferWidth > gl.drawingBufferHeight ? { width: max, height: min } : { width: min, height: max };\n }\n\n function scaleByPixelRatio(input: number): number {\n return Math.floor(input * (window.devicePixelRatio || 1));\n }\n\n function hashCode(s: string): number {\n let hash = 0;\n for (let i = 0; i < s.length; i++) {\n hash = (hash << 5) - hash + s.charCodeAt(i);\n hash |= 0;\n }\n return hash;\n }\n\n // Events + boot\n\n let firstMoveHandled = false;\n\n // Coordinates are taken relative to the canvas box: identical to the\n // raw client position for the fullscreen overlay, and it makes a\n // contained canvas track the pointer correctly too.\n const toLocal = (clientX: number, clientY: number): { x: number; y: number } => {\n const rect = canvas.getBoundingClientRect();\n return { x: scaleByPixelRatio(clientX - rect.left), y: scaleByPixelRatio(clientY - rect.top) };\n };\n\n const onMouseDown = (e: MouseEvent): void => {\n const pos = toLocal(e.clientX, e.clientY);\n pointerDown(pos.x, pos.y);\n clickSplat();\n };\n\n const onMouseMove = (e: MouseEvent): void => {\n const pos = toLocal(e.clientX, e.clientY);\n const color = firstMoveHandled ? pointer.color : generateColor();\n firstMoveHandled = true;\n pointerMove(pos.x, pos.y, color);\n };\n\n const onTouchStart = (e: TouchEvent): void => {\n const t = e.targetTouches[0];\n if (!t) return;\n const pos = toLocal(t.clientX, t.clientY);\n pointerDown(pos.x, pos.y);\n };\n\n const onTouchMove = (e: TouchEvent): void => {\n const t = e.targetTouches[0];\n if (!t) return;\n const pos = toLocal(t.clientX, t.clientY);\n pointerMove(pos.x, pos.y, pointer.color);\n };\n\n window.addEventListener('mousedown', onMouseDown);\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('touchstart', onTouchStart, { passive: true });\n window.addEventListener('touchmove', onTouchMove, { passive: true });\n\n updateFrame();\n\n return () => {\n active = false;\n cancelAnimationFrame(rafId);\n window.removeEventListener('mousedown', onMouseDown);\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('touchstart', onTouchStart);\n window.removeEventListener('touchmove', onTouchMove);\n // The context is NOT lost here on purpose — input changes reboot the\n // sim on the same canvas, and a lost context can't be re-acquired.\n };\n}\n\n// WebGL context bootstrap\n\nfunction getWebGLContext(canvas: HTMLCanvasElement): { gl: GL; ext: GlExt } | null {\n const params: WebGLContextAttributes = {\n alpha: true,\n depth: false,\n stencil: false,\n antialias: false,\n preserveDrawingBuffer: false,\n };\n\n const gl2 = canvas.getContext('webgl2', params);\n const gl = gl2 ?? canvas.getContext('webgl', params);\n if (!gl) return null;\n const isWebGL2 = !!gl2;\n\n let halfFloat: OES_texture_half_float | null = null;\n let supportLinearFiltering: boolean;\n if (isWebGL2) {\n gl.getExtension('EXT_color_buffer_float');\n supportLinearFiltering = !!gl.getExtension('OES_texture_float_linear');\n } else {\n halfFloat = gl.getExtension('OES_texture_half_float');\n supportLinearFiltering = !!gl.getExtension('OES_texture_half_float_linear');\n }\n gl.clearColor(0, 0, 0, 1);\n\n const halfFloatTexType = isWebGL2\n ? (gl as WebGL2RenderingContext).HALF_FLOAT\n : (halfFloat?.HALF_FLOAT_OES ?? gl.UNSIGNED_BYTE);\n\n let formatRGBA: TexFormat | null;\n let formatRG: TexFormat | null;\n let formatR: TexFormat | null;\n if (isWebGL2) {\n const g2 = gl as WebGL2RenderingContext;\n formatRGBA = getSupportedFormat(g2, g2.RGBA16F, g2.RGBA, halfFloatTexType);\n formatRG = getSupportedFormat(g2, g2.RG16F, g2.RG, halfFloatTexType);\n formatR = getSupportedFormat(g2, g2.R16F, g2.RED, halfFloatTexType);\n } else {\n formatRGBA = getSupportedFormat(gl, gl.RGBA, gl.RGBA, halfFloatTexType);\n formatRG = formatRGBA;\n formatR = formatRGBA;\n }\n if (!formatRGBA || !formatRG || !formatR) return null;\n\n return { gl, ext: { formatRGBA, formatRG, formatR, halfFloatTexType, supportLinearFiltering } };\n}\n\nfunction getSupportedFormat(gl: GL, internalFormat: number, format: number, type: number): TexFormat | null {\n if (!supportRenderTextureFormat(gl, internalFormat, format, type)) {\n const g2 = gl as WebGL2RenderingContext;\n switch (internalFormat) {\n case g2.R16F:\n return getSupportedFormat(gl, g2.RG16F, g2.RG, type);\n case g2.RG16F:\n return getSupportedFormat(gl, g2.RGBA16F, g2.RGBA, type);\n default:\n return null;\n }\n }\n return { internalFormat, format };\n}\n\nfunction supportRenderTextureFormat(gl: GL, internalFormat: number, format: number, type: number): boolean {\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, 4, 4, 0, format, type, null);\n const fbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n return gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE;\n}\n\nexport { createFluidSimulation };\nexport type { WrFluidConfig };\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n *\n * Angular adaptation of the SplashCursor effect by David Haz / reactbits.dev.\n * Original: https://www.reactbits.dev/animations/splash-cursor\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { isPlatformBrowser } from '@angular/common';\nimport type { ElementRef } from '@angular/core';\nimport { Component, NgZone, PLATFORM_ID, ViewEncapsulation, effect, inject, input, viewChild } from '@angular/core';\n\nimport { WrPlatform } from 'ngwr/platform';\nimport { numAttr } from 'ngwr/utils';\n\nimport { createFluidSimulation } from './fluid';\n\n/**\n * Splash cursor — a WebGL fluid simulation that splashes colourful dye\n * wherever the pointer moves or clicks. Renders as a fixed, full-viewport,\n * click-through overlay; mount it once on a page (it follows the pointer\n * everywhere) and it tears down with the component.\n *\n * Renders nothing under `prefers-reduced-motion` or when WebGL is\n * unavailable.\n *\n * @example\n * ```html\n * <wr-splash-cursor />\n * <wr-splash-cursor [rainbow]=\"false\" color=\"#5227ff\" />\n * ```\n *\n * @see https://ngwr.dev/animations/splash-cursor\n */\n@Component({\n selector: 'wr-splash-cursor',\n template: '<canvas #canvas class=\"wr-splash-cursor__canvas\"></canvas>',\n styleUrl: './splash-cursor.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'wr-splash-cursor',\n '[class.wr-splash-cursor--contained]': '!fullscreen()',\n },\n})\nexport class WrSplashCursor {\n /**\n * `true` overlays the whole viewport (reactbits behaviour); `false`\n * fills the nearest positioned ancestor instead — handy for demo boxes,\n * and the dye collides with the box walls. @default true\n */\n readonly fullscreen = input(true, { transform: coerceBooleanProperty });\n\n /** Velocity / pressure grid resolution. @default 128 */\n readonly simResolution = input(128, { transform: numAttr(128) });\n\n /** Dye texture resolution — the visible detail. @default 1440 */\n readonly dyeResolution = input(1440, { transform: numAttr(1440) });\n\n /** How fast the dye fades, higher = shorter trails. @default 3.5 */\n readonly densityDissipation = input(3.5, { transform: numAttr(3.5) });\n\n /** How fast motion settles. @default 2 */\n readonly velocityDissipation = input(2, { transform: numAttr(2) });\n\n /** Pressure retained between frames, 0..1. @default 0.1 */\n readonly pressure = input(0.1, { transform: numAttr(0.1) });\n\n /** Jacobi iterations for the pressure solve. @default 20 */\n readonly pressureIterations = input(20, { transform: numAttr(20) });\n\n /** Vorticity confinement — swirliness. @default 3 */\n readonly curl = input(3, { transform: numAttr(3) });\n\n /** Splat size. @default 0.2 */\n readonly splatRadius = input(0.2, { transform: numAttr(0.2) });\n\n /** Velocity a pointer move injects. @default 6000 */\n readonly splatForce = input(6000, { transform: numAttr(6000) });\n\n /** Pseudo-3D shading on the dye. @default true */\n readonly shading = input(true, { transform: coerceBooleanProperty });\n\n /** How fast the splat colour cycles. @default 10 */\n readonly colorUpdateSpeed = input(10, { transform: numAttr(10) });\n\n /** Cycle splat colours through the rainbow. @default true */\n readonly rainbow = input(true, { transform: coerceBooleanProperty });\n\n /** Fixed splat colour when `rainbow` is off. @default '#ff0000' */\n readonly color = input('#ff0000');\n\n private readonly canvasRef = viewChild<ElementRef<HTMLCanvasElement>>('canvas');\n\n private readonly zone = inject(NgZone);\n private readonly platform = inject(WrPlatform);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n constructor() {\n if (!this.isBrowser) return;\n\n // (Re)boot whenever the canvas appears, any input changes, or the OS\n // reduced-motion preference flips. `onCleanup` tears the old sim down.\n effect(onCleanup => {\n const canvas = this.canvasRef()?.nativeElement;\n const config = {\n simResolution: this.simResolution(),\n dyeResolution: this.dyeResolution(),\n densityDissipation: this.densityDissipation(),\n velocityDissipation: this.velocityDissipation(),\n pressure: this.pressure(),\n pressureIterations: this.pressureIterations(),\n curl: this.curl(),\n splatRadius: this.splatRadius(),\n splatForce: this.splatForce(),\n shading: this.shading(),\n colorUpdateSpeed: this.colorUpdateSpeed(),\n rainbow: this.rainbow(),\n color: this.color(),\n };\n if (!canvas || this.platform.prefersReducedMotion()) return;\n const teardown = this.zone.runOutsideAngular(() => createFluidSimulation(canvas, config));\n if (teardown) onCleanup(teardown);\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngwr-splash-cursor.mjs","sources":["../../../projects/lib/splash-cursor/fluid.ts","../../../projects/lib/splash-cursor/splash-cursor.ts","../../../projects/lib/splash-cursor/ngwr-splash-cursor.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n *\n * WebGL fluid simulation behind `<wr-splash-cursor>`. Port of the engine\n * used by reactbits.dev's SplashCursor (itself based on Pavel Dobryakov's\n * WebGL-Fluid-Simulation, MIT).\n *\n * Framework-free on purpose: `createFluidSimulation(canvas, config)` boots\n * the sim and returns a teardown, or `null` when WebGL isn't available.\n */\n\n/* eslint-disable no-bitwise -- GL bitmasks + string hashing are inherently bitwise */\n\ninterface WrFluidConfig {\n readonly simResolution: number;\n readonly dyeResolution: number;\n readonly densityDissipation: number;\n readonly velocityDissipation: number;\n readonly pressure: number;\n readonly pressureIterations: number;\n readonly curl: number;\n readonly splatRadius: number;\n readonly splatForce: number;\n readonly shading: boolean;\n readonly colorUpdateSpeed: number;\n /** Cycle splat colours through the rainbow; `false` uses `color`. */\n readonly rainbow: boolean;\n /** Fixed splat colour (hex) when `rainbow` is off. */\n readonly color: string;\n}\n\ninterface RGB {\n r: number;\n g: number;\n b: number;\n}\n\ninterface TexFormat {\n readonly internalFormat: number;\n readonly format: number;\n}\n\ninterface GlExt {\n readonly formatRGBA: TexFormat;\n readonly formatRG: TexFormat;\n readonly formatR: TexFormat;\n readonly halfFloatTexType: number;\n readonly supportLinearFiltering: boolean;\n}\n\ninterface FBO {\n readonly texture: WebGLTexture;\n readonly fbo: WebGLFramebuffer;\n readonly width: number;\n readonly height: number;\n readonly texelSizeX: number;\n readonly texelSizeY: number;\n attach(id: number): number;\n}\n\ninterface DoubleFBO {\n width: number;\n height: number;\n texelSizeX: number;\n texelSizeY: number;\n read: FBO;\n write: FBO;\n swap(): void;\n}\n\ninterface Pointer {\n texcoordX: number;\n texcoordY: number;\n prevTexcoordX: number;\n prevTexcoordY: number;\n deltaX: number;\n deltaY: number;\n moved: boolean;\n color: RGB;\n}\n\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\ntype Uniforms = Record<string, WebGLUniformLocation | null>;\n\nfunction createFluidSimulation(canvas: HTMLCanvasElement, config: WrFluidConfig): (() => void) | null {\n const ctx = getWebGLContext(canvas);\n if (!ctx) return null;\n const { gl, ext } = ctx;\n\n let dyeResolution = config.dyeResolution;\n let shading = config.shading;\n if (!ext.supportLinearFiltering) {\n dyeResolution = 256;\n shading = false;\n }\n\n let active = true;\n let rafId = 0;\n\n const pointer: Pointer = {\n texcoordX: 0,\n texcoordY: 0,\n prevTexcoordX: 0,\n prevTexcoordY: 0,\n deltaX: 0,\n deltaY: 0,\n moved: false,\n color: { r: 0, g: 0, b: 0 },\n };\n\n // Shader plumbing\n\n function compile(type: number, source: string, keywords?: readonly string[]): WebGLShader {\n const prefixed = keywords ? keywords.map(k => `#define ${k}\\n`).join('') + source : source;\n const shader = gl.createShader(type)!;\n gl.shaderSource(shader, prefixed);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n // eslint-disable-next-line no-console -- GPU shader failures are otherwise invisible\n console.error('wr-splash-cursor shader error:', gl.getShaderInfoLog(shader));\n }\n return shader;\n }\n\n function link(vertex: WebGLShader, fragment: WebGLShader): WebGLProgram {\n const program = gl.createProgram();\n gl.attachShader(program, vertex);\n gl.attachShader(program, fragment);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n // eslint-disable-next-line no-console -- GPU link failures are otherwise invisible\n console.error('wr-splash-cursor program error:', gl.getProgramInfoLog(program));\n }\n return program;\n }\n\n function uniformsOf(program: WebGLProgram): Uniforms {\n const out: Uniforms = {};\n const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS) as number;\n for (let i = 0; i < count; i++) {\n const name = gl.getActiveUniform(program, i)!.name;\n out[name] = gl.getUniformLocation(program, name);\n }\n return out;\n }\n\n class ShaderProgram {\n readonly program: WebGLProgram;\n readonly uniforms: Uniforms;\n\n constructor(vertex: WebGLShader, fragment: WebGLShader) {\n this.program = link(vertex, fragment);\n this.uniforms = uniformsOf(this.program);\n }\n\n bind(): void {\n gl.useProgram(this.program);\n }\n }\n\n /** Display shader with `#define`-keyword program variants. */\n class DisplayMaterial {\n private readonly programs = new Map<number, WebGLProgram>();\n private activeProgram: WebGLProgram | null = null;\n uniforms: Uniforms = {};\n\n constructor(\n private readonly vertex: WebGLShader,\n private readonly fragmentSource: string\n ) {}\n\n setKeywords(keywords: readonly string[]): void {\n let hash = 0;\n for (const k of keywords) hash += hashCode(k);\n let program = this.programs.get(hash);\n if (!program) {\n program = link(this.vertex, compile(gl.FRAGMENT_SHADER, this.fragmentSource, keywords));\n this.programs.set(hash, program);\n }\n if (program === this.activeProgram) return;\n this.uniforms = uniformsOf(program);\n this.activeProgram = program;\n }\n\n bind(): void {\n gl.useProgram(this.activeProgram);\n }\n }\n\n // Shaders\n\n const baseVertexShader = compile(\n gl.VERTEX_SHADER,\n `\n precision highp float;\n attribute vec2 aPosition;\n varying vec2 vUv;\n varying vec2 vL;\n varying vec2 vR;\n varying vec2 vT;\n varying vec2 vB;\n uniform vec2 texelSize;\n\n void main () {\n vUv = aPosition * 0.5 + 0.5;\n vL = vUv - vec2(texelSize.x, 0.0);\n vR = vUv + vec2(texelSize.x, 0.0);\n vT = vUv + vec2(0.0, texelSize.y);\n vB = vUv - vec2(0.0, texelSize.y);\n gl_Position = vec4(aPosition, 0.0, 1.0);\n }\n `\n );\n\n const copyShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n uniform sampler2D uTexture;\n\n void main () {\n gl_FragColor = texture2D(uTexture, vUv);\n }\n `\n );\n\n const clearShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n uniform sampler2D uTexture;\n uniform float value;\n\n void main () {\n gl_FragColor = value * texture2D(uTexture, vUv);\n }\n `\n );\n\n const displayShaderSource = `\n precision highp float;\n precision highp sampler2D;\n varying vec2 vUv;\n varying vec2 vL;\n varying vec2 vR;\n varying vec2 vT;\n varying vec2 vB;\n uniform sampler2D uTexture;\n uniform vec2 texelSize;\n\n void main () {\n vec3 c = texture2D(uTexture, vUv).rgb;\n #ifdef SHADING\n vec3 lc = texture2D(uTexture, vL).rgb;\n vec3 rc = texture2D(uTexture, vR).rgb;\n vec3 tc = texture2D(uTexture, vT).rgb;\n vec3 bc = texture2D(uTexture, vB).rgb;\n\n float dx = length(rc) - length(lc);\n float dy = length(tc) - length(bc);\n\n vec3 n = normalize(vec3(dx, dy, length(texelSize)));\n vec3 l = vec3(0.0, 0.0, 1.0);\n\n float diffuse = clamp(dot(n, l) + 0.7, 0.7, 1.0);\n c *= diffuse;\n #endif\n\n float a = max(c.r, max(c.g, c.b));\n gl_FragColor = vec4(c, a);\n }\n `;\n\n const splatShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision highp float;\n precision highp sampler2D;\n varying vec2 vUv;\n uniform sampler2D uTarget;\n uniform float aspectRatio;\n uniform vec3 color;\n uniform vec2 point;\n uniform float radius;\n\n void main () {\n vec2 p = vUv - point.xy;\n p.x *= aspectRatio;\n vec3 splat = exp(-dot(p, p) / radius) * color;\n vec3 base = texture2D(uTarget, vUv).xyz;\n gl_FragColor = vec4(base + splat, 1.0);\n }\n `\n );\n\n const advectionShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision highp float;\n precision highp sampler2D;\n varying vec2 vUv;\n uniform sampler2D uVelocity;\n uniform sampler2D uSource;\n uniform vec2 texelSize;\n uniform vec2 dyeTexelSize;\n uniform float dt;\n uniform float dissipation;\n\n vec4 bilerp (sampler2D sam, vec2 uv, vec2 tsize) {\n vec2 st = uv / tsize - 0.5;\n vec2 iuv = floor(st);\n vec2 fuv = fract(st);\n\n vec4 a = texture2D(sam, (iuv + vec2(0.5, 0.5)) * tsize);\n vec4 b = texture2D(sam, (iuv + vec2(1.5, 0.5)) * tsize);\n vec4 c = texture2D(sam, (iuv + vec2(0.5, 1.5)) * tsize);\n vec4 d = texture2D(sam, (iuv + vec2(1.5, 1.5)) * tsize);\n\n return mix(mix(a, b, fuv.x), mix(c, d, fuv.x), fuv.y);\n }\n\n void main () {\n #ifdef MANUAL_FILTERING\n vec2 coord = vUv - dt * bilerp(uVelocity, vUv, texelSize).xy * texelSize;\n vec4 result = bilerp(uSource, coord, dyeTexelSize);\n #else\n vec2 coord = vUv - dt * texture2D(uVelocity, vUv).xy * texelSize;\n vec4 result = texture2D(uSource, coord);\n #endif\n float decay = 1.0 + dissipation * dt;\n gl_FragColor = result / decay;\n }\n `,\n ext.supportLinearFiltering ? undefined : ['MANUAL_FILTERING']\n );\n\n const divergenceShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n varying highp vec2 vL;\n varying highp vec2 vR;\n varying highp vec2 vT;\n varying highp vec2 vB;\n uniform sampler2D uVelocity;\n\n void main () {\n float L = texture2D(uVelocity, vL).x;\n float R = texture2D(uVelocity, vR).x;\n float T = texture2D(uVelocity, vT).y;\n float B = texture2D(uVelocity, vB).y;\n\n vec2 C = texture2D(uVelocity, vUv).xy;\n if (vL.x < 0.0) { L = -C.x; }\n if (vR.x > 1.0) { R = -C.x; }\n if (vT.y > 1.0) { T = -C.y; }\n if (vB.y < 0.0) { B = -C.y; }\n\n float div = 0.5 * (R - L + T - B);\n gl_FragColor = vec4(div, 0.0, 0.0, 1.0);\n }\n `\n );\n\n const curlShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n varying highp vec2 vL;\n varying highp vec2 vR;\n varying highp vec2 vT;\n varying highp vec2 vB;\n uniform sampler2D uVelocity;\n\n void main () {\n float L = texture2D(uVelocity, vL).y;\n float R = texture2D(uVelocity, vR).y;\n float T = texture2D(uVelocity, vT).x;\n float B = texture2D(uVelocity, vB).x;\n float vorticity = R - L - T + B;\n gl_FragColor = vec4(0.5 * vorticity, 0.0, 0.0, 1.0);\n }\n `\n );\n\n const vorticityShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision highp float;\n precision highp sampler2D;\n varying vec2 vUv;\n varying vec2 vL;\n varying vec2 vR;\n varying vec2 vT;\n varying vec2 vB;\n uniform sampler2D uVelocity;\n uniform sampler2D uCurl;\n uniform float curl;\n uniform float dt;\n\n void main () {\n float L = texture2D(uCurl, vL).x;\n float R = texture2D(uCurl, vR).x;\n float T = texture2D(uCurl, vT).x;\n float B = texture2D(uCurl, vB).x;\n float C = texture2D(uCurl, vUv).x;\n\n vec2 force = 0.5 * vec2(abs(T) - abs(B), abs(R) - abs(L));\n force /= length(force) + 0.0001;\n force *= curl * C;\n force.y *= -1.0;\n\n vec2 velocity = texture2D(uVelocity, vUv).xy;\n velocity += force * dt;\n velocity = min(max(velocity, -1000.0), 1000.0);\n gl_FragColor = vec4(velocity, 0.0, 1.0);\n }\n `\n );\n\n const pressureShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n varying highp vec2 vL;\n varying highp vec2 vR;\n varying highp vec2 vT;\n varying highp vec2 vB;\n uniform sampler2D uPressure;\n uniform sampler2D uDivergence;\n\n void main () {\n float L = texture2D(uPressure, vL).x;\n float R = texture2D(uPressure, vR).x;\n float T = texture2D(uPressure, vT).x;\n float B = texture2D(uPressure, vB).x;\n float C = texture2D(uPressure, vUv).x;\n float divergence = texture2D(uDivergence, vUv).x;\n float pressure = (L + R + B + T - divergence) * 0.25;\n gl_FragColor = vec4(pressure, 0.0, 0.0, 1.0);\n }\n `\n );\n\n const gradientSubtractShader = compile(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n varying highp vec2 vL;\n varying highp vec2 vR;\n varying highp vec2 vT;\n varying highp vec2 vB;\n uniform sampler2D uPressure;\n uniform sampler2D uVelocity;\n\n void main () {\n float L = texture2D(uPressure, vL).x;\n float R = texture2D(uPressure, vR).x;\n float T = texture2D(uPressure, vT).x;\n float B = texture2D(uPressure, vB).x;\n vec2 velocity = texture2D(uVelocity, vUv).xy;\n velocity.xy -= vec2(R - L, T - B);\n gl_FragColor = vec4(velocity, 0.0, 1.0);\n }\n `\n );\n\n // Fullscreen blit\n\n gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, -1, 1, 1, 1, 1, -1]), gl.STATIC_DRAW);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, gl.createBuffer());\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([0, 1, 2, 0, 2, 3]), gl.STATIC_DRAW);\n gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(0);\n\n function blit(target: FBO | null, clear = false): void {\n if (target === null) {\n gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n } else {\n gl.viewport(0, 0, target.width, target.height);\n gl.bindFramebuffer(gl.FRAMEBUFFER, target.fbo);\n }\n if (clear) {\n gl.clearColor(0.0, 0.0, 0.0, 1.0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n }\n gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);\n }\n\n // Framebuffers\n\n function createFBO(w: number, h: number, internalFormat: number, format: number, type: number, param: number): FBO {\n gl.activeTexture(gl.TEXTURE0);\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, param);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, param);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, w, h, 0, format, type, null);\n\n const fbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n gl.viewport(0, 0, w, h);\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n return {\n texture,\n fbo,\n width: w,\n height: h,\n texelSizeX: 1 / w,\n texelSizeY: 1 / h,\n attach(id: number): number {\n gl.activeTexture(gl.TEXTURE0 + id);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n return id;\n },\n };\n }\n\n function createDoubleFBO(\n w: number,\n h: number,\n internalFormat: number,\n format: number,\n type: number,\n param: number\n ): DoubleFBO {\n let fbo1 = createFBO(w, h, internalFormat, format, type, param);\n let fbo2 = createFBO(w, h, internalFormat, format, type, param);\n return {\n width: w,\n height: h,\n texelSizeX: fbo1.texelSizeX,\n texelSizeY: fbo1.texelSizeY,\n get read() {\n return fbo1;\n },\n set read(value: FBO) {\n fbo1 = value;\n },\n get write() {\n return fbo2;\n },\n set write(value: FBO) {\n fbo2 = value;\n },\n swap(): void {\n const temp = fbo1;\n fbo1 = fbo2;\n fbo2 = temp;\n },\n };\n }\n\n function resizeFBO(\n target: FBO,\n w: number,\n h: number,\n internalFormat: number,\n format: number,\n type: number,\n param: number\n ): FBO {\n const newFBO = createFBO(w, h, internalFormat, format, type, param);\n copyProgram.bind();\n gl.uniform1i(copyProgram.uniforms['uTexture'], target.attach(0));\n blit(newFBO);\n return newFBO;\n }\n\n function resizeDoubleFBO(\n target: DoubleFBO,\n w: number,\n h: number,\n internalFormat: number,\n format: number,\n type: number,\n param: number\n ): DoubleFBO {\n if (target.width === w && target.height === h) return target;\n target.read = resizeFBO(target.read, w, h, internalFormat, format, type, param);\n target.write = createFBO(w, h, internalFormat, format, type, param);\n target.width = w;\n target.height = h;\n target.texelSizeX = 1 / w;\n target.texelSizeY = 1 / h;\n return target;\n }\n\n // Programs + state\n\n const copyProgram = new ShaderProgram(baseVertexShader, copyShader);\n const clearProgram = new ShaderProgram(baseVertexShader, clearShader);\n const splatProgram = new ShaderProgram(baseVertexShader, splatShader);\n const advectionProgram = new ShaderProgram(baseVertexShader, advectionShader);\n const divergenceProgram = new ShaderProgram(baseVertexShader, divergenceShader);\n const curlProgram = new ShaderProgram(baseVertexShader, curlShader);\n const vorticityProgram = new ShaderProgram(baseVertexShader, vorticityShader);\n const pressureProgram = new ShaderProgram(baseVertexShader, pressureShader);\n const gradientSubtractProgram = new ShaderProgram(baseVertexShader, gradientSubtractShader);\n const displayMaterial = new DisplayMaterial(baseVertexShader, displayShaderSource);\n\n let dye!: DoubleFBO;\n let velocity!: DoubleFBO;\n let divergence!: FBO;\n let curl!: FBO;\n let pressure!: DoubleFBO;\n\n function initFramebuffers(): void {\n const simRes = getResolution(config.simResolution);\n const dyeRes = getResolution(dyeResolution);\n const texType = ext.halfFloatTexType;\n const rgba = ext.formatRGBA;\n const rg = ext.formatRG;\n const r = ext.formatR;\n const filtering = ext.supportLinearFiltering ? gl.LINEAR : gl.NEAREST;\n gl.disable(gl.BLEND);\n\n dye = dye\n ? resizeDoubleFBO(dye, dyeRes.width, dyeRes.height, rgba.internalFormat, rgba.format, texType, filtering)\n : createDoubleFBO(dyeRes.width, dyeRes.height, rgba.internalFormat, rgba.format, texType, filtering);\n\n velocity = velocity\n ? resizeDoubleFBO(velocity, simRes.width, simRes.height, rg.internalFormat, rg.format, texType, filtering)\n : createDoubleFBO(simRes.width, simRes.height, rg.internalFormat, rg.format, texType, filtering);\n\n divergence = createFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST);\n curl = createFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST);\n pressure = createDoubleFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST);\n }\n\n displayMaterial.setKeywords(shading ? ['SHADING'] : []);\n initFramebuffers();\n let lastUpdateTime = Date.now();\n let colorUpdateTimer = 0;\n\n // Frame loop\n\n function updateFrame(): void {\n if (!active) return;\n const dt = calcDeltaTime();\n if (resizeCanvas()) initFramebuffers();\n updateColors(dt);\n applyInputs();\n step(dt);\n render();\n rafId = requestAnimationFrame(updateFrame);\n }\n\n function calcDeltaTime(): number {\n const now = Date.now();\n const dt = Math.min((now - lastUpdateTime) / 1000, 0.016666);\n lastUpdateTime = now;\n return dt;\n }\n\n function resizeCanvas(): boolean {\n const width = scaleByPixelRatio(canvas.clientWidth);\n const height = scaleByPixelRatio(canvas.clientHeight);\n if (canvas.width !== width || canvas.height !== height) {\n canvas.width = width;\n canvas.height = height;\n return true;\n }\n return false;\n }\n\n function updateColors(dt: number): void {\n colorUpdateTimer += dt * config.colorUpdateSpeed;\n if (colorUpdateTimer >= 1) {\n colorUpdateTimer = wrap(colorUpdateTimer, 0, 1);\n pointer.color = generateColor();\n }\n }\n\n function applyInputs(): void {\n if (pointer.moved) {\n pointer.moved = false;\n splatPointer();\n }\n }\n\n function step(dt: number): void {\n gl.disable(gl.BLEND);\n curlProgram.bind();\n gl.uniform2f(curlProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n gl.uniform1i(curlProgram.uniforms['uVelocity'], velocity.read.attach(0));\n blit(curl);\n\n vorticityProgram.bind();\n gl.uniform2f(vorticityProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n gl.uniform1i(vorticityProgram.uniforms['uVelocity'], velocity.read.attach(0));\n gl.uniform1i(vorticityProgram.uniforms['uCurl'], curl.attach(1));\n gl.uniform1f(vorticityProgram.uniforms['curl'], config.curl);\n gl.uniform1f(vorticityProgram.uniforms['dt'], dt);\n blit(velocity.write);\n velocity.swap();\n\n divergenceProgram.bind();\n gl.uniform2f(divergenceProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n gl.uniform1i(divergenceProgram.uniforms['uVelocity'], velocity.read.attach(0));\n blit(divergence);\n\n clearProgram.bind();\n gl.uniform1i(clearProgram.uniforms['uTexture'], pressure.read.attach(0));\n gl.uniform1f(clearProgram.uniforms['value'], config.pressure);\n blit(pressure.write);\n pressure.swap();\n\n pressureProgram.bind();\n gl.uniform2f(pressureProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n gl.uniform1i(pressureProgram.uniforms['uDivergence'], divergence.attach(0));\n for (let i = 0; i < config.pressureIterations; i++) {\n gl.uniform1i(pressureProgram.uniforms['uPressure'], pressure.read.attach(1));\n blit(pressure.write);\n pressure.swap();\n }\n\n gradientSubtractProgram.bind();\n gl.uniform2f(gradientSubtractProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n gl.uniform1i(gradientSubtractProgram.uniforms['uPressure'], pressure.read.attach(0));\n gl.uniform1i(gradientSubtractProgram.uniforms['uVelocity'], velocity.read.attach(1));\n blit(velocity.write);\n velocity.swap();\n\n advectionProgram.bind();\n gl.uniform2f(advectionProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n if (!ext.supportLinearFiltering) {\n gl.uniform2f(advectionProgram.uniforms['dyeTexelSize'], velocity.texelSizeX, velocity.texelSizeY);\n }\n const velocityId = velocity.read.attach(0);\n gl.uniform1i(advectionProgram.uniforms['uVelocity'], velocityId);\n gl.uniform1i(advectionProgram.uniforms['uSource'], velocityId);\n gl.uniform1f(advectionProgram.uniforms['dt'], dt);\n gl.uniform1f(advectionProgram.uniforms['dissipation'], config.velocityDissipation);\n blit(velocity.write);\n velocity.swap();\n\n if (!ext.supportLinearFiltering) {\n gl.uniform2f(advectionProgram.uniforms['dyeTexelSize'], dye.texelSizeX, dye.texelSizeY);\n }\n gl.uniform1i(advectionProgram.uniforms['uVelocity'], velocity.read.attach(0));\n gl.uniform1i(advectionProgram.uniforms['uSource'], dye.read.attach(1));\n gl.uniform1f(advectionProgram.uniforms['dissipation'], config.densityDissipation);\n blit(dye.write);\n dye.swap();\n }\n\n function render(): void {\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n gl.enable(gl.BLEND);\n displayMaterial.bind();\n if (shading) {\n gl.uniform2f(displayMaterial.uniforms['texelSize'], 1 / gl.drawingBufferWidth, 1 / gl.drawingBufferHeight);\n }\n gl.uniform1i(displayMaterial.uniforms['uTexture'], dye.read.attach(0));\n blit(null);\n }\n\n // Splats\n\n function splatPointer(): void {\n const dx = pointer.deltaX * config.splatForce;\n const dy = pointer.deltaY * config.splatForce;\n splat(pointer.texcoordX, pointer.texcoordY, dx, dy, pointer.color);\n }\n\n function clickSplat(): void {\n const color = generateColor();\n color.r *= 10;\n color.g *= 10;\n color.b *= 10;\n const dx = 10 * (Math.random() - 0.5);\n const dy = 30 * (Math.random() - 0.5);\n splat(pointer.texcoordX, pointer.texcoordY, dx, dy, color);\n }\n\n function splat(x: number, y: number, dx: number, dy: number, color: RGB): void {\n splatProgram.bind();\n gl.uniform1i(splatProgram.uniforms['uTarget'], velocity.read.attach(0));\n gl.uniform1f(splatProgram.uniforms['aspectRatio'], canvas.width / canvas.height);\n gl.uniform2f(splatProgram.uniforms['point'], x, y);\n gl.uniform3f(splatProgram.uniforms['color'], dx, dy, 0);\n gl.uniform1f(splatProgram.uniforms['radius'], correctRadius(config.splatRadius / 100));\n blit(velocity.write);\n velocity.swap();\n\n gl.uniform1i(splatProgram.uniforms['uTarget'], dye.read.attach(0));\n gl.uniform3f(splatProgram.uniforms['color'], color.r, color.g, color.b);\n blit(dye.write);\n dye.swap();\n }\n\n function correctRadius(radius: number): number {\n const aspectRatio = canvas.width / canvas.height;\n return aspectRatio > 1 ? radius * aspectRatio : radius;\n }\n\n // Pointer\n\n function pointerDown(posX: number, posY: number): void {\n pointer.moved = false;\n pointer.texcoordX = posX / canvas.width;\n pointer.texcoordY = 1 - posY / canvas.height;\n pointer.prevTexcoordX = pointer.texcoordX;\n pointer.prevTexcoordY = pointer.texcoordY;\n pointer.deltaX = 0;\n pointer.deltaY = 0;\n pointer.color = generateColor();\n }\n\n function pointerMove(posX: number, posY: number, color: RGB): void {\n pointer.prevTexcoordX = pointer.texcoordX;\n pointer.prevTexcoordY = pointer.texcoordY;\n pointer.texcoordX = posX / canvas.width;\n pointer.texcoordY = 1 - posY / canvas.height;\n pointer.deltaX = correctDeltaX(pointer.texcoordX - pointer.prevTexcoordX);\n pointer.deltaY = correctDeltaY(pointer.texcoordY - pointer.prevTexcoordY);\n pointer.moved = Math.abs(pointer.deltaX) > 0 || Math.abs(pointer.deltaY) > 0;\n pointer.color = color;\n }\n\n function correctDeltaX(delta: number): number {\n const aspectRatio = canvas.width / canvas.height;\n return aspectRatio < 1 ? delta * aspectRatio : delta;\n }\n\n function correctDeltaY(delta: number): number {\n const aspectRatio = canvas.width / canvas.height;\n return aspectRatio > 1 ? delta / aspectRatio : delta;\n }\n\n // Colours\n\n function hexToRGB(hex: string): RGB {\n let val = hex.replace('#', '');\n if (val.length === 3) val = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\n return {\n r: (Number.parseInt(val.slice(0, 2), 16) / 255) * 0.15,\n g: (Number.parseInt(val.slice(2, 4), 16) / 255) * 0.15,\n b: (Number.parseInt(val.slice(4, 6), 16) / 255) * 0.15,\n };\n }\n\n function generateColor(): RGB {\n if (!config.rainbow) return hexToRGB(config.color);\n const c = hsvToRgb(Math.random(), 1, 1);\n c.r *= 0.15;\n c.g *= 0.15;\n c.b *= 0.15;\n return c;\n }\n\n function hsvToRgb(h: number, s: number, v: number): RGB {\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0:\n return { r: v, g: t, b: p };\n case 1:\n return { r: q, g: v, b: p };\n case 2:\n return { r: p, g: v, b: t };\n case 3:\n return { r: p, g: q, b: v };\n case 4:\n return { r: t, g: p, b: v };\n default:\n return { r: v, g: p, b: q };\n }\n }\n\n function wrap(value: number, min: number, max: number): number {\n const range = max - min;\n if (range === 0) return min;\n return ((value - min) % range) + min;\n }\n\n function getResolution(resolution: number): { width: number; height: number } {\n let aspectRatio = gl.drawingBufferWidth / gl.drawingBufferHeight;\n if (aspectRatio < 1) aspectRatio = 1 / aspectRatio;\n const min = Math.round(resolution);\n const max = Math.round(resolution * aspectRatio);\n return gl.drawingBufferWidth > gl.drawingBufferHeight ? { width: max, height: min } : { width: min, height: max };\n }\n\n function scaleByPixelRatio(input: number): number {\n return Math.floor(input * (window.devicePixelRatio || 1));\n }\n\n function hashCode(s: string): number {\n let hash = 0;\n for (let i = 0; i < s.length; i++) {\n hash = (hash << 5) - hash + s.charCodeAt(i);\n hash |= 0;\n }\n return hash;\n }\n\n // Events + boot\n\n let firstMoveHandled = false;\n\n // Coordinates are taken relative to the canvas box: identical to the\n // raw client position for the fullscreen overlay, and it makes a\n // contained canvas track the pointer correctly too.\n const toLocal = (clientX: number, clientY: number): { x: number; y: number } => {\n const rect = canvas.getBoundingClientRect();\n return { x: scaleByPixelRatio(clientX - rect.left), y: scaleByPixelRatio(clientY - rect.top) };\n };\n\n const onMouseDown = (e: MouseEvent): void => {\n const pos = toLocal(e.clientX, e.clientY);\n pointerDown(pos.x, pos.y);\n clickSplat();\n };\n\n const onMouseMove = (e: MouseEvent): void => {\n const pos = toLocal(e.clientX, e.clientY);\n const color = firstMoveHandled ? pointer.color : generateColor();\n firstMoveHandled = true;\n pointerMove(pos.x, pos.y, color);\n };\n\n const onTouchStart = (e: TouchEvent): void => {\n const t = e.targetTouches[0];\n if (!t) return;\n const pos = toLocal(t.clientX, t.clientY);\n pointerDown(pos.x, pos.y);\n };\n\n const onTouchMove = (e: TouchEvent): void => {\n const t = e.targetTouches[0];\n if (!t) return;\n const pos = toLocal(t.clientX, t.clientY);\n pointerMove(pos.x, pos.y, pointer.color);\n };\n\n window.addEventListener('mousedown', onMouseDown);\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('touchstart', onTouchStart, { passive: true });\n window.addEventListener('touchmove', onTouchMove, { passive: true });\n\n updateFrame();\n\n return () => {\n active = false;\n cancelAnimationFrame(rafId);\n window.removeEventListener('mousedown', onMouseDown);\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('touchstart', onTouchStart);\n window.removeEventListener('touchmove', onTouchMove);\n // The context is NOT lost here on purpose — input changes reboot the\n // sim on the same canvas, and a lost context can't be re-acquired.\n };\n}\n\n// WebGL context bootstrap\n\nfunction getWebGLContext(canvas: HTMLCanvasElement): { gl: GL; ext: GlExt } | null {\n const params: WebGLContextAttributes = {\n alpha: true,\n depth: false,\n stencil: false,\n antialias: false,\n preserveDrawingBuffer: false,\n };\n\n const gl2 = canvas.getContext('webgl2', params);\n const gl = gl2 ?? canvas.getContext('webgl', params);\n if (!gl) return null;\n const isWebGL2 = !!gl2;\n\n let halfFloat: OES_texture_half_float | null = null;\n let supportLinearFiltering: boolean;\n if (isWebGL2) {\n gl.getExtension('EXT_color_buffer_float');\n supportLinearFiltering = !!gl.getExtension('OES_texture_float_linear');\n } else {\n halfFloat = gl.getExtension('OES_texture_half_float');\n supportLinearFiltering = !!gl.getExtension('OES_texture_half_float_linear');\n }\n gl.clearColor(0, 0, 0, 1);\n\n const halfFloatTexType = isWebGL2\n ? (gl as WebGL2RenderingContext).HALF_FLOAT\n : (halfFloat?.HALF_FLOAT_OES ?? gl.UNSIGNED_BYTE);\n\n let formatRGBA: TexFormat | null;\n let formatRG: TexFormat | null;\n let formatR: TexFormat | null;\n if (isWebGL2) {\n const g2 = gl as WebGL2RenderingContext;\n formatRGBA = getSupportedFormat(g2, g2.RGBA16F, g2.RGBA, halfFloatTexType);\n formatRG = getSupportedFormat(g2, g2.RG16F, g2.RG, halfFloatTexType);\n formatR = getSupportedFormat(g2, g2.R16F, g2.RED, halfFloatTexType);\n } else {\n formatRGBA = getSupportedFormat(gl, gl.RGBA, gl.RGBA, halfFloatTexType);\n formatRG = formatRGBA;\n formatR = formatRGBA;\n }\n if (!formatRGBA || !formatRG || !formatR) return null;\n\n return { gl, ext: { formatRGBA, formatRG, formatR, halfFloatTexType, supportLinearFiltering } };\n}\n\nfunction getSupportedFormat(gl: GL, internalFormat: number, format: number, type: number): TexFormat | null {\n if (!supportRenderTextureFormat(gl, internalFormat, format, type)) {\n const g2 = gl as WebGL2RenderingContext;\n switch (internalFormat) {\n case g2.R16F:\n return getSupportedFormat(gl, g2.RG16F, g2.RG, type);\n case g2.RG16F:\n return getSupportedFormat(gl, g2.RGBA16F, g2.RGBA, type);\n default:\n return null;\n }\n }\n return { internalFormat, format };\n}\n\nfunction supportRenderTextureFormat(gl: GL, internalFormat: number, format: number, type: number): boolean {\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, 4, 4, 0, format, type, null);\n const fbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n return gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE;\n}\n\nexport { createFluidSimulation };\nexport type { WrFluidConfig };\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n *\n * Angular adaptation of the SplashCursor effect by David Haz / reactbits.dev.\n * Original: https://www.reactbits.dev/animations/splash-cursor\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { isPlatformBrowser } from '@angular/common';\nimport type { ElementRef } from '@angular/core';\nimport { Component, NgZone, PLATFORM_ID, ViewEncapsulation, effect, inject, input, viewChild } from '@angular/core';\n\nimport { WrPlatform } from 'ngwr/platform';\nimport { numAttr } from 'ngwr/utils';\n\nimport { createFluidSimulation } from './fluid';\n\n/**\n * Splash cursor — a WebGL fluid simulation that splashes colourful dye\n * wherever the pointer moves or clicks. Renders as a fixed, full-viewport,\n * click-through overlay; mount it once on a page (it follows the pointer\n * everywhere) and it tears down with the component.\n *\n * Renders nothing under `prefers-reduced-motion` or when WebGL is\n * unavailable.\n *\n * @example\n * ```html\n * <wr-splash-cursor />\n * <wr-splash-cursor [rainbow]=\"false\" color=\"#5227ff\" />\n * ```\n *\n * @see https://ngwr.dev/animations/splash-cursor\n */\n@Component({\n selector: 'wr-splash-cursor',\n template: '<canvas #canvas class=\"wr-splash-cursor__canvas\"></canvas>',\n styleUrl: './splash-cursor.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'wr-splash-cursor',\n '[class.wr-splash-cursor--contained]': '!fullscreen()',\n },\n})\nexport class WrSplashCursor {\n /**\n * `true` overlays the whole viewport (reactbits behaviour); `false`\n * fills the nearest positioned ancestor instead — handy for demo boxes,\n * and the dye collides with the box walls. @default true\n */\n readonly fullscreen = input(true, { transform: coerceBooleanProperty });\n\n /** Velocity / pressure grid resolution. @default 128 */\n readonly simResolution = input(128, { transform: numAttr(128) });\n\n /** Dye texture resolution — the visible detail. @default 1440 */\n readonly dyeResolution = input(1440, { transform: numAttr(1440) });\n\n /** How fast the dye fades, higher = shorter trails. @default 3.5 */\n readonly densityDissipation = input(3.5, { transform: numAttr(3.5) });\n\n /** How fast motion settles. @default 2 */\n readonly velocityDissipation = input(2, { transform: numAttr(2) });\n\n /** Pressure retained between frames, 0..1. @default 0.1 */\n readonly pressure = input(0.1, { transform: numAttr(0.1) });\n\n /** Jacobi iterations for the pressure solve. @default 20 */\n readonly pressureIterations = input(20, { transform: numAttr(20) });\n\n /** Vorticity confinement — swirliness. @default 3 */\n readonly curl = input(3, { transform: numAttr(3) });\n\n /** Splat size. @default 0.2 */\n readonly splatRadius = input(0.2, { transform: numAttr(0.2) });\n\n /** Velocity a pointer move injects. @default 6000 */\n readonly splatForce = input(6000, { transform: numAttr(6000) });\n\n /** Pseudo-3D shading on the dye. @default true */\n readonly shading = input(true, { transform: coerceBooleanProperty });\n\n /** How fast the splat colour cycles. @default 10 */\n readonly colorUpdateSpeed = input(10, { transform: numAttr(10) });\n\n /** Cycle splat colours through the rainbow. @default true */\n readonly rainbow = input(true, { transform: coerceBooleanProperty });\n\n /** Fixed splat colour when `rainbow` is off. @default '#ff0000' */\n readonly color = input('#ff0000');\n\n private readonly canvasRef = viewChild<ElementRef<HTMLCanvasElement>>('canvas');\n\n private readonly zone = inject(NgZone);\n private readonly platform = inject(WrPlatform);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n constructor() {\n if (!this.isBrowser) return;\n\n // (Re)boot whenever the canvas appears, any input changes, or the OS\n // reduced-motion preference flips. `onCleanup` tears the old sim down.\n effect(onCleanup => {\n const canvas = this.canvasRef()?.nativeElement;\n const config = {\n simResolution: this.simResolution(),\n dyeResolution: this.dyeResolution(),\n densityDissipation: this.densityDissipation(),\n velocityDissipation: this.velocityDissipation(),\n pressure: this.pressure(),\n pressureIterations: this.pressureIterations(),\n curl: this.curl(),\n splatRadius: this.splatRadius(),\n splatForce: this.splatForce(),\n shading: this.shading(),\n colorUpdateSpeed: this.colorUpdateSpeed(),\n rainbow: this.rainbow(),\n color: this.color(),\n };\n if (!canvas || this.platform.prefersReducedMotion()) return;\n const teardown = this.zone.runOutsideAngular(() => createFluidSimulation(canvas, config));\n if (teardown) onCleanup(teardown);\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -184,10 +184,10 @@ class WrSplitText {
184
184
  };
185
185
  });
186
186
  }
187
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: WrSplitText, deps: [], target: i0.ɵɵFactoryTarget.Component });
188
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: WrSplitText, isStandalone: true, selector: "wr-split-text", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, splitType: { classPropertyName: "splitType", publicName: "splitType", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, duration: { classPropertyName: "duration", publicName: "duration", isSignal: true, isRequired: false, transformFunction: null }, easing: { classPropertyName: "easing", publicName: "easing", isSignal: true, isRequired: false, transformFunction: null }, from: { classPropertyName: "from", publicName: "from", isSignal: true, isRequired: false, transformFunction: null }, to: { classPropertyName: "to", publicName: "to", isSignal: true, isRequired: false, transformFunction: null }, threshold: { classPropertyName: "threshold", publicName: "threshold", isSignal: true, isRequired: false, transformFunction: null }, rootMargin: { classPropertyName: "rootMargin", publicName: "rootMargin", isSignal: true, isRequired: false, transformFunction: null }, textAlign: { classPropertyName: "textAlign", publicName: "textAlign", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { animationComplete: "animationComplete" }, host: { properties: { "style.text-align": "textAlign()" }, classAttribute: "wr-split-text" }, ngImport: i0, template: "@for (p of pieces(); track $index) {\n @if (p.kind === 'piece') {\n <span class=\"wr-split-text__piece\">{{ p.text }}</span>\n } @else {\n <span class=\"wr-split-text__space\">{{ p.text }}</span>\n }\n}\n", styles: [".wr-split-text{display:inline-block;overflow:hidden;padding-bottom:.15em;margin-bottom:-.15em;white-space:normal;overflow-wrap:break-word;will-change:transform,opacity}.wr-split-text__piece{display:inline-block;will-change:transform,opacity}.wr-split-text__space{display:inline;white-space:pre}\n"], encapsulation: i0.ViewEncapsulation.None });
187
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: WrSplitText, deps: [], target: i0.ɵɵFactoryTarget.Component });
188
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: WrSplitText, isStandalone: true, selector: "wr-split-text", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, splitType: { classPropertyName: "splitType", publicName: "splitType", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, duration: { classPropertyName: "duration", publicName: "duration", isSignal: true, isRequired: false, transformFunction: null }, easing: { classPropertyName: "easing", publicName: "easing", isSignal: true, isRequired: false, transformFunction: null }, from: { classPropertyName: "from", publicName: "from", isSignal: true, isRequired: false, transformFunction: null }, to: { classPropertyName: "to", publicName: "to", isSignal: true, isRequired: false, transformFunction: null }, threshold: { classPropertyName: "threshold", publicName: "threshold", isSignal: true, isRequired: false, transformFunction: null }, rootMargin: { classPropertyName: "rootMargin", publicName: "rootMargin", isSignal: true, isRequired: false, transformFunction: null }, textAlign: { classPropertyName: "textAlign", publicName: "textAlign", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { animationComplete: "animationComplete" }, host: { properties: { "style.text-align": "textAlign()" }, classAttribute: "wr-split-text" }, ngImport: i0, template: "@for (p of pieces(); track $index) {\n @if (p.kind === 'piece') {\n <span class=\"wr-split-text__piece\">{{ p.text }}</span>\n } @else {\n <span class=\"wr-split-text__space\">{{ p.text }}</span>\n }\n}\n", styles: [".wr-split-text{display:inline-block;overflow:hidden;padding-bottom:.15em;margin-bottom:-.15em;white-space:normal;overflow-wrap:break-word;will-change:transform,opacity}.wr-split-text__piece{display:inline-block;will-change:transform,opacity}.wr-split-text__space{display:inline;white-space:pre}\n"], encapsulation: i0.ViewEncapsulation.None });
189
189
  }
190
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: WrSplitText, decorators: [{
190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: WrSplitText, decorators: [{
191
191
  type: Component,
192
192
  args: [{ selector: 'wr-split-text', encapsulation: ViewEncapsulation.None, host: { class: 'wr-split-text', '[style.text-align]': 'textAlign()' }, template: "@for (p of pieces(); track $index) {\n @if (p.kind === 'piece') {\n <span class=\"wr-split-text__piece\">{{ p.text }}</span>\n } @else {\n <span class=\"wr-split-text__space\">{{ p.text }}</span>\n }\n}\n", styles: [".wr-split-text{display:inline-block;overflow:hidden;padding-bottom:.15em;margin-bottom:-.15em;white-space:normal;overflow-wrap:break-word;will-change:transform,opacity}.wr-split-text__piece{display:inline-block;will-change:transform,opacity}.wr-split-text__space{display:inline;white-space:pre}\n"] }]
193
193
  }], ctorParameters: () => [], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }], splitType: [{ type: i0.Input, args: [{ isSignal: true, alias: "splitType", required: false }] }], delay: [{ type: i0.Input, args: [{ isSignal: true, alias: "delay", required: false }] }], duration: [{ type: i0.Input, args: [{ isSignal: true, alias: "duration", required: false }] }], easing: [{ type: i0.Input, args: [{ isSignal: true, alias: "easing", required: false }] }], from: [{ type: i0.Input, args: [{ isSignal: true, alias: "from", required: false }] }], to: [{ type: i0.Input, args: [{ isSignal: true, alias: "to", required: false }] }], threshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "threshold", required: false }] }], rootMargin: [{ type: i0.Input, args: [{ isSignal: true, alias: "rootMargin", required: false }] }], textAlign: [{ type: i0.Input, args: [{ isSignal: true, alias: "textAlign", required: false }] }], animationComplete: [{ type: i0.Output, args: ["animationComplete"] }] } });