ngwr 6.1.1 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (605) 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/button/styles/_index.scss +148 -125
  20. package/calendar/styles/_index.scss +252 -0
  21. package/calendar-heatmap/styles/_index.scss +69 -0
  22. package/card/card.scss +1 -0
  23. package/card/styles/_index.scss +96 -0
  24. package/carousel/styles/_index.scss +102 -0
  25. package/cascader/cascader.scss +1 -0
  26. package/cascader/styles/_index.scss +174 -0
  27. package/checkbox/styles/_index.scss +76 -60
  28. package/circular-text/circular-text.scss +1 -0
  29. package/circular-text/styles/_index.scss +45 -0
  30. package/click-spark/click-spark.scss +1 -0
  31. package/click-spark/styles/_index.scss +16 -0
  32. package/collapse/styles/_index.scss +92 -0
  33. package/color-picker/styles/_index.scss +247 -0
  34. package/command-palette/styles/_index.scss +188 -0
  35. package/compare/styles/_index.scss +100 -0
  36. package/context-menu/styles/_index.scss +112 -0
  37. package/counter/styles/_index.scss +44 -0
  38. package/date-picker/styles/_index.scss +204 -0
  39. package/decrypt-text/decrypt-text.scss +1 -0
  40. package/decrypt-text/styles/_index.scss +26 -0
  41. package/density/styles/_index.scss +37 -0
  42. package/descriptions/styles/_index.scss +104 -0
  43. package/dialog/styles/_index.scss +101 -27
  44. package/divider/styles/_index.scss +43 -24
  45. package/donut-chart/styles/_index.scss +76 -0
  46. package/drag-drop/sortable-list.scss +1 -0
  47. package/drag-drop/styles/_index.scss +99 -0
  48. package/drawer/styles/_index.scss +164 -0
  49. package/dropdown/styles/_index.scss +76 -56
  50. package/empty/styles/_index.scss +49 -0
  51. package/falling-text/falling-text.scss +1 -0
  52. package/falling-text/styles/_index.scss +30 -0
  53. package/fesm2022/ngwr-affix.mjs +102 -0
  54. package/fesm2022/ngwr-affix.mjs.map +1 -0
  55. package/fesm2022/ngwr-alert.mjs +70 -52
  56. package/fesm2022/ngwr-alert.mjs.map +1 -1
  57. package/fesm2022/ngwr-anchor.mjs +103 -0
  58. package/fesm2022/ngwr-anchor.mjs.map +1 -0
  59. package/fesm2022/ngwr-aurora.mjs +309 -0
  60. package/fesm2022/ngwr-aurora.mjs.map +1 -0
  61. package/fesm2022/ngwr-avatar.mjs +81 -71
  62. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  63. package/fesm2022/ngwr-back-top.mjs +81 -0
  64. package/fesm2022/ngwr-back-top.mjs.map +1 -0
  65. package/fesm2022/ngwr-badge.mjs +192 -0
  66. package/fesm2022/ngwr-badge.mjs.map +1 -0
  67. package/fesm2022/ngwr-bar-chart.mjs +69 -0
  68. package/fesm2022/ngwr-bar-chart.mjs.map +1 -0
  69. package/fesm2022/ngwr-blur-text.mjs +181 -0
  70. package/fesm2022/ngwr-blur-text.mjs.map +1 -0
  71. package/fesm2022/ngwr-border-glow.mjs +278 -0
  72. package/fesm2022/ngwr-border-glow.mjs.map +1 -0
  73. package/fesm2022/ngwr-breadcrumbs.mjs +101 -0
  74. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -0
  75. package/fesm2022/ngwr-button.mjs +179 -104
  76. package/fesm2022/ngwr-button.mjs.map +1 -1
  77. package/fesm2022/ngwr-calendar-heatmap.mjs +145 -0
  78. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -0
  79. package/fesm2022/ngwr-calendar.mjs +402 -0
  80. package/fesm2022/ngwr-calendar.mjs.map +1 -0
  81. package/fesm2022/ngwr-card.mjs +100 -0
  82. package/fesm2022/ngwr-card.mjs.map +1 -0
  83. package/fesm2022/ngwr-carousel.mjs +128 -0
  84. package/fesm2022/ngwr-carousel.mjs.map +1 -0
  85. package/fesm2022/ngwr-cascader.mjs +280 -0
  86. package/fesm2022/ngwr-cascader.mjs.map +1 -0
  87. package/fesm2022/ngwr-checkbox.mjs +214 -54
  88. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  89. package/fesm2022/ngwr-circular-text.mjs +168 -0
  90. package/fesm2022/ngwr-circular-text.mjs.map +1 -0
  91. package/fesm2022/ngwr-click-spark.mjs +163 -0
  92. package/fesm2022/ngwr-click-spark.mjs.map +1 -0
  93. package/fesm2022/ngwr-clipboard.mjs +130 -0
  94. package/fesm2022/ngwr-clipboard.mjs.map +1 -0
  95. package/fesm2022/ngwr-collapse.mjs +232 -0
  96. package/fesm2022/ngwr-collapse.mjs.map +1 -0
  97. package/fesm2022/ngwr-color-picker.mjs +646 -0
  98. package/fesm2022/ngwr-color-picker.mjs.map +1 -0
  99. package/fesm2022/ngwr-command-palette.mjs +259 -0
  100. package/fesm2022/ngwr-command-palette.mjs.map +1 -0
  101. package/fesm2022/ngwr-compare.mjs +137 -0
  102. package/fesm2022/ngwr-compare.mjs.map +1 -0
  103. package/fesm2022/ngwr-confetti.mjs +160 -0
  104. package/fesm2022/ngwr-confetti.mjs.map +1 -0
  105. package/fesm2022/ngwr-context-menu.mjs +653 -0
  106. package/fesm2022/ngwr-context-menu.mjs.map +1 -0
  107. package/fesm2022/ngwr-cookie.mjs +127 -0
  108. package/fesm2022/ngwr-cookie.mjs.map +1 -0
  109. package/fesm2022/ngwr-counter.mjs +415 -0
  110. package/fesm2022/ngwr-counter.mjs.map +1 -0
  111. package/fesm2022/ngwr-date-adapter-fns.mjs +180 -0
  112. package/fesm2022/ngwr-date-adapter-fns.mjs.map +1 -0
  113. package/fesm2022/ngwr-date-adapter-luxon.mjs +201 -0
  114. package/fesm2022/ngwr-date-adapter-luxon.mjs.map +1 -0
  115. package/fesm2022/ngwr-date-adapter.mjs +419 -0
  116. package/fesm2022/ngwr-date-adapter.mjs.map +1 -0
  117. package/fesm2022/ngwr-date-picker.mjs +624 -0
  118. package/fesm2022/ngwr-date-picker.mjs.map +1 -0
  119. package/fesm2022/ngwr-decrypt-text.mjs +396 -0
  120. package/fesm2022/ngwr-decrypt-text.mjs.map +1 -0
  121. package/fesm2022/ngwr-density.mjs +157 -0
  122. package/fesm2022/ngwr-density.mjs.map +1 -0
  123. package/fesm2022/ngwr-descriptions.mjs +83 -0
  124. package/fesm2022/ngwr-descriptions.mjs.map +1 -0
  125. package/fesm2022/ngwr-dialog.mjs +249 -377
  126. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  127. package/fesm2022/ngwr-directives.mjs +315 -0
  128. package/fesm2022/ngwr-directives.mjs.map +1 -0
  129. package/fesm2022/ngwr-divider.mjs +74 -59
  130. package/fesm2022/ngwr-divider.mjs.map +1 -1
  131. package/fesm2022/ngwr-donut-chart.mjs +131 -0
  132. package/fesm2022/ngwr-donut-chart.mjs.map +1 -0
  133. package/fesm2022/ngwr-drag-drop.mjs +117 -0
  134. package/fesm2022/ngwr-drag-drop.mjs.map +1 -0
  135. package/fesm2022/ngwr-drawer.mjs +315 -0
  136. package/fesm2022/ngwr-drawer.mjs.map +1 -0
  137. package/fesm2022/ngwr-dropdown.mjs +276 -229
  138. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  139. package/fesm2022/ngwr-empty.mjs +57 -0
  140. package/fesm2022/ngwr-empty.mjs.map +1 -0
  141. package/fesm2022/ngwr-falling-text.mjs +316 -0
  142. package/fesm2022/ngwr-falling-text.mjs.map +1 -0
  143. package/fesm2022/ngwr-file-upload.mjs +260 -0
  144. package/fesm2022/ngwr-file-upload.mjs.map +1 -0
  145. package/fesm2022/ngwr-form.mjs +133 -48
  146. package/fesm2022/ngwr-form.mjs.map +1 -1
  147. package/fesm2022/ngwr-fuzzy-text.mjs +373 -0
  148. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -0
  149. package/fesm2022/ngwr-gauge.mjs +83 -0
  150. package/fesm2022/ngwr-gauge.mjs.map +1 -0
  151. package/fesm2022/ngwr-glitch-text.mjs +67 -0
  152. package/fesm2022/ngwr-glitch-text.mjs.map +1 -0
  153. package/fesm2022/ngwr-gradient-text.mjs +109 -0
  154. package/fesm2022/ngwr-gradient-text.mjs.map +1 -0
  155. package/fesm2022/ngwr-hotkey.mjs +263 -0
  156. package/fesm2022/ngwr-hotkey.mjs.map +1 -0
  157. package/fesm2022/ngwr-i18n-en.mjs +168 -0
  158. package/fesm2022/ngwr-i18n-en.mjs.map +1 -0
  159. package/fesm2022/ngwr-i18n-ru.mjs +156 -0
  160. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -0
  161. package/fesm2022/ngwr-i18n.mjs +478 -0
  162. package/fesm2022/ngwr-i18n.mjs.map +1 -0
  163. package/fesm2022/ngwr-icon-adapters-feather.mjs +74 -0
  164. package/fesm2022/ngwr-icon-adapters-feather.mjs.map +1 -0
  165. package/fesm2022/ngwr-icon-adapters-lucide.mjs +88 -0
  166. package/fesm2022/ngwr-icon-adapters-lucide.mjs.map +1 -0
  167. package/fesm2022/ngwr-icon.mjs +189 -649
  168. package/fesm2022/ngwr-icon.mjs.map +1 -1
  169. package/fesm2022/ngwr-image-cropper.mjs +299 -0
  170. package/fesm2022/ngwr-image-cropper.mjs.map +1 -0
  171. package/fesm2022/ngwr-input-number.mjs +239 -0
  172. package/fesm2022/ngwr-input-number.mjs.map +1 -0
  173. package/fesm2022/ngwr-input-otp.mjs +216 -0
  174. package/fesm2022/ngwr-input-otp.mjs.map +1 -0
  175. package/fesm2022/ngwr-input.mjs +183 -104
  176. package/fesm2022/ngwr-input.mjs.map +1 -1
  177. package/fesm2022/ngwr-keyboard.mjs +47 -0
  178. package/fesm2022/ngwr-keyboard.mjs.map +1 -0
  179. package/fesm2022/ngwr-knob.mjs +227 -0
  180. package/fesm2022/ngwr-knob.mjs.map +1 -0
  181. package/fesm2022/ngwr-layout.mjs +197 -0
  182. package/fesm2022/ngwr-layout.mjs.map +1 -0
  183. package/fesm2022/ngwr-lightbox.mjs +131 -0
  184. package/fesm2022/ngwr-lightbox.mjs.map +1 -0
  185. package/fesm2022/ngwr-line-chart.mjs +176 -0
  186. package/fesm2022/ngwr-line-chart.mjs.map +1 -0
  187. package/fesm2022/ngwr-list.mjs +132 -0
  188. package/fesm2022/ngwr-list.mjs.map +1 -0
  189. package/fesm2022/ngwr-loading-bar.mjs +160 -0
  190. package/fesm2022/ngwr-loading-bar.mjs.map +1 -0
  191. package/fesm2022/ngwr-marquee.mjs +224 -0
  192. package/fesm2022/ngwr-marquee.mjs.map +1 -0
  193. package/fesm2022/ngwr-media.mjs +132 -0
  194. package/fesm2022/ngwr-media.mjs.map +1 -0
  195. package/fesm2022/ngwr-mention.mjs +374 -0
  196. package/fesm2022/ngwr-mention.mjs.map +1 -0
  197. package/fesm2022/ngwr-meta.mjs +266 -0
  198. package/fesm2022/ngwr-meta.mjs.map +1 -0
  199. package/fesm2022/ngwr-meter-group.mjs +73 -0
  200. package/fesm2022/ngwr-meter-group.mjs.map +1 -0
  201. package/fesm2022/ngwr-overlay.mjs +145 -0
  202. package/fesm2022/ngwr-overlay.mjs.map +1 -0
  203. package/fesm2022/ngwr-page-header.mjs +53 -0
  204. package/fesm2022/ngwr-page-header.mjs.map +1 -0
  205. package/fesm2022/ngwr-pagination.mjs +152 -96
  206. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  207. package/fesm2022/ngwr-pipes.mjs +290 -11
  208. package/fesm2022/ngwr-pipes.mjs.map +1 -1
  209. package/fesm2022/ngwr-platform.mjs +63 -0
  210. package/fesm2022/ngwr-platform.mjs.map +1 -0
  211. package/fesm2022/ngwr-popconfirm.mjs +188 -0
  212. package/fesm2022/ngwr-popconfirm.mjs.map +1 -0
  213. package/fesm2022/ngwr-popover.mjs +361 -0
  214. package/fesm2022/ngwr-popover.mjs.map +1 -0
  215. package/fesm2022/ngwr-progress.mjs +47 -39
  216. package/fesm2022/ngwr-progress.mjs.map +1 -1
  217. package/fesm2022/ngwr-qr.mjs +160 -179
  218. package/fesm2022/ngwr-qr.mjs.map +1 -1
  219. package/fesm2022/ngwr-radio.mjs +204 -0
  220. package/fesm2022/ngwr-radio.mjs.map +1 -0
  221. package/fesm2022/ngwr-rating.mjs +180 -0
  222. package/fesm2022/ngwr-rating.mjs.map +1 -0
  223. package/fesm2022/ngwr-result.mjs +119 -0
  224. package/fesm2022/ngwr-result.mjs.map +1 -0
  225. package/fesm2022/ngwr-rotating-text.mjs +256 -0
  226. package/fesm2022/ngwr-rotating-text.mjs.map +1 -0
  227. package/fesm2022/ngwr-scramble-text.mjs +165 -0
  228. package/fesm2022/ngwr-scramble-text.mjs.map +1 -0
  229. package/fesm2022/ngwr-scroll.mjs +107 -0
  230. package/fesm2022/ngwr-scroll.mjs.map +1 -0
  231. package/fesm2022/ngwr-segmented.mjs +96 -0
  232. package/fesm2022/ngwr-segmented.mjs.map +1 -0
  233. package/fesm2022/ngwr-select.mjs +844 -309
  234. package/fesm2022/ngwr-select.mjs.map +1 -1
  235. package/fesm2022/ngwr-shiny-text.mjs +127 -0
  236. package/fesm2022/ngwr-shiny-text.mjs.map +1 -0
  237. package/fesm2022/ngwr-sidebar.mjs +134 -0
  238. package/fesm2022/ngwr-sidebar.mjs.map +1 -0
  239. package/fesm2022/ngwr-skeleton.mjs +59 -34
  240. package/fesm2022/ngwr-skeleton.mjs.map +1 -1
  241. package/fesm2022/ngwr-slider.mjs +234 -0
  242. package/fesm2022/ngwr-slider.mjs.map +1 -0
  243. package/fesm2022/ngwr-sparkline.mjs +104 -0
  244. package/fesm2022/ngwr-sparkline.mjs.map +1 -0
  245. package/fesm2022/ngwr-speed-dial.mjs +79 -0
  246. package/fesm2022/ngwr-speed-dial.mjs.map +1 -0
  247. package/fesm2022/ngwr-spinner.mjs +34 -28
  248. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  249. package/fesm2022/ngwr-splash-cursor.mjs +970 -0
  250. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -0
  251. package/fesm2022/ngwr-split-text.mjs +200 -0
  252. package/fesm2022/ngwr-split-text.mjs.map +1 -0
  253. package/fesm2022/ngwr-splitter.mjs +125 -0
  254. package/fesm2022/ngwr-splitter.mjs.map +1 -0
  255. package/fesm2022/ngwr-spotlight-card.mjs +138 -0
  256. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -0
  257. package/fesm2022/ngwr-squircle.mjs +320 -0
  258. package/fesm2022/ngwr-squircle.mjs.map +1 -0
  259. package/fesm2022/ngwr-star-border.mjs +72 -0
  260. package/fesm2022/ngwr-star-border.mjs.map +1 -0
  261. package/fesm2022/ngwr-statistic.mjs +220 -0
  262. package/fesm2022/ngwr-statistic.mjs.map +1 -0
  263. package/fesm2022/ngwr-stepper.mjs +186 -0
  264. package/fesm2022/ngwr-stepper.mjs.map +1 -0
  265. package/fesm2022/ngwr-storage.mjs +317 -0
  266. package/fesm2022/ngwr-storage.mjs.map +1 -0
  267. package/fesm2022/ngwr-switch.mjs +99 -0
  268. package/fesm2022/ngwr-switch.mjs.map +1 -0
  269. package/fesm2022/ngwr-table.mjs +217 -206
  270. package/fesm2022/ngwr-table.mjs.map +1 -1
  271. package/fesm2022/ngwr-tabs.mjs +217 -0
  272. package/fesm2022/ngwr-tabs.mjs.map +1 -0
  273. package/fesm2022/ngwr-textarea.mjs +106 -120
  274. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  275. package/fesm2022/ngwr-theme.mjs +152 -0
  276. package/fesm2022/ngwr-theme.mjs.map +1 -0
  277. package/fesm2022/ngwr-tilt-card.mjs +137 -0
  278. package/fesm2022/ngwr-tilt-card.mjs.map +1 -0
  279. package/fesm2022/ngwr-timeline.mjs +73 -0
  280. package/fesm2022/ngwr-timeline.mjs.map +1 -0
  281. package/fesm2022/ngwr-toast.mjs +446 -0
  282. package/fesm2022/ngwr-toast.mjs.map +1 -0
  283. package/fesm2022/ngwr-toolbar.mjs +46 -0
  284. package/fesm2022/ngwr-toolbar.mjs.map +1 -0
  285. package/fesm2022/ngwr-tree.mjs +483 -0
  286. package/fesm2022/ngwr-tree.mjs.map +1 -0
  287. package/fesm2022/ngwr-typewriter.mjs +229 -0
  288. package/fesm2022/ngwr-typewriter.mjs.map +1 -0
  289. package/fesm2022/ngwr-typography.mjs +79 -0
  290. package/fesm2022/ngwr-typography.mjs.map +1 -0
  291. package/fesm2022/ngwr-utils.mjs +535 -0
  292. package/fesm2022/ngwr-utils.mjs.map +1 -0
  293. package/fesm2022/ngwr-validators.mjs +214 -0
  294. package/fesm2022/ngwr-validators.mjs.map +1 -0
  295. package/fesm2022/ngwr-version.mjs +51 -0
  296. package/fesm2022/ngwr-version.mjs.map +1 -0
  297. package/fesm2022/ngwr-virtual-scroll.mjs +99 -0
  298. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -0
  299. package/fesm2022/ngwr-waves.mjs +356 -0
  300. package/fesm2022/ngwr-waves.mjs.map +1 -0
  301. package/fesm2022/ngwr-window.mjs +1141 -0
  302. package/fesm2022/ngwr-window.mjs.map +1 -0
  303. package/fesm2022/ngwr.mjs +0 -3
  304. package/fesm2022/ngwr.mjs.map +1 -1
  305. package/file-upload/styles/_index.scss +152 -0
  306. package/form/styles/_index.scss +85 -42
  307. package/gauge/styles/_index.scss +37 -0
  308. package/glitch-text/glitch-text.scss +1 -0
  309. package/glitch-text/styles/_index.scss +144 -0
  310. package/gradient-text/gradient-text.scss +1 -0
  311. package/gradient-text/styles/_index.scss +113 -0
  312. package/icon/styles/_index.scss +21 -15
  313. package/image-cropper/styles/_index.scss +114 -0
  314. package/input/styles/_index.scss +133 -93
  315. package/input-number/styles/_index.scss +75 -0
  316. package/input-otp/styles/_index.scss +53 -0
  317. package/keyboard/styles/_index.scss +55 -0
  318. package/knob/styles/_index.scss +54 -0
  319. package/layout/styles/_index.scss +65 -0
  320. package/lightbox/lightbox.scss +1 -0
  321. package/lightbox/styles/_index.scss +144 -0
  322. package/line-chart/styles/_index.scss +93 -0
  323. package/list/list.scss +1 -0
  324. package/list/styles/_index.scss +101 -0
  325. package/loading-bar/loading-bar.scss +1 -0
  326. package/loading-bar/styles/_index.scss +29 -0
  327. package/marquee/marquee.scss +1 -0
  328. package/marquee/styles/_index.scss +138 -0
  329. package/mention/styles/_index.scss +47 -0
  330. package/meter-group/styles/_index.scss +61 -0
  331. package/package.json +576 -99
  332. package/page-header/styles/_index.scss +78 -0
  333. package/pagination/styles/_index.scss +89 -34
  334. package/popconfirm/styles/_index.scss +32 -0
  335. package/popover/styles/_index.scss +83 -0
  336. package/progress/styles/_index.scss +29 -14
  337. package/qr/styles/_index.scss +6 -3
  338. package/radio/styles/_index.scss +111 -0
  339. package/rating/styles/_index.scss +63 -0
  340. package/result/styles/_index.scss +69 -0
  341. package/rotating-text/rotating-text.scss +1 -0
  342. package/rotating-text/styles/_index.scss +39 -0
  343. package/schematics/collection.json +37 -0
  344. package/schematics/component-style/index.js +49 -0
  345. package/{cdk/utils/index.d.ts → schematics/component-style/schema.js} +2 -8
  346. package/schematics/component-style/schema.json +20 -0
  347. package/schematics/icon-set/index.js +96 -0
  348. package/schematics/icon-set/schema.js +8 -0
  349. package/schematics/icon-set/schema.json +39 -0
  350. package/schematics/migrations/v7/index.js +187 -0
  351. package/schematics/migrations.json +10 -0
  352. package/schematics/ng-add/index.js +180 -0
  353. package/schematics/ng-add/schema.js +8 -0
  354. package/schematics/ng-add/schema.json +80 -0
  355. package/schematics/page/index.js +63 -0
  356. package/schematics/page/schema.js +8 -0
  357. package/schematics/page/schema.json +39 -0
  358. package/schematics/page/templates.js +198 -0
  359. package/schematics/provider/index.js +126 -0
  360. package/schematics/provider/schema.js +8 -0
  361. package/schematics/provider/schema.json +52 -0
  362. package/schematics/use/index.js +143 -0
  363. package/schematics/use/schema.js +8 -0
  364. package/schematics/use/schema.json +25 -0
  365. package/schematics/use/symbol-map.json +356 -0
  366. package/scramble-text/scramble-text.scss +1 -0
  367. package/scramble-text/styles/_index.scss +8 -0
  368. package/segmented/styles/_index.scss +92 -0
  369. package/select/styles/_index.scss +245 -159
  370. package/shiny-text/shiny-text.scss +1 -0
  371. package/shiny-text/styles/_index.scss +101 -0
  372. package/sidebar/styles/_index.scss +208 -0
  373. package/skeleton/styles/_index.scss +33 -33
  374. package/slider/styles/_index.scss +77 -0
  375. package/sparkline/styles/_index.scss +9 -0
  376. package/speed-dial/styles/_index.scss +158 -0
  377. package/spinner/styles/_index.scss +38 -22
  378. package/splash-cursor/splash-cursor.scss +1 -0
  379. package/splash-cursor/styles/_index.scss +27 -0
  380. package/split-text/split-text.scss +1 -0
  381. package/split-text/styles/_index.scss +22 -0
  382. package/splitter/styles/_index.scss +85 -0
  383. package/spotlight-card/spotlight-card.scss +1 -0
  384. package/spotlight-card/styles/_index.scss +43 -0
  385. package/squircle/styles/_index.scss +34 -0
  386. package/star-border/star-border.scss +1 -0
  387. package/star-border/styles/_index.scss +118 -0
  388. package/statistic/styles/_index.scss +54 -0
  389. package/stepper/styles/_index.scss +162 -0
  390. package/styles/_animations.scss +198 -0
  391. package/styles/_breakpoints.scss +75 -0
  392. package/styles/_grid.scss +71 -0
  393. package/styles/_reset.scss +123 -0
  394. package/styles/_typography.scss +122 -0
  395. package/styles.scss +102 -13
  396. package/switch/styles/_index.scss +82 -0
  397. package/table/styles/_index.scss +255 -4
  398. package/tabs/styles/_index.scss +71 -0
  399. package/textarea/styles/_index.scss +47 -56
  400. package/theme/styles/_colors.scss +83 -0
  401. package/theme/styles/_dark.scss +85 -0
  402. package/theme/styles/_focus.scss +93 -0
  403. package/theme/styles/_index.scss +5 -0
  404. package/theme/styles/_mixins.scss +57 -0
  405. package/theme/styles/_variables.scss +118 -0
  406. package/tilt-card/styles/_index.scss +40 -0
  407. package/tilt-card/tilt-card.scss +1 -0
  408. package/timeline/styles/_index.scss +127 -0
  409. package/toast/styles/_index.scss +263 -0
  410. package/toolbar/styles/_index.scss +65 -0
  411. package/tree/styles/_index.scss +271 -0
  412. package/types/ngwr-affix.d.ts +43 -0
  413. package/types/ngwr-alert.d.ts +68 -0
  414. package/types/ngwr-anchor.d.ts +53 -0
  415. package/types/ngwr-aurora.d.ts +52 -0
  416. package/types/ngwr-avatar.d.ts +90 -0
  417. package/types/ngwr-back-top.d.ts +37 -0
  418. package/types/ngwr-badge.d.ts +158 -0
  419. package/types/ngwr-bar-chart.d.ts +47 -0
  420. package/types/ngwr-blur-text.d.ts +62 -0
  421. package/types/ngwr-border-glow.d.ts +66 -0
  422. package/types/ngwr-breadcrumbs.d.ts +61 -0
  423. package/types/ngwr-button.d.ts +176 -0
  424. package/types/ngwr-calendar-heatmap.d.ts +58 -0
  425. package/types/ngwr-calendar.d.ts +116 -0
  426. package/types/ngwr-card.d.ts +50 -0
  427. package/types/ngwr-carousel.d.ts +57 -0
  428. package/types/ngwr-cascader.d.ts +107 -0
  429. package/types/ngwr-checkbox.d.ts +139 -0
  430. package/types/ngwr-circular-text.d.ts +49 -0
  431. package/types/ngwr-click-spark.d.ts +52 -0
  432. package/types/ngwr-clipboard.d.ts +53 -0
  433. package/types/ngwr-collapse.d.ts +139 -0
  434. package/types/ngwr-color-picker.d.ts +302 -0
  435. package/types/ngwr-command-palette.d.ts +113 -0
  436. package/types/ngwr-compare.d.ts +55 -0
  437. package/types/ngwr-confetti.d.ts +70 -0
  438. package/types/ngwr-context-menu.d.ts +207 -0
  439. package/types/ngwr-cookie.d.ts +60 -0
  440. package/types/ngwr-counter.d.ts +182 -0
  441. package/types/ngwr-date-adapter-fns.d.ts +73 -0
  442. package/types/ngwr-date-adapter-luxon.d.ts +73 -0
  443. package/types/ngwr-date-adapter.d.ts +198 -0
  444. package/types/ngwr-date-picker.d.ts +117 -0
  445. package/types/ngwr-decrypt-text.d.ts +85 -0
  446. package/types/ngwr-density.d.ts +97 -0
  447. package/types/ngwr-descriptions.d.ts +41 -0
  448. package/types/ngwr-dialog.d.ts +210 -0
  449. package/types/ngwr-directives.d.ts +125 -0
  450. package/types/ngwr-divider.d.ts +73 -0
  451. package/types/ngwr-donut-chart.d.ts +53 -0
  452. package/types/ngwr-drag-drop.d.ts +83 -0
  453. package/types/ngwr-drawer.d.ts +155 -0
  454. package/types/ngwr-dropdown.d.ts +124 -0
  455. package/types/ngwr-empty.d.ts +38 -0
  456. package/types/ngwr-falling-text.d.ts +63 -0
  457. package/types/ngwr-file-upload.d.ts +94 -0
  458. package/types/ngwr-form.d.ts +95 -0
  459. package/types/ngwr-fuzzy-text.d.ts +74 -0
  460. package/types/ngwr-gauge.d.ts +39 -0
  461. package/types/ngwr-glitch-text.d.ts +31 -0
  462. package/types/ngwr-gradient-text.d.ts +46 -0
  463. package/types/ngwr-hotkey.d.ts +142 -0
  464. package/types/ngwr-i18n-en.d.ts +18 -0
  465. package/types/ngwr-i18n-ru.d.ts +6 -0
  466. package/types/ngwr-i18n.d.ts +336 -0
  467. package/types/ngwr-icon-adapters-feather.d.ts +44 -0
  468. package/types/ngwr-icon-adapters-lucide.d.ts +54 -0
  469. package/types/ngwr-icon.d.ts +180 -0
  470. package/types/ngwr-image-cropper.d.ts +110 -0
  471. package/types/ngwr-input-number.d.ts +77 -0
  472. package/types/ngwr-input-otp.d.ts +78 -0
  473. package/types/ngwr-input.d.ts +131 -0
  474. package/types/ngwr-keyboard.d.ts +34 -0
  475. package/types/ngwr-knob.d.ts +77 -0
  476. package/types/ngwr-layout.d.ts +89 -0
  477. package/types/ngwr-lightbox.d.ts +50 -0
  478. package/types/ngwr-line-chart.d.ts +90 -0
  479. package/types/ngwr-list.d.ts +71 -0
  480. package/types/ngwr-loading-bar.d.ts +79 -0
  481. package/types/ngwr-marquee.d.ts +95 -0
  482. package/types/ngwr-media.d.ts +74 -0
  483. package/types/ngwr-mention.d.ts +110 -0
  484. package/types/ngwr-meta.d.ts +164 -0
  485. package/types/ngwr-meter-group.d.ts +57 -0
  486. package/types/ngwr-overlay.d.ts +110 -0
  487. package/types/ngwr-page-header.d.ts +35 -0
  488. package/types/ngwr-pagination.d.ts +119 -0
  489. package/types/ngwr-pipes.d.ts +177 -0
  490. package/types/ngwr-platform.d.ts +38 -0
  491. package/types/ngwr-popconfirm.d.ts +79 -0
  492. package/types/ngwr-popover.d.ts +90 -0
  493. package/types/ngwr-progress.d.ts +33 -0
  494. package/types/ngwr-qr.d.ts +56 -0
  495. package/types/ngwr-radio.d.ts +120 -0
  496. package/types/ngwr-rating.d.ts +62 -0
  497. package/types/ngwr-result.d.ts +64 -0
  498. package/types/ngwr-rotating-text.d.ts +72 -0
  499. package/types/ngwr-scramble-text.d.ts +49 -0
  500. package/types/ngwr-scroll.d.ts +65 -0
  501. package/types/ngwr-segmented.d.ts +65 -0
  502. package/types/ngwr-select.d.ts +413 -0
  503. package/types/ngwr-shiny-text.d.ts +70 -0
  504. package/types/ngwr-sidebar.d.ts +83 -0
  505. package/types/ngwr-skeleton.d.ts +41 -0
  506. package/types/ngwr-slider.d.ts +86 -0
  507. package/types/ngwr-sparkline.d.ts +48 -0
  508. package/types/ngwr-speed-dial.d.ts +51 -0
  509. package/types/ngwr-spinner.d.ts +41 -0
  510. package/types/ngwr-splash-cursor.d.ts +94 -0
  511. package/types/ngwr-split-text.d.ts +83 -0
  512. package/types/ngwr-splitter.d.ts +52 -0
  513. package/types/ngwr-spotlight-card.d.ts +71 -0
  514. package/types/ngwr-squircle.d.ts +132 -0
  515. package/types/ngwr-star-border.d.ts +40 -0
  516. package/types/ngwr-statistic.d.ts +88 -0
  517. package/types/ngwr-stepper.d.ts +99 -0
  518. package/types/ngwr-storage.d.ts +178 -0
  519. package/types/ngwr-switch.d.ts +39 -0
  520. package/types/ngwr-table.d.ts +237 -0
  521. package/types/ngwr-tabs.d.ts +125 -0
  522. package/types/ngwr-textarea.d.ts +60 -0
  523. package/types/ngwr-theme.d.ts +124 -0
  524. package/types/ngwr-tilt-card.d.ts +63 -0
  525. package/types/ngwr-timeline.d.ts +40 -0
  526. package/types/ngwr-toast.d.ts +230 -0
  527. package/types/ngwr-toolbar.d.ts +30 -0
  528. package/types/ngwr-tree.d.ts +150 -0
  529. package/types/ngwr-typewriter.d.ts +84 -0
  530. package/types/ngwr-typography.d.ts +56 -0
  531. package/types/ngwr-utils.d.ts +447 -0
  532. package/types/ngwr-validators.d.ts +70 -0
  533. package/types/ngwr-version.d.ts +44 -0
  534. package/types/ngwr-virtual-scroll.d.ts +64 -0
  535. package/types/ngwr-waves.d.ts +71 -0
  536. package/types/ngwr-window.d.ts +437 -0
  537. package/typewriter/styles/_index.scss +33 -0
  538. package/typewriter/typewriter.scss +1 -0
  539. package/typography/styles/_index.scss +211 -0
  540. package/virtual-scroll/styles/_index.scss +27 -0
  541. package/virtual-scroll/virtual-scroll.scss +1 -0
  542. package/waves/styles/_index.scss +24 -0
  543. package/waves/waves.scss +1 -0
  544. package/window/styles/_index.scss +430 -0
  545. package/alert/index.d.ts +0 -32
  546. package/alert/styles/theming.scss +0 -26
  547. package/alert/styles/vars.scss +0 -11
  548. package/avatar/index.d.ts +0 -30
  549. package/button/index.d.ts +0 -45
  550. package/button/styles/vars.scss +0 -13
  551. package/cdk/index.d.ts +0 -24
  552. package/cdk/rxjs/index.d.ts +0 -40
  553. package/cdk/types/index.d.ts +0 -27
  554. package/checkbox/index.d.ts +0 -31
  555. package/checkbox/styles/vars.scss +0 -16
  556. package/dialog/index.d.ts +0 -193
  557. package/dialog/styles/vars.scss +0 -7
  558. package/divider/index.d.ts +0 -16
  559. package/dropdown/index.d.ts +0 -68
  560. package/dropdown/styles/vars.scss +0 -18
  561. package/fesm2022/ngwr-cdk-rxjs.mjs +0 -53
  562. package/fesm2022/ngwr-cdk-rxjs.mjs.map +0 -1
  563. package/fesm2022/ngwr-cdk-types.mjs +0 -44
  564. package/fesm2022/ngwr-cdk-types.mjs.map +0 -1
  565. package/fesm2022/ngwr-cdk-utils.mjs +0 -30
  566. package/fesm2022/ngwr-cdk-utils.mjs.map +0 -1
  567. package/fesm2022/ngwr-cdk.mjs +0 -46
  568. package/fesm2022/ngwr-cdk.mjs.map +0 -1
  569. package/fesm2022/ngwr-tag.mjs +0 -87
  570. package/fesm2022/ngwr-tag.mjs.map +0 -1
  571. package/form/index.d.ts +0 -28
  572. package/icon/index.d.ts +0 -830
  573. package/icon/styles/vars.scss +0 -3
  574. package/input/index.d.ts +0 -43
  575. package/input/styles/vars.scss +0 -17
  576. package/pagination/index.d.ts +0 -34
  577. package/pagination/styles/vars.scss +0 -14
  578. package/pipes/index.d.ts +0 -17
  579. package/progress/index.d.ts +0 -13
  580. package/progress/styles/theming.scss +0 -8
  581. package/progress/styles/vars.scss +0 -6
  582. package/qr/index.d.ts +0 -127
  583. package/select/index.d.ts +0 -121
  584. package/select/styles/vars.scss +0 -32
  585. package/skeleton/index.d.ts +0 -13
  586. package/spinner/index.d.ts +0 -23
  587. package/styles/animations.scss +0 -92
  588. package/styles/cdk.scss +0 -5
  589. package/styles/colors.scss +0 -72
  590. package/styles/grid.scss +0 -99
  591. package/styles/maps.scss +0 -31
  592. package/styles/reset.scss +0 -112
  593. package/styles/variables.scss +0 -72
  594. package/table/index.d.ts +0 -101
  595. package/table/styles/table-filter.scss +0 -202
  596. package/table/styles/table-sort.scss +0 -47
  597. package/table/styles/table.scss +0 -232
  598. package/table/styles/vars.scss +0 -21
  599. package/tag/index.d.ts +0 -24
  600. package/tag/styles/_index.scss +0 -32
  601. package/tag/styles/theming.scss +0 -21
  602. package/tag/styles/vars.scss +0 -12
  603. package/textarea/index.d.ts +0 -47
  604. package/textarea/styles/vars.scss +0 -17
  605. /package/{index.d.ts → types/ngwr.d.ts} +0 -0
@@ -0,0 +1,646 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { DecimalPipe } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { input, signal, computed, forwardRef, ViewEncapsulation, Component, model, output, inject, ElementRef, ViewContainerRef, DestroyRef, Directive } from '@angular/core';
5
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
6
+ import { WrSegmented } from 'ngwr/segmented';
7
+ import { noop, clamp } from 'ngwr/utils';
8
+ import { ScrollStrategyOptions } from '@angular/cdk/overlay';
9
+ import { ComponentPortal } from '@angular/cdk/portal';
10
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
11
+ import { WR_OVERLAY } from 'ngwr/overlay';
12
+
13
+ /**
14
+ * @license
15
+ *
16
+ * Use of this source code is governed by an MIT-style license that can be
17
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
18
+ */
19
+ /**
20
+ * Convert sRGB to HSV. Preserves alpha.
21
+ */
22
+ function rgbToHsv(rgb) {
23
+ const r = rgb.r / 255;
24
+ const g = rgb.g / 255;
25
+ const b = rgb.b / 255;
26
+ const max = Math.max(r, g, b);
27
+ const min = Math.min(r, g, b);
28
+ const d = max - min;
29
+ let h = 0;
30
+ if (d !== 0) {
31
+ if (max === r)
32
+ h = ((g - b) / d) % 6;
33
+ else if (max === g)
34
+ h = (b - r) / d + 2;
35
+ else
36
+ h = (r - g) / d + 4;
37
+ h *= 60;
38
+ if (h < 0)
39
+ h += 360;
40
+ }
41
+ const s = max === 0 ? 0 : d / max;
42
+ const v = max;
43
+ return { h, s, v, a: rgb.a };
44
+ }
45
+
46
+ /**
47
+ * @license
48
+ *
49
+ * Use of this source code is governed by an MIT-style license that can be
50
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
51
+ */
52
+ /**
53
+ * Convert HSV to sRGB. Preserves alpha. Returns integer channels in `[0, 255]`.
54
+ */
55
+ function hsvToRgb(hsv) {
56
+ const { h, s, v } = hsv;
57
+ const c = v * s;
58
+ const x = c * (1 - Math.abs(((h / 60) % 2) - 1));
59
+ const m = v - c;
60
+ let r = 0;
61
+ let g = 0;
62
+ let b = 0;
63
+ if (h < 60) {
64
+ r = c;
65
+ g = x;
66
+ }
67
+ else if (h < 120) {
68
+ r = x;
69
+ g = c;
70
+ }
71
+ else if (h < 180) {
72
+ g = c;
73
+ b = x;
74
+ }
75
+ else if (h < 240) {
76
+ g = x;
77
+ b = c;
78
+ }
79
+ else if (h < 300) {
80
+ r = x;
81
+ b = c;
82
+ }
83
+ else {
84
+ r = c;
85
+ b = x;
86
+ }
87
+ return {
88
+ r: Math.round((r + m) * 255),
89
+ g: Math.round((g + m) * 255),
90
+ b: Math.round((b + m) * 255),
91
+ a: hsv.a,
92
+ };
93
+ }
94
+
95
+ /**
96
+ * @license
97
+ *
98
+ * Use of this source code is governed by an MIT-style license that can be
99
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
100
+ */
101
+ /**
102
+ * Convert sRGB to HSL. Preserves alpha.
103
+ */
104
+ function rgbToHsl(rgb) {
105
+ const r = rgb.r / 255;
106
+ const g = rgb.g / 255;
107
+ const b = rgb.b / 255;
108
+ const max = Math.max(r, g, b);
109
+ const min = Math.min(r, g, b);
110
+ const d = max - min;
111
+ const l = (max + min) / 2;
112
+ let h = 0;
113
+ let s = 0;
114
+ if (d !== 0) {
115
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
116
+ if (max === r)
117
+ h = (g - b) / d + (g < b ? 6 : 0);
118
+ else if (max === g)
119
+ h = (b - r) / d + 2;
120
+ else
121
+ h = (r - g) / d + 4;
122
+ h *= 60;
123
+ }
124
+ return { h, s, l, a: rgb.a };
125
+ }
126
+
127
+ /**
128
+ * @license
129
+ *
130
+ * Use of this source code is governed by an MIT-style license that can be
131
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
132
+ */
133
+ function hueToChannel(p, q, t) {
134
+ let x = t;
135
+ if (x < 0)
136
+ x += 1;
137
+ if (x > 1)
138
+ x -= 1;
139
+ if (x < 1 / 6)
140
+ return p + (q - p) * 6 * x;
141
+ if (x < 1 / 2)
142
+ return q;
143
+ if (x < 2 / 3)
144
+ return p + (q - p) * (2 / 3 - x) * 6;
145
+ return p;
146
+ }
147
+ /**
148
+ * Convert HSL to sRGB. Preserves alpha. Returns integer channels in `[0, 255]`.
149
+ */
150
+ function hslToRgb(hsl) {
151
+ const h = hsl.h / 360;
152
+ const { s, l } = hsl;
153
+ let r;
154
+ let g;
155
+ let b;
156
+ if (s === 0) {
157
+ r = l;
158
+ g = l;
159
+ b = l;
160
+ }
161
+ else {
162
+ const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
163
+ const p = 2 * l - q;
164
+ r = hueToChannel(p, q, h + 1 / 3);
165
+ g = hueToChannel(p, q, h);
166
+ b = hueToChannel(p, q, h - 1 / 3);
167
+ }
168
+ return {
169
+ r: Math.round(r * 255),
170
+ g: Math.round(g * 255),
171
+ b: Math.round(b * 255),
172
+ a: hsl.a,
173
+ };
174
+ }
175
+
176
+ /**
177
+ * @license
178
+ *
179
+ * Use of this source code is governed by an MIT-style license that can be
180
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
181
+ */
182
+ /**
183
+ * Parse a CSS hex colour into {@link WrRgb}. Accepts 3, 4, 6, or 8 digit
184
+ * forms with or without a leading `#`. Returns `null` for anything that
185
+ * isn't a valid hex string.
186
+ *
187
+ * @example
188
+ * ```ts
189
+ * parseHex('#f00'); // { r: 255, g: 0, b: 0, a: 1 }
190
+ * parseHex('3969e2'); // { r: 57, g: 105, b: 226, a: 1 }
191
+ * parseHex('#3969e2ff'); // { r: 57, g: 105, b: 226, a: 1 }
192
+ * parseHex('nope'); // null
193
+ * ```
194
+ */
195
+ function parseHex(input) {
196
+ if (typeof input !== 'string')
197
+ return null;
198
+ let str = input.trim().replace(/^#/, '').toLowerCase();
199
+ // Expand shorthand: rgb → rrggbb, rgba → rrggbbaa
200
+ if (str.length === 3 || str.length === 4) {
201
+ str = str
202
+ .split('')
203
+ .map(c => c + c)
204
+ .join('');
205
+ }
206
+ if (str.length !== 6 && str.length !== 8)
207
+ return null;
208
+ if (!/^[0-9a-f]+$/.test(str))
209
+ return null;
210
+ const r = parseInt(str.slice(0, 2), 16);
211
+ const g = parseInt(str.slice(2, 4), 16);
212
+ const b = parseInt(str.slice(4, 6), 16);
213
+ const a = str.length === 8 ? parseInt(str.slice(6, 8), 16) / 255 : 1;
214
+ return { r, g, b, a };
215
+ }
216
+
217
+ /**
218
+ * @license
219
+ *
220
+ * Use of this source code is governed by an MIT-style license that can be
221
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
222
+ */
223
+ function channelToHex(n) {
224
+ const clamped = Math.max(0, Math.min(255, Math.round(n)));
225
+ return clamped.toString(16).padStart(2, '0');
226
+ }
227
+ /**
228
+ * Format a {@link WrRgb} as a CSS hex string with a leading `#`. When
229
+ * `withAlpha` is `true` the result is 8 digits (`#rrggbbaa`); otherwise
230
+ * 6 digits.
231
+ *
232
+ * @example
233
+ * ```ts
234
+ * toHex({ r: 57, g: 105, b: 226, a: 1 }); // '#3969e2'
235
+ * toHex({ r: 57, g: 105, b: 226, a: 0.5 }, true); // '#3969e280'
236
+ * ```
237
+ */
238
+ function toHex(rgb, withAlpha = false) {
239
+ const r = channelToHex(rgb.r);
240
+ const g = channelToHex(rgb.g);
241
+ const b = channelToHex(rgb.b);
242
+ if (withAlpha) {
243
+ const a = channelToHex(rgb.a * 255);
244
+ return `#${r}${g}${b}${a}`;
245
+ }
246
+ return `#${r}${g}${b}`;
247
+ }
248
+
249
+ /**
250
+ * @license
251
+ *
252
+ * Use of this source code is governed by an MIT-style license that can be
253
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
254
+ */
255
+ /**
256
+ * Inline colour picker — HSV canvas, hue slider, optional alpha slider, HEX
257
+ * input. Implements `ControlValueAccessor`, so it binds with `[(ngModel)]`,
258
+ * `[formControl]`, or `formControlName`. Output is always a string in the
259
+ * format chosen via `[format]`.
260
+ *
261
+ * @example
262
+ * ```html
263
+ * <wr-color-picker [(ngModel)]="brandColor" />
264
+ * <wr-color-picker [(ngModel)]="brandColor" [alpha]="false" />
265
+ * ```
266
+ *
267
+ * @see https://ngwr.dev/components/color-picker
268
+ */
269
+ class WrColorPicker {
270
+ /** Render the alpha slider and emit 8-digit hex / `rgba()`. @default true */
271
+ alpha = input(true, { ...(ngDevMode ? { debugName: "alpha" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
272
+ /** Disable interaction. @default false */
273
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
274
+ /** Output format produced through the CVA. @default 'hex' */
275
+ format = input('hex', /* @ts-ignore */
276
+ ...(ngDevMode ? [{ debugName: "format" }] : /* istanbul ignore next */ []));
277
+ /** Preset hex colours rendered as a clickable row beneath the inputs. Empty = no row. @default [] */
278
+ swatches = input([], /* @ts-ignore */
279
+ ...(ngDevMode ? [{ debugName: "swatches" }] : /* istanbul ignore next */ []));
280
+ // Source of truth: HSV + alpha
281
+ h = signal(0, /* @ts-ignore */
282
+ ...(ngDevMode ? [{ debugName: "h" }] : /* istanbul ignore next */ []));
283
+ s = signal(0, /* @ts-ignore */
284
+ ...(ngDevMode ? [{ debugName: "s" }] : /* istanbul ignore next */ []));
285
+ v = signal(0, /* @ts-ignore */
286
+ ...(ngDevMode ? [{ debugName: "v" }] : /* istanbul ignore next */ []));
287
+ a = signal(1, /* @ts-ignore */
288
+ ...(ngDevMode ? [{ debugName: "a" }] : /* istanbul ignore next */ []));
289
+ disabledFromCva = signal(false, /* @ts-ignore */
290
+ ...(ngDevMode ? [{ debugName: "disabledFromCva" }] : /* istanbul ignore next */ []));
291
+ effectiveDisabled = computed(() => this.disabled() || this.disabledFromCva(), /* @ts-ignore */
292
+ ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
293
+ // Derived values
294
+ /** RGB view of the current colour, computed lazily. */
295
+ rgb = computed(() => hsvToRgb({ h: this.h(), s: this.s(), v: this.v(), a: this.a() }), /* @ts-ignore */
296
+ ...(ngDevMode ? [{ debugName: "rgb" }] : /* istanbul ignore next */ []));
297
+ /** Canonical hex (used by the input field and by drag emits). */
298
+ hex = computed(() => toHex(this.rgb(), this.alpha()), /* @ts-ignore */
299
+ ...(ngDevMode ? [{ debugName: "hex" }] : /* istanbul ignore next */ []));
300
+ /** SV canvas background colour (full-saturation hue). */
301
+ hueCss = computed(() => `hsl(${this.h()}, 100%, 50%)`, /* @ts-ignore */
302
+ ...(ngDevMode ? [{ debugName: "hueCss" }] : /* istanbul ignore next */ []));
303
+ /** RGB string used for the alpha-slider gradient. */
304
+ rgbCss = computed(() => {
305
+ const { r, g, b } = this.rgb();
306
+ return `${r}, ${g}, ${b}`;
307
+ }, /* @ts-ignore */
308
+ ...(ngDevMode ? [{ debugName: "rgbCss" }] : /* istanbul ignore next */ []));
309
+ /** Thumb positions in % for each surface. */
310
+ svThumbX = computed(() => this.s() * 100, /* @ts-ignore */
311
+ ...(ngDevMode ? [{ debugName: "svThumbX" }] : /* istanbul ignore next */ []));
312
+ svThumbY = computed(() => (1 - this.v()) * 100, /* @ts-ignore */
313
+ ...(ngDevMode ? [{ debugName: "svThumbY" }] : /* istanbul ignore next */ []));
314
+ hueThumbX = computed(() => (this.h() / 360) * 100, /* @ts-ignore */
315
+ ...(ngDevMode ? [{ debugName: "hueThumbX" }] : /* istanbul ignore next */ []));
316
+ alphaThumbX = computed(() => this.a() * 100, /* @ts-ignore */
317
+ ...(ngDevMode ? [{ debugName: "alphaThumbX" }] : /* istanbul ignore next */ []));
318
+ /** Mirror of the canonical hex, edited by the user via the input field. */
319
+ hexInput = signal('', /* @ts-ignore */
320
+ ...(ngDevMode ? [{ debugName: "hexInput" }] : /* istanbul ignore next */ []));
321
+ /** Active tab in the input switcher. */
322
+ activeTab = signal('hex', /* @ts-ignore */
323
+ ...(ngDevMode ? [{ debugName: "activeTab" }] : /* istanbul ignore next */ []));
324
+ /** HSL view of the current colour, computed lazily. */
325
+ hslView = computed(() => rgbToHsl(this.rgb()), /* @ts-ignore */
326
+ ...(ngDevMode ? [{ debugName: "hslView" }] : /* istanbul ignore next */ []));
327
+ /** Alpha as integer percent for display in numeric tabs. */
328
+ alphaPercent = computed(() => Math.round(this.a() * 100), /* @ts-ignore */
329
+ ...(ngDevMode ? [{ debugName: "alphaPercent" }] : /* istanbul ignore next */ []));
330
+ tabOptions = [
331
+ { value: 'hex', label: 'HEX' },
332
+ { value: 'rgb', label: 'RGB' },
333
+ { value: 'hsl', label: 'HSL' },
334
+ ];
335
+ classes = computed(() => {
336
+ const parts = ['wr-color-picker'];
337
+ if (this.alpha())
338
+ parts.push('wr-color-picker--alpha');
339
+ if (this.effectiveDisabled())
340
+ parts.push('wr-color-picker--disabled');
341
+ return parts.join(' ');
342
+ }, /* @ts-ignore */
343
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
344
+ // ControlValueAccessor
345
+ onChange = noop;
346
+ onTouched = noop;
347
+ writeValue(value) {
348
+ const rgb = parseHex(value ?? '') ?? { r: 0, g: 0, b: 0, a: 1 };
349
+ const hsv = rgbToHsv(rgb);
350
+ this.h.set(hsv.h);
351
+ this.s.set(hsv.s);
352
+ this.v.set(hsv.v);
353
+ this.a.set(hsv.a);
354
+ this.hexInput.set(this.hex());
355
+ }
356
+ registerOnChange(fn) {
357
+ this.onChange = fn;
358
+ }
359
+ registerOnTouched(fn) {
360
+ this.onTouched = fn;
361
+ }
362
+ setDisabledState(isDisabled) {
363
+ this.disabledFromCva.set(coerceBooleanProperty(isDisabled));
364
+ }
365
+ // Drag handlers
366
+ onPointerDown(event, surface) {
367
+ if (this.effectiveDisabled())
368
+ return;
369
+ event.preventDefault();
370
+ const target = event.currentTarget;
371
+ target.setPointerCapture(event.pointerId);
372
+ const update = (e) => this.updateFromEvent(e, target, surface);
373
+ const cleanup = (e) => {
374
+ target.releasePointerCapture(e.pointerId);
375
+ target.removeEventListener('pointermove', update);
376
+ target.removeEventListener('pointerup', cleanup);
377
+ this.onTouched();
378
+ };
379
+ target.addEventListener('pointermove', update);
380
+ target.addEventListener('pointerup', cleanup);
381
+ this.updateFromEvent(event, target, surface);
382
+ }
383
+ updateFromEvent(event, target, surface) {
384
+ const rect = target.getBoundingClientRect();
385
+ const x = clamp((event.clientX - rect.left) / rect.width, 0, 1);
386
+ if (surface === 'sv') {
387
+ const y = clamp((event.clientY - rect.top) / rect.height, 0, 1);
388
+ this.s.set(x);
389
+ this.v.set(1 - y);
390
+ }
391
+ else if (surface === 'hue') {
392
+ this.h.set(x * 360);
393
+ }
394
+ else {
395
+ this.a.set(x);
396
+ }
397
+ this.emit();
398
+ }
399
+ // Hex input handlers
400
+ onHexInput(event) {
401
+ const raw = event.target.value;
402
+ this.hexInput.set(raw);
403
+ const rgb = parseHex(raw);
404
+ if (!rgb)
405
+ return;
406
+ const hsv = rgbToHsv(rgb);
407
+ this.h.set(hsv.h);
408
+ this.s.set(hsv.s);
409
+ this.v.set(hsv.v);
410
+ this.a.set(hsv.a);
411
+ this.emitWithoutHexSync();
412
+ }
413
+ onHexBlur() {
414
+ // Re-sync the input with the canonical value (in case the user typed invalid).
415
+ this.hexInput.set(this.hex());
416
+ this.onTouched();
417
+ }
418
+ // Emission
419
+ emit() {
420
+ this.emitWithoutHexSync();
421
+ this.hexInput.set(this.hex());
422
+ }
423
+ emitWithoutHexSync() {
424
+ this.onChange(this.hex());
425
+ }
426
+ // Tab + channel handlers
427
+ onTabChange(tab) {
428
+ if (tab)
429
+ this.activeTab.set(tab);
430
+ }
431
+ onRgbChannel(channel, event) {
432
+ const n = clamp(Number(event.target.value), 0, 255);
433
+ if (Number.isNaN(n))
434
+ return;
435
+ const current = this.rgb();
436
+ const next = { ...current, [channel]: n };
437
+ this.applyRgb(next);
438
+ }
439
+ onHslChannel(channel, event) {
440
+ const n = Number(event.target.value);
441
+ if (Number.isNaN(n))
442
+ return;
443
+ const current = this.hslView();
444
+ const next = channel === 'h' ? { ...current, h: clamp(n, 0, 360) } : { ...current, [channel]: clamp(n, 0, 100) / 100 };
445
+ this.applyRgb(hslToRgb(next));
446
+ }
447
+ onAlphaPercent(event) {
448
+ const n = clamp(Number(event.target.value), 0, 100);
449
+ if (Number.isNaN(n))
450
+ return;
451
+ this.a.set(n / 100);
452
+ this.emit();
453
+ }
454
+ onSwatchClick(hex) {
455
+ if (this.effectiveDisabled())
456
+ return;
457
+ const rgb = parseHex(hex);
458
+ if (!rgb)
459
+ return;
460
+ this.applyRgb(rgb);
461
+ }
462
+ /** Push an RGB triple into the HSV source of truth (preserving the current alpha if the swap removes it). */
463
+ applyRgb(rgb) {
464
+ const hsv = rgbToHsv(rgb);
465
+ this.h.set(hsv.h);
466
+ this.s.set(hsv.s);
467
+ this.v.set(hsv.v);
468
+ this.a.set(hsv.a);
469
+ this.emit();
470
+ }
471
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: WrColorPicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
472
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: WrColorPicker, isStandalone: true, selector: "wr-color-picker", inputs: { alpha: { classPropertyName: "alpha", publicName: "alpha", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, swatches: { classPropertyName: "swatches", publicName: "swatches", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "style.--wr-color-picker-hue": "hueCss()", "style.--wr-color-picker-rgb": "rgbCss()" } }, providers: [
473
+ {
474
+ provide: NG_VALUE_ACCESSOR,
475
+ // eslint-disable-next-line @angular-eslint/no-forward-ref
476
+ useExisting: forwardRef(() => WrColorPicker),
477
+ multi: true,
478
+ },
479
+ ], ngImport: i0, template: "<div class=\"wr-color-picker__sv\" (pointerdown)=\"onPointerDown($event, 'sv')\">\n <span class=\"wr-color-picker__thumb\" [style.left.%]=\"svThumbX()\" [style.top.%]=\"svThumbY()\"></span>\n</div>\n\n<div class=\"wr-color-picker__slider wr-color-picker__slider--hue\" (pointerdown)=\"onPointerDown($event, 'hue')\">\n <span class=\"wr-color-picker__thumb wr-color-picker__thumb--slider\" [style.left.%]=\"hueThumbX()\"></span>\n</div>\n\n@if (alpha()) {\n <div class=\"wr-color-picker__slider wr-color-picker__slider--alpha\" (pointerdown)=\"onPointerDown($event, 'alpha')\">\n <span class=\"wr-color-picker__thumb wr-color-picker__thumb--slider\" [style.left.%]=\"alphaThumbX()\"></span>\n </div>\n}\n\n<div class=\"wr-color-picker__chrome\">\n <span class=\"wr-color-picker__preview\" [style.background]=\"hex()\"></span>\n <wr-segmented\n class=\"wr-color-picker__tabs\"\n [options]=\"tabOptions\"\n [value]=\"activeTab()\"\n (valueChange)=\"onTabChange($event)\"\n />\n</div>\n\n@switch (activeTab()) {\n @case ('hex') {\n <div class=\"wr-color-picker__inputs wr-color-picker__inputs--hex\">\n <label class=\"wr-color-picker__field wr-color-picker__field--wide\">\n <input\n type=\"text\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n [value]=\"hexInput()\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onHexInput($event)\"\n (blur)=\"onHexBlur()\"\n />\n <span class=\"wr-color-picker__field-label\">HEX</span>\n </label>\n </div>\n }\n @case ('rgb') {\n <div class=\"wr-color-picker__inputs\">\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"255\"\n [value]=\"rgb().r\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onRgbChannel('r', $event)\"\n />\n <span class=\"wr-color-picker__field-label\">R</span>\n </label>\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"255\"\n [value]=\"rgb().g\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onRgbChannel('g', $event)\"\n />\n <span class=\"wr-color-picker__field-label\">G</span>\n </label>\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"255\"\n [value]=\"rgb().b\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onRgbChannel('b', $event)\"\n />\n <span class=\"wr-color-picker__field-label\">B</span>\n </label>\n @if (alpha()) {\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"100\"\n [value]=\"alphaPercent()\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onAlphaPercent($event)\"\n />\n <span class=\"wr-color-picker__field-label\">A%</span>\n </label>\n }\n </div>\n }\n @case ('hsl') {\n <div class=\"wr-color-picker__inputs\">\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"360\"\n [value]=\"hslView().h | number: '1.0-0'\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onHslChannel('h', $event)\"\n />\n <span class=\"wr-color-picker__field-label\">H</span>\n </label>\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"100\"\n [value]=\"hslView().s * 100 | number: '1.0-0'\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onHslChannel('s', $event)\"\n />\n <span class=\"wr-color-picker__field-label\">S%</span>\n </label>\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"100\"\n [value]=\"hslView().l * 100 | number: '1.0-0'\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onHslChannel('l', $event)\"\n />\n <span class=\"wr-color-picker__field-label\">L%</span>\n </label>\n @if (alpha()) {\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"100\"\n [value]=\"alphaPercent()\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onAlphaPercent($event)\"\n />\n <span class=\"wr-color-picker__field-label\">A%</span>\n </label>\n }\n </div>\n }\n}\n\n@if (swatches().length > 0) {\n <div class=\"wr-color-picker__swatches\">\n @for (color of swatches(); track color) {\n <button\n type=\"button\"\n class=\"wr-color-picker__swatch\"\n [style.background]=\"color\"\n [attr.aria-label]=\"color\"\n [disabled]=\"effectiveDisabled()\"\n (click)=\"onSwatchClick(color)\"\n ></button>\n }\n </div>\n}\n", dependencies: [{ kind: "component", type: WrSegmented, selector: "wr-segmented", inputs: ["options", "value", "disabled"], outputs: ["valueChange"] }, { kind: "pipe", type: DecimalPipe, name: "number" }], encapsulation: i0.ViewEncapsulation.None });
480
+ }
481
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: WrColorPicker, decorators: [{
482
+ type: Component,
483
+ args: [{ selector: 'wr-color-picker', encapsulation: ViewEncapsulation.None, host: {
484
+ '[class]': 'classes()',
485
+ '[style.--wr-color-picker-hue]': 'hueCss()',
486
+ '[style.--wr-color-picker-rgb]': 'rgbCss()',
487
+ }, imports: [DecimalPipe, WrSegmented], providers: [
488
+ {
489
+ provide: NG_VALUE_ACCESSOR,
490
+ // eslint-disable-next-line @angular-eslint/no-forward-ref
491
+ useExisting: forwardRef(() => WrColorPicker),
492
+ multi: true,
493
+ },
494
+ ], template: "<div class=\"wr-color-picker__sv\" (pointerdown)=\"onPointerDown($event, 'sv')\">\n <span class=\"wr-color-picker__thumb\" [style.left.%]=\"svThumbX()\" [style.top.%]=\"svThumbY()\"></span>\n</div>\n\n<div class=\"wr-color-picker__slider wr-color-picker__slider--hue\" (pointerdown)=\"onPointerDown($event, 'hue')\">\n <span class=\"wr-color-picker__thumb wr-color-picker__thumb--slider\" [style.left.%]=\"hueThumbX()\"></span>\n</div>\n\n@if (alpha()) {\n <div class=\"wr-color-picker__slider wr-color-picker__slider--alpha\" (pointerdown)=\"onPointerDown($event, 'alpha')\">\n <span class=\"wr-color-picker__thumb wr-color-picker__thumb--slider\" [style.left.%]=\"alphaThumbX()\"></span>\n </div>\n}\n\n<div class=\"wr-color-picker__chrome\">\n <span class=\"wr-color-picker__preview\" [style.background]=\"hex()\"></span>\n <wr-segmented\n class=\"wr-color-picker__tabs\"\n [options]=\"tabOptions\"\n [value]=\"activeTab()\"\n (valueChange)=\"onTabChange($event)\"\n />\n</div>\n\n@switch (activeTab()) {\n @case ('hex') {\n <div class=\"wr-color-picker__inputs wr-color-picker__inputs--hex\">\n <label class=\"wr-color-picker__field wr-color-picker__field--wide\">\n <input\n type=\"text\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n [value]=\"hexInput()\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onHexInput($event)\"\n (blur)=\"onHexBlur()\"\n />\n <span class=\"wr-color-picker__field-label\">HEX</span>\n </label>\n </div>\n }\n @case ('rgb') {\n <div class=\"wr-color-picker__inputs\">\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"255\"\n [value]=\"rgb().r\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onRgbChannel('r', $event)\"\n />\n <span class=\"wr-color-picker__field-label\">R</span>\n </label>\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"255\"\n [value]=\"rgb().g\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onRgbChannel('g', $event)\"\n />\n <span class=\"wr-color-picker__field-label\">G</span>\n </label>\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"255\"\n [value]=\"rgb().b\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onRgbChannel('b', $event)\"\n />\n <span class=\"wr-color-picker__field-label\">B</span>\n </label>\n @if (alpha()) {\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"100\"\n [value]=\"alphaPercent()\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onAlphaPercent($event)\"\n />\n <span class=\"wr-color-picker__field-label\">A%</span>\n </label>\n }\n </div>\n }\n @case ('hsl') {\n <div class=\"wr-color-picker__inputs\">\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"360\"\n [value]=\"hslView().h | number: '1.0-0'\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onHslChannel('h', $event)\"\n />\n <span class=\"wr-color-picker__field-label\">H</span>\n </label>\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"100\"\n [value]=\"hslView().s * 100 | number: '1.0-0'\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onHslChannel('s', $event)\"\n />\n <span class=\"wr-color-picker__field-label\">S%</span>\n </label>\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"100\"\n [value]=\"hslView().l * 100 | number: '1.0-0'\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onHslChannel('l', $event)\"\n />\n <span class=\"wr-color-picker__field-label\">L%</span>\n </label>\n @if (alpha()) {\n <label class=\"wr-color-picker__field\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"100\"\n [value]=\"alphaPercent()\"\n [disabled]=\"effectiveDisabled()\"\n (input)=\"onAlphaPercent($event)\"\n />\n <span class=\"wr-color-picker__field-label\">A%</span>\n </label>\n }\n </div>\n }\n}\n\n@if (swatches().length > 0) {\n <div class=\"wr-color-picker__swatches\">\n @for (color of swatches(); track color) {\n <button\n type=\"button\"\n class=\"wr-color-picker__swatch\"\n [style.background]=\"color\"\n [attr.aria-label]=\"color\"\n [disabled]=\"effectiveDisabled()\"\n (click)=\"onSwatchClick(color)\"\n ></button>\n }\n </div>\n}\n" }]
495
+ }], propDecorators: { alpha: [{ type: i0.Input, args: [{ isSignal: true, alias: "alpha", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], format: [{ type: i0.Input, args: [{ isSignal: true, alias: "format", required: false }] }], swatches: [{ type: i0.Input, args: [{ isSignal: true, alias: "swatches", required: false }] }] } });
496
+
497
+ /**
498
+ * @license
499
+ *
500
+ * Use of this source code is governed by an MIT-style license that can be
501
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
502
+ */
503
+ /**
504
+ * Opens a `<wr-color-picker>` in an overlay anchored to the host element.
505
+ *
506
+ * Apply to any clickable element (typically a button). Two-way binds the
507
+ * current colour through `[(value)]`; forwards `alpha` / `format` /
508
+ * `swatches` / `disabled` to the inner picker.
509
+ *
510
+ * Same overlay isolation as the rest of the lib — uses {@link WR_OVERLAY},
511
+ * not CDK's root container.
512
+ *
513
+ * @example
514
+ * ```html
515
+ * <button wrColorPickerTrigger
516
+ * [(value)]="brandColor"
517
+ * [swatches]="palette">
518
+ * <span class="swatch" [style.background]="brandColor"></span>
519
+ * {{ brandColor }}
520
+ * </button>
521
+ * ```
522
+ *
523
+ * @see https://ngwr.dev/components/color-picker
524
+ */
525
+ class WrColorPickerTrigger {
526
+ /** Two-way bindable colour value (hex string). */
527
+ value = model('', /* @ts-ignore */
528
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
529
+ /** Forwarded to the inner picker. @default true */
530
+ alpha = input(true, { ...(ngDevMode ? { debugName: "alpha" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
531
+ /** Forwarded to the inner picker. @default 'hex' */
532
+ format = input('hex', /* @ts-ignore */
533
+ ...(ngDevMode ? [{ debugName: "format" }] : /* istanbul ignore next */ []));
534
+ /** Forwarded to the inner picker. @default [] */
535
+ swatches = input([], /* @ts-ignore */
536
+ ...(ngDevMode ? [{ debugName: "swatches" }] : /* istanbul ignore next */ []));
537
+ /** Disable the trigger entirely. @default false */
538
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
539
+ /** Fires after the picker opens. */
540
+ opened = output();
541
+ /** Fires after the picker closes. */
542
+ closed = output();
543
+ host = inject(ElementRef);
544
+ overlay = inject(WR_OVERLAY);
545
+ vcr = inject(ViewContainerRef);
546
+ scrollStrategies = inject(ScrollStrategyOptions);
547
+ destroyRef = inject(DestroyRef);
548
+ isOpen = signal(false, /* @ts-ignore */
549
+ ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
550
+ overlayRef = null;
551
+ constructor() {
552
+ this.destroyRef.onDestroy(() => this.dispose());
553
+ }
554
+ /** Toggle the picker. Open if closed, close if open. */
555
+ toggle() {
556
+ if (this.disabled())
557
+ return;
558
+ if (this.isOpen()) {
559
+ this.close();
560
+ }
561
+ else {
562
+ this.open();
563
+ }
564
+ }
565
+ /** Open the picker. No-op if already open. */
566
+ open() {
567
+ if (this.isOpen() || this.disabled())
568
+ return;
569
+ const positionStrategy = this.overlay
570
+ .position()
571
+ .flexibleConnectedTo(this.host)
572
+ .withPositions([
573
+ { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },
574
+ { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },
575
+ { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },
576
+ { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },
577
+ ])
578
+ .withPush(true);
579
+ this.overlayRef = this.overlay.create({
580
+ positionStrategy,
581
+ scrollStrategy: this.scrollStrategies.reposition(),
582
+ panelClass: 'wr-color-picker-overlay',
583
+ });
584
+ const portal = new ComponentPortal(WrColorPicker, this.vcr);
585
+ const ref = this.overlayRef.attach(portal);
586
+ ref.setInput('alpha', this.alpha());
587
+ ref.setInput('format', this.format());
588
+ ref.setInput('swatches', this.swatches());
589
+ ref.setInput('disabled', this.disabled());
590
+ ref.instance.writeValue(this.value());
591
+ // Bridge inner picker's CVA onChange to our two-way [(value)] model.
592
+ ref.instance.registerOnChange((next) => this.value.set(next));
593
+ // Outside-click → close (CDK's outsidePointerEvents only fires for clicks
594
+ // outside the overlay pane; we also need to ignore re-clicks on the host).
595
+ this.overlayRef
596
+ .outsidePointerEvents()
597
+ .pipe(takeUntilDestroyed(this.destroyRef))
598
+ .subscribe(event => {
599
+ if (this.host.nativeElement.contains(event.target))
600
+ return;
601
+ this.close();
602
+ });
603
+ // Escape → close.
604
+ this.overlayRef
605
+ .keydownEvents()
606
+ .pipe(takeUntilDestroyed(this.destroyRef))
607
+ .subscribe(event => {
608
+ if (event.key === 'Escape') {
609
+ event.preventDefault();
610
+ this.close();
611
+ }
612
+ });
613
+ this.isOpen.set(true);
614
+ this.opened.emit();
615
+ }
616
+ /** Close the picker. No-op if already closed. */
617
+ close() {
618
+ if (!this.isOpen())
619
+ return;
620
+ this.dispose();
621
+ this.isOpen.set(false);
622
+ this.closed.emit();
623
+ }
624
+ dispose() {
625
+ if (this.overlayRef) {
626
+ this.overlayRef.dispose();
627
+ this.overlayRef = null;
628
+ }
629
+ }
630
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: WrColorPickerTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
631
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: WrColorPickerTrigger, isStandalone: true, selector: "[wrColorPickerTrigger]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, alpha: { classPropertyName: "alpha", publicName: "alpha", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, swatches: { classPropertyName: "swatches", publicName: "swatches", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", opened: "opened", closed: "closed" }, host: { listeners: { "click": "toggle()" } }, ngImport: i0 });
632
+ }
633
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: WrColorPickerTrigger, decorators: [{
634
+ type: Directive,
635
+ args: [{
636
+ selector: '[wrColorPickerTrigger]',
637
+ host: { '(click)': 'toggle()' },
638
+ }]
639
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], alpha: [{ type: i0.Input, args: [{ isSignal: true, alias: "alpha", required: false }] }], format: [{ type: i0.Input, args: [{ isSignal: true, alias: "format", required: false }] }], swatches: [{ type: i0.Input, args: [{ isSignal: true, alias: "swatches", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
640
+
641
+ /**
642
+ * Generated bundle index. Do not edit.
643
+ */
644
+
645
+ export { WrColorPicker, WrColorPickerTrigger, hslToRgb, hsvToRgb, parseHex, rgbToHsl, rgbToHsv, toHex };
646
+ //# sourceMappingURL=ngwr-color-picker.mjs.map