ngwr 6.1.1 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (609) hide show
  1. package/LICENSE +1 -3
  2. package/README.md +179 -32
  3. package/affix/styles/_index.scss +12 -0
  4. package/alert/styles/_index.scss +75 -32
  5. package/anchor/styles/_index.scss +59 -0
  6. package/aurora/aurora.scss +1 -0
  7. package/aurora/styles/_index.scss +30 -0
  8. package/avatar/styles/_index.scss +30 -14
  9. package/back-top/styles/_index.scss +42 -0
  10. package/badge/styles/_index.scss +80 -0
  11. package/badge/styles/_tag.scss +81 -0
  12. package/bar-chart/styles/_index.scss +56 -0
  13. package/blur-text/blur-text.scss +1 -0
  14. package/blur-text/styles/_index.scss +14 -0
  15. package/border-glow/border-glow.scss +4 -0
  16. package/border-glow/styles/_index.scss +228 -0
  17. package/breadcrumbs/breadcrumbs.scss +1 -0
  18. package/breadcrumbs/styles/_index.scss +76 -0
  19. package/burger/styles/_index.scss +101 -0
  20. package/button/styles/_index.scss +148 -125
  21. package/calendar/styles/_index.scss +252 -0
  22. package/calendar-heatmap/styles/_index.scss +69 -0
  23. package/card/card.scss +1 -0
  24. package/card/styles/_index.scss +96 -0
  25. package/carousel/styles/_index.scss +102 -0
  26. package/cascader/cascader.scss +1 -0
  27. package/cascader/styles/_index.scss +174 -0
  28. package/checkbox/styles/_index.scss +76 -60
  29. package/circular-text/circular-text.scss +1 -0
  30. package/circular-text/styles/_index.scss +45 -0
  31. package/click-spark/click-spark.scss +1 -0
  32. package/click-spark/styles/_index.scss +16 -0
  33. package/collapse/styles/_index.scss +92 -0
  34. package/color-picker/styles/_index.scss +247 -0
  35. package/command-palette/styles/_index.scss +188 -0
  36. package/compare/styles/_index.scss +100 -0
  37. package/context-menu/styles/_index.scss +112 -0
  38. package/counter/styles/_index.scss +44 -0
  39. package/date-picker/styles/_index.scss +204 -0
  40. package/decrypt-text/decrypt-text.scss +1 -0
  41. package/decrypt-text/styles/_index.scss +26 -0
  42. package/density/styles/_index.scss +37 -0
  43. package/descriptions/styles/_index.scss +104 -0
  44. package/dialog/styles/_index.scss +101 -27
  45. package/divider/styles/_index.scss +43 -24
  46. package/donut-chart/styles/_index.scss +76 -0
  47. package/drag-drop/sortable-list.scss +1 -0
  48. package/drag-drop/styles/_index.scss +99 -0
  49. package/drawer/styles/_index.scss +164 -0
  50. package/dropdown/styles/_index.scss +76 -56
  51. package/empty/styles/_index.scss +49 -0
  52. package/falling-text/falling-text.scss +1 -0
  53. package/falling-text/styles/_index.scss +30 -0
  54. package/fesm2022/ngwr-affix.mjs +102 -0
  55. package/fesm2022/ngwr-affix.mjs.map +1 -0
  56. package/fesm2022/ngwr-alert.mjs +70 -52
  57. package/fesm2022/ngwr-alert.mjs.map +1 -1
  58. package/fesm2022/ngwr-anchor.mjs +103 -0
  59. package/fesm2022/ngwr-anchor.mjs.map +1 -0
  60. package/fesm2022/ngwr-aurora.mjs +309 -0
  61. package/fesm2022/ngwr-aurora.mjs.map +1 -0
  62. package/fesm2022/ngwr-avatar.mjs +81 -71
  63. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  64. package/fesm2022/ngwr-back-top.mjs +81 -0
  65. package/fesm2022/ngwr-back-top.mjs.map +1 -0
  66. package/fesm2022/ngwr-badge.mjs +192 -0
  67. package/fesm2022/ngwr-badge.mjs.map +1 -0
  68. package/fesm2022/ngwr-bar-chart.mjs +69 -0
  69. package/fesm2022/ngwr-bar-chart.mjs.map +1 -0
  70. package/fesm2022/ngwr-blur-text.mjs +181 -0
  71. package/fesm2022/ngwr-blur-text.mjs.map +1 -0
  72. package/fesm2022/ngwr-border-glow.mjs +278 -0
  73. package/fesm2022/ngwr-border-glow.mjs.map +1 -0
  74. package/fesm2022/ngwr-breadcrumbs.mjs +101 -0
  75. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -0
  76. package/fesm2022/ngwr-burger.mjs +60 -0
  77. package/fesm2022/ngwr-burger.mjs.map +1 -0
  78. package/fesm2022/ngwr-button.mjs +179 -104
  79. package/fesm2022/ngwr-button.mjs.map +1 -1
  80. package/fesm2022/ngwr-calendar-heatmap.mjs +145 -0
  81. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -0
  82. package/fesm2022/ngwr-calendar.mjs +402 -0
  83. package/fesm2022/ngwr-calendar.mjs.map +1 -0
  84. package/fesm2022/ngwr-card.mjs +100 -0
  85. package/fesm2022/ngwr-card.mjs.map +1 -0
  86. package/fesm2022/ngwr-carousel.mjs +128 -0
  87. package/fesm2022/ngwr-carousel.mjs.map +1 -0
  88. package/fesm2022/ngwr-cascader.mjs +280 -0
  89. package/fesm2022/ngwr-cascader.mjs.map +1 -0
  90. package/fesm2022/ngwr-checkbox.mjs +214 -54
  91. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  92. package/fesm2022/ngwr-circular-text.mjs +168 -0
  93. package/fesm2022/ngwr-circular-text.mjs.map +1 -0
  94. package/fesm2022/ngwr-click-spark.mjs +163 -0
  95. package/fesm2022/ngwr-click-spark.mjs.map +1 -0
  96. package/fesm2022/ngwr-clipboard.mjs +130 -0
  97. package/fesm2022/ngwr-clipboard.mjs.map +1 -0
  98. package/fesm2022/ngwr-collapse.mjs +232 -0
  99. package/fesm2022/ngwr-collapse.mjs.map +1 -0
  100. package/fesm2022/ngwr-color-picker.mjs +646 -0
  101. package/fesm2022/ngwr-color-picker.mjs.map +1 -0
  102. package/fesm2022/ngwr-command-palette.mjs +259 -0
  103. package/fesm2022/ngwr-command-palette.mjs.map +1 -0
  104. package/fesm2022/ngwr-compare.mjs +137 -0
  105. package/fesm2022/ngwr-compare.mjs.map +1 -0
  106. package/fesm2022/ngwr-confetti.mjs +160 -0
  107. package/fesm2022/ngwr-confetti.mjs.map +1 -0
  108. package/fesm2022/ngwr-context-menu.mjs +653 -0
  109. package/fesm2022/ngwr-context-menu.mjs.map +1 -0
  110. package/fesm2022/ngwr-cookie.mjs +127 -0
  111. package/fesm2022/ngwr-cookie.mjs.map +1 -0
  112. package/fesm2022/ngwr-counter.mjs +415 -0
  113. package/fesm2022/ngwr-counter.mjs.map +1 -0
  114. package/fesm2022/ngwr-date-adapter-fns.mjs +180 -0
  115. package/fesm2022/ngwr-date-adapter-fns.mjs.map +1 -0
  116. package/fesm2022/ngwr-date-adapter-luxon.mjs +201 -0
  117. package/fesm2022/ngwr-date-adapter-luxon.mjs.map +1 -0
  118. package/fesm2022/ngwr-date-adapter.mjs +419 -0
  119. package/fesm2022/ngwr-date-adapter.mjs.map +1 -0
  120. package/fesm2022/ngwr-date-picker.mjs +624 -0
  121. package/fesm2022/ngwr-date-picker.mjs.map +1 -0
  122. package/fesm2022/ngwr-decrypt-text.mjs +396 -0
  123. package/fesm2022/ngwr-decrypt-text.mjs.map +1 -0
  124. package/fesm2022/ngwr-density.mjs +157 -0
  125. package/fesm2022/ngwr-density.mjs.map +1 -0
  126. package/fesm2022/ngwr-descriptions.mjs +83 -0
  127. package/fesm2022/ngwr-descriptions.mjs.map +1 -0
  128. package/fesm2022/ngwr-dialog.mjs +249 -377
  129. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  130. package/fesm2022/ngwr-directives.mjs +315 -0
  131. package/fesm2022/ngwr-directives.mjs.map +1 -0
  132. package/fesm2022/ngwr-divider.mjs +74 -59
  133. package/fesm2022/ngwr-divider.mjs.map +1 -1
  134. package/fesm2022/ngwr-donut-chart.mjs +131 -0
  135. package/fesm2022/ngwr-donut-chart.mjs.map +1 -0
  136. package/fesm2022/ngwr-drag-drop.mjs +117 -0
  137. package/fesm2022/ngwr-drag-drop.mjs.map +1 -0
  138. package/fesm2022/ngwr-drawer.mjs +315 -0
  139. package/fesm2022/ngwr-drawer.mjs.map +1 -0
  140. package/fesm2022/ngwr-dropdown.mjs +276 -229
  141. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  142. package/fesm2022/ngwr-empty.mjs +57 -0
  143. package/fesm2022/ngwr-empty.mjs.map +1 -0
  144. package/fesm2022/ngwr-falling-text.mjs +316 -0
  145. package/fesm2022/ngwr-falling-text.mjs.map +1 -0
  146. package/fesm2022/ngwr-file-upload.mjs +260 -0
  147. package/fesm2022/ngwr-file-upload.mjs.map +1 -0
  148. package/fesm2022/ngwr-form.mjs +133 -48
  149. package/fesm2022/ngwr-form.mjs.map +1 -1
  150. package/fesm2022/ngwr-fuzzy-text.mjs +373 -0
  151. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -0
  152. package/fesm2022/ngwr-gauge.mjs +83 -0
  153. package/fesm2022/ngwr-gauge.mjs.map +1 -0
  154. package/fesm2022/ngwr-glitch-text.mjs +67 -0
  155. package/fesm2022/ngwr-glitch-text.mjs.map +1 -0
  156. package/fesm2022/ngwr-gradient-text.mjs +109 -0
  157. package/fesm2022/ngwr-gradient-text.mjs.map +1 -0
  158. package/fesm2022/ngwr-hotkey.mjs +263 -0
  159. package/fesm2022/ngwr-hotkey.mjs.map +1 -0
  160. package/fesm2022/ngwr-i18n-en.mjs +168 -0
  161. package/fesm2022/ngwr-i18n-en.mjs.map +1 -0
  162. package/fesm2022/ngwr-i18n-ru.mjs +156 -0
  163. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -0
  164. package/fesm2022/ngwr-i18n.mjs +478 -0
  165. package/fesm2022/ngwr-i18n.mjs.map +1 -0
  166. package/fesm2022/ngwr-icon-adapters-feather.mjs +74 -0
  167. package/fesm2022/ngwr-icon-adapters-feather.mjs.map +1 -0
  168. package/fesm2022/ngwr-icon-adapters-lucide.mjs +88 -0
  169. package/fesm2022/ngwr-icon-adapters-lucide.mjs.map +1 -0
  170. package/fesm2022/ngwr-icon.mjs +189 -649
  171. package/fesm2022/ngwr-icon.mjs.map +1 -1
  172. package/fesm2022/ngwr-image-cropper.mjs +299 -0
  173. package/fesm2022/ngwr-image-cropper.mjs.map +1 -0
  174. package/fesm2022/ngwr-input-number.mjs +239 -0
  175. package/fesm2022/ngwr-input-number.mjs.map +1 -0
  176. package/fesm2022/ngwr-input-otp.mjs +216 -0
  177. package/fesm2022/ngwr-input-otp.mjs.map +1 -0
  178. package/fesm2022/ngwr-input.mjs +183 -104
  179. package/fesm2022/ngwr-input.mjs.map +1 -1
  180. package/fesm2022/ngwr-keyboard.mjs +47 -0
  181. package/fesm2022/ngwr-keyboard.mjs.map +1 -0
  182. package/fesm2022/ngwr-knob.mjs +227 -0
  183. package/fesm2022/ngwr-knob.mjs.map +1 -0
  184. package/fesm2022/ngwr-layout.mjs +197 -0
  185. package/fesm2022/ngwr-layout.mjs.map +1 -0
  186. package/fesm2022/ngwr-lightbox.mjs +131 -0
  187. package/fesm2022/ngwr-lightbox.mjs.map +1 -0
  188. package/fesm2022/ngwr-line-chart.mjs +176 -0
  189. package/fesm2022/ngwr-line-chart.mjs.map +1 -0
  190. package/fesm2022/ngwr-list.mjs +132 -0
  191. package/fesm2022/ngwr-list.mjs.map +1 -0
  192. package/fesm2022/ngwr-loading-bar.mjs +160 -0
  193. package/fesm2022/ngwr-loading-bar.mjs.map +1 -0
  194. package/fesm2022/ngwr-marquee.mjs +224 -0
  195. package/fesm2022/ngwr-marquee.mjs.map +1 -0
  196. package/fesm2022/ngwr-media.mjs +132 -0
  197. package/fesm2022/ngwr-media.mjs.map +1 -0
  198. package/fesm2022/ngwr-mention.mjs +374 -0
  199. package/fesm2022/ngwr-mention.mjs.map +1 -0
  200. package/fesm2022/ngwr-meta.mjs +323 -0
  201. package/fesm2022/ngwr-meta.mjs.map +1 -0
  202. package/fesm2022/ngwr-meter-group.mjs +73 -0
  203. package/fesm2022/ngwr-meter-group.mjs.map +1 -0
  204. package/fesm2022/ngwr-overlay.mjs +145 -0
  205. package/fesm2022/ngwr-overlay.mjs.map +1 -0
  206. package/fesm2022/ngwr-page-header.mjs +53 -0
  207. package/fesm2022/ngwr-page-header.mjs.map +1 -0
  208. package/fesm2022/ngwr-pagination.mjs +152 -96
  209. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  210. package/fesm2022/ngwr-pipes.mjs +290 -11
  211. package/fesm2022/ngwr-pipes.mjs.map +1 -1
  212. package/fesm2022/ngwr-platform.mjs +63 -0
  213. package/fesm2022/ngwr-platform.mjs.map +1 -0
  214. package/fesm2022/ngwr-popconfirm.mjs +188 -0
  215. package/fesm2022/ngwr-popconfirm.mjs.map +1 -0
  216. package/fesm2022/ngwr-popover.mjs +365 -0
  217. package/fesm2022/ngwr-popover.mjs.map +1 -0
  218. package/fesm2022/ngwr-progress.mjs +47 -39
  219. package/fesm2022/ngwr-progress.mjs.map +1 -1
  220. package/fesm2022/ngwr-qr.mjs +160 -179
  221. package/fesm2022/ngwr-qr.mjs.map +1 -1
  222. package/fesm2022/ngwr-radio.mjs +204 -0
  223. package/fesm2022/ngwr-radio.mjs.map +1 -0
  224. package/fesm2022/ngwr-rating.mjs +180 -0
  225. package/fesm2022/ngwr-rating.mjs.map +1 -0
  226. package/fesm2022/ngwr-result.mjs +119 -0
  227. package/fesm2022/ngwr-result.mjs.map +1 -0
  228. package/fesm2022/ngwr-rotating-text.mjs +256 -0
  229. package/fesm2022/ngwr-rotating-text.mjs.map +1 -0
  230. package/fesm2022/ngwr-scramble-text.mjs +165 -0
  231. package/fesm2022/ngwr-scramble-text.mjs.map +1 -0
  232. package/fesm2022/ngwr-scroll.mjs +107 -0
  233. package/fesm2022/ngwr-scroll.mjs.map +1 -0
  234. package/fesm2022/ngwr-segmented.mjs +96 -0
  235. package/fesm2022/ngwr-segmented.mjs.map +1 -0
  236. package/fesm2022/ngwr-select.mjs +844 -309
  237. package/fesm2022/ngwr-select.mjs.map +1 -1
  238. package/fesm2022/ngwr-shiny-text.mjs +127 -0
  239. package/fesm2022/ngwr-shiny-text.mjs.map +1 -0
  240. package/fesm2022/ngwr-sidebar.mjs +134 -0
  241. package/fesm2022/ngwr-sidebar.mjs.map +1 -0
  242. package/fesm2022/ngwr-skeleton.mjs +59 -34
  243. package/fesm2022/ngwr-skeleton.mjs.map +1 -1
  244. package/fesm2022/ngwr-slider.mjs +234 -0
  245. package/fesm2022/ngwr-slider.mjs.map +1 -0
  246. package/fesm2022/ngwr-sparkline.mjs +104 -0
  247. package/fesm2022/ngwr-sparkline.mjs.map +1 -0
  248. package/fesm2022/ngwr-speed-dial.mjs +79 -0
  249. package/fesm2022/ngwr-speed-dial.mjs.map +1 -0
  250. package/fesm2022/ngwr-spinner.mjs +34 -28
  251. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  252. package/fesm2022/ngwr-splash-cursor.mjs +970 -0
  253. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -0
  254. package/fesm2022/ngwr-split-text.mjs +200 -0
  255. package/fesm2022/ngwr-split-text.mjs.map +1 -0
  256. package/fesm2022/ngwr-splitter.mjs +125 -0
  257. package/fesm2022/ngwr-splitter.mjs.map +1 -0
  258. package/fesm2022/ngwr-spotlight-card.mjs +138 -0
  259. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -0
  260. package/fesm2022/ngwr-squircle.mjs +320 -0
  261. package/fesm2022/ngwr-squircle.mjs.map +1 -0
  262. package/fesm2022/ngwr-star-border.mjs +72 -0
  263. package/fesm2022/ngwr-star-border.mjs.map +1 -0
  264. package/fesm2022/ngwr-statistic.mjs +220 -0
  265. package/fesm2022/ngwr-statistic.mjs.map +1 -0
  266. package/fesm2022/ngwr-stepper.mjs +186 -0
  267. package/fesm2022/ngwr-stepper.mjs.map +1 -0
  268. package/fesm2022/ngwr-storage.mjs +317 -0
  269. package/fesm2022/ngwr-storage.mjs.map +1 -0
  270. package/fesm2022/ngwr-switch.mjs +99 -0
  271. package/fesm2022/ngwr-switch.mjs.map +1 -0
  272. package/fesm2022/ngwr-table.mjs +217 -206
  273. package/fesm2022/ngwr-table.mjs.map +1 -1
  274. package/fesm2022/ngwr-tabs.mjs +217 -0
  275. package/fesm2022/ngwr-tabs.mjs.map +1 -0
  276. package/fesm2022/ngwr-textarea.mjs +106 -120
  277. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  278. package/fesm2022/ngwr-theme.mjs +152 -0
  279. package/fesm2022/ngwr-theme.mjs.map +1 -0
  280. package/fesm2022/ngwr-tilt-card.mjs +137 -0
  281. package/fesm2022/ngwr-tilt-card.mjs.map +1 -0
  282. package/fesm2022/ngwr-timeline.mjs +73 -0
  283. package/fesm2022/ngwr-timeline.mjs.map +1 -0
  284. package/fesm2022/ngwr-toast.mjs +446 -0
  285. package/fesm2022/ngwr-toast.mjs.map +1 -0
  286. package/fesm2022/ngwr-toolbar.mjs +46 -0
  287. package/fesm2022/ngwr-toolbar.mjs.map +1 -0
  288. package/fesm2022/ngwr-tree.mjs +483 -0
  289. package/fesm2022/ngwr-tree.mjs.map +1 -0
  290. package/fesm2022/ngwr-typewriter.mjs +229 -0
  291. package/fesm2022/ngwr-typewriter.mjs.map +1 -0
  292. package/fesm2022/ngwr-typography.mjs +79 -0
  293. package/fesm2022/ngwr-typography.mjs.map +1 -0
  294. package/fesm2022/ngwr-utils.mjs +535 -0
  295. package/fesm2022/ngwr-utils.mjs.map +1 -0
  296. package/fesm2022/ngwr-validators.mjs +214 -0
  297. package/fesm2022/ngwr-validators.mjs.map +1 -0
  298. package/fesm2022/ngwr-version.mjs +51 -0
  299. package/fesm2022/ngwr-version.mjs.map +1 -0
  300. package/fesm2022/ngwr-virtual-scroll.mjs +99 -0
  301. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -0
  302. package/fesm2022/ngwr-waves.mjs +356 -0
  303. package/fesm2022/ngwr-waves.mjs.map +1 -0
  304. package/fesm2022/ngwr-window.mjs +1141 -0
  305. package/fesm2022/ngwr-window.mjs.map +1 -0
  306. package/fesm2022/ngwr.mjs +0 -3
  307. package/fesm2022/ngwr.mjs.map +1 -1
  308. package/file-upload/styles/_index.scss +152 -0
  309. package/form/styles/_index.scss +85 -42
  310. package/gauge/styles/_index.scss +37 -0
  311. package/glitch-text/glitch-text.scss +1 -0
  312. package/glitch-text/styles/_index.scss +144 -0
  313. package/gradient-text/gradient-text.scss +1 -0
  314. package/gradient-text/styles/_index.scss +113 -0
  315. package/icon/styles/_index.scss +21 -15
  316. package/image-cropper/styles/_index.scss +114 -0
  317. package/input/styles/_index.scss +133 -93
  318. package/input-number/styles/_index.scss +75 -0
  319. package/input-otp/styles/_index.scss +53 -0
  320. package/keyboard/styles/_index.scss +55 -0
  321. package/knob/styles/_index.scss +54 -0
  322. package/layout/styles/_index.scss +65 -0
  323. package/lightbox/lightbox.scss +1 -0
  324. package/lightbox/styles/_index.scss +144 -0
  325. package/line-chart/styles/_index.scss +93 -0
  326. package/list/list.scss +1 -0
  327. package/list/styles/_index.scss +101 -0
  328. package/loading-bar/loading-bar.scss +1 -0
  329. package/loading-bar/styles/_index.scss +29 -0
  330. package/marquee/marquee.scss +1 -0
  331. package/marquee/styles/_index.scss +138 -0
  332. package/mention/styles/_index.scss +47 -0
  333. package/meter-group/styles/_index.scss +61 -0
  334. package/package.json +586 -104
  335. package/page-header/styles/_index.scss +78 -0
  336. package/pagination/styles/_index.scss +89 -34
  337. package/popconfirm/styles/_index.scss +32 -0
  338. package/popover/styles/_index.scss +99 -0
  339. package/progress/styles/_index.scss +29 -14
  340. package/qr/styles/_index.scss +6 -3
  341. package/radio/styles/_index.scss +111 -0
  342. package/rating/styles/_index.scss +63 -0
  343. package/result/styles/_index.scss +69 -0
  344. package/rotating-text/rotating-text.scss +1 -0
  345. package/rotating-text/styles/_index.scss +39 -0
  346. package/schematics/collection.json +37 -0
  347. package/schematics/component-style/index.js +49 -0
  348. package/{cdk/utils/index.d.ts → schematics/component-style/schema.js} +2 -8
  349. package/schematics/component-style/schema.json +20 -0
  350. package/schematics/icon-set/index.js +96 -0
  351. package/schematics/icon-set/schema.js +8 -0
  352. package/schematics/icon-set/schema.json +39 -0
  353. package/schematics/migrations/v7/index.js +187 -0
  354. package/schematics/migrations.json +10 -0
  355. package/schematics/ng-add/index.js +180 -0
  356. package/schematics/ng-add/schema.js +8 -0
  357. package/schematics/ng-add/schema.json +80 -0
  358. package/schematics/page/index.js +63 -0
  359. package/schematics/page/schema.js +8 -0
  360. package/schematics/page/schema.json +39 -0
  361. package/schematics/page/templates.js +198 -0
  362. package/schematics/provider/index.js +126 -0
  363. package/schematics/provider/schema.js +8 -0
  364. package/schematics/provider/schema.json +52 -0
  365. package/schematics/use/index.js +143 -0
  366. package/schematics/use/schema.js +8 -0
  367. package/schematics/use/schema.json +25 -0
  368. package/schematics/use/symbol-map.json +357 -0
  369. package/scramble-text/scramble-text.scss +1 -0
  370. package/scramble-text/styles/_index.scss +8 -0
  371. package/segmented/styles/_index.scss +92 -0
  372. package/select/styles/_index.scss +245 -159
  373. package/shiny-text/shiny-text.scss +1 -0
  374. package/shiny-text/styles/_index.scss +101 -0
  375. package/sidebar/styles/_index.scss +208 -0
  376. package/skeleton/styles/_index.scss +33 -33
  377. package/slider/styles/_index.scss +77 -0
  378. package/sparkline/styles/_index.scss +9 -0
  379. package/speed-dial/styles/_index.scss +158 -0
  380. package/spinner/styles/_index.scss +38 -22
  381. package/splash-cursor/splash-cursor.scss +1 -0
  382. package/splash-cursor/styles/_index.scss +27 -0
  383. package/split-text/split-text.scss +1 -0
  384. package/split-text/styles/_index.scss +22 -0
  385. package/splitter/styles/_index.scss +85 -0
  386. package/spotlight-card/spotlight-card.scss +1 -0
  387. package/spotlight-card/styles/_index.scss +43 -0
  388. package/squircle/styles/_index.scss +34 -0
  389. package/star-border/star-border.scss +1 -0
  390. package/star-border/styles/_index.scss +118 -0
  391. package/statistic/styles/_index.scss +54 -0
  392. package/stepper/styles/_index.scss +162 -0
  393. package/styles/_animations.scss +198 -0
  394. package/styles/_breakpoints.scss +75 -0
  395. package/styles/_grid.scss +71 -0
  396. package/styles/_reset.scss +123 -0
  397. package/styles/_typography.scss +122 -0
  398. package/styles.scss +103 -13
  399. package/switch/styles/_index.scss +82 -0
  400. package/table/styles/_index.scss +255 -4
  401. package/tabs/styles/_index.scss +71 -0
  402. package/textarea/styles/_index.scss +47 -56
  403. package/theme/styles/_colors.scss +83 -0
  404. package/theme/styles/_dark.scss +85 -0
  405. package/theme/styles/_focus.scss +93 -0
  406. package/theme/styles/_index.scss +5 -0
  407. package/theme/styles/_mixins.scss +57 -0
  408. package/theme/styles/_variables.scss +118 -0
  409. package/tilt-card/styles/_index.scss +40 -0
  410. package/tilt-card/tilt-card.scss +1 -0
  411. package/timeline/styles/_index.scss +127 -0
  412. package/toast/styles/_index.scss +263 -0
  413. package/toolbar/styles/_index.scss +65 -0
  414. package/tree/styles/_index.scss +271 -0
  415. package/types/ngwr-affix.d.ts +43 -0
  416. package/types/ngwr-alert.d.ts +68 -0
  417. package/types/ngwr-anchor.d.ts +53 -0
  418. package/types/ngwr-aurora.d.ts +52 -0
  419. package/types/ngwr-avatar.d.ts +90 -0
  420. package/types/ngwr-back-top.d.ts +37 -0
  421. package/types/ngwr-badge.d.ts +158 -0
  422. package/types/ngwr-bar-chart.d.ts +47 -0
  423. package/types/ngwr-blur-text.d.ts +62 -0
  424. package/types/ngwr-border-glow.d.ts +66 -0
  425. package/types/ngwr-breadcrumbs.d.ts +61 -0
  426. package/types/ngwr-burger.d.ts +36 -0
  427. package/types/ngwr-button.d.ts +176 -0
  428. package/types/ngwr-calendar-heatmap.d.ts +58 -0
  429. package/types/ngwr-calendar.d.ts +116 -0
  430. package/types/ngwr-card.d.ts +50 -0
  431. package/types/ngwr-carousel.d.ts +57 -0
  432. package/types/ngwr-cascader.d.ts +107 -0
  433. package/types/ngwr-checkbox.d.ts +139 -0
  434. package/types/ngwr-circular-text.d.ts +49 -0
  435. package/types/ngwr-click-spark.d.ts +52 -0
  436. package/types/ngwr-clipboard.d.ts +53 -0
  437. package/types/ngwr-collapse.d.ts +139 -0
  438. package/types/ngwr-color-picker.d.ts +302 -0
  439. package/types/ngwr-command-palette.d.ts +113 -0
  440. package/types/ngwr-compare.d.ts +55 -0
  441. package/types/ngwr-confetti.d.ts +70 -0
  442. package/types/ngwr-context-menu.d.ts +207 -0
  443. package/types/ngwr-cookie.d.ts +60 -0
  444. package/types/ngwr-counter.d.ts +182 -0
  445. package/types/ngwr-date-adapter-fns.d.ts +73 -0
  446. package/types/ngwr-date-adapter-luxon.d.ts +73 -0
  447. package/types/ngwr-date-adapter.d.ts +198 -0
  448. package/types/ngwr-date-picker.d.ts +117 -0
  449. package/types/ngwr-decrypt-text.d.ts +85 -0
  450. package/types/ngwr-density.d.ts +97 -0
  451. package/types/ngwr-descriptions.d.ts +41 -0
  452. package/types/ngwr-dialog.d.ts +210 -0
  453. package/types/ngwr-directives.d.ts +125 -0
  454. package/types/ngwr-divider.d.ts +73 -0
  455. package/types/ngwr-donut-chart.d.ts +53 -0
  456. package/types/ngwr-drag-drop.d.ts +83 -0
  457. package/types/ngwr-drawer.d.ts +155 -0
  458. package/types/ngwr-dropdown.d.ts +124 -0
  459. package/types/ngwr-empty.d.ts +38 -0
  460. package/types/ngwr-falling-text.d.ts +63 -0
  461. package/types/ngwr-file-upload.d.ts +94 -0
  462. package/types/ngwr-form.d.ts +95 -0
  463. package/types/ngwr-fuzzy-text.d.ts +74 -0
  464. package/types/ngwr-gauge.d.ts +39 -0
  465. package/types/ngwr-glitch-text.d.ts +31 -0
  466. package/types/ngwr-gradient-text.d.ts +46 -0
  467. package/types/ngwr-hotkey.d.ts +142 -0
  468. package/types/ngwr-i18n-en.d.ts +18 -0
  469. package/types/ngwr-i18n-ru.d.ts +6 -0
  470. package/types/ngwr-i18n.d.ts +336 -0
  471. package/types/ngwr-icon-adapters-feather.d.ts +44 -0
  472. package/types/ngwr-icon-adapters-lucide.d.ts +54 -0
  473. package/types/ngwr-icon.d.ts +180 -0
  474. package/types/ngwr-image-cropper.d.ts +110 -0
  475. package/types/ngwr-input-number.d.ts +77 -0
  476. package/types/ngwr-input-otp.d.ts +78 -0
  477. package/types/ngwr-input.d.ts +131 -0
  478. package/types/ngwr-keyboard.d.ts +34 -0
  479. package/types/ngwr-knob.d.ts +77 -0
  480. package/types/ngwr-layout.d.ts +89 -0
  481. package/types/ngwr-lightbox.d.ts +50 -0
  482. package/types/ngwr-line-chart.d.ts +90 -0
  483. package/types/ngwr-list.d.ts +71 -0
  484. package/types/ngwr-loading-bar.d.ts +79 -0
  485. package/types/ngwr-marquee.d.ts +95 -0
  486. package/types/ngwr-media.d.ts +74 -0
  487. package/types/ngwr-mention.d.ts +110 -0
  488. package/types/ngwr-meta.d.ts +188 -0
  489. package/types/ngwr-meter-group.d.ts +57 -0
  490. package/types/ngwr-overlay.d.ts +110 -0
  491. package/types/ngwr-page-header.d.ts +35 -0
  492. package/types/ngwr-pagination.d.ts +119 -0
  493. package/types/ngwr-pipes.d.ts +177 -0
  494. package/types/ngwr-platform.d.ts +38 -0
  495. package/types/ngwr-popconfirm.d.ts +79 -0
  496. package/types/ngwr-popover.d.ts +90 -0
  497. package/types/ngwr-progress.d.ts +33 -0
  498. package/types/ngwr-qr.d.ts +56 -0
  499. package/types/ngwr-radio.d.ts +120 -0
  500. package/types/ngwr-rating.d.ts +62 -0
  501. package/types/ngwr-result.d.ts +64 -0
  502. package/types/ngwr-rotating-text.d.ts +72 -0
  503. package/types/ngwr-scramble-text.d.ts +49 -0
  504. package/types/ngwr-scroll.d.ts +65 -0
  505. package/types/ngwr-segmented.d.ts +65 -0
  506. package/types/ngwr-select.d.ts +413 -0
  507. package/types/ngwr-shiny-text.d.ts +70 -0
  508. package/types/ngwr-sidebar.d.ts +83 -0
  509. package/types/ngwr-skeleton.d.ts +41 -0
  510. package/types/ngwr-slider.d.ts +86 -0
  511. package/types/ngwr-sparkline.d.ts +48 -0
  512. package/types/ngwr-speed-dial.d.ts +51 -0
  513. package/types/ngwr-spinner.d.ts +41 -0
  514. package/types/ngwr-splash-cursor.d.ts +94 -0
  515. package/types/ngwr-split-text.d.ts +83 -0
  516. package/types/ngwr-splitter.d.ts +52 -0
  517. package/types/ngwr-spotlight-card.d.ts +71 -0
  518. package/types/ngwr-squircle.d.ts +132 -0
  519. package/types/ngwr-star-border.d.ts +40 -0
  520. package/types/ngwr-statistic.d.ts +88 -0
  521. package/types/ngwr-stepper.d.ts +99 -0
  522. package/types/ngwr-storage.d.ts +178 -0
  523. package/types/ngwr-switch.d.ts +39 -0
  524. package/types/ngwr-table.d.ts +237 -0
  525. package/types/ngwr-tabs.d.ts +125 -0
  526. package/types/ngwr-textarea.d.ts +60 -0
  527. package/types/ngwr-theme.d.ts +124 -0
  528. package/types/ngwr-tilt-card.d.ts +63 -0
  529. package/types/ngwr-timeline.d.ts +40 -0
  530. package/types/ngwr-toast.d.ts +230 -0
  531. package/types/ngwr-toolbar.d.ts +30 -0
  532. package/types/ngwr-tree.d.ts +150 -0
  533. package/types/ngwr-typewriter.d.ts +84 -0
  534. package/types/ngwr-typography.d.ts +56 -0
  535. package/types/ngwr-utils.d.ts +447 -0
  536. package/types/ngwr-validators.d.ts +70 -0
  537. package/types/ngwr-version.d.ts +44 -0
  538. package/types/ngwr-virtual-scroll.d.ts +64 -0
  539. package/types/ngwr-waves.d.ts +71 -0
  540. package/types/ngwr-window.d.ts +437 -0
  541. package/typewriter/styles/_index.scss +33 -0
  542. package/typewriter/typewriter.scss +1 -0
  543. package/typography/styles/_index.scss +211 -0
  544. package/virtual-scroll/styles/_index.scss +27 -0
  545. package/virtual-scroll/virtual-scroll.scss +1 -0
  546. package/waves/styles/_index.scss +24 -0
  547. package/waves/waves.scss +1 -0
  548. package/window/styles/_index.scss +430 -0
  549. package/alert/index.d.ts +0 -32
  550. package/alert/styles/theming.scss +0 -26
  551. package/alert/styles/vars.scss +0 -11
  552. package/avatar/index.d.ts +0 -30
  553. package/button/index.d.ts +0 -45
  554. package/button/styles/vars.scss +0 -13
  555. package/cdk/index.d.ts +0 -24
  556. package/cdk/rxjs/index.d.ts +0 -40
  557. package/cdk/types/index.d.ts +0 -27
  558. package/checkbox/index.d.ts +0 -31
  559. package/checkbox/styles/vars.scss +0 -16
  560. package/dialog/index.d.ts +0 -193
  561. package/dialog/styles/vars.scss +0 -7
  562. package/divider/index.d.ts +0 -16
  563. package/dropdown/index.d.ts +0 -68
  564. package/dropdown/styles/vars.scss +0 -18
  565. package/fesm2022/ngwr-cdk-rxjs.mjs +0 -53
  566. package/fesm2022/ngwr-cdk-rxjs.mjs.map +0 -1
  567. package/fesm2022/ngwr-cdk-types.mjs +0 -44
  568. package/fesm2022/ngwr-cdk-types.mjs.map +0 -1
  569. package/fesm2022/ngwr-cdk-utils.mjs +0 -30
  570. package/fesm2022/ngwr-cdk-utils.mjs.map +0 -1
  571. package/fesm2022/ngwr-cdk.mjs +0 -46
  572. package/fesm2022/ngwr-cdk.mjs.map +0 -1
  573. package/fesm2022/ngwr-tag.mjs +0 -87
  574. package/fesm2022/ngwr-tag.mjs.map +0 -1
  575. package/form/index.d.ts +0 -28
  576. package/icon/index.d.ts +0 -830
  577. package/icon/styles/vars.scss +0 -3
  578. package/input/index.d.ts +0 -43
  579. package/input/styles/vars.scss +0 -17
  580. package/pagination/index.d.ts +0 -34
  581. package/pagination/styles/vars.scss +0 -14
  582. package/pipes/index.d.ts +0 -17
  583. package/progress/index.d.ts +0 -13
  584. package/progress/styles/theming.scss +0 -8
  585. package/progress/styles/vars.scss +0 -6
  586. package/qr/index.d.ts +0 -127
  587. package/select/index.d.ts +0 -121
  588. package/select/styles/vars.scss +0 -32
  589. package/skeleton/index.d.ts +0 -13
  590. package/spinner/index.d.ts +0 -23
  591. package/styles/animations.scss +0 -92
  592. package/styles/cdk.scss +0 -5
  593. package/styles/colors.scss +0 -72
  594. package/styles/grid.scss +0 -99
  595. package/styles/maps.scss +0 -31
  596. package/styles/reset.scss +0 -112
  597. package/styles/variables.scss +0 -72
  598. package/table/index.d.ts +0 -101
  599. package/table/styles/table-filter.scss +0 -202
  600. package/table/styles/table-sort.scss +0 -47
  601. package/table/styles/table.scss +0 -232
  602. package/table/styles/vars.scss +0 -21
  603. package/tag/index.d.ts +0 -24
  604. package/tag/styles/_index.scss +0 -32
  605. package/tag/styles/theming.scss +0 -21
  606. package/tag/styles/vars.scss +0 -12
  607. package/textarea/index.d.ts +0 -47
  608. package/textarea/styles/vars.scss +0 -17
  609. /package/{index.d.ts → types/ngwr.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngwr-glitch-text.mjs","sources":["../../../projects/lib/glitch-text/glitch-text.ts","../../../projects/lib/glitch-text/ngwr-glitch-text.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 * Angular adaptation of the GlitchText effect by David Haz / reactbits.dev.\n * Original: https://www.reactbits.dev/text-animations/glitch-text\n *\n * Pure CSS — two `::before` / `::after` clones offset by ±10px with\n * coloured `text-shadow`s, both running a clip-path keyframe to slice\n * random horizontal bands.\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, ViewEncapsulation, computed, input } from '@angular/core';\n\nimport { numAttr } from 'ngwr/utils';\n\n/**\n * Glitchy text effect — colour-split horizontal-tear glitch on the\n * provided text. Defaults to playing constantly; toggle `[enableOnHover]`\n * to make it idle until the user hovers.\n *\n * @example\n * ```html\n * <wr-glitch-text text=\"404\" />\n * <wr-glitch-text text=\"ERROR\" [speed]=\"0.5\" [enableOnHover]=\"true\" />\n * ```\n *\n * @see https://www.reactbits.dev/text-animations/glitch-text\n */\n@Component({\n selector: 'wr-glitch-text',\n template: '{{ text() }}',\n styleUrl: './glitch-text.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'wr-glitch-text',\n '[class.wr-glitch-text--hover-only]': 'enableOnHover()',\n '[attr.data-text]': 'text()',\n '[style.--wr-glitch-text-before-duration]': \"(speed() * 2) + 's'\",\n '[style.--wr-glitch-text-after-duration]': \"(speed() * 3) + 's'\",\n '[style.--wr-glitch-text-before-shadow]': 'beforeShadow()',\n '[style.--wr-glitch-text-after-shadow]': 'afterShadow()',\n },\n})\nexport class WrGlitchText {\n /** Text to glitch. Required — the value populates `data-text` for the pseudo clones. */\n readonly text = input.required<string>();\n\n /** Time multiplier — higher = slower glitching. @default 1 */\n readonly speed = input(1, { transform: numAttr(1) });\n\n /** Show the red / cyan colour-split shadows. @default true */\n readonly enableShadows = input(true, { transform: coerceBooleanProperty });\n\n /** Only glitch on hover (idle until then). @default true */\n readonly enableOnHover = input(true, { transform: coerceBooleanProperty });\n\n protected readonly beforeShadow = computed(() => (this.enableShadows() ? '5px 0 cyan' : 'none'));\n protected readonly afterShadow = computed(() => (this.enableShadows() ? '-5px 0 red' : 'none'));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAAA;;;;;;;;;;;;AAYG;AAOH;;;;;;;;;;;;AAYG;MAgBU,YAAY,CAAA;;IAEd,IAAI,GAAG,KAAK,CAAC,QAAQ;6EAAU;;AAG/B,IAAA,KAAK,GAAG,KAAK,CAAC,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAA,CAAG;;IAG3C,aAAa,GAAG,KAAK,CAAC,IAAI,qFAAI,SAAS,EAAE,qBAAqB,EAAA,CAAG;;IAGjE,aAAa,GAAG,KAAK,CAAC,IAAI,qFAAI,SAAS,EAAE,qBAAqB,EAAA,CAAG;AAEvD,IAAA,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE,GAAG,YAAY,GAAG,MAAM,CAAC;qFAAC;AAC7E,IAAA,WAAW,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE,GAAG,YAAY,GAAG,MAAM,CAAC;oFAAC;uGAdpF,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,o+BAbb,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g5EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAab,YAAY,EAAA,UAAA,EAAA,CAAA;kBAfxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,YAChB,cAAc,EAAA,aAAA,EAET,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,gBAAgB;AACvB,wBAAA,oCAAoC,EAAE,iBAAiB;AACvD,wBAAA,kBAAkB,EAAE,QAAQ;AAC5B,wBAAA,0CAA0C,EAAE,qBAAqB;AACjE,wBAAA,yCAAyC,EAAE,qBAAqB;AAChE,wBAAA,wCAAwC,EAAE,gBAAgB;AAC1D,wBAAA,uCAAuC,EAAE,eAAe;AACzD,qBAAA,EAAA,MAAA,EAAA,CAAA,g5EAAA,CAAA,EAAA;;;AC7CH;;AAEG;;;;"}
@@ -0,0 +1,109 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import * as i0 from '@angular/core';
3
+ import { input, computed, ViewEncapsulation, Component } from '@angular/core';
4
+ import { numAttr } from 'ngwr/utils';
5
+
6
+ /**
7
+ * @license
8
+ *
9
+ * Use of this source code is governed by an MIT-style license that can be
10
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
11
+ *
12
+ * Angular adaptation of the GradientText effect by David Haz / reactbits.dev.
13
+ * Original: https://www.reactbits.dev/text-animations/gradient-text
14
+ *
15
+ * The reactbits version uses `motion/react` to drive `background-position`
16
+ * via rAF. This port is pure CSS — same effect via keyframes on
17
+ * `background-position`, parameterised by inputs.
18
+ */
19
+ const DEFAULT_COLORS = ['#5227FF', '#FF9FFC', '#B497CF'];
20
+ /**
21
+ * Animated multi-stop gradient text. The gradient slides across the text
22
+ * via `background-clip: text`. Optional `[showBorder]` wraps the text in
23
+ * a dark pill with the same animated gradient as a border ring.
24
+ *
25
+ * @example
26
+ * ```html
27
+ * <wr-gradient-text>Hello, ngwr!</wr-gradient-text>
28
+ * <wr-gradient-text
29
+ * [colors]="['#5227FF', '#FF9FFC', '#B497CF']"
30
+ * direction="diagonal"
31
+ * [animationSpeed]="6"
32
+ * [showBorder]="true"
33
+ * >
34
+ * Premium feature
35
+ * </wr-gradient-text>
36
+ * ```
37
+ *
38
+ * @see https://www.reactbits.dev/text-animations/gradient-text
39
+ */
40
+ class WrGradientText {
41
+ /** Gradient stops. @default ['#5227FF', '#FF9FFC', '#B497CF'] */
42
+ colors = input(DEFAULT_COLORS, /* @ts-ignore */
43
+ ...(ngDevMode ? [{ debugName: "colors" }] : /* istanbul ignore next */ []));
44
+ /** Seconds per full sweep (or per half if `[yoyo]` is on). @default 8 */
45
+ animationSpeed = input(8, { ...(ngDevMode ? { debugName: "animationSpeed" } : /* istanbul ignore next */ {}), transform: numAttr(8) });
46
+ /** Wrap the text in a dark pill with the gradient as a border. @default false */
47
+ showBorder = input(false, { ...(ngDevMode ? { debugName: "showBorder" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
48
+ /** Gradient slide direction. @default 'horizontal' */
49
+ direction = input('horizontal', /* @ts-ignore */
50
+ ...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
51
+ /** Pause the animation while hovered. @default false */
52
+ pauseOnHover = input(false, { ...(ngDevMode ? { debugName: "pauseOnHover" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
53
+ /** Bounce back-and-forth instead of restarting. @default true */
54
+ yoyo = input(true, { ...(ngDevMode ? { debugName: "yoyo" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
55
+ gradient = computed(() => {
56
+ const cols = this.colors().length > 0 ? this.colors() : DEFAULT_COLORS;
57
+ // Duplicate the first colour at the end for seamless looping.
58
+ const stops = [...cols, cols[0]].join(', ');
59
+ const angle = this.directionAngle();
60
+ return `linear-gradient(${angle}, ${stops})`;
61
+ }, /* @ts-ignore */
62
+ ...(ngDevMode ? [{ debugName: "gradient" }] : /* istanbul ignore next */ []));
63
+ size = computed(() => {
64
+ switch (this.direction()) {
65
+ case 'vertical':
66
+ return '100% 300%';
67
+ case 'diagonal':
68
+ return '300% 300%';
69
+ case 'horizontal':
70
+ default:
71
+ return '300% 100%';
72
+ }
73
+ }, /* @ts-ignore */
74
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
75
+ directionAngle() {
76
+ switch (this.direction()) {
77
+ case 'vertical':
78
+ return 'to bottom';
79
+ case 'diagonal':
80
+ return 'to bottom right';
81
+ case 'horizontal':
82
+ default:
83
+ return 'to right';
84
+ }
85
+ }
86
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrGradientText, deps: [], target: i0.ɵɵFactoryTarget.Component });
87
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: WrGradientText, isStandalone: true, selector: "wr-gradient-text", inputs: { colors: { classPropertyName: "colors", publicName: "colors", isSignal: true, isRequired: false, transformFunction: null }, animationSpeed: { classPropertyName: "animationSpeed", publicName: "animationSpeed", isSignal: true, isRequired: false, transformFunction: null }, showBorder: { classPropertyName: "showBorder", publicName: "showBorder", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, pauseOnHover: { classPropertyName: "pauseOnHover", publicName: "pauseOnHover", isSignal: true, isRequired: false, transformFunction: null }, yoyo: { classPropertyName: "yoyo", publicName: "yoyo", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.wr-gradient-text--border": "showBorder()", "class.wr-gradient-text--pause-on-hover": "pauseOnHover()", "class.wr-gradient-text--yoyo": "yoyo()", "class.wr-gradient-text--vertical": "direction() === 'vertical'", "class.wr-gradient-text--diagonal": "direction() === 'diagonal'", "style.--wr-gradient-text-image": "gradient()", "style.--wr-gradient-text-size": "size()", "style.--wr-gradient-text-duration": "animationSpeed() + 's'" }, classAttribute: "wr-gradient-text" }, ngImport: i0, template: "@if (showBorder()) {\n <span class=\"wr-gradient-text__border\" aria-hidden=\"true\"></span>\n}\n<span class=\"wr-gradient-text__text\">\n <ng-content />\n</span>\n", styles: [".wr-gradient-text{--wr-gradient-text-image: linear-gradient(to right, #5227ff, #ff9ffc, #b497cf, #5227ff);--wr-gradient-text-size: 300% 100%;--wr-gradient-text-duration: 8s;position:relative;display:inline-flex;align-items:center;justify-content:center;margin:0;font-weight:500;line-height:1.25;overflow:hidden}.wr-gradient-text--border{padding:.35rem .75rem;border-radius:1.25rem}.wr-gradient-text__text{position:relative;z-index:2;display:inline-block;background-image:var(--wr-gradient-text-image);background-size:var(--wr-gradient-text-size);background-position:0% 50%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:wr-gradient-text-horizontal var(--wr-gradient-text-duration) linear infinite}.wr-gradient-text__border{position:absolute;inset:0;border-radius:inherit;background-image:var(--wr-gradient-text-image);background-size:var(--wr-gradient-text-size);background-position:0% 50%;animation:wr-gradient-text-horizontal var(--wr-gradient-text-duration) linear infinite;z-index:0;pointer-events:none}.wr-gradient-text__border:before{content:\"\";position:absolute;inset:1px;border-radius:inherit;background-color:var(--wr-color-white, #fff);z-index:1}.wr-gradient-text--vertical .wr-gradient-text__text,.wr-gradient-text--vertical .wr-gradient-text__border{background-position:50% 0%;animation-name:wr-gradient-text-vertical}.wr-gradient-text--diagonal .wr-gradient-text__text,.wr-gradient-text--diagonal .wr-gradient-text__border{background-position:0% 50%;animation-name:wr-gradient-text-horizontal}.wr-gradient-text--yoyo .wr-gradient-text__text,.wr-gradient-text--yoyo .wr-gradient-text__border{animation-direction:alternate}.wr-gradient-text--pause-on-hover:hover .wr-gradient-text__text,.wr-gradient-text--pause-on-hover:hover .wr-gradient-text__border{animation-play-state:paused}@keyframes wr-gradient-text-horizontal{0%{background-position:0% 50%}to{background-position:100% 50%}}@keyframes wr-gradient-text-vertical{0%{background-position:50% 0%}to{background-position:50% 100%}}@media(prefers-reduced-motion:reduce){.wr-gradient-text__text,.wr-gradient-text__border{animation:none!important}}\n"], encapsulation: i0.ViewEncapsulation.None });
88
+ }
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrGradientText, decorators: [{
90
+ type: Component,
91
+ args: [{ selector: 'wr-gradient-text', encapsulation: ViewEncapsulation.None, host: {
92
+ class: 'wr-gradient-text',
93
+ '[class.wr-gradient-text--border]': 'showBorder()',
94
+ '[class.wr-gradient-text--pause-on-hover]': 'pauseOnHover()',
95
+ '[class.wr-gradient-text--yoyo]': 'yoyo()',
96
+ '[class.wr-gradient-text--vertical]': "direction() === 'vertical'",
97
+ '[class.wr-gradient-text--diagonal]': "direction() === 'diagonal'",
98
+ '[style.--wr-gradient-text-image]': 'gradient()',
99
+ '[style.--wr-gradient-text-size]': 'size()',
100
+ '[style.--wr-gradient-text-duration]': "animationSpeed() + 's'",
101
+ }, template: "@if (showBorder()) {\n <span class=\"wr-gradient-text__border\" aria-hidden=\"true\"></span>\n}\n<span class=\"wr-gradient-text__text\">\n <ng-content />\n</span>\n", styles: [".wr-gradient-text{--wr-gradient-text-image: linear-gradient(to right, #5227ff, #ff9ffc, #b497cf, #5227ff);--wr-gradient-text-size: 300% 100%;--wr-gradient-text-duration: 8s;position:relative;display:inline-flex;align-items:center;justify-content:center;margin:0;font-weight:500;line-height:1.25;overflow:hidden}.wr-gradient-text--border{padding:.35rem .75rem;border-radius:1.25rem}.wr-gradient-text__text{position:relative;z-index:2;display:inline-block;background-image:var(--wr-gradient-text-image);background-size:var(--wr-gradient-text-size);background-position:0% 50%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:wr-gradient-text-horizontal var(--wr-gradient-text-duration) linear infinite}.wr-gradient-text__border{position:absolute;inset:0;border-radius:inherit;background-image:var(--wr-gradient-text-image);background-size:var(--wr-gradient-text-size);background-position:0% 50%;animation:wr-gradient-text-horizontal var(--wr-gradient-text-duration) linear infinite;z-index:0;pointer-events:none}.wr-gradient-text__border:before{content:\"\";position:absolute;inset:1px;border-radius:inherit;background-color:var(--wr-color-white, #fff);z-index:1}.wr-gradient-text--vertical .wr-gradient-text__text,.wr-gradient-text--vertical .wr-gradient-text__border{background-position:50% 0%;animation-name:wr-gradient-text-vertical}.wr-gradient-text--diagonal .wr-gradient-text__text,.wr-gradient-text--diagonal .wr-gradient-text__border{background-position:0% 50%;animation-name:wr-gradient-text-horizontal}.wr-gradient-text--yoyo .wr-gradient-text__text,.wr-gradient-text--yoyo .wr-gradient-text__border{animation-direction:alternate}.wr-gradient-text--pause-on-hover:hover .wr-gradient-text__text,.wr-gradient-text--pause-on-hover:hover .wr-gradient-text__border{animation-play-state:paused}@keyframes wr-gradient-text-horizontal{0%{background-position:0% 50%}to{background-position:100% 50%}}@keyframes wr-gradient-text-vertical{0%{background-position:50% 0%}to{background-position:50% 100%}}@media(prefers-reduced-motion:reduce){.wr-gradient-text__text,.wr-gradient-text__border{animation:none!important}}\n"] }]
102
+ }], propDecorators: { colors: [{ type: i0.Input, args: [{ isSignal: true, alias: "colors", required: false }] }], animationSpeed: [{ type: i0.Input, args: [{ isSignal: true, alias: "animationSpeed", required: false }] }], showBorder: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBorder", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], pauseOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseOnHover", required: false }] }], yoyo: [{ type: i0.Input, args: [{ isSignal: true, alias: "yoyo", required: false }] }] } });
103
+
104
+ /**
105
+ * Generated bundle index. Do not edit.
106
+ */
107
+
108
+ export { WrGradientText };
109
+ //# sourceMappingURL=ngwr-gradient-text.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngwr-gradient-text.mjs","sources":["../../../projects/lib/gradient-text/gradient-text.ts","../../../projects/lib/gradient-text/gradient-text.html","../../../projects/lib/gradient-text/ngwr-gradient-text.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 * Angular adaptation of the GradientText effect by David Haz / reactbits.dev.\n * Original: https://www.reactbits.dev/text-animations/gradient-text\n *\n * The reactbits version uses `motion/react` to drive `background-position`\n * via rAF. This port is pure CSS — same effect via keyframes on\n * `background-position`, parameterised by inputs.\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, ViewEncapsulation, computed, input } from '@angular/core';\n\nimport { numAttr } from 'ngwr/utils';\n\nimport type { WrGradientTextDirection } from './interfaces';\n\nconst DEFAULT_COLORS: readonly string[] = ['#5227FF', '#FF9FFC', '#B497CF'];\n\n/**\n * Animated multi-stop gradient text. The gradient slides across the text\n * via `background-clip: text`. Optional `[showBorder]` wraps the text in\n * a dark pill with the same animated gradient as a border ring.\n *\n * @example\n * ```html\n * <wr-gradient-text>Hello, ngwr!</wr-gradient-text>\n * <wr-gradient-text\n * [colors]=\"['#5227FF', '#FF9FFC', '#B497CF']\"\n * direction=\"diagonal\"\n * [animationSpeed]=\"6\"\n * [showBorder]=\"true\"\n * >\n * Premium feature\n * </wr-gradient-text>\n * ```\n *\n * @see https://www.reactbits.dev/text-animations/gradient-text\n */\n@Component({\n selector: 'wr-gradient-text',\n templateUrl: './gradient-text.html',\n styleUrl: './gradient-text.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'wr-gradient-text',\n '[class.wr-gradient-text--border]': 'showBorder()',\n '[class.wr-gradient-text--pause-on-hover]': 'pauseOnHover()',\n '[class.wr-gradient-text--yoyo]': 'yoyo()',\n '[class.wr-gradient-text--vertical]': \"direction() === 'vertical'\",\n '[class.wr-gradient-text--diagonal]': \"direction() === 'diagonal'\",\n '[style.--wr-gradient-text-image]': 'gradient()',\n '[style.--wr-gradient-text-size]': 'size()',\n '[style.--wr-gradient-text-duration]': \"animationSpeed() + 's'\",\n },\n})\nexport class WrGradientText {\n /** Gradient stops. @default ['#5227FF', '#FF9FFC', '#B497CF'] */\n readonly colors = input<readonly string[]>(DEFAULT_COLORS);\n\n /** Seconds per full sweep (or per half if `[yoyo]` is on). @default 8 */\n readonly animationSpeed = input(8, { transform: numAttr(8) });\n\n /** Wrap the text in a dark pill with the gradient as a border. @default false */\n readonly showBorder = input(false, { transform: coerceBooleanProperty });\n\n /** Gradient slide direction. @default 'horizontal' */\n readonly direction = input<WrGradientTextDirection>('horizontal');\n\n /** Pause the animation while hovered. @default false */\n readonly pauseOnHover = input(false, { transform: coerceBooleanProperty });\n\n /** Bounce back-and-forth instead of restarting. @default true */\n readonly yoyo = input(true, { transform: coerceBooleanProperty });\n\n protected readonly gradient = computed(() => {\n const cols = this.colors().length > 0 ? this.colors() : DEFAULT_COLORS;\n // Duplicate the first colour at the end for seamless looping.\n const stops = [...cols, cols[0]].join(', ');\n const angle = this.directionAngle();\n return `linear-gradient(${angle}, ${stops})`;\n });\n\n protected readonly size = computed(() => {\n switch (this.direction()) {\n case 'vertical':\n return '100% 300%';\n case 'diagonal':\n return '300% 300%';\n case 'horizontal':\n default:\n return '300% 100%';\n }\n });\n\n private directionAngle(): string {\n switch (this.direction()) {\n case 'vertical':\n return 'to bottom';\n case 'diagonal':\n return 'to bottom right';\n case 'horizontal':\n default:\n return 'to right';\n }\n }\n}\n\nexport type { WrGradientTextDirection } from './interfaces';\n","@if (showBorder()) {\n <span class=\"wr-gradient-text__border\" aria-hidden=\"true\"></span>\n}\n<span class=\"wr-gradient-text__text\">\n <ng-content />\n</span>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,263 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, NgZone, Service, input, output, ElementRef, effect, DestroyRef, Directive } from '@angular/core';
4
+ import { WrPlatform } from 'ngwr/platform';
5
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
6
+
7
+ /**
8
+ * @license
9
+ *
10
+ * Use of this source code is governed by an MIT-style license that can be
11
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
12
+ */
13
+ /** Map of user-friendly aliases to canonical `KeyboardEvent.key` strings. */
14
+ const KEY_ALIASES = {
15
+ esc: 'escape',
16
+ space: ' ',
17
+ spacebar: ' ',
18
+ enter: 'enter',
19
+ return: 'enter',
20
+ up: 'arrowup',
21
+ down: 'arrowdown',
22
+ left: 'arrowleft',
23
+ right: 'arrowright',
24
+ del: 'delete',
25
+ };
26
+ /**
27
+ * Parse a hotkey spec like `'mod+shift+k'` into a normalised structure.
28
+ *
29
+ * @param spec - the spec to parse
30
+ * @param isMac - when true, `mod` resolves to `meta` (Cmd); otherwise `ctrl`
31
+ */
32
+ function parseHotkeySpec(spec, isMac = false) {
33
+ const tokens = spec
34
+ .split('+')
35
+ .map(t => t.trim().toLowerCase())
36
+ .filter(Boolean);
37
+ let ctrl = false;
38
+ let alt = false;
39
+ let shift = false;
40
+ let meta = false;
41
+ let key = '';
42
+ for (const token of tokens) {
43
+ switch (token) {
44
+ case 'ctrl':
45
+ case 'control':
46
+ ctrl = true;
47
+ break;
48
+ case 'alt':
49
+ case 'option':
50
+ alt = true;
51
+ break;
52
+ case 'shift':
53
+ shift = true;
54
+ break;
55
+ case 'cmd':
56
+ case 'command':
57
+ case 'meta':
58
+ case 'super':
59
+ case 'win':
60
+ meta = true;
61
+ break;
62
+ case 'mod':
63
+ if (isMac)
64
+ meta = true;
65
+ else
66
+ ctrl = true;
67
+ break;
68
+ default:
69
+ key = KEY_ALIASES[token] ?? token;
70
+ break;
71
+ }
72
+ }
73
+ return { ctrl, alt, shift, meta, key };
74
+ }
75
+ /** Does `event` satisfy the parsed hotkey? */
76
+ function matchesHotkey(event, parsed) {
77
+ if (event.ctrlKey !== parsed.ctrl)
78
+ return false;
79
+ if (event.altKey !== parsed.alt)
80
+ return false;
81
+ if (event.shiftKey !== parsed.shift)
82
+ return false;
83
+ if (event.metaKey !== parsed.meta)
84
+ return false;
85
+ return event.key.toLowerCase() === parsed.key;
86
+ }
87
+
88
+ /**
89
+ * @license
90
+ *
91
+ * Use of this source code is governed by an MIT-style license that can be
92
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
93
+ */
94
+ const FALLBACK_OPTIONS = {
95
+ element: undefined,
96
+ preventDefault: true,
97
+ allowInInput: false,
98
+ priority: 0,
99
+ };
100
+ function isEditableTarget(target) {
101
+ if (!(target instanceof HTMLElement))
102
+ return false;
103
+ const tag = target.tagName;
104
+ if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT')
105
+ return true;
106
+ return target.isContentEditable;
107
+ }
108
+ /**
109
+ * Global keybinding registry.
110
+ *
111
+ * Bindings are keyed off `KeyboardEvent.key` + modifier state. Multiple
112
+ * handlers per chord fire in priority order; a handler that calls
113
+ * `event.preventDefault()` stops lower-priority bindings on that key.
114
+ *
115
+ * The listener runs outside Angular — only matched bindings re-enter
116
+ * the zone, so an idle page doesn't trigger CD on every keystroke.
117
+ *
118
+ * Use `[wrHotkey]` for declarative element-scoped bindings.
119
+ *
120
+ * @example
121
+ * ```ts
122
+ * const hotkeys = inject(WrHotkey);
123
+ * const handle = hotkeys.bind('mod+k', () => openCommandPalette());
124
+ * // ...later
125
+ * handle.unbind();
126
+ * ```
127
+ *
128
+ * @see https://ngwr.dev/services/hotkey
129
+ */
130
+ class WrHotkey {
131
+ doc = inject(DOCUMENT);
132
+ zone = inject(NgZone);
133
+ platform = inject(WrPlatform);
134
+ isMac = (this.platform.userAgent ?? '').toLowerCase().includes('mac');
135
+ /** Bindings grouped by listener target. */
136
+ registries = new Map();
137
+ /** Register a binding. */
138
+ bind(spec, handler, options = {}) {
139
+ const parsed = parseHotkeySpec(spec, this.isMac);
140
+ const resolved = { ...FALLBACK_OPTIONS, ...options };
141
+ const target = resolved.element ?? this.doc;
142
+ const binding = { parsed, handler, options: resolved };
143
+ let bucket = this.registries.get(target);
144
+ if (!bucket) {
145
+ bucket = new Set();
146
+ this.registries.set(target, bucket);
147
+ this.attach(target);
148
+ }
149
+ bucket.add(binding);
150
+ return {
151
+ unbind: () => {
152
+ bucket?.delete(binding);
153
+ if (bucket?.size === 0) {
154
+ this.registries.delete(target);
155
+ this.detach(target);
156
+ }
157
+ },
158
+ };
159
+ }
160
+ // Internals
161
+ listeners = new Map();
162
+ attach(target) {
163
+ const listener = event => this.dispatch(target, event);
164
+ this.zone.runOutsideAngular(() => target.addEventListener('keydown', listener));
165
+ this.listeners.set(target, listener);
166
+ }
167
+ detach(target) {
168
+ const listener = this.listeners.get(target);
169
+ if (!listener)
170
+ return;
171
+ target.removeEventListener('keydown', listener);
172
+ this.listeners.delete(target);
173
+ }
174
+ dispatch(target, event) {
175
+ const bucket = this.registries.get(target);
176
+ if (!bucket || bucket.size === 0)
177
+ return;
178
+ const matches = [];
179
+ for (const binding of bucket) {
180
+ if (!matchesHotkey(event, binding.parsed))
181
+ continue;
182
+ if (!binding.options.allowInInput && isEditableTarget(event.target))
183
+ continue;
184
+ matches.push(binding);
185
+ }
186
+ if (matches.length === 0)
187
+ return;
188
+ matches.sort((a, b) => b.options.priority - a.options.priority);
189
+ this.zone.run(() => {
190
+ for (const binding of matches) {
191
+ if (binding.options.preventDefault)
192
+ event.preventDefault();
193
+ binding.handler(event);
194
+ if (event.defaultPrevented)
195
+ break;
196
+ }
197
+ });
198
+ }
199
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrHotkey, deps: [], target: i0.ɵɵFactoryTarget.Service });
200
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.2", ngImport: i0, type: WrHotkey });
201
+ }
202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrHotkey, decorators: [{
203
+ type: Service
204
+ }] });
205
+
206
+ /**
207
+ * @license
208
+ *
209
+ * Use of this source code is governed by an MIT-style license that can be
210
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
211
+ */
212
+ /**
213
+ * Declarative wrapper around {@link WrHotkey}.
214
+ *
215
+ * Binds on init (and re-binds when the spec changes), unbinds on destroy.
216
+ * Defaults to global scope so the binding works regardless of focus —
217
+ * pass `[scoped]="true"` to limit it to the host element.
218
+ *
219
+ * @example
220
+ * ```html
221
+ * <button (wrHotkeyMatch)="open()" [wrHotkey]="'mod+k'">Open palette</button>
222
+ * <div tabindex="0" [wrHotkey]="'escape'" [scoped]="true" (wrHotkeyMatch)="close()">…</div>
223
+ * ```
224
+ */
225
+ class WrHotkeyBinding {
226
+ wrHotkey = input.required(/* @ts-ignore */
227
+ ...(ngDevMode ? [{ debugName: "wrHotkey" }] : /* istanbul ignore next */ []));
228
+ /** Scope the binding to the host element instead of `document`. @default false */
229
+ scoped = input(false, { ...(ngDevMode ? { debugName: "scoped" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
230
+ /** Fire even when an input / textarea has focus. @default false */
231
+ allowInInput = input(false, { ...(ngDevMode ? { debugName: "allowInInput" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
232
+ /** Suppress the default action when the binding fires. @default true */
233
+ preventDefault = input(true, { ...(ngDevMode ? { debugName: "preventDefault" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
234
+ /** Emits the original KeyboardEvent on match. */
235
+ wrHotkeyMatch = output();
236
+ hotkeys = inject(WrHotkey);
237
+ host = inject(ElementRef);
238
+ handle = null;
239
+ constructor() {
240
+ effect(() => {
241
+ this.handle?.unbind();
242
+ this.handle = this.hotkeys.bind(this.wrHotkey(), event => this.wrHotkeyMatch.emit(event), {
243
+ element: this.scoped() ? this.host.nativeElement : undefined,
244
+ allowInInput: this.allowInInput(),
245
+ preventDefault: this.preventDefault(),
246
+ });
247
+ });
248
+ inject(DestroyRef).onDestroy(() => this.handle?.unbind());
249
+ }
250
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrHotkeyBinding, deps: [], target: i0.ɵɵFactoryTarget.Directive });
251
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: WrHotkeyBinding, isStandalone: true, selector: "[wrHotkey]", inputs: { wrHotkey: { classPropertyName: "wrHotkey", publicName: "wrHotkey", isSignal: true, isRequired: true, transformFunction: null }, scoped: { classPropertyName: "scoped", publicName: "scoped", isSignal: true, isRequired: false, transformFunction: null }, allowInInput: { classPropertyName: "allowInInput", publicName: "allowInInput", isSignal: true, isRequired: false, transformFunction: null }, preventDefault: { classPropertyName: "preventDefault", publicName: "preventDefault", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { wrHotkeyMatch: "wrHotkeyMatch" }, ngImport: i0 });
252
+ }
253
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrHotkeyBinding, decorators: [{
254
+ type: Directive,
255
+ args: [{ selector: '[wrHotkey]' }]
256
+ }], ctorParameters: () => [], propDecorators: { wrHotkey: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrHotkey", required: true }] }], scoped: [{ type: i0.Input, args: [{ isSignal: true, alias: "scoped", required: false }] }], allowInInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowInInput", required: false }] }], preventDefault: [{ type: i0.Input, args: [{ isSignal: true, alias: "preventDefault", required: false }] }], wrHotkeyMatch: [{ type: i0.Output, args: ["wrHotkeyMatch"] }] } });
257
+
258
+ /**
259
+ * Generated bundle index. Do not edit.
260
+ */
261
+
262
+ export { WrHotkey, WrHotkeyBinding, matchesHotkey, parseHotkeySpec };
263
+ //# sourceMappingURL=ngwr-hotkey.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngwr-hotkey.mjs","sources":["../../../projects/lib/hotkey/parse-spec.ts","../../../projects/lib/hotkey/wr-hotkey.ts","../../../projects/lib/hotkey/wr-hotkey-binding.ts","../../../projects/lib/hotkey/ngwr-hotkey.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 type { WrHotkeySpec } from './interfaces';\n\n/** Map of user-friendly aliases to canonical `KeyboardEvent.key` strings. */\nconst KEY_ALIASES: Readonly<Record<string, string>> = {\n esc: 'escape',\n space: ' ',\n spacebar: ' ',\n enter: 'enter',\n return: 'enter',\n up: 'arrowup',\n down: 'arrowdown',\n left: 'arrowleft',\n right: 'arrowright',\n del: 'delete',\n};\n\n/** Normalised representation of a hotkey spec — easy to match against an event. */\ninterface WrParsedHotkey {\n readonly ctrl: boolean;\n readonly alt: boolean;\n readonly shift: boolean;\n readonly meta: boolean;\n /** Lowercased `KeyboardEvent.key` value the spec matches. */\n readonly key: string;\n}\n\n/**\n * Parse a hotkey spec like `'mod+shift+k'` into a normalised structure.\n *\n * @param spec - the spec to parse\n * @param isMac - when true, `mod` resolves to `meta` (Cmd); otherwise `ctrl`\n */\nfunction parseHotkeySpec(spec: WrHotkeySpec, isMac = false): WrParsedHotkey {\n const tokens = spec\n .split('+')\n .map(t => t.trim().toLowerCase())\n .filter(Boolean);\n\n let ctrl = false;\n let alt = false;\n let shift = false;\n let meta = false;\n let key = '';\n\n for (const token of tokens) {\n switch (token) {\n case 'ctrl':\n case 'control':\n ctrl = true;\n break;\n case 'alt':\n case 'option':\n alt = true;\n break;\n case 'shift':\n shift = true;\n break;\n case 'cmd':\n case 'command':\n case 'meta':\n case 'super':\n case 'win':\n meta = true;\n break;\n case 'mod':\n if (isMac) meta = true;\n else ctrl = true;\n break;\n default:\n key = KEY_ALIASES[token] ?? token;\n break;\n }\n }\n\n return { ctrl, alt, shift, meta, key };\n}\n\n/** Does `event` satisfy the parsed hotkey? */\nfunction matchesHotkey(event: KeyboardEvent, parsed: WrParsedHotkey): boolean {\n if (event.ctrlKey !== parsed.ctrl) return false;\n if (event.altKey !== parsed.alt) return false;\n if (event.shiftKey !== parsed.shift) return false;\n if (event.metaKey !== parsed.meta) return false;\n return event.key.toLowerCase() === parsed.key;\n}\n\nexport { parseHotkeySpec, matchesHotkey };\nexport type { WrParsedHotkey };\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\nimport { DOCUMENT } from '@angular/common';\nimport { Service, NgZone, inject } from '@angular/core';\n\nimport { WrPlatform } from 'ngwr/platform';\n\nimport type { WrHotkeyHandle, WrHotkeyOptions, WrHotkeySpec } from './interfaces';\nimport { matchesHotkey, parseHotkeySpec, type WrParsedHotkey } from './parse-spec';\n\ninterface Binding {\n readonly parsed: WrParsedHotkey;\n readonly handler: (event: KeyboardEvent) => void;\n readonly options: Required<WrHotkeyOptions>;\n}\n\nconst FALLBACK_OPTIONS: Required<WrHotkeyOptions> = {\n element: undefined as unknown as HTMLElement,\n preventDefault: true,\n allowInInput: false,\n priority: 0,\n};\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n const tag = target.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return true;\n return target.isContentEditable;\n}\n\n/**\n * Global keybinding registry.\n *\n * Bindings are keyed off `KeyboardEvent.key` + modifier state. Multiple\n * handlers per chord fire in priority order; a handler that calls\n * `event.preventDefault()` stops lower-priority bindings on that key.\n *\n * The listener runs outside Angular — only matched bindings re-enter\n * the zone, so an idle page doesn't trigger CD on every keystroke.\n *\n * Use `[wrHotkey]` for declarative element-scoped bindings.\n *\n * @example\n * ```ts\n * const hotkeys = inject(WrHotkey);\n * const handle = hotkeys.bind('mod+k', () => openCommandPalette());\n * // ...later\n * handle.unbind();\n * ```\n *\n * @see https://ngwr.dev/services/hotkey\n */\n@Service()\nexport class WrHotkey {\n private readonly doc = inject(DOCUMENT);\n private readonly zone = inject(NgZone);\n private readonly platform = inject(WrPlatform);\n\n private readonly isMac = (this.platform.userAgent ?? '').toLowerCase().includes('mac');\n\n /** Bindings grouped by listener target. */\n private readonly registries = new Map<EventTarget, Set<Binding>>();\n\n /** Register a binding. */\n bind(spec: WrHotkeySpec, handler: (event: KeyboardEvent) => void, options: WrHotkeyOptions = {}): WrHotkeyHandle {\n const parsed = parseHotkeySpec(spec, this.isMac);\n const resolved: Required<WrHotkeyOptions> = { ...FALLBACK_OPTIONS, ...options };\n const target: EventTarget = resolved.element ?? this.doc;\n const binding: Binding = { parsed, handler, options: resolved };\n\n let bucket = this.registries.get(target);\n if (!bucket) {\n bucket = new Set();\n this.registries.set(target, bucket);\n this.attach(target);\n }\n bucket.add(binding);\n\n return {\n unbind: () => {\n bucket?.delete(binding);\n if (bucket?.size === 0) {\n this.registries.delete(target);\n this.detach(target);\n }\n },\n };\n }\n\n // Internals\n\n private readonly listeners = new Map<EventTarget, EventListener>();\n\n private attach(target: EventTarget): void {\n const listener: EventListener = event => this.dispatch(target, event as KeyboardEvent);\n this.zone.runOutsideAngular(() => target.addEventListener('keydown', listener));\n this.listeners.set(target, listener);\n }\n\n private detach(target: EventTarget): void {\n const listener = this.listeners.get(target);\n if (!listener) return;\n target.removeEventListener('keydown', listener);\n this.listeners.delete(target);\n }\n\n private dispatch(target: EventTarget, event: KeyboardEvent): void {\n const bucket = this.registries.get(target);\n if (!bucket || bucket.size === 0) return;\n\n const matches: Binding[] = [];\n for (const binding of bucket) {\n if (!matchesHotkey(event, binding.parsed)) continue;\n if (!binding.options.allowInInput && isEditableTarget(event.target)) continue;\n matches.push(binding);\n }\n if (matches.length === 0) return;\n\n matches.sort((a, b) => b.options.priority - a.options.priority);\n\n this.zone.run(() => {\n for (const binding of matches) {\n if (binding.options.preventDefault) event.preventDefault();\n binding.handler(event);\n if (event.defaultPrevented) break;\n }\n });\n }\n}\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\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { DestroyRef, Directive, ElementRef, effect, inject, input, output } from '@angular/core';\n\nimport type { WrHotkeyHandle, WrHotkeySpec } from './interfaces';\nimport { WrHotkey } from './wr-hotkey';\n\n/**\n * Declarative wrapper around {@link WrHotkey}.\n *\n * Binds on init (and re-binds when the spec changes), unbinds on destroy.\n * Defaults to global scope so the binding works regardless of focus —\n * pass `[scoped]=\"true\"` to limit it to the host element.\n *\n * @example\n * ```html\n * <button (wrHotkeyMatch)=\"open()\" [wrHotkey]=\"'mod+k'\">Open palette</button>\n * <div tabindex=\"0\" [wrHotkey]=\"'escape'\" [scoped]=\"true\" (wrHotkeyMatch)=\"close()\">…</div>\n * ```\n */\n@Directive({ selector: '[wrHotkey]' })\nexport class WrHotkeyBinding {\n readonly wrHotkey = input.required<WrHotkeySpec>();\n\n /** Scope the binding to the host element instead of `document`. @default false */\n readonly scoped = input(false, { transform: coerceBooleanProperty });\n\n /** Fire even when an input / textarea has focus. @default false */\n readonly allowInInput = input(false, { transform: coerceBooleanProperty });\n\n /** Suppress the default action when the binding fires. @default true */\n readonly preventDefault = input(true, { transform: coerceBooleanProperty });\n\n /** Emits the original KeyboardEvent on match. */\n readonly wrHotkeyMatch = output<KeyboardEvent>();\n\n private readonly hotkeys = inject(WrHotkey);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private handle: WrHotkeyHandle | null = null;\n\n constructor() {\n effect(() => {\n this.handle?.unbind();\n this.handle = this.hotkeys.bind(this.wrHotkey(), event => this.wrHotkeyMatch.emit(event), {\n element: this.scoped() ? this.host.nativeElement : undefined,\n allowInInput: this.allowInInput(),\n preventDefault: this.preventDefault(),\n });\n });\n inject(DestroyRef).onDestroy(() => this.handle?.unbind());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Base English catalog for ngwr built-in component strings. Spread this
3
+ * into your root catalog or pass it to `provideWrI18nStaticLoader`.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import { wrEn } from 'ngwr/i18n/en';
8
+ *
9
+ * provideWrI18nStaticLoader({
10
+ * en: { ...wrEn, app: { title: 'My app' } },
11
+ * });
12
+ * ```
13
+ */
14
+ const wrEn = {
15
+ common: {
16
+ ok: 'OK',
17
+ cancel: 'Cancel',
18
+ close: 'Close',
19
+ confirm: 'Confirm',
20
+ delete: 'Delete',
21
+ save: 'Save',
22
+ edit: 'Edit',
23
+ add: 'Add',
24
+ remove: 'Remove',
25
+ clear: 'Clear',
26
+ search: 'Search',
27
+ loading: 'Loading…',
28
+ select: 'Select',
29
+ next: 'Next',
30
+ previous: 'Previous',
31
+ back: 'Back',
32
+ today: 'Today',
33
+ yesterday: 'Yesterday',
34
+ tomorrow: 'Tomorrow',
35
+ of: 'of',
36
+ },
37
+ pagination: {
38
+ prev: 'Previous page',
39
+ next: 'Next page',
40
+ itemsPerPage: 'Items per page',
41
+ pageOf: 'Page {{current}} of {{total}}',
42
+ of: 'of',
43
+ },
44
+ table: {
45
+ empty: 'No data',
46
+ loading: 'Loading…',
47
+ sort: 'Sort column',
48
+ filter: 'Filter column',
49
+ },
50
+ select: {
51
+ placeholder: 'Select…',
52
+ empty: 'No options',
53
+ clearSelection: 'Clear selection',
54
+ removeItem: 'Remove {{label}}',
55
+ noResults: 'No results',
56
+ loading: 'Loading…',
57
+ },
58
+ // `tree` covers both inline display and combobox-mode pickers
59
+ // (replaces the dropped `treeSelect` namespace).
60
+ tree: {
61
+ expand: 'Expand',
62
+ collapse: 'Collapse',
63
+ placeholder: 'Select…',
64
+ clearSelection: 'Clear selection',
65
+ removeItem: 'Remove {{label}}',
66
+ },
67
+ commandPalette: {
68
+ placeholder: 'Type a command or search…',
69
+ noResults: 'No results',
70
+ },
71
+ empty: {
72
+ noData: 'No data',
73
+ },
74
+ fileUpload: {
75
+ browse: 'Click to browse',
76
+ dropZone: 'or drop files here',
77
+ dropZoneLabel: 'File upload drop zone — click or drop files',
78
+ removeFile: 'Remove file',
79
+ invalid: 'Unsupported file type',
80
+ tooBig: 'File too large',
81
+ },
82
+ upload: {
83
+ drop: 'Drop files here or click to browse',
84
+ invalid: 'Unsupported file type',
85
+ tooBig: 'File too large',
86
+ },
87
+ popconfirm: {
88
+ confirm: 'Confirm',
89
+ cancel: 'Cancel',
90
+ },
91
+ toast: {
92
+ close: 'Close',
93
+ copy: 'Copy',
94
+ copied: 'Copied',
95
+ closeAll: 'Close all',
96
+ },
97
+ input: {
98
+ showPassword: 'Show password',
99
+ hidePassword: 'Hide password',
100
+ },
101
+ inputNumber: {
102
+ increment: 'Increment',
103
+ decrement: 'Decrement',
104
+ },
105
+ backTop: {
106
+ label: 'Back to top',
107
+ },
108
+ calendar: {
109
+ prevMonth: 'Previous month',
110
+ nextMonth: 'Next month',
111
+ prevYear: 'Previous year',
112
+ nextYear: 'Next year',
113
+ },
114
+ carousel: {
115
+ prev: 'Previous slide',
116
+ next: 'Next slide',
117
+ pagination: 'Carousel pagination',
118
+ },
119
+ alert: {
120
+ close: 'Close alert',
121
+ },
122
+ image: {
123
+ open: 'Open preview',
124
+ close: 'Close preview',
125
+ },
126
+ window: {
127
+ close: 'Close',
128
+ },
129
+ datePicker: {
130
+ open: 'Open calendar',
131
+ openTime: 'Open time picker',
132
+ openDateTime: 'Open date and time picker',
133
+ },
134
+ spinner: {
135
+ label: 'Loading',
136
+ },
137
+ rating: {
138
+ label: 'Rating',
139
+ },
140
+ result: {
141
+ notFound: 'Sorry, the page you visited does not exist.',
142
+ forbidden: 'Sorry, you are not authorized to access this page.',
143
+ serverError: 'Sorry, something went wrong.',
144
+ },
145
+ date: {
146
+ months: {
147
+ jan: 'January',
148
+ feb: 'February',
149
+ mar: 'March',
150
+ apr: 'April',
151
+ may: 'May',
152
+ jun: 'June',
153
+ jul: 'July',
154
+ aug: 'August',
155
+ sep: 'September',
156
+ oct: 'October',
157
+ nov: 'November',
158
+ dec: 'December',
159
+ },
160
+ },
161
+ };
162
+
163
+ /**
164
+ * Generated bundle index. Do not edit.
165
+ */
166
+
167
+ export { wrEn };
168
+ //# sourceMappingURL=ngwr-i18n-en.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngwr-i18n-en.mjs","sources":["../../../projects/lib/i18n/en/public-api.ts","../../../projects/lib/i18n/en/ngwr-i18n-en.ts"],"sourcesContent":["import { type WrI18nCatalog } from 'ngwr/i18n';\n\n/**\n * Base English catalog for ngwr built-in component strings. Spread this\n * into your root catalog or pass it to `provideWrI18nStaticLoader`.\n *\n * @example\n * ```ts\n * import { wrEn } from 'ngwr/i18n/en';\n *\n * provideWrI18nStaticLoader({\n * en: { ...wrEn, app: { title: 'My app' } },\n * });\n * ```\n */\nexport const wrEn: WrI18nCatalog = {\n common: {\n ok: 'OK',\n cancel: 'Cancel',\n close: 'Close',\n confirm: 'Confirm',\n delete: 'Delete',\n save: 'Save',\n edit: 'Edit',\n add: 'Add',\n remove: 'Remove',\n clear: 'Clear',\n search: 'Search',\n loading: 'Loading…',\n select: 'Select',\n next: 'Next',\n previous: 'Previous',\n back: 'Back',\n today: 'Today',\n yesterday: 'Yesterday',\n tomorrow: 'Tomorrow',\n of: 'of',\n },\n pagination: {\n prev: 'Previous page',\n next: 'Next page',\n itemsPerPage: 'Items per page',\n pageOf: 'Page {{current}} of {{total}}',\n of: 'of',\n },\n table: {\n empty: 'No data',\n loading: 'Loading…',\n sort: 'Sort column',\n filter: 'Filter column',\n },\n select: {\n placeholder: 'Select…',\n empty: 'No options',\n clearSelection: 'Clear selection',\n removeItem: 'Remove {{label}}',\n noResults: 'No results',\n loading: 'Loading…',\n },\n // `tree` covers both inline display and combobox-mode pickers\n // (replaces the dropped `treeSelect` namespace).\n tree: {\n expand: 'Expand',\n collapse: 'Collapse',\n placeholder: 'Select…',\n clearSelection: 'Clear selection',\n removeItem: 'Remove {{label}}',\n },\n commandPalette: {\n placeholder: 'Type a command or search…',\n noResults: 'No results',\n },\n empty: {\n noData: 'No data',\n },\n fileUpload: {\n browse: 'Click to browse',\n dropZone: 'or drop files here',\n dropZoneLabel: 'File upload drop zone — click or drop files',\n removeFile: 'Remove file',\n invalid: 'Unsupported file type',\n tooBig: 'File too large',\n },\n upload: {\n drop: 'Drop files here or click to browse',\n invalid: 'Unsupported file type',\n tooBig: 'File too large',\n },\n popconfirm: {\n confirm: 'Confirm',\n cancel: 'Cancel',\n },\n toast: {\n close: 'Close',\n copy: 'Copy',\n copied: 'Copied',\n closeAll: 'Close all',\n },\n input: {\n showPassword: 'Show password',\n hidePassword: 'Hide password',\n },\n inputNumber: {\n increment: 'Increment',\n decrement: 'Decrement',\n },\n backTop: {\n label: 'Back to top',\n },\n calendar: {\n prevMonth: 'Previous month',\n nextMonth: 'Next month',\n prevYear: 'Previous year',\n nextYear: 'Next year',\n },\n carousel: {\n prev: 'Previous slide',\n next: 'Next slide',\n pagination: 'Carousel pagination',\n },\n alert: {\n close: 'Close alert',\n },\n image: {\n open: 'Open preview',\n close: 'Close preview',\n },\n window: {\n close: 'Close',\n },\n datePicker: {\n open: 'Open calendar',\n openTime: 'Open time picker',\n openDateTime: 'Open date and time picker',\n },\n spinner: {\n label: 'Loading',\n },\n rating: {\n label: 'Rating',\n },\n result: {\n notFound: 'Sorry, the page you visited does not exist.',\n forbidden: 'Sorry, you are not authorized to access this page.',\n serverError: 'Sorry, something went wrong.',\n },\n date: {\n months: {\n jan: 'January',\n feb: 'February',\n mar: 'March',\n apr: 'April',\n may: 'May',\n jun: 'June',\n jul: 'July',\n aug: 'August',\n sep: 'September',\n oct: 'October',\n nov: 'November',\n dec: 'December',\n },\n },\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}