ngwr 8.0.0 → 9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/README.md +76 -29
  2. package/action-sheet/styles/_index.scss +93 -0
  3. package/alert/styles/_index.scss +10 -10
  4. package/anchor/styles/_index.scss +3 -3
  5. package/back-top/styles/_index.scss +1 -1
  6. package/badge/styles/_tag.scss +3 -3
  7. package/bar-chart/styles/_index.scss +4 -4
  8. package/border-glow/styles/_index.scss +3 -3
  9. package/breadcrumbs/styles/_index.scss +3 -3
  10. package/burger/styles/_index.scss +1 -1
  11. package/button/styles/_index.scss +4 -4
  12. package/calendar/styles/_index.scss +4 -4
  13. package/calendar-heatmap/styles/_index.scss +3 -3
  14. package/card/styles/_index.scss +5 -5
  15. package/carousel/styles/_index.scss +5 -5
  16. package/cascader/styles/_index.scss +15 -15
  17. package/checkbox/styles/_index.scss +20 -5
  18. package/collapse/styles/_index.scss +6 -6
  19. package/color-picker/styles/_index.scss +15 -9
  20. package/command-palette/styles/_index.scss +19 -16
  21. package/compare/styles/_index.scss +3 -3
  22. package/context-menu/styles/_index.scss +16 -6
  23. package/counter/styles/_index.scss +12 -1
  24. package/date-picker/styles/_index.scss +8 -8
  25. package/descriptions/styles/_index.scss +9 -9
  26. package/dialog/styles/_index.scss +7 -6
  27. package/divider/styles/_index.scss +2 -2
  28. package/donut-chart/styles/_index.scss +3 -3
  29. package/drag-drop/styles/_index.scss +11 -6
  30. package/drawer/styles/_index.scss +15 -6
  31. package/dropdown/styles/_index.scss +5 -5
  32. package/empty/styles/_index.scss +4 -4
  33. package/fesm2022/ngwr-action-sheet.mjs +81 -0
  34. package/fesm2022/ngwr-action-sheet.mjs.map +1 -0
  35. package/fesm2022/ngwr-affix.mjs +3 -3
  36. package/fesm2022/ngwr-alert.mjs +4 -4
  37. package/fesm2022/ngwr-alert.mjs.map +1 -1
  38. package/fesm2022/ngwr-anchor.mjs +4 -4
  39. package/fesm2022/ngwr-anchor.mjs.map +1 -1
  40. package/fesm2022/ngwr-aurora.mjs +5 -4
  41. package/fesm2022/ngwr-aurora.mjs.map +1 -1
  42. package/fesm2022/ngwr-avatar.mjs +4 -4
  43. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  44. package/fesm2022/ngwr-back-top.mjs +4 -4
  45. package/fesm2022/ngwr-back-top.mjs.map +1 -1
  46. package/fesm2022/ngwr-badge.mjs +8 -8
  47. package/fesm2022/ngwr-badge.mjs.map +1 -1
  48. package/fesm2022/ngwr-bar-chart.mjs +4 -4
  49. package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
  50. package/fesm2022/ngwr-blur-text.mjs +3 -3
  51. package/fesm2022/ngwr-border-glow.mjs +4 -4
  52. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  53. package/fesm2022/ngwr-breadcrumbs.mjs +8 -8
  54. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  55. package/fesm2022/ngwr-burger.mjs +4 -4
  56. package/fesm2022/ngwr-burger.mjs.map +1 -1
  57. package/fesm2022/ngwr-button.mjs +8 -8
  58. package/fesm2022/ngwr-button.mjs.map +1 -1
  59. package/fesm2022/ngwr-calendar-heatmap.mjs +4 -4
  60. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  61. package/fesm2022/ngwr-calendar.mjs +4 -4
  62. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  63. package/fesm2022/ngwr-card.mjs +11 -11
  64. package/fesm2022/ngwr-card.mjs.map +1 -1
  65. package/fesm2022/ngwr-carousel.mjs +7 -7
  66. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  67. package/fesm2022/ngwr-cascader.mjs +52 -60
  68. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  69. package/fesm2022/ngwr-checkbox.mjs +74 -106
  70. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  71. package/fesm2022/ngwr-circular-text.mjs +5 -4
  72. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  73. package/fesm2022/ngwr-click-spark.mjs +5 -4
  74. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  75. package/fesm2022/ngwr-clipboard.mjs +4 -4
  76. package/fesm2022/ngwr-clipboard.mjs.map +1 -1
  77. package/fesm2022/ngwr-collapse.mjs +12 -12
  78. package/fesm2022/ngwr-collapse.mjs.map +1 -1
  79. package/fesm2022/ngwr-color-picker.mjs +58 -66
  80. package/fesm2022/ngwr-color-picker.mjs.map +1 -1
  81. package/fesm2022/ngwr-command-palette.mjs +4 -4
  82. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  83. package/fesm2022/ngwr-compare.mjs +4 -4
  84. package/fesm2022/ngwr-compare.mjs.map +1 -1
  85. package/fesm2022/ngwr-confetti.mjs +3 -3
  86. package/fesm2022/ngwr-context-menu.mjs +86 -15
  87. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  88. package/fesm2022/ngwr-cookie.mjs +19 -6
  89. package/fesm2022/ngwr-cookie.mjs.map +1 -1
  90. package/fesm2022/ngwr-counter.mjs +26 -12
  91. package/fesm2022/ngwr-counter.mjs.map +1 -1
  92. package/fesm2022/ngwr-date-adapter-fns.mjs +3 -3
  93. package/fesm2022/ngwr-date-adapter-luxon.mjs +3 -3
  94. package/fesm2022/ngwr-date-adapter.mjs +10 -5
  95. package/fesm2022/ngwr-date-adapter.mjs.map +1 -1
  96. package/fesm2022/ngwr-date-picker.mjs +128 -123
  97. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  98. package/fesm2022/ngwr-decrypt-text.mjs +3 -3
  99. package/fesm2022/ngwr-density.mjs +7 -7
  100. package/fesm2022/ngwr-density.mjs.map +1 -1
  101. package/fesm2022/ngwr-descriptions.mjs +7 -7
  102. package/fesm2022/ngwr-descriptions.mjs.map +1 -1
  103. package/fesm2022/ngwr-dialog.mjs +16 -16
  104. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  105. package/fesm2022/ngwr-directives.mjs +21 -15
  106. package/fesm2022/ngwr-directives.mjs.map +1 -1
  107. package/fesm2022/ngwr-divider.mjs +4 -4
  108. package/fesm2022/ngwr-divider.mjs.map +1 -1
  109. package/fesm2022/ngwr-donut-chart.mjs +4 -4
  110. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  111. package/fesm2022/ngwr-drag-drop.mjs +10 -9
  112. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  113. package/fesm2022/ngwr-drawer.mjs +19 -18
  114. package/fesm2022/ngwr-drawer.mjs.map +1 -1
  115. package/fesm2022/ngwr-dropdown.mjs +13 -12
  116. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  117. package/fesm2022/ngwr-empty.mjs +4 -4
  118. package/fesm2022/ngwr-empty.mjs.map +1 -1
  119. package/fesm2022/ngwr-falling-text.mjs +5 -4
  120. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  121. package/fesm2022/ngwr-file-upload.mjs +58 -60
  122. package/fesm2022/ngwr-file-upload.mjs.map +1 -1
  123. package/fesm2022/ngwr-form.mjs +11 -11
  124. package/fesm2022/ngwr-form.mjs.map +1 -1
  125. package/fesm2022/ngwr-fuzzy-text.mjs +5 -4
  126. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  127. package/fesm2022/ngwr-gauge.mjs +4 -4
  128. package/fesm2022/ngwr-gauge.mjs.map +1 -1
  129. package/fesm2022/ngwr-glitch-text.mjs +4 -4
  130. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  131. package/fesm2022/ngwr-gradient-text.mjs +4 -4
  132. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  133. package/fesm2022/ngwr-hotkey.mjs +7 -7
  134. package/fesm2022/ngwr-hotkey.mjs.map +1 -1
  135. package/fesm2022/ngwr-i18n.mjs +10 -10
  136. package/fesm2022/ngwr-i18n.mjs.map +1 -1
  137. package/fesm2022/ngwr-icon-adapters-lucide.mjs +6 -7
  138. package/fesm2022/ngwr-icon-adapters-lucide.mjs.map +1 -1
  139. package/fesm2022/ngwr-icon.mjs +4 -4
  140. package/fesm2022/ngwr-icon.mjs.map +1 -1
  141. package/fesm2022/ngwr-image-cropper.mjs +6 -5
  142. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  143. package/fesm2022/ngwr-input-number.mjs +56 -73
  144. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  145. package/fesm2022/ngwr-input-otp.mjs +46 -52
  146. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  147. package/fesm2022/ngwr-input.mjs +17 -17
  148. package/fesm2022/ngwr-input.mjs.map +1 -1
  149. package/fesm2022/ngwr-keyboard.mjs +4 -4
  150. package/fesm2022/ngwr-keyboard.mjs.map +1 -1
  151. package/fesm2022/ngwr-knob.mjs +47 -58
  152. package/fesm2022/ngwr-knob.mjs.map +1 -1
  153. package/fesm2022/ngwr-layout.mjs +16 -16
  154. package/fesm2022/ngwr-layout.mjs.map +1 -1
  155. package/fesm2022/ngwr-lightbox.mjs +7 -6
  156. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  157. package/fesm2022/ngwr-line-chart.mjs +4 -4
  158. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  159. package/fesm2022/ngwr-list.mjs +8 -8
  160. package/fesm2022/ngwr-list.mjs.map +1 -1
  161. package/fesm2022/ngwr-loading-bar.mjs +7 -7
  162. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  163. package/fesm2022/ngwr-marquee.mjs +6 -5
  164. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  165. package/fesm2022/ngwr-media.mjs +4 -4
  166. package/fesm2022/ngwr-media.mjs.map +1 -1
  167. package/fesm2022/ngwr-mention.mjs +15 -9
  168. package/fesm2022/ngwr-mention.mjs.map +1 -1
  169. package/fesm2022/ngwr-meta.mjs +7 -7
  170. package/fesm2022/ngwr-meta.mjs.map +1 -1
  171. package/fesm2022/ngwr-meter-group.mjs +4 -4
  172. package/fesm2022/ngwr-meter-group.mjs.map +1 -1
  173. package/fesm2022/ngwr-overlay.mjs +9 -4
  174. package/fesm2022/ngwr-overlay.mjs.map +1 -1
  175. package/fesm2022/ngwr-page-header.mjs +4 -4
  176. package/fesm2022/ngwr-page-header.mjs.map +1 -1
  177. package/fesm2022/ngwr-pagination.mjs +4 -4
  178. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  179. package/fesm2022/ngwr-pipes.mjs +21 -21
  180. package/fesm2022/ngwr-platform.mjs +169 -5
  181. package/fesm2022/ngwr-platform.mjs.map +1 -1
  182. package/fesm2022/ngwr-popconfirm.mjs +7 -7
  183. package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
  184. package/fesm2022/ngwr-popover.mjs +7 -7
  185. package/fesm2022/ngwr-popover.mjs.map +1 -1
  186. package/fesm2022/ngwr-progress.mjs +4 -4
  187. package/fesm2022/ngwr-progress.mjs.map +1 -1
  188. package/fesm2022/ngwr-pull-to-refresh.mjs +172 -0
  189. package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -0
  190. package/fesm2022/ngwr-qr.mjs +5 -5
  191. package/fesm2022/ngwr-qr.mjs.map +1 -1
  192. package/fesm2022/ngwr-radio.mjs +27 -52
  193. package/fesm2022/ngwr-radio.mjs.map +1 -1
  194. package/fesm2022/ngwr-rating.mjs +35 -48
  195. package/fesm2022/ngwr-rating.mjs.map +1 -1
  196. package/fesm2022/ngwr-result.mjs +13 -13
  197. package/fesm2022/ngwr-result.mjs.map +1 -1
  198. package/fesm2022/ngwr-rotating-text.mjs +15 -4
  199. package/fesm2022/ngwr-rotating-text.mjs.map +1 -1
  200. package/fesm2022/ngwr-scroll.mjs +4 -4
  201. package/fesm2022/ngwr-scroll.mjs.map +1 -1
  202. package/fesm2022/ngwr-segmented.mjs +3 -3
  203. package/fesm2022/ngwr-segmented.mjs.map +1 -1
  204. package/fesm2022/ngwr-select.mjs +289 -85
  205. package/fesm2022/ngwr-select.mjs.map +1 -1
  206. package/fesm2022/ngwr-shiny-text.mjs +7 -7
  207. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  208. package/fesm2022/ngwr-sidebar.mjs +4 -4
  209. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  210. package/fesm2022/ngwr-skeleton.mjs +4 -4
  211. package/fesm2022/ngwr-skeleton.mjs.map +1 -1
  212. package/fesm2022/ngwr-slider.mjs +79 -73
  213. package/fesm2022/ngwr-slider.mjs.map +1 -1
  214. package/fesm2022/ngwr-sparkline.mjs +4 -4
  215. package/fesm2022/ngwr-sparkline.mjs.map +1 -1
  216. package/fesm2022/ngwr-speed-dial.mjs +13 -5
  217. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  218. package/fesm2022/ngwr-spinner.mjs +4 -4
  219. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  220. package/fesm2022/ngwr-splash-cursor.mjs +4 -4
  221. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
  222. package/fesm2022/ngwr-split-text.mjs +3 -3
  223. package/fesm2022/ngwr-splitter.mjs +4 -4
  224. package/fesm2022/ngwr-splitter.mjs.map +1 -1
  225. package/fesm2022/ngwr-spotlight-card.mjs +7 -7
  226. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  227. package/fesm2022/ngwr-squircle.mjs +7 -7
  228. package/fesm2022/ngwr-squircle.mjs.map +1 -1
  229. package/fesm2022/ngwr-star-border.mjs +4 -4
  230. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  231. package/fesm2022/ngwr-statistic.mjs +65 -10
  232. package/fesm2022/ngwr-statistic.mjs.map +1 -1
  233. package/fesm2022/ngwr-stepper.mjs +8 -8
  234. package/fesm2022/ngwr-stepper.mjs.map +1 -1
  235. package/fesm2022/ngwr-storage.mjs +4 -4
  236. package/fesm2022/ngwr-storage.mjs.map +1 -1
  237. package/fesm2022/ngwr-switch.mjs +16 -48
  238. package/fesm2022/ngwr-switch.mjs.map +1 -1
  239. package/fesm2022/ngwr-table.mjs +824 -20
  240. package/fesm2022/ngwr-table.mjs.map +1 -1
  241. package/fesm2022/ngwr-tabs.mjs +9 -8
  242. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  243. package/fesm2022/ngwr-textarea.mjs +18 -50
  244. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  245. package/fesm2022/ngwr-theme.mjs +20 -5
  246. package/fesm2022/ngwr-theme.mjs.map +1 -1
  247. package/fesm2022/ngwr-tilt-card.mjs +27 -11
  248. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  249. package/fesm2022/ngwr-timeline.mjs +7 -7
  250. package/fesm2022/ngwr-timeline.mjs.map +1 -1
  251. package/fesm2022/ngwr-toast.mjs +10 -10
  252. package/fesm2022/ngwr-toast.mjs.map +1 -1
  253. package/fesm2022/ngwr-toolbar.mjs +4 -4
  254. package/fesm2022/ngwr-toolbar.mjs.map +1 -1
  255. package/fesm2022/ngwr-tree.mjs +280 -84
  256. package/fesm2022/ngwr-tree.mjs.map +1 -1
  257. package/fesm2022/ngwr-typewriter.mjs +10 -5
  258. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  259. package/fesm2022/ngwr-typography.mjs +4 -4
  260. package/fesm2022/ngwr-typography.mjs.map +1 -1
  261. package/fesm2022/ngwr-validators.mjs +1 -1
  262. package/fesm2022/ngwr-validators.mjs.map +1 -1
  263. package/fesm2022/ngwr-version.mjs +1 -1
  264. package/fesm2022/ngwr-version.mjs.map +1 -1
  265. package/fesm2022/ngwr-virtual-scroll.mjs +9 -7
  266. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  267. package/fesm2022/ngwr-waves.mjs +6 -5
  268. package/fesm2022/ngwr-waves.mjs.map +1 -1
  269. package/fesm2022/ngwr-window.mjs +16 -15
  270. package/fesm2022/ngwr-window.mjs.map +1 -1
  271. package/file-upload/styles/_index.scss +11 -11
  272. package/form/styles/_index.scss +4 -4
  273. package/gauge/styles/_index.scss +2 -2
  274. package/glitch-text/styles/_index.scss +1 -1
  275. package/gradient-text/styles/_index.scss +1 -1
  276. package/image-cropper/styles/_index.scss +5 -4
  277. package/input/styles/_index.scss +9 -9
  278. package/input-number/styles/_index.scss +1 -1
  279. package/input-otp/styles/_index.scss +5 -5
  280. package/keyboard/styles/_index.scss +5 -5
  281. package/knob/styles/_index.scss +6 -2
  282. package/layout/styles/_index.scss +12 -12
  283. package/lightbox/styles/_index.scss +10 -8
  284. package/line-chart/styles/_index.scss +5 -5
  285. package/list/styles/_index.scss +3 -3
  286. package/llms-full.txt +31 -5
  287. package/llms.txt +48 -32
  288. package/marquee/styles/_index.scss +1 -1
  289. package/mention/styles/_index.scss +4 -4
  290. package/meter-group/styles/_index.scss +4 -4
  291. package/overlay/styles/_index.scss +8 -0
  292. package/package.json +21 -9
  293. package/page-header/styles/_index.scss +4 -4
  294. package/pagination/styles/_index.scss +3 -3
  295. package/popconfirm/styles/_index.scss +3 -3
  296. package/popover/styles/_index.scss +5 -5
  297. package/progress/styles/_index.scss +1 -1
  298. package/pull-to-refresh/styles/_index.scss +38 -0
  299. package/radio/styles/_index.scss +4 -4
  300. package/rating/styles/_index.scss +1 -1
  301. package/result/styles/_index.scss +3 -3
  302. package/schematics/migrations/v9/index.js +71 -0
  303. package/schematics/migrations.json +5 -0
  304. package/schematics/ng-add/schema.json +1 -1
  305. package/schematics/use/symbol-map.json +13 -0
  306. package/segmented/styles/_index.scss +4 -4
  307. package/select/styles/_index.scss +53 -18
  308. package/shiny-text/styles/_index.scss +4 -4
  309. package/sidebar/styles/_index.scss +12 -12
  310. package/slider/styles/_index.scss +5 -5
  311. package/speed-dial/styles/_index.scss +22 -6
  312. package/splash-cursor/styles/_index.scss +1 -0
  313. package/splitter/styles/_index.scss +7 -4
  314. package/spotlight-card/styles/_index.scss +7 -7
  315. package/star-border/styles/_index.scss +3 -3
  316. package/statistic/styles/_index.scss +51 -4
  317. package/stepper/styles/_index.scss +6 -6
  318. package/styles/_typography.scss +4 -1
  319. package/styles.scss +2 -0
  320. package/switch/styles/_index.scss +4 -4
  321. package/table/styles/_index.scss +447 -17
  322. package/tabs/styles/_index.scss +3 -3
  323. package/textarea/styles/_index.scss +7 -7
  324. package/theme/styles/_colors.scss +27 -3
  325. package/tilt-card/styles/_index.scss +4 -4
  326. package/timeline/styles/_index.scss +7 -6
  327. package/toast/styles/_index.scss +11 -11
  328. package/toolbar/styles/_index.scss +4 -4
  329. package/tree/styles/_index.scss +45 -15
  330. package/types/ngwr-action-sheet.d.ts +75 -0
  331. package/types/ngwr-alert.d.ts +1 -1
  332. package/types/ngwr-anchor.d.ts +1 -1
  333. package/types/ngwr-avatar.d.ts +1 -1
  334. package/types/ngwr-back-top.d.ts +1 -1
  335. package/types/ngwr-badge.d.ts +4 -4
  336. package/types/ngwr-bar-chart.d.ts +1 -1
  337. package/types/ngwr-breadcrumbs.d.ts +1 -1
  338. package/types/ngwr-burger.d.ts +1 -1
  339. package/types/ngwr-button.d.ts +3 -3
  340. package/types/ngwr-calendar-heatmap.d.ts +1 -1
  341. package/types/ngwr-calendar.d.ts +1 -1
  342. package/types/ngwr-card.d.ts +1 -1
  343. package/types/ngwr-carousel.d.ts +1 -1
  344. package/types/ngwr-cascader.d.ts +27 -16
  345. package/types/ngwr-checkbox.d.ts +63 -43
  346. package/types/ngwr-clipboard.d.ts +1 -1
  347. package/types/ngwr-collapse.d.ts +3 -3
  348. package/types/ngwr-color-picker.d.ts +24 -19
  349. package/types/ngwr-command-palette.d.ts +1 -1
  350. package/types/ngwr-compare.d.ts +1 -1
  351. package/types/ngwr-context-menu.d.ts +25 -1
  352. package/types/ngwr-cookie.d.ts +7 -1
  353. package/types/ngwr-counter.d.ts +9 -2
  354. package/types/ngwr-date-picker.d.ts +36 -23
  355. package/types/ngwr-density.d.ts +1 -1
  356. package/types/ngwr-descriptions.d.ts +1 -1
  357. package/types/ngwr-dialog.d.ts +1 -1
  358. package/types/ngwr-directives.d.ts +1 -0
  359. package/types/ngwr-divider.d.ts +2 -2
  360. package/types/ngwr-donut-chart.d.ts +1 -1
  361. package/types/ngwr-drag-drop.d.ts +1 -1
  362. package/types/ngwr-drawer.d.ts +1 -1
  363. package/types/ngwr-dropdown.d.ts +1 -1
  364. package/types/ngwr-empty.d.ts +1 -1
  365. package/types/ngwr-file-upload.d.ts +28 -17
  366. package/types/ngwr-form.d.ts +2 -2
  367. package/types/ngwr-gauge.d.ts +1 -1
  368. package/types/ngwr-hotkey.d.ts +1 -1
  369. package/types/ngwr-i18n.d.ts +1 -1
  370. package/types/ngwr-icon-adapters-lucide.d.ts +5 -3
  371. package/types/ngwr-icon.d.ts +1 -1
  372. package/types/ngwr-image-cropper.d.ts +1 -1
  373. package/types/ngwr-input-number.d.ts +25 -19
  374. package/types/ngwr-input-otp.d.ts +23 -17
  375. package/types/ngwr-input.d.ts +2 -2
  376. package/types/ngwr-keyboard.d.ts +1 -1
  377. package/types/ngwr-knob.d.ts +24 -19
  378. package/types/ngwr-layout.d.ts +1 -1
  379. package/types/ngwr-lightbox.d.ts +1 -1
  380. package/types/ngwr-line-chart.d.ts +1 -1
  381. package/types/ngwr-list.d.ts +1 -1
  382. package/types/ngwr-loading-bar.d.ts +1 -1
  383. package/types/ngwr-marquee.d.ts +1 -1
  384. package/types/ngwr-media.d.ts +1 -1
  385. package/types/ngwr-mention.d.ts +1 -1
  386. package/types/ngwr-meta.d.ts +1 -1
  387. package/types/ngwr-meter-group.d.ts +1 -1
  388. package/types/ngwr-page-header.d.ts +1 -1
  389. package/types/ngwr-pagination.d.ts +1 -1
  390. package/types/ngwr-platform.d.ts +93 -2
  391. package/types/ngwr-popconfirm.d.ts +3 -3
  392. package/types/ngwr-progress.d.ts +2 -2
  393. package/types/ngwr-pull-to-refresh.d.ts +69 -0
  394. package/types/ngwr-qr.d.ts +1 -1
  395. package/types/ngwr-radio.d.ts +25 -22
  396. package/types/ngwr-rating.d.ts +28 -20
  397. package/types/ngwr-result.d.ts +1 -1
  398. package/types/ngwr-rotating-text.d.ts +1 -0
  399. package/types/ngwr-scroll.d.ts +1 -1
  400. package/types/ngwr-segmented.d.ts +1 -1
  401. package/types/ngwr-select.d.ts +93 -26
  402. package/types/ngwr-sidebar.d.ts +1 -1
  403. package/types/ngwr-skeleton.d.ts +2 -2
  404. package/types/ngwr-slider.d.ts +35 -21
  405. package/types/ngwr-sparkline.d.ts +1 -1
  406. package/types/ngwr-speed-dial.d.ts +8 -2
  407. package/types/ngwr-spinner.d.ts +1 -1
  408. package/types/ngwr-splitter.d.ts +1 -1
  409. package/types/ngwr-squircle.d.ts +1 -1
  410. package/types/ngwr-statistic.d.ts +40 -5
  411. package/types/ngwr-stepper.d.ts +2 -2
  412. package/types/ngwr-storage.d.ts +1 -1
  413. package/types/ngwr-switch.d.ts +20 -16
  414. package/types/ngwr-table.d.ts +417 -6
  415. package/types/ngwr-tabs.d.ts +1 -1
  416. package/types/ngwr-textarea.d.ts +21 -18
  417. package/types/ngwr-theme.d.ts +7 -2
  418. package/types/ngwr-tilt-card.d.ts +3 -0
  419. package/types/ngwr-timeline.d.ts +1 -1
  420. package/types/ngwr-toast.d.ts +1 -1
  421. package/types/ngwr-toolbar.d.ts +1 -1
  422. package/types/ngwr-tree.d.ts +100 -19
  423. package/types/ngwr-typography.d.ts +1 -1
  424. package/types/ngwr-validators.d.ts +1 -1
  425. package/types/ngwr-version.d.ts +1 -1
  426. package/types/ngwr-virtual-scroll.d.ts +1 -1
  427. package/types/ngwr-window.d.ts +1 -1
  428. package/typography/styles/_index.scss +11 -11
  429. package/virtual-scroll/styles/_index.scss +1 -1
  430. package/waves/styles/_index.scss +1 -1
  431. package/window/styles/_index.scss +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"ngwr-select.mjs","sources":["../../../projects/lib/select/tokens/select.token.ts","../../../projects/lib/select/option.ts","../../../projects/lib/select/select.ts","../../../projects/lib/select/select.html","../../../projects/lib/select/option-group.ts","../../../projects/lib/select/option-group.html","../../../projects/lib/select/ngwr-select.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 { InjectionToken, type Signal } from '@angular/core';\n\n/** Per-option registration metadata. @internal */\nexport interface WrSelectOptionRegistration {\n readonly id: string;\n readonly value: unknown;\n readonly disabled: boolean;\n /**\n * Lazy label reader. Options render text via `<ng-content>`, so we\n * read it at call time once Angular has settled the projected content.\n */\n readonly getLabel: () => string;\n}\n\n/**\n * Contract a `<wr-option>` uses to talk to its parent `<wr-select>`.\n *\n * @internal\n */\nexport interface WrSelectContext {\n /**\n * Currently selected value. Single mode: `T | null`. Multi mode:\n * `readonly T[]`. Options consult {@link isSelected} instead of\n * reading this directly so the same option code works in both modes.\n */\n readonly value: Signal<unknown>;\n /** Whether the select is in multi-selection mode. */\n readonly multi: Signal<boolean>;\n /** Whether the select is disabled. */\n readonly isDisabled: Signal<boolean>;\n /** Id of the option currently highlighted by keyboard navigation. */\n readonly activeOptionId: Signal<string | null>;\n /**\n * Active search query (search mode only). Empty string when there is\n * no filter applied — options treat that as \"show me\".\n */\n readonly searchQuery: Signal<string>;\n /** True only when `mode=\"search\"`. Options gate filtering on this. */\n readonly isSearch: Signal<boolean>;\n /** Is the given option value currently selected? Handles both single and multi. */\n isSelected(value: unknown): boolean;\n /**\n * Called when a child option is clicked. The label is read lazily\n * via {@link WrSelectOptionRegistration.getLabel}, so callers don't\n * need to thread it through.\n */\n selectOption(value: unknown): void;\n /** Register an option; returns an unregister function. */\n registerOption(reg: WrSelectOptionRegistration): () => void;\n}\n\n/**\n * Token a `<wr-option>` injects to register itself with and notify its\n * parent `<wr-select>`.\n *\n * @internal\n */\nexport const WR_SELECT = new InjectionToken<WrSelectContext>('WR_SELECT');\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 { Component, DestroyRef, ElementRef, ViewEncapsulation, computed, effect, inject, input } from '@angular/core';\n\nimport { WR_SELECT } from './tokens';\n\nlet uid = 0;\n\n/**\n * Single option inside a `<wr-select>`.\n *\n * The option's display label is taken from its projected text content;\n * the form value is its `value` input.\n *\n * @example\n * ```html\n * <wr-option value=\"sm\">Small</wr-option>\n * <wr-option [value]=\"42\">Forty-two</wr-option>\n * ```\n */\n@Component({\n selector: 'wr-option',\n template: '<ng-content />',\n encapsulation: ViewEncapsulation.None,\n host: {\n role: 'option',\n '[attr.id]': 'id',\n '[class]': 'classes()',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-disabled]': 'disabled() ? true : null',\n '(click)': 'onClick()',\n },\n})\nexport class WrOption {\n /** The value contributed when this option is chosen. Required. */\n readonly value = input.required<unknown>();\n\n /** Disable this option. @default false */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n /** Stable id used for `aria-activedescendant`. */\n readonly id = `wr-option-${++uid}`;\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly parent = inject(WR_SELECT, { optional: true });\n\n /**\n * @internal — true when this option is currently selected. Works for\n * both single and multi-select parents via `WrSelectContext.isSelected`.\n */\n protected readonly selected = computed(() => {\n const parent = this.parent;\n if (!parent) return false;\n // Re-read parent's value signal so the computed recomputes on change.\n parent.value();\n return parent.isSelected(this.value());\n });\n\n /** @internal — true when this option is the keyboard cursor target. */\n protected readonly active = computed(() => this.parent?.activeOptionId() === this.id);\n\n /**\n * @internal — search mode only. True when the parent has a query that\n * the option's text content does not match (case-insensitive substring).\n * Hidden options stay in the DOM so registration order survives but\n * collapse via CSS.\n */\n protected readonly hidden = computed(() => {\n const parent = this.parent;\n if (!parent?.isSearch()) return false;\n const q = parent.searchQuery().trim().toLowerCase();\n if (!q) return false;\n const label = (this.host.nativeElement.textContent ?? '').trim().toLowerCase();\n return !label.includes(q);\n });\n\n protected readonly classes = computed(() => {\n const parts = ['wr-option'];\n if (this.selected()) parts.push('wr-option--selected');\n if (this.active()) parts.push('wr-option--active');\n if (this.disabled()) parts.push('wr-option--disabled');\n if (this.hidden()) parts.push('wr-option--hidden');\n return parts.join(' ');\n });\n\n constructor() {\n if (this.parent) {\n const parent = this.parent;\n // Re-register when disabled or value changes so the parent has fresh metadata.\n effect(onCleanup => {\n const unreg = parent.registerOption({\n id: this.id,\n value: this.value(),\n disabled: this.disabled(),\n getLabel: () => this.host.nativeElement.textContent?.trim() ?? '',\n });\n onCleanup(() => unreg());\n });\n inject(DestroyRef);\n }\n }\n\n protected onClick(): void {\n if (this.disabled() || !this.parent) return;\n this.parent.selectOption(this.value());\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 { type BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { type OverlayRef, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n Component,\n DestroyRef,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n ViewEncapsulation,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { type Observable, debounceTime, finalize, from, isObservable, of, switchMap } from 'rxjs';\n\nimport { useI18nFormatter, useI18nText } from 'ngwr/i18n';\nimport { WR_OVERLAY, WR_RESPONSIVE_OVERLAYS, wrPresentAsSheet } from 'ngwr/overlay';\nimport { noop } from 'ngwr/utils';\n\nimport type { WrSelectMode, WrSelectSearchLoader, WrSelectTagValidator, WrSelectSize } from './interfaces';\nimport { WrOption } from './option';\nimport { WR_SELECT, type WrSelectContext, type WrSelectOptionRegistration } from './tokens';\n\nlet listboxUid = 0;\n\ninterface SelectedChip {\n readonly value: unknown;\n readonly label: string;\n}\n\n/**\n * Combobox primitive. Renders a button that opens a CDK overlay\n * containing the projected `<wr-option>` (and optionally\n * `<wr-option-group>`) children. Every shape is the same component\n * with a different `[mode]`:\n *\n * - `'single'` (default) — one value, no input. Classic dropdown.\n * - `'multi'` — array value, chips on the trigger; clicking an option\n * toggles instead of closing, Backspace removes the last chip.\n * - `'search'` — type-ahead with sync `[options]` filter or async\n * `[loader]`. Replaces the standalone `<wr-autocomplete>`.\n * - `'tag'` — free-text + chips with `[separators]` / `[validate]` /\n * `[allowDuplicates]`. Replaces `<wr-chips-input>`.\n *\n * Implements `ControlValueAccessor` — usable with `[(ngModel)]`,\n * `formControl`, or `formControlName`.\n *\n * @example\n * ```html\n * <!-- Single -->\n * <wr-select placeholder=\"Pick a size\" [(ngModel)]=\"size\">\n * <wr-option value=\"sm\">Small</wr-option>\n * <wr-option value=\"md\">Medium</wr-option>\n * <wr-option value=\"lg\">Large</wr-option>\n * </wr-select>\n *\n * <!-- Multi -->\n * <wr-select mode=\"multi\" placeholder=\"Pick tags\" [(ngModel)]=\"tags\">\n * <wr-option value=\"ts\">TypeScript</wr-option>\n * <wr-option value=\"ng\">Angular</wr-option>\n * </wr-select>\n * ```\n *\n * The legacy `[multi]=\"true\"` boolean is still accepted but is now an\n * alias for `[mode]=\"'multi'\"` — prefer the explicit mode.\n *\n * @see https://ngwr.dev/components/select\n */\n@Component({\n selector: 'wr-select',\n templateUrl: './select.html',\n encapsulation: ViewEncapsulation.None,\n host: { '[class]': 'classes()' },\n imports: [WrOption],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n // eslint-disable-next-line @angular-eslint/no-forward-ref\n useExisting: forwardRef(() => WrSelect),\n multi: true,\n },\n {\n provide: WR_SELECT,\n // eslint-disable-next-line @angular-eslint/no-forward-ref\n useExisting: forwardRef(() => WrSelect),\n },\n ],\n})\nexport class WrSelect implements ControlValueAccessor, WrSelectContext {\n /** Placeholder shown when no option is selected. Falls back to `select.placeholder`. */\n readonly placeholder = input<string | null>(null);\n\n /** Clear-selection (×) button aria-label. Falls back to `select.clearSelection`. */\n readonly clearLabel = input<string | null>(null);\n\n protected readonly resolvedPlaceholder = useI18nText(this.placeholder, 'select.placeholder', '');\n protected readonly resolvedClear = useI18nText(this.clearLabel, 'select.clearSelection', 'Clear selection');\n\n /** Per-chip ARIA label — interpolates `{{label}}`. @internal */\n protected readonly chipRemoveLabel = useI18nFormatter('select.removeItem', 'Remove {{label}}');\n\n /** Disable the select. Also set by Angular forms via `setDisabledState`. */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n /** Pill-shaped corners on the trigger. @default false */\n readonly rounded = input(false, { transform: coerceBooleanProperty });\n\n /** Control size — shares the `--wr-control-*` contract. @default 'md' */\n readonly size = input<WrSelectSize>('md');\n\n /**\n * Present the option panel as a full-width bottom-sheet on small\n * viewports instead of an anchored dropdown. `undefined` follows the\n * app-wide `provideWrResponsiveOverlays()` setting; `true`/`false`\n * overrides it. @default undefined\n */\n readonly responsive = input<boolean | undefined, BooleanInput>(undefined, {\n transform: (v: BooleanInput): boolean | undefined => (v == null ? undefined : coerceBooleanProperty(v)),\n });\n\n /**\n * Behavior mode. `<wr-select>` is the unified combobox primitive —\n * pick the shape via `[mode]`:\n *\n * - `'single'` (default) — one value, no input. Classic dropdown.\n * - `'multi'` — array value, chips on the trigger.\n * - `'search'` *(planned)* — type-ahead with sync filter or async loader.\n * - `'tag'` *(planned)* — free-text + chips with optional `allowCreate`.\n *\n */\n readonly mode = input<WrSelectMode | null>(null);\n\n /** Resolved mode — `'single'` unless `[mode]` says otherwise. */\n protected readonly effectiveMode = computed<WrSelectMode>(() => this.mode() ?? 'single');\n\n /** Convenience — `effectiveMode() === 'multi'`. */\n protected readonly isMulti = computed(() => this.effectiveMode() === 'multi');\n\n /** Convenience — `effectiveMode() === 'tag'`. */\n protected readonly isTag = computed(() => this.effectiveMode() === 'tag');\n\n /** Convenience — `effectiveMode() === 'search'`. Exposed via context for options. */\n readonly isSearch = computed(() => this.effectiveMode() === 'search');\n\n /** WrSelectContext — resolved multi-selection flag for child options. */\n readonly multi = computed(() => this.effectiveMode() === 'multi' || this.effectiveMode() === 'tag');\n\n /** Both multi and tag render chips on the trigger. */\n protected readonly hasChips = computed(() => {\n const m = this.effectiveMode();\n return m === 'multi' || m === 'tag';\n });\n\n /**\n * Search-mode query. Empty string = no filter. Exposed via context so\n * each `<wr-option>` can self-hide non-matching rows.\n */\n readonly searchQuery = signal('');\n\n // Search-mode-only inputs (ignored in other modes)\n\n /**\n * Search mode: dynamic option array. Each item is rendered as a\n * `<wr-option>` whose label comes from `[displayWith]`. Works\n * alongside projected `<wr-option>` children — both lists are\n * filtered by the search query.\n */\n readonly options = input<readonly unknown[]>([]);\n\n /** Search mode: map a dynamic option item to its display label. @default String */\n readonly displayWith = input<(item: unknown) => string>((item: unknown) => String(item));\n\n /**\n * Search mode: async loader. When set, the loader is called on every\n * (debounced) keystroke and its result replaces `[options]`. Supports\n * Observables, Promises, and plain arrays.\n */\n readonly loader = input<WrSelectSearchLoader<unknown> | null>(null);\n\n /** Search mode: debounce (ms) applied to the loader. @default 250 */\n readonly debounceMs = input(250, { transform: (v: unknown): number => Math.max(0, Number(v) || 0) });\n\n /** Search mode: minimum query length before the panel opens / loader fires. @default 0 */\n readonly minChars = input(0, { transform: (v: unknown): number => Math.max(0, Number(v) || 0) });\n\n /**\n * Search mode: allow values not in the options list. Enter on an\n * unmatched query commits the raw text as the form value. @default false\n */\n readonly freeText = input(false, { transform: coerceBooleanProperty });\n\n /** Search mode: text shown when the filter / loader returns nothing. Falls back to `select.noResults`. */\n readonly noResultsText = input<string | null>(null);\n\n /** Search mode: text shown while the async loader is in flight. Falls back to `select.loading`. */\n readonly loadingText = input<string | null>(null);\n\n protected readonly resolvedNoResults = useI18nText(this.noResultsText, 'select.noResults', 'No results');\n protected readonly resolvedLoading = useI18nText(this.loadingText, 'select.loading', 'Loading…');\n\n /** Search mode: results returned by the async loader. @internal */\n protected readonly loadedOptions = signal<readonly unknown[]>([]);\n\n /** Search mode: true while the loader is in flight. @internal */\n protected readonly loading = signal(false);\n\n // Tag-mode-only inputs (ignored in other modes)\n\n /**\n * Tag mode: keys / characters that commit the current draft into a chip.\n * `'Enter'` is the key name; everything else is a literal character watched\n * in keypresses and pastes. @default ['Enter', ',']\n */\n readonly separators = input<readonly string[]>(['Enter', ',']);\n\n /** Tag mode: allow the same value to appear more than once. @default false */\n readonly allowDuplicates = input(false, { transform: coerceBooleanProperty });\n\n /**\n * Tag mode: custom validator — return `true` to accept the value, `false`\n * to silently reject. Receives the trimmed draft + the existing chips.\n */\n readonly validate = input<WrSelectTagValidator | null>(null);\n\n /** Tag-mode draft (text currently typed in the inline input). @internal */\n protected readonly draft = signal('');\n\n /**\n * Show a clear-all (×) button at the end of the chip row when at\n * least one option is selected (multi mode only). @default true\n */\n readonly clearable = input(true, { transform: coerceBooleanProperty });\n\n /**\n * Cap on selected items (multi mode). `0` = unlimited. Once reached,\n * additional clicks on unselected options are ignored. @default 0\n */\n readonly maxItems = input(0, {\n transform: (v: unknown): number => Math.max(0, Number(v) || 0),\n });\n\n /**\n * Maximum number of chips rendered before collapsing the rest into a\n * `+N more` indicator. `0` = render every chip. @default 0\n */\n readonly maxTagCount = input(0, {\n transform: (v: unknown): number => Math.max(0, Number(v) || 0),\n });\n\n /**\n * Unified value signal. Single mode holds `T | null`; multi mode\n * holds `readonly T[]`. Internal — consumers go through `[(ngModel)]`\n * or `[formControl]` via CVA.\n * @internal\n */\n readonly value = signal<unknown>(null);\n\n /** Listbox id used by the trigger's `aria-controls`. */\n protected readonly listboxId = `wr-select-listbox-${++listboxUid}`;\n\n /** Registered options (insertion order). Internal — distinct from the public `[options]` input. */\n private readonly registry = signal<readonly WrSelectOptionRegistration[]>([]);\n\n /** Keyboard cursor index into `options`. -1 = none. */\n private readonly activeIndex = signal(-1);\n\n /** Id of the active option (for `aria-activedescendant`). */\n readonly activeOptionId = computed<string | null>(() => {\n const idx = this.activeIndex();\n const list = this.registry();\n return idx >= 0 && idx < list.length ? list[idx].id : null;\n });\n\n protected readonly open = signal(false);\n protected readonly selectedLabel = signal<string | null>(null);\n\n /**\n * Selected chips (multi + tag modes). Multi reads labels from the\n * registered `<wr-option>` children; tag uses each raw string as\n * both value and label.\n */\n protected readonly selectedChips = computed<readonly SelectedChip[]>(() => {\n if (!this.hasChips()) return [];\n const arr = this.asArray(this.value());\n if (this.isTag()) {\n return arr.map<SelectedChip>(v => ({ value: v, label: String(v) }));\n }\n const list = this.registry();\n return arr.map<SelectedChip>(v => {\n const found = list.find(o => o.value === v);\n return { value: v, label: found?.getLabel() ?? String(v) };\n });\n });\n\n protected readonly visibleChips = computed<readonly SelectedChip[]>(() => {\n const cap = this.maxTagCount();\n const chips = this.selectedChips();\n return cap > 0 && chips.length > cap ? chips.slice(0, cap) : chips;\n });\n\n protected readonly hiddenChipCount = computed(() => {\n const cap = this.maxTagCount();\n const total = this.selectedChips().length;\n return cap > 0 && total > cap ? total - cap : 0;\n });\n\n protected readonly hasSelection = computed(() => {\n if (this.hasChips()) return this.selectedChips().length > 0;\n return this.value() != null;\n });\n\n private readonly disabledFromCva = signal(false);\n\n /** Effective disabled state — input wins, CVA second. */\n readonly isDisabled = computed(() => this.disabled() || this.disabledFromCva());\n\n protected readonly classes = computed(() => {\n const parts = ['wr-select'];\n if (this.open()) parts.push('wr-select--open');\n if (this.rounded()) parts.push('wr-select--rounded');\n const size = this.size();\n if (size !== 'md') parts.push(`wr-select--${size}`);\n if (this.isMulti()) parts.push('wr-select--multi');\n if (this.isTag()) parts.push('wr-select--tag');\n if (this.isSearch()) parts.push('wr-select--search');\n if (this.isDisabled()) parts.push('wr-select--disabled');\n return parts.join(' ');\n });\n\n /**\n * Search-mode dynamic options. Loader results win when the loader is\n * set; otherwise the static `[options]` array. Each item is rendered\n * as an internal `<wr-option>` in the panel.\n */\n protected readonly dynamicOptions = computed<readonly unknown[]>(() =>\n this.loader() ? this.loadedOptions() : this.options()\n );\n\n /**\n * Count of registered options that pass the current search filter.\n * Hides the noResults state when the panel has at least one visible row.\n */\n protected readonly visibleCount = computed(() => {\n const list = this.registry();\n if (!this.isSearch()) return list.length;\n const q = this.searchQuery().trim().toLowerCase();\n if (!q) return list.length;\n let count = 0;\n for (const o of list) {\n if (o.getLabel().toLowerCase().includes(q)) count++;\n }\n return count;\n });\n\n /** Search mode: show \"no results\" when the panel has nothing to offer. */\n protected readonly hasNoResults = computed(() => {\n if (!this.isSearch() || !this.open() || this.loading()) return false;\n if (this.searchQuery().trim().length < this.minChars()) return false;\n return this.visibleCount() === 0;\n });\n\n /** Search mode: is this option hidden by the current query? @internal */\n private isOptionHidden(label: string): boolean {\n if (!this.isSearch()) return false;\n const q = this.searchQuery().trim().toLowerCase();\n if (!q) return false;\n return !label.toLowerCase().includes(q);\n }\n\n protected readonly panelTpl = viewChild.required('panelTpl', { read: TemplateRef });\n\n /** Tag-mode inline input. Present only when `mode=\"tag\"`. @internal */\n protected readonly tagInputEl = viewChild<ElementRef<HTMLInputElement>>('tagInput');\n\n /** Search-mode inline input. Present only when `mode=\"search\"`. @internal */\n protected readonly searchInputEl = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n protected focusTagInput(): void {\n this.tagInputEl()?.nativeElement.focus();\n }\n\n protected focusSearchInput(): void {\n this.searchInputEl()?.nativeElement.focus();\n }\n\n // Search-mode handlers\n\n protected onSearchInput(event: Event): void {\n if (this.isDisabled()) return;\n const value = (event.target as HTMLInputElement).value;\n this.searchQuery.set(value);\n if (!this.open()) this.open.set(true);\n }\n\n protected onSearchFocus(): void {\n if (this.isDisabled()) return;\n if (!this.open()) {\n this.seedActiveIndex();\n this.open.set(true);\n }\n }\n\n protected onSearchKey(event: KeyboardEvent): void {\n // freeText: Enter on an unmatched query commits the typed string\n // as the value. Skips when an active option is highlighted (the\n // normal Enter-selects behaviour wins).\n if (event.key === 'Enter' && this.freeText() && this.open()) {\n const q = this.searchQuery().trim();\n const idx = this.activeIndex();\n const list = this.registry();\n const hasActive =\n idx >= 0 && idx < list.length && !list[idx].disabled && !this.isOptionHidden(list[idx].getLabel());\n if (!hasActive && q) {\n event.preventDefault();\n this.value.set(q);\n this.onChange(q);\n this.onTouched();\n this.open.set(false);\n return;\n }\n }\n // Otherwise route through the same keyboard plumbing as the button trigger.\n this.onTriggerKey(event);\n }\n\n /**\n * Display text for the search input. Shows the selected option's\n * label when collapsed, or the live query while typing / panel open.\n * @internal\n */\n protected readonly searchDisplay = computed(() => {\n if (this.open()) return this.searchQuery();\n return this.selectedLabel() ?? '';\n });\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(WR_OVERLAY);\n private readonly responsiveConfig = inject(WR_RESPONSIVE_OVERLAYS);\n private readonly vcr = inject(ViewContainerRef);\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly destroyRef = inject(DestroyRef);\n private overlayRef: OverlayRef | null = null;\n\n private onChange: (value: unknown) => void = noop;\n protected onTouched: () => void = noop;\n\n constructor() {\n effect(() => {\n if (this.open()) {\n this.openOverlay();\n } else {\n this.closeOverlay();\n // Reset the search query when the panel closes so a re-open\n // doesn't carry a stale filter.\n if (this.isSearch()) this.searchQuery.set('');\n }\n });\n\n // Async loader pipeline (search mode only). `switchMap` cancels\n // in-flight requests when a new keystroke arrives.\n toObservable(this.searchQuery)\n .pipe(\n debounceTime(this.debounceMs()),\n switchMap(query => {\n const loader = this.loader();\n if (!loader || !this.isSearch() || query.length < this.minChars()) {\n this.loading.set(false);\n return of<readonly unknown[]>([]);\n }\n this.loading.set(true);\n const result = loader(query);\n const source: Observable<readonly unknown[]> = isObservable(result) ? result : from(Promise.resolve(result));\n return source.pipe(finalize(() => this.loading.set(false)));\n }),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(items => this.loadedOptions.set(items));\n\n // Resolve the single-mode trigger label whenever the value or\n // options change. Multi mode reads `selectedChips` instead and\n // doesn't need this.\n effect(() => {\n const v = this.value();\n const list = this.registry();\n if (this.isMulti()) {\n this.selectedLabel.set(null);\n return;\n }\n const match = list.find(o => o.value === v);\n this.selectedLabel.set(match ? match.getLabel() : null);\n });\n }\n\n // WrSelectContext\n\n isSelected(value: unknown): boolean {\n if (this.isMulti()) return this.asArray(this.value()).includes(value);\n return this.value() === value;\n }\n\n selectOption(value: unknown): void {\n if (this.isMulti()) {\n const current = this.asArray(this.value());\n const idx = current.indexOf(value);\n let next: readonly unknown[];\n if (idx >= 0) {\n next = [...current.slice(0, idx), ...current.slice(idx + 1)];\n } else {\n const cap = this.maxItems();\n if (cap > 0 && current.length >= cap) return;\n next = [...current, value];\n }\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n // Keep the panel open in multi mode so the user can keep picking.\n return;\n }\n this.value.set(value);\n this.onChange(value);\n this.onTouched();\n this.open.set(false);\n }\n\n registerOption(reg: WrSelectOptionRegistration): () => void {\n this.registry.update(list => [...list, reg]);\n return () => this.registry.update(list => list.filter(o => o.id !== reg.id));\n }\n\n // Chip handlers (multi + tag)\n\n /** Remove one selection (chip × button). Works for multi and tag modes. */\n protected removeChip(value: unknown, event: Event): void {\n event.stopPropagation();\n if (this.isDisabled() || !this.hasChips()) return;\n const next = this.asArray(this.value()).filter(v => v !== value);\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n }\n\n /** Clear every selection (× button). Multi/tag → empty array; search → null. */\n protected clearAll(event: Event): void {\n event.stopPropagation();\n if (this.isDisabled()) return;\n if (this.hasChips()) {\n this.value.set([]);\n this.onChange([]);\n } else if (this.isSearch()) {\n this.value.set(null);\n this.onChange(null);\n this.searchQuery.set('');\n } else {\n return;\n }\n this.onTouched();\n }\n\n // Tag-mode draft handlers\n\n /** Capacity check used by tag mode to refuse the next add. */\n protected readonly atCapacity = computed(() => {\n const cap = this.maxItems();\n return cap > 0 && this.asArray(this.value()).length >= cap;\n });\n\n protected onTagInput(event: Event): void {\n if (this.isDisabled()) return;\n this.draft.set((event.target as HTMLInputElement).value);\n }\n\n protected onTagKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n const seps = this.separators();\n\n if (seps.includes(event.key)) {\n event.preventDefault();\n this.commitDraft();\n return;\n }\n\n if (event.key === 'Backspace' && this.draft() === '') {\n const chips = this.selectedChips();\n if (chips.length > 0) {\n event.preventDefault();\n this.removeChip(chips[chips.length - 1].value, event);\n }\n }\n }\n\n protected onTagPaste(event: ClipboardEvent): void {\n if (this.isDisabled()) return;\n const text = event.clipboardData?.getData('text') ?? '';\n if (!text) return;\n\n const seps = this.separators().filter(s => s !== 'Enter');\n if (seps.length === 0) return;\n\n event.preventDefault();\n const escaped = seps.map(s => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('');\n const splitRegex = new RegExp(`[${escaped}\\\\n]+`);\n for (const part of text.split(splitRegex)) this.tryAddTag(part);\n }\n\n protected onTagBlur(): void {\n if (this.draft().trim()) this.commitDraft();\n this.onTouched();\n }\n\n private commitDraft(): void {\n const v = this.draft().trim();\n this.draft.set('');\n if (v) this.tryAddTag(v);\n }\n\n private tryAddTag(raw: string): void {\n if (!this.isTag() || this.atCapacity()) return;\n const value = raw.trim();\n if (!value) return;\n\n const existing = this.asArray(this.value()).map(String);\n if (!this.allowDuplicates() && existing.includes(value)) return;\n\n const validator = this.validate();\n if (validator && !validator(value, existing)) return;\n\n const next = [...existing, value];\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n }\n\n // ControlValueAccessor\n\n writeValue(value: unknown): void {\n if (this.hasChips()) {\n this.value.set(Array.isArray(value) ? (value as readonly unknown[]) : []);\n } else {\n this.value.set(value);\n }\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledFromCva.set(coerceBooleanProperty(isDisabled));\n if (isDisabled) this.open.set(false);\n }\n\n // Template handlers\n\n protected onTriggerClick(): void {\n if (this.isDisabled()) return;\n // Tag mode has no panel — clicks should land on the inline input,\n // not toggle an overlay that's never created.\n if (this.isTag()) return;\n this.open.update(v => !v);\n }\n\n protected onTriggerKey(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n\n if (!this.open()) {\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.seedActiveIndex();\n this.open.set(true);\n return;\n }\n // Multi mode: Backspace on closed trigger removes last chip. Tag\n // mode has its own input handler — never reaches this branch.\n if (event.key === 'Backspace' && this.isMulti() && this.hasSelection()) {\n event.preventDefault();\n const chips = this.selectedChips();\n const last = chips[chips.length - 1];\n if (last) this.removeChip(last.value, event);\n }\n return;\n }\n\n // Open — navigation/selection.\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.moveActive(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveActive(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.activeIndex.set(this.firstEnabled());\n break;\n case 'End':\n event.preventDefault();\n this.activeIndex.set(this.lastEnabled());\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n const idx = this.activeIndex();\n const list = this.registry();\n if (idx >= 0 && idx < list.length && !list[idx].disabled) {\n const id = list[idx].id;\n const el = this.overlayRef?.overlayElement.querySelector<HTMLElement>(`#${CSS.escape(id)}`);\n el?.click();\n }\n break;\n }\n default:\n break;\n }\n }\n\n private seedActiveIndex(): void {\n const list = this.registry();\n let selectedIdx = -1;\n if (this.isMulti()) {\n const arr = this.asArray(this.value());\n if (arr.length > 0) selectedIdx = list.findIndex(o => o.value === arr[0]);\n } else {\n selectedIdx = list.findIndex(o => o.value === this.value());\n }\n this.activeIndex.set(selectedIdx >= 0 ? selectedIdx : this.firstEnabled());\n }\n\n private moveActive(delta: number): void {\n const list = this.registry();\n if (list.length === 0) return;\n let i = this.activeIndex();\n let attempts = list.length;\n while (attempts-- > 0) {\n i = (i + delta + list.length) % list.length;\n const o = list[i];\n if (!o.disabled && !this.isOptionHidden(o.getLabel())) {\n this.activeIndex.set(i);\n return;\n }\n }\n }\n\n private firstEnabled(): number {\n return this.registry().findIndex(o => !o.disabled && !this.isOptionHidden(o.getLabel()));\n }\n\n private lastEnabled(): number {\n const list = this.registry();\n let found = -1;\n list.forEach((o, i) => {\n if (!o.disabled && !this.isOptionHidden(o.getLabel())) found = i;\n });\n return found;\n }\n\n /** Coerce the multi-mode value signal into an array (handles writeValue from non-array). */\n private asArray(value: unknown): readonly unknown[] {\n if (Array.isArray(value)) return value as readonly unknown[];\n if (value == null) return [];\n return [value];\n }\n\n // Overlay\n\n private openOverlay(): void {\n if (this.overlayRef) return;\n\n // On small viewports (when opted in) detach from the trigger and present\n // the panel as a full-width slide-up sheet pinned to the bottom edge.\n const asSheet = wrPresentAsSheet(this.responsive(), this.responsiveConfig);\n\n const positionStrategy = asSheet\n ? this.overlay.position().global().centerHorizontally().bottom('0')\n : this.overlay\n .position()\n .flexibleConnectedTo(this.host)\n .withPositions([\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n ])\n .withPush(true);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: asSheet ? this.scrollStrategies.block() : this.scrollStrategies.reposition(),\n // Floor the panel at the trigger width (it can still grow for long\n // options) instead of pinning it. The panel fills this via `width: 100%`,\n // so the flex overlay pane has no transparent gutter beside a\n // content-narrow panel — that gutter would otherwise sit \"inside\" the\n // overlay and swallow outside-clicks, leaving the panel open. Mirrors how\n // mat-select sizes its overlay.\n width: asSheet ? '100%' : undefined,\n minWidth: asSheet ? undefined : this.host.nativeElement.getBoundingClientRect().width,\n hasBackdrop: asSheet,\n backdropClass: asSheet ? 'wr-select-backdrop' : undefined,\n panelClass: asSheet ? ['wr-select-overlay', 'wr-overlay-sheet'] : 'wr-select-overlay',\n });\n\n const portal = new TemplatePortal(this.panelTpl(), this.vcr);\n this.overlayRef.attach(portal);\n\n if (asSheet) {\n this.overlayRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.open.set(false));\n }\n\n this.overlayRef\n .outsidePointerEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n if (this.host.nativeElement.contains(event.target as Node)) return;\n this.open.set(false);\n });\n\n this.overlayRef\n .keydownEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.open.set(false);\n }\n });\n }\n\n private closeOverlay(): void {\n if (!this.overlayRef) return;\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n}\n","@if (isSearch()) {\n <!-- Search mode: a real text input drives a filtered overlay panel.\n The wrapper isn't itself focusable — the input is the tabstop. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events,@angular-eslint/template/interactive-supports-focus -->\n <div class=\"wr-select__trigger wr-select__trigger--search\" (click)=\"focusSearchInput()\">\n <input\n #searchInput\n type=\"text\"\n role=\"combobox\"\n class=\"wr-select__search-input\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"isDisabled()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listboxId\"\n [attr.aria-activedescendant]=\"open() ? activeOptionId() || null : null\"\n [placeholder]=\"resolvedPlaceholder()\"\n [value]=\"searchDisplay()\"\n (input)=\"onSearchInput($event)\"\n (focus)=\"onSearchFocus()\"\n (keydown)=\"onSearchKey($event)\"\n (blur)=\"onTouched()\"\n />\n @if (clearable() && hasSelection() && !isDisabled()) {\n <span\n class=\"wr-select__clear\"\n role=\"button\"\n [attr.aria-label]=\"resolvedClear()\"\n tabindex=\"-1\"\n (click)=\"clearAll($event)\"\n (keydown.enter)=\"clearAll($event)\"\n (keydown.space)=\"clearAll($event)\"\n >\n <svg\n class=\"wr-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </span>\n }\n <svg\n class=\"wr-icon__svg wr-select__chevron\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </div>\n} @else if (isTag()) {\n <!-- Tag mode: a focusable input lives inside, so the wrapper itself\n only exists to host chips and forward whitespace clicks to the\n input. Keyboard users tab straight into the input — no need for a\n separate role. The click handler is a mouse-only convenience. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events,@angular-eslint/template/interactive-supports-focus -->\n <div\n class=\"wr-select__trigger wr-select__trigger--tag\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (click)=\"focusTagInput()\"\n >\n <span class=\"wr-select__chips\">\n @for (chip of visibleChips(); track $index) {\n <span class=\"wr-select__chip\">\n <span class=\"wr-select__chip-label\">{{ chip.label }}</span>\n <span\n class=\"wr-select__chip-remove\"\n role=\"button\"\n [attr.aria-label]=\"chipRemoveLabel({ label: chip.label })\"\n tabindex=\"-1\"\n (click)=\"removeChip(chip.value, $event)\"\n (keydown.enter)=\"removeChip(chip.value, $event)\"\n (keydown.space)=\"removeChip(chip.value, $event)\"\n >\n <svg\n class=\"wr-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </span>\n </span>\n }\n @if (hiddenChipCount(); as extra) {\n <span class=\"wr-select__chip wr-select__chip--more\">+{{ extra }} more</span>\n }\n <input\n #tagInput\n type=\"text\"\n class=\"wr-select__tag-input\"\n [value]=\"draft()\"\n [disabled]=\"isDisabled() || atCapacity()\"\n [placeholder]=\"hasSelection() ? '' : resolvedPlaceholder()\"\n (input)=\"onTagInput($event)\"\n (keydown)=\"onTagKeydown($event)\"\n (paste)=\"onTagPaste($event)\"\n (blur)=\"onTagBlur()\"\n />\n </span>\n\n @if (clearable() && hasSelection() && !isDisabled()) {\n <span\n class=\"wr-select__clear\"\n role=\"button\"\n [attr.aria-label]=\"resolvedClear()\"\n tabindex=\"-1\"\n (click)=\"clearAll($event)\"\n (keydown.enter)=\"clearAll($event)\"\n (keydown.space)=\"clearAll($event)\"\n >\n <svg\n class=\"wr-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </span>\n }\n </div>\n} @else {\n <button\n type=\"button\"\n class=\"wr-select__trigger\"\n role=\"combobox\"\n [disabled]=\"isDisabled()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listboxId\"\n [attr.aria-multiselectable]=\"isMulti() ? 'true' : null\"\n [attr.aria-activedescendant]=\"open() ? activeOptionId() || null : null\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKey($event)\"\n (blur)=\"onTouched()\"\n >\n @if (isMulti()) {\n @if (hasSelection()) {\n <span class=\"wr-select__chips\">\n @for (chip of visibleChips(); track $index) {\n <span class=\"wr-select__chip\">\n <span class=\"wr-select__chip-label\">{{ chip.label }}</span>\n <span\n class=\"wr-select__chip-remove\"\n role=\"button\"\n [attr.aria-label]=\"chipRemoveLabel({ label: chip.label })\"\n tabindex=\"-1\"\n (click)=\"removeChip(chip.value, $event)\"\n (keydown.enter)=\"removeChip(chip.value, $event)\"\n (keydown.space)=\"removeChip(chip.value, $event)\"\n >\n <svg\n class=\"wr-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </span>\n </span>\n }\n @if (hiddenChipCount(); as extra) {\n <span class=\"wr-select__chip wr-select__chip--more\">+{{ extra }} more</span>\n }\n </span>\n } @else {\n <span class=\"wr-select__placeholder\">{{ resolvedPlaceholder() }}</span>\n }\n } @else {\n @if (selectedLabel(); as label) {\n <span class=\"wr-select__value\">{{ label }}</span>\n } @else {\n <span class=\"wr-select__placeholder\">{{ resolvedPlaceholder() }}</span>\n }\n }\n\n @if (isMulti() && clearable() && hasSelection() && !isDisabled()) {\n <span\n class=\"wr-select__clear\"\n role=\"button\"\n [attr.aria-label]=\"resolvedClear()\"\n tabindex=\"-1\"\n (click)=\"clearAll($event)\"\n (keydown.enter)=\"clearAll($event)\"\n (keydown.space)=\"clearAll($event)\"\n >\n <svg\n class=\"wr-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </span>\n }\n\n <svg\n class=\"wr-icon__svg wr-select__chevron\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n}\n\n<ng-template #panelTpl>\n <div\n class=\"wr-select-panel\"\n [class.wr-select-panel--sm]=\"size() === 'sm'\"\n [class.wr-select-panel--lg]=\"size() === 'lg'\"\n role=\"listbox\"\n [attr.id]=\"listboxId\"\n [attr.aria-multiselectable]=\"isMulti() ? 'true' : null\"\n >\n @if (loading()) {\n <div class=\"wr-select-panel__loading\" aria-busy=\"true\">{{ resolvedLoading() }}</div>\n }\n\n <!-- Dynamic options from [options] or async [loader] (search mode).\n Rendered as wr-option so the standard registration / filter\n pipeline applies uniformly. -->\n @for (item of dynamicOptions(); track $index) {\n <wr-option [value]=\"item\">{{ displayWith()(item) }}</wr-option>\n }\n\n <!-- Projected static options. -->\n <ng-content />\n\n @if (hasNoResults()) {\n <div class=\"wr-select-panel__empty\">{{ resolvedNoResults() }}</div>\n }\n </div>\n</ng-template>\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 { Component, ViewEncapsulation, input } from '@angular/core';\n\n/**\n * Visually groups options under a label inside a `<wr-select>`.\n *\n * @example\n * ```html\n * <wr-option-group label=\"Sizes\">\n * <wr-option value=\"sm\">Small</wr-option>\n * <wr-option value=\"md\">Medium</wr-option>\n * </wr-option-group>\n * ```\n */\n@Component({\n selector: 'wr-option-group',\n templateUrl: './option-group.html',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'wr-option-group', role: 'group' },\n})\nexport class WrOptionGroup {\n /** Section heading shown above the options. */\n readonly label = input.required<string>();\n}\n","<div class=\"wr-option-group__label\">{{ label() }}</div>\n<ng-content />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngwr-select.mjs","sources":["../../../projects/lib/select/tokens/select.token.ts","../../../projects/lib/select/option.ts","../../../projects/lib/select/select.ts","../../../projects/lib/select/select.html","../../../projects/lib/select/option-group.ts","../../../projects/lib/select/option-group.html","../../../projects/lib/select/ngwr-select.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 { InjectionToken, type Signal } from '@angular/core';\n\n/** Per-option registration metadata. @internal */\nexport interface WrSelectOptionRegistration {\n readonly id: string;\n readonly value: unknown;\n readonly disabled: boolean;\n /**\n * Lazy label reader. Options render text via `<ng-content>`, so we\n * read it at call time once Angular has settled the projected content.\n */\n readonly getLabel: () => string;\n}\n\n/**\n * Contract a `<wr-option>` uses to talk to its parent `<wr-select>`.\n *\n * @internal\n */\nexport interface WrSelectContext {\n /**\n * Currently selected value. Single mode: `T | null`. Multi mode:\n * `readonly T[]`. Options consult {@link isSelected} instead of\n * reading this directly so the same option code works in both modes.\n */\n readonly value: Signal<unknown>;\n /** Whether the select is in multi-selection mode. */\n readonly multi: Signal<boolean>;\n /** Whether the select is disabled. */\n readonly isDisabled: Signal<boolean>;\n /** Id of the option currently highlighted by keyboard navigation. */\n readonly activeOptionId: Signal<string | null>;\n /**\n * Active search query (search mode only). Empty string when there is\n * no filter applied — options treat that as \"show me\".\n */\n readonly searchQuery: Signal<string>;\n /** True only when `mode=\"search\"`. Options gate filtering on this. */\n readonly isSearch: Signal<boolean>;\n /** Is the given option value currently selected? Handles both single and multi. */\n isSelected(value: unknown): boolean;\n /**\n * Called when a child option is clicked. The label is read lazily\n * via {@link WrSelectOptionRegistration.getLabel}, so callers don't\n * need to thread it through.\n */\n selectOption(value: unknown): void;\n /** Register an option; returns an unregister function. */\n registerOption(reg: WrSelectOptionRegistration): () => void;\n}\n\n/**\n * Token a `<wr-option>` injects to register itself with and notify its\n * parent `<wr-select>`.\n *\n * @internal\n */\nexport const WR_SELECT = new InjectionToken<WrSelectContext>('WR_SELECT');\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 { Component, DestroyRef, ElementRef, ViewEncapsulation, computed, effect, inject, input } from '@angular/core';\n\nimport { WR_SELECT } from './tokens';\n\nlet uid = 0;\n\n/**\n * Single option inside a `<wr-select>`.\n *\n * The option's display label is taken from its projected text content;\n * the form value is its `value` input.\n *\n * @example\n * ```html\n * <wr-option value=\"sm\">Small</wr-option>\n * <wr-option [value]=\"42\">Forty-two</wr-option>\n * ```\n */\n@Component({\n selector: 'wr-option',\n template: '<ng-content />',\n encapsulation: ViewEncapsulation.None,\n host: {\n role: 'option',\n '[attr.id]': 'id',\n '[class]': 'classes()',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-disabled]': 'disabled() ? true : null',\n '(click)': 'onClick()',\n },\n})\nexport class WrOption {\n /** The value contributed when this option is chosen. Required. */\n readonly value = input.required<unknown>();\n\n /** Disable this option. @default false */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n /** Stable id used for `aria-activedescendant`. */\n readonly id = `wr-option-${++uid}`;\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly parent = inject(WR_SELECT, { optional: true });\n\n /**\n * @internal — true when this option is currently selected. Works for\n * both single and multi-select parents via `WrSelectContext.isSelected`.\n */\n protected readonly selected = computed(() => {\n const parent = this.parent;\n if (!parent) return false;\n // Re-read parent's value signal so the computed recomputes on change.\n parent.value();\n return parent.isSelected(this.value());\n });\n\n /** @internal — true when this option is the keyboard cursor target. */\n protected readonly active = computed(() => this.parent?.activeOptionId() === this.id);\n\n /**\n * @internal — search mode only. True when the parent has a query that\n * the option's text content does not match (case-insensitive substring).\n * Hidden options stay in the DOM so registration order survives but\n * collapse via CSS.\n */\n protected readonly hidden = computed(() => {\n const parent = this.parent;\n if (!parent?.isSearch()) return false;\n const q = parent.searchQuery().trim().toLowerCase();\n if (!q) return false;\n const label = (this.host.nativeElement.textContent ?? '').trim().toLowerCase();\n return !label.includes(q);\n });\n\n protected readonly classes = computed(() => {\n const parts = ['wr-option'];\n if (this.selected()) parts.push('wr-option--selected');\n if (this.active()) parts.push('wr-option--active');\n if (this.disabled()) parts.push('wr-option--disabled');\n if (this.hidden()) parts.push('wr-option--hidden');\n return parts.join(' ');\n });\n\n constructor() {\n if (this.parent) {\n const parent = this.parent;\n // Re-register when disabled or value changes so the parent has fresh metadata.\n effect(onCleanup => {\n const unreg = parent.registerOption({\n id: this.id,\n value: this.value(),\n disabled: this.disabled(),\n getLabel: () => this.host.nativeElement.textContent?.trim() ?? '',\n });\n onCleanup(() => unreg());\n });\n inject(DestroyRef);\n }\n }\n\n protected onClick(): void {\n if (this.disabled() || !this.parent) return;\n this.parent.selectOption(this.value());\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 { type BooleanInput, coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { type OverlayRef, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n ElementRef,\n PLATFORM_ID,\n TemplateRef,\n ViewContainerRef,\n ViewEncapsulation,\n computed,\n contentChildren,\n effect,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nimport { type Observable, debounceTime, finalize, from, isObservable, of, switchMap } from 'rxjs';\n\nimport { useI18nFormatter, useI18nText } from 'ngwr/i18n';\nimport { WR_OVERLAY, WR_RESPONSIVE_OVERLAYS, wrPresentAsSheet } from 'ngwr/overlay';\n\nimport type { WrSelectMode, WrSelectSearchLoader, WrSelectTagValidator, WrSelectSize } from './interfaces';\nimport { WrOption } from './option';\nimport { WR_SELECT, type WrSelectContext, type WrSelectOptionRegistration } from './tokens';\n\nlet listboxUid = 0;\n\ninterface SelectedChip {\n readonly value: unknown;\n readonly label: string;\n}\n\n/**\n * Combobox primitive. Renders a button that opens a CDK overlay\n * containing the projected `<wr-option>` (and optionally\n * `<wr-option-group>`) children. Every shape is the same component\n * with a different `[mode]`:\n *\n * - `'single'` (default) — one value, no input. Classic dropdown.\n * - `'multi'` — array value, chips on the trigger; clicking an option\n * toggles instead of closing, Backspace removes the last chip.\n * - `'search'` — type-ahead with sync `[options]` filter or async\n * `[loader]`. Replaces the standalone `<wr-autocomplete>`.\n * - `'tag'` — free-text + chips with `[separators]` / `[validate]` /\n * `[allowDuplicates]`. Replaces `<wr-chips-input>`.\n *\n * A signal-forms native control: it implements `FormValueControl<unknown>`, so\n * `[formField]` binds straight to its `value` model — no\n * `ControlValueAccessor` in between. `[(value)]` works standalone, and classic\n * `[(ngModel)]` / reactive forms keep working through Angular's bridge.\n *\n * @example\n * ```html\n * <!-- Single (signal forms) -->\n * <wr-select placeholder=\"Pick a size\" [formField]=\"form.size\">\n * <wr-option value=\"sm\">Small</wr-option>\n * <wr-option value=\"md\">Medium</wr-option>\n * <wr-option value=\"lg\">Large</wr-option>\n * </wr-select>\n *\n * <!-- Multi (standalone two-way binding) -->\n * <wr-select mode=\"multi\" placeholder=\"Pick tags\" [(value)]=\"tags\">\n * <wr-option value=\"ts\">TypeScript</wr-option>\n * <wr-option value=\"ng\">Angular</wr-option>\n * </wr-select>\n * ```\n *\n * The legacy `[multi]=\"true\"` boolean is still accepted but is now an\n * alias for `[mode]=\"'multi'\"` — prefer the explicit mode.\n *\n * @see https://ngwr.dev/reference/components/select\n */\n@Component({\n selector: 'wr-select',\n templateUrl: './select.html',\n encapsulation: ViewEncapsulation.None,\n host: { '[class]': 'classes()' },\n imports: [WrOption],\n providers: [\n {\n provide: WR_SELECT,\n // eslint-disable-next-line @angular-eslint/no-forward-ref\n useExisting: forwardRef(() => WrSelect),\n },\n ],\n})\nexport class WrSelect implements FormValueControl<unknown>, WrSelectContext {\n /** Placeholder shown when no option is selected. Falls back to `select.placeholder`. */\n readonly placeholder = input<string | null>(null);\n\n /** Clear-selection (×) button aria-label. Falls back to `select.clearSelection`. */\n readonly clearLabel = input<string | null>(null);\n\n protected readonly resolvedPlaceholder = useI18nText(this.placeholder, 'select.placeholder', '');\n protected readonly resolvedClear = useI18nText(this.clearLabel, 'select.clearSelection', 'Clear selection');\n\n /** Per-chip ARIA label — interpolates `{{label}}`. @internal */\n protected readonly chipRemoveLabel = useI18nFormatter('select.removeItem', 'Remove {{label}}');\n\n /**\n * Disable the select. Bound automatically from the field's disabled state\n * when used with `[formField]`.\n *\n * @default false\n */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n /** Pill-shaped corners on the trigger. @default false */\n readonly rounded = input(false, { transform: coerceBooleanProperty });\n\n /** Control size — shares the `--wr-control-*` contract. @default 'md' */\n readonly size = input<WrSelectSize>('md');\n\n /**\n * Present the option panel as a full-width bottom-sheet on small\n * viewports instead of an anchored dropdown. `undefined` follows the\n * app-wide `provideWrResponsiveOverlays()` setting; `true`/`false`\n * overrides it. @default undefined\n */\n readonly responsive = input<boolean | undefined, BooleanInput>(undefined, {\n transform: (v: BooleanInput): boolean | undefined => (v == null ? undefined : coerceBooleanProperty(v)),\n });\n\n /**\n * Behavior mode. `<wr-select>` is the unified combobox primitive —\n * pick the shape via `[mode]`:\n *\n * - `'single'` (default) — one value, no input. Classic dropdown.\n * - `'multi'` — array value, chips on the trigger.\n * - `'search'` *(planned)* — type-ahead with sync filter or async loader.\n * - `'tag'` *(planned)* — free-text + chips with optional `allowCreate`.\n *\n */\n readonly mode = input<WrSelectMode | null>(null);\n\n /** Resolved mode — `'single'` unless `[mode]` says otherwise. */\n protected readonly effectiveMode = computed<WrSelectMode>(() => this.mode() ?? 'single');\n\n /** Convenience — `effectiveMode() === 'multi'`. */\n protected readonly isMulti = computed(() => this.effectiveMode() === 'multi');\n\n /** Convenience — `effectiveMode() === 'tag'`. */\n protected readonly isTag = computed(() => this.effectiveMode() === 'tag');\n\n /** Convenience — `effectiveMode() === 'search'`. Exposed via context for options. */\n readonly isSearch = computed(() => this.effectiveMode() === 'search');\n\n /** WrSelectContext — resolved multi-selection flag for child options. */\n readonly multi = computed(() => this.effectiveMode() === 'multi' || this.effectiveMode() === 'tag');\n\n /** Both multi and tag render chips on the trigger. */\n protected readonly hasChips = computed(() => {\n const m = this.effectiveMode();\n return m === 'multi' || m === 'tag';\n });\n\n /**\n * Search-mode query. Empty string = no filter. Exposed via context so\n * each `<wr-option>` can self-hide non-matching rows.\n */\n readonly searchQuery = signal('');\n\n // Search-mode-only inputs (ignored in other modes)\n\n /**\n * Search mode: dynamic option array. Each item is rendered as a\n * `<wr-option>` whose label comes from `[displayWith]`. Works\n * alongside projected `<wr-option>` children — both lists are\n * filtered by the search query.\n */\n readonly options = input<readonly unknown[]>([]);\n\n /** Search mode: map a dynamic option item to its display label. @default String */\n readonly displayWith = input<(item: unknown) => string>((item: unknown) => String(item));\n\n /**\n * Search mode: async loader. When set, the loader is called on every\n * (debounced) keystroke and its result replaces `[options]`. Supports\n * Observables, Promises, and plain arrays.\n */\n readonly loader = input<WrSelectSearchLoader<unknown> | null>(null);\n\n /** Search mode: debounce (ms) applied to the loader. @default 250 */\n readonly debounceMs = input(250, { transform: (v: unknown): number => Math.max(0, Number(v) || 0) });\n\n /** Search mode: minimum query length before the panel opens / loader fires. @default 0 */\n readonly minChars = input(0, { transform: (v: unknown): number => Math.max(0, Number(v) || 0) });\n\n /**\n * Search mode: allow values not in the options list. Enter on an\n * unmatched query commits the raw text as the form value. @default false\n */\n readonly freeText = input(false, { transform: coerceBooleanProperty });\n\n /**\n * Search mode: window the option panel so thousands of `[options]` keep only\n * ~one viewport of rows in the DOM. Opt-in and OFF by default. Engages ONLY on\n * the pure data-array search tier — it silently falls back to the full render\n * when static `<wr-option>` children are projected or the filtered list is\n * empty. While on, rows are plain `role=\"option\"` elements (no `<wr-option>`),\n * navigated via `aria-activedescendant`, selected by value. @default false\n */\n readonly virtualScroll = input(false, { transform: coerceBooleanProperty });\n\n /**\n * Search mode: uniform option-row height in px for the virtual window. `0`\n * (default) measures the first rendered row once and reuses it, so it adapts\n * to the control size. Read only when `virtualScroll` engages. @default 0\n */\n readonly rowHeight = input(0, { transform: (v: unknown): number => Math.max(0, coerceNumberProperty(v, 0)) });\n\n /**\n * Search mode: height of the virtual scroll viewport — a number (px) or any\n * CSS length. @default 256\n */\n readonly viewportHeight = input<number | string>(256);\n\n /** Search mode: extra rows kept above/below the virtual viewport. @default 6 */\n readonly overscan = input(6, { transform: (v: unknown): number => Math.max(0, coerceNumberProperty(v, 6)) });\n\n /** Search mode: text shown when the filter / loader returns nothing. Falls back to `select.noResults`. */\n readonly noResultsText = input<string | null>(null);\n\n /** Search mode: text shown while the async loader is in flight. Falls back to `select.loading`. */\n readonly loadingText = input<string | null>(null);\n\n protected readonly resolvedNoResults = useI18nText(this.noResultsText, 'select.noResults', 'No results');\n protected readonly resolvedLoading = useI18nText(this.loadingText, 'select.loading', 'Loading…');\n\n /** Search mode: results returned by the async loader. @internal */\n protected readonly loadedOptions = signal<readonly unknown[]>([]);\n\n /** Search mode: true while the loader is in flight. @internal */\n protected readonly loading = signal(false);\n\n // Tag-mode-only inputs (ignored in other modes)\n\n /**\n * Tag mode: keys / characters that commit the current draft into a chip.\n * `'Enter'` is the key name; everything else is a literal character watched\n * in keypresses and pastes. @default ['Enter', ',']\n */\n readonly separators = input<readonly string[]>(['Enter', ',']);\n\n /** Tag mode: allow the same value to appear more than once. @default false */\n readonly allowDuplicates = input(false, { transform: coerceBooleanProperty });\n\n /**\n * Tag mode: custom validator — return `true` to accept the value, `false`\n * to silently reject. Receives the trimmed draft + the existing chips.\n */\n readonly validate = input<WrSelectTagValidator | null>(null);\n\n /** Tag-mode draft (text currently typed in the inline input). @internal */\n protected readonly draft = signal('');\n\n /**\n * Show a clear-all (×) button at the end of the chip row when at\n * least one option is selected (multi mode only). @default true\n */\n readonly clearable = input(true, { transform: coerceBooleanProperty });\n\n /**\n * Cap on selected items (multi mode). `0` = unlimited. Once reached,\n * additional clicks on unselected options are ignored. @default 0\n */\n readonly maxItems = input(0, {\n transform: (v: unknown): number => Math.max(0, Number(v) || 0),\n });\n\n /**\n * Maximum number of chips rendered before collapsing the rest into a\n * `+N more` indicator. `0` = render every chip. @default 0\n */\n readonly maxTagCount = input(0, {\n transform: (v: unknown): number => Math.max(0, Number(v) || 0),\n });\n\n /**\n * Unified value. Single mode holds a scalar (or `null`); multi / tag\n * mode holds `readonly unknown[]`. Bound by `[formField]`, or two-way\n * via `[(value)]`.\n */\n readonly value = model<unknown>(null);\n\n /** Emitted on blur / commit so a bound field can mark itself touched. */\n readonly touch = output<void>();\n\n /** Listbox id used by the trigger's `aria-controls`. */\n protected readonly listboxId = `wr-select-listbox-${++listboxUid}`;\n\n /** Registered options (insertion order). Internal — distinct from the public `[options]` input. */\n private readonly registry = signal<readonly WrSelectOptionRegistration[]>([]);\n\n /** Keyboard cursor index into `options`. -1 = none. */\n protected readonly activeIndex = signal(-1);\n\n /** Id of the active option (for `aria-activedescendant`). */\n readonly activeOptionId = computed<string | null>(() => {\n const idx = this.activeIndex();\n if (this.virtualActive()) {\n // Virtual rows aren't registered; the active id is derived from the index,\n // and returned only while the row is inside the rendered window so\n // `aria-activedescendant` never dangles at a recycled element.\n const { start, end } = this.virtualWindow();\n return idx >= start && idx < end ? this.virtualRowId(idx) : null;\n }\n const list = this.registry();\n return idx >= 0 && idx < list.length ? list[idx].id : null;\n });\n\n protected readonly open = signal(false);\n protected readonly selectedLabel = signal<string | null>(null);\n\n /**\n * Selected chips (multi + tag modes). Multi reads labels from the\n * registered `<wr-option>` children; tag uses each raw string as\n * both value and label.\n */\n protected readonly selectedChips = computed<readonly SelectedChip[]>(() => {\n if (!this.hasChips()) return [];\n const arr = this.asArray(this.value());\n if (this.isTag()) {\n return arr.map<SelectedChip>(v => ({ value: v, label: String(v) }));\n }\n const list = this.registry();\n return arr.map<SelectedChip>(v => {\n const found = list.find(o => o.value === v);\n return { value: v, label: found?.getLabel() ?? String(v) };\n });\n });\n\n protected readonly visibleChips = computed<readonly SelectedChip[]>(() => {\n const cap = this.maxTagCount();\n const chips = this.selectedChips();\n return cap > 0 && chips.length > cap ? chips.slice(0, cap) : chips;\n });\n\n protected readonly hiddenChipCount = computed(() => {\n const cap = this.maxTagCount();\n const total = this.selectedChips().length;\n return cap > 0 && total > cap ? total - cap : 0;\n });\n\n protected readonly hasSelection = computed(() => {\n if (this.hasChips()) return this.selectedChips().length > 0;\n return this.value() != null;\n });\n\n /** Effective disabled state. Part of {@link WrSelectContext} for child options. */\n readonly isDisabled = computed(() => this.disabled());\n\n protected readonly classes = computed(() => {\n const parts = ['wr-select'];\n if (this.open()) parts.push('wr-select--open');\n if (this.rounded()) parts.push('wr-select--rounded');\n const size = this.size();\n if (size !== 'md') parts.push(`wr-select--${size}`);\n if (this.isMulti()) parts.push('wr-select--multi');\n if (this.isTag()) parts.push('wr-select--tag');\n if (this.isSearch()) parts.push('wr-select--search');\n if (this.isDisabled()) parts.push('wr-select--disabled');\n return parts.join(' ');\n });\n\n /**\n * Search-mode dynamic options. Loader results win when the loader is\n * set; otherwise the static `[options]` array. Each item is rendered\n * as an internal `<wr-option>` in the panel.\n */\n protected readonly dynamicOptions = computed<readonly unknown[]>(() =>\n this.loader() ? this.loadedOptions() : this.options()\n );\n\n // --- Virtual scroll (search mode, data-array path) ------------------------\n\n private static readonly FALLBACK_ROW_PX = 34;\n private static readonly FALLBACK_VIEWPORT_PX = 256;\n\n /** Consumer-projected `<wr-option>` children only (NOT the `@for`-rendered ones). */\n private readonly projectedOptions = contentChildren(WrOption);\n\n /**\n * `dynamicOptions()` narrowed to the current search query. `dynamicOptions()`\n * is intentionally UNFILTERED (projected `<wr-option>` self-hide via CSS), so\n * the virtual path — which renders plain rows that can't self-hide — filters\n * here. Loader results are already query-scoped upstream.\n */\n protected readonly filteredDynamicOptions = computed<readonly unknown[]>(() => {\n const items = this.dynamicOptions();\n if (this.loader()) return items;\n const q = this.searchQuery().trim().toLowerCase();\n if (!q) return items;\n const label = this.displayWith();\n return items.filter(it => label(it).toLowerCase().includes(q));\n });\n\n /**\n * Virtualization engaged: opt-in, search mode, a non-empty filtered array, and\n * NO projected `<wr-option>` children (those keep the full-render registry path\n * so their DOM-derived labels / selection still work).\n */\n protected readonly virtualActive = computed<boolean>(\n () =>\n this.virtualScroll() &&\n this.isSearch() &&\n this.projectedOptions().length === 0 &&\n this.filteredDynamicOptions().length > 0\n );\n\n private readonly scrollTop = signal(0);\n private readonly viewportPx = signal(0);\n private readonly measuredRowPx = signal(0);\n\n /** Effective uniform row height (px). */\n protected readonly effRowH = computed(() =>\n this.rowHeight() > 0 ? this.rowHeight() : this.measuredRowPx() || WrSelect.FALLBACK_ROW_PX\n );\n\n private readonly fallbackViewportPx = computed(() => {\n const h = this.viewportHeight();\n if (typeof h === 'number') return h;\n return /^\\d+$/.test(h) ? Number(h) : WrSelect.FALLBACK_VIEWPORT_PX;\n });\n\n /** `viewportHeight` as a CSS length for the inline max-height (bare number → px). */\n protected readonly resolvedViewportHeight = computed(() => {\n const h = this.viewportHeight();\n return typeof h === 'number' || /^\\d+$/.test(h) ? `${h}px` : h;\n });\n\n /** Rendered window [start,end) + spacer pads (px). */\n protected readonly virtualWindow = computed<{ start: number; end: number; padTop: number; padBottom: number }>(() => {\n const total = this.filteredDynamicOptions().length;\n if (!this.virtualActive() || total === 0) return { start: 0, end: total, padTop: 0, padBottom: 0 };\n const h = this.effRowH();\n const vp = this.viewportPx() || this.fallbackViewportPx();\n const over = this.overscan();\n const first = Math.min(Math.floor(this.scrollTop() / h), total - 1);\n const count = Math.ceil(vp / h) + 1;\n const start = Math.max(0, first - over);\n const end = Math.min(total, first + count + over);\n return { start, end, padTop: start * h, padBottom: (total - end) * h };\n });\n\n /** The windowed slice of options, each carrying its absolute index. */\n protected readonly windowOptions = computed<readonly { item: unknown; index: number }[]>(() => {\n const { start, end } = this.virtualWindow();\n return this.filteredDynamicOptions()\n .slice(start, end)\n .map((item, k) => ({ item, index: start + k }));\n });\n\n /** Stable id for a virtual option row at filtered index `i`. */\n protected virtualRowId(i: number): string {\n return `${this.listboxId}-vopt-${i}`;\n }\n\n /** The virtual scroll container inside the overlay panel, if attached. */\n private get vlistElement(): HTMLElement | null {\n return this.overlayRef?.overlayElement.querySelector<HTMLElement>('.wr-select-panel__vlist') ?? null;\n }\n\n /** Scroll filtered index `i` just into view (sets the `scrollTop` signal synchronously). */\n private ensureVisible(i: number): void {\n if (!this.virtualActive() || i < 0) return;\n const h = this.effRowH();\n const vp = this.viewportPx() || this.fallbackViewportPx();\n const top = i * h;\n const cur = this.scrollTop();\n let next = cur;\n if (top < cur) next = top;\n else if (top + h > cur + vp) next = top + h - vp;\n if (next !== cur) {\n this.scrollTop.set(next);\n this.vlistElement?.scrollTo({ top: next });\n }\n }\n\n /**\n * Count of registered options that pass the current search filter.\n * Hides the noResults state when the panel has at least one visible row.\n */\n protected readonly visibleCount = computed(() => {\n if (this.virtualActive()) return this.filteredDynamicOptions().length;\n const list = this.registry();\n if (!this.isSearch()) return list.length;\n const q = this.searchQuery().trim().toLowerCase();\n if (!q) return list.length;\n let count = 0;\n for (const o of list) {\n if (o.getLabel().toLowerCase().includes(q)) count++;\n }\n return count;\n });\n\n /** Search mode: show \"no results\" when the panel has nothing to offer. */\n protected readonly hasNoResults = computed(() => {\n if (!this.isSearch() || !this.open() || this.loading()) return false;\n if (this.searchQuery().trim().length < this.minChars()) return false;\n return this.visibleCount() === 0;\n });\n\n /** Search mode: is this option hidden by the current query? @internal */\n private isOptionHidden(label: string): boolean {\n if (!this.isSearch()) return false;\n const q = this.searchQuery().trim().toLowerCase();\n if (!q) return false;\n return !label.toLowerCase().includes(q);\n }\n\n protected readonly panelTpl = viewChild.required('panelTpl', { read: TemplateRef });\n\n /** Tag-mode inline input. Present only when `mode=\"tag\"`. @internal */\n protected readonly tagInputEl = viewChild<ElementRef<HTMLInputElement>>('tagInput');\n\n /** Search-mode inline input. Present only when `mode=\"search\"`. @internal */\n protected readonly searchInputEl = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n protected focusTagInput(): void {\n this.tagInputEl()?.nativeElement.focus();\n }\n\n protected focusSearchInput(): void {\n this.searchInputEl()?.nativeElement.focus();\n }\n\n // Search-mode handlers\n\n protected onSearchInput(event: Event): void {\n if (this.isDisabled()) return;\n const value = (event.target as HTMLInputElement).value;\n this.searchQuery.set(value);\n if (!this.open()) this.open.set(true);\n // A new filter re-tops the virtual window and cursor (the filtered array\n // — hence every index — just changed under `activeIndex`).\n if (this.virtualActive()) {\n this.scrollTop.set(0);\n this.activeIndex.set(this.firstEnabled());\n this.vlistElement?.scrollTo({ top: 0 });\n }\n }\n\n protected onSearchFocus(): void {\n if (this.isDisabled()) return;\n if (!this.open()) {\n this.seedActiveIndex();\n this.open.set(true);\n }\n }\n\n protected onSearchKey(event: KeyboardEvent): void {\n // freeText: Enter on an unmatched query commits the typed string\n // as the value. Skips when an active option is highlighted (the\n // normal Enter-selects behaviour wins).\n if (event.key === 'Enter' && this.freeText() && this.open()) {\n const q = this.searchQuery().trim();\n const idx = this.activeIndex();\n const list = this.registry();\n const hasActive = this.virtualActive()\n ? idx >= 0 && idx < this.filteredDynamicOptions().length\n : idx >= 0 && idx < list.length && !list[idx].disabled && !this.isOptionHidden(list[idx].getLabel());\n if (!hasActive && q) {\n event.preventDefault();\n this.value.set(q);\n this.touch.emit();\n this.open.set(false);\n return;\n }\n }\n // Otherwise route through the same keyboard plumbing as the button trigger.\n this.onTriggerKey(event);\n }\n\n /**\n * Display text for the search input. Shows the selected option's\n * label when collapsed, or the live query while typing / panel open.\n * @internal\n */\n protected readonly searchDisplay = computed(() => {\n if (this.open()) return this.searchQuery();\n return this.selectedLabel() ?? '';\n });\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(WR_OVERLAY);\n private readonly responsiveConfig = inject(WR_RESPONSIVE_OVERLAYS);\n private readonly vcr = inject(ViewContainerRef);\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n private overlayRef: OverlayRef | null = null;\n\n constructor() {\n effect(() => {\n if (this.open()) {\n this.openOverlay();\n } else {\n this.closeOverlay();\n // Reset the search query when the panel closes so a re-open\n // doesn't carry a stale filter.\n if (this.isSearch()) this.searchQuery.set('');\n }\n });\n\n // Async loader pipeline (search mode only). `switchMap` cancels\n // in-flight requests when a new keystroke arrives.\n toObservable(this.searchQuery)\n .pipe(\n debounceTime(this.debounceMs()),\n switchMap(query => {\n const loader = this.loader();\n if (!loader || !this.isSearch() || query.length < this.minChars()) {\n this.loading.set(false);\n return of<readonly unknown[]>([]);\n }\n this.loading.set(true);\n const result = loader(query);\n const source: Observable<readonly unknown[]> = isObservable(result) ? result : from(Promise.resolve(result));\n return source.pipe(finalize(() => this.loading.set(false)));\n }),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(items => this.loadedOptions.set(items));\n\n // Resolve the single-mode trigger label whenever the value or\n // options change. Multi mode reads `selectedChips` instead and\n // doesn't need this.\n effect(() => {\n const v = this.value();\n const list = this.registry();\n if (this.isMulti()) {\n this.selectedLabel.set(null);\n return;\n }\n const match = list.find(o => o.value === v);\n if (match) {\n this.selectedLabel.set(match.getLabel());\n return;\n }\n // Search mode: a value picked from a virtualized (or since-unmounted) row\n // has no registered `<wr-option>`, so derive its label from `displayWith`\n // — the same function that rendered the row.\n this.selectedLabel.set(v != null && this.isSearch() ? this.displayWith()(v) : null);\n });\n\n // Wire the virtual scroll listener + viewport/row measurement while the panel\n // is open and virtualized. Re-runs when the panel opens/closes or the virtual\n // list mounts/unmounts; the microtask defers the DOM read until the overlay\n // portal is attached. Browser-only — the panel never prerenders (overlay).\n effect(onCleanup => {\n if (!isPlatformBrowser(this.platformId)) return;\n if (!this.open() || !this.virtualActive()) return;\n let raf = 0;\n let ro: ResizeObserver | null = null;\n let el: HTMLElement | null = null;\n const onScroll = (): void => {\n if (raf) return;\n raf = requestAnimationFrame(() => {\n raf = 0;\n if (el) this.scrollTop.set(el.scrollTop);\n });\n };\n queueMicrotask(() => {\n el = this.vlistElement;\n if (!el) return;\n this.viewportPx.set(el.clientHeight);\n if (this.rowHeight() === 0) {\n const h = el.querySelector<HTMLElement>('.wr-option')?.offsetHeight ?? 0;\n if (h > 0) this.measuredRowPx.set(h);\n }\n // Re-seed the scroll with the now-measured row height + real viewport so\n // a deep pre-selected active row lands correctly on first open (the seed\n // before open used the fallback height). No-op when it's already in view.\n this.ensureVisible(this.activeIndex());\n // Sync the freshly-attached element to the retained signal — seeds the\n // scroll to the active option and avoids a blank panel on reopen.\n if (el.scrollTop !== this.scrollTop()) el.scrollTop = this.scrollTop();\n el.addEventListener('scroll', onScroll, { passive: true });\n if (typeof ResizeObserver !== 'undefined') {\n ro = new ResizeObserver(() => {\n if (el) this.viewportPx.set(el.clientHeight);\n });\n ro.observe(el);\n }\n });\n onCleanup(() => {\n if (raf) cancelAnimationFrame(raf);\n if (el) el.removeEventListener('scroll', onScroll);\n ro?.disconnect();\n });\n });\n }\n\n // WrSelectContext\n\n isSelected(value: unknown): boolean {\n if (this.isMulti()) return this.asArray(this.value()).includes(value);\n return this.value() === value;\n }\n\n selectOption(value: unknown): void {\n if (this.isMulti()) {\n const current = this.asArray(this.value());\n const idx = current.indexOf(value);\n let next: readonly unknown[];\n if (idx >= 0) {\n next = [...current.slice(0, idx), ...current.slice(idx + 1)];\n } else {\n const cap = this.maxItems();\n if (cap > 0 && current.length >= cap) return;\n next = [...current, value];\n }\n this.value.set(next);\n this.touch.emit();\n // Keep the panel open in multi mode so the user can keep picking.\n return;\n }\n this.value.set(value);\n this.touch.emit();\n this.open.set(false);\n }\n\n registerOption(reg: WrSelectOptionRegistration): () => void {\n this.registry.update(list => [...list, reg]);\n return () => this.registry.update(list => list.filter(o => o.id !== reg.id));\n }\n\n // Chip handlers (multi + tag)\n\n /** Remove one selection (chip × button). Works for multi and tag modes. */\n protected removeChip(value: unknown, event: Event): void {\n event.stopPropagation();\n if (this.isDisabled() || !this.hasChips()) return;\n const next = this.asArray(this.value()).filter(v => v !== value);\n this.value.set(next);\n this.touch.emit();\n }\n\n /** Clear every selection (× button). Multi/tag → empty array; search → null. */\n protected clearAll(event: Event): void {\n event.stopPropagation();\n if (this.isDisabled()) return;\n if (this.hasChips()) {\n this.value.set([]);\n } else if (this.isSearch()) {\n this.value.set(null);\n this.searchQuery.set('');\n } else {\n return;\n }\n this.touch.emit();\n }\n\n // Tag-mode draft handlers\n\n /** Capacity check used by tag mode to refuse the next add. */\n protected readonly atCapacity = computed(() => {\n const cap = this.maxItems();\n return cap > 0 && this.asArray(this.value()).length >= cap;\n });\n\n protected onTagInput(event: Event): void {\n if (this.isDisabled()) return;\n this.draft.set((event.target as HTMLInputElement).value);\n }\n\n protected onTagKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n const seps = this.separators();\n\n if (seps.includes(event.key)) {\n event.preventDefault();\n this.commitDraft();\n return;\n }\n\n if (event.key === 'Backspace' && this.draft() === '') {\n const chips = this.selectedChips();\n if (chips.length > 0) {\n event.preventDefault();\n this.removeChip(chips[chips.length - 1].value, event);\n }\n }\n }\n\n protected onTagPaste(event: ClipboardEvent): void {\n if (this.isDisabled()) return;\n const text = event.clipboardData?.getData('text') ?? '';\n if (!text) return;\n\n const seps = this.separators().filter(s => s !== 'Enter');\n if (seps.length === 0) return;\n\n event.preventDefault();\n const escaped = seps.map(s => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('');\n const splitRegex = new RegExp(`[${escaped}\\\\n]+`);\n for (const part of text.split(splitRegex)) this.tryAddTag(part);\n }\n\n protected onTagBlur(): void {\n if (this.draft().trim()) this.commitDraft();\n this.touch.emit();\n }\n\n private commitDraft(): void {\n const v = this.draft().trim();\n this.draft.set('');\n if (v) this.tryAddTag(v);\n }\n\n private tryAddTag(raw: string): void {\n if (!this.isTag() || this.atCapacity()) return;\n const value = raw.trim();\n if (!value) return;\n\n const existing = this.asArray(this.value()).map(String);\n if (!this.allowDuplicates() && existing.includes(value)) return;\n\n const validator = this.validate();\n if (validator && !validator(value, existing)) return;\n\n const next = [...existing, value];\n this.value.set(next);\n this.touch.emit();\n }\n\n // Template handlers\n\n protected onTriggerClick(): void {\n if (this.isDisabled()) return;\n // Tag mode has no panel — clicks should land on the inline input,\n // not toggle an overlay that's never created.\n if (this.isTag()) return;\n this.open.update(v => !v);\n }\n\n protected onTriggerKey(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n\n if (!this.open()) {\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.seedActiveIndex();\n this.open.set(true);\n return;\n }\n // Multi mode: Backspace on closed trigger removes last chip. Tag\n // mode has its own input handler — never reaches this branch.\n if (event.key === 'Backspace' && this.isMulti() && this.hasSelection()) {\n event.preventDefault();\n const chips = this.selectedChips();\n const last = chips[chips.length - 1];\n if (last) this.removeChip(last.value, event);\n }\n return;\n }\n\n // Open — navigation/selection.\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.moveActive(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveActive(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.activeIndex.set(this.firstEnabled());\n this.ensureVisible(this.activeIndex());\n break;\n case 'End':\n event.preventDefault();\n this.activeIndex.set(this.lastEnabled());\n this.ensureVisible(this.activeIndex());\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n const idx = this.activeIndex();\n if (this.virtualActive()) {\n // Virtual rows aren't in the DOM to click — select the value directly.\n const list = this.filteredDynamicOptions();\n if (idx >= 0 && idx < list.length) this.selectOption(list[idx]);\n break;\n }\n const list = this.registry();\n if (idx >= 0 && idx < list.length && !list[idx].disabled) {\n const id = list[idx].id;\n const el = this.overlayRef?.overlayElement.querySelector<HTMLElement>(`#${CSS.escape(id)}`);\n el?.click();\n }\n break;\n }\n default:\n break;\n }\n }\n\n private seedActiveIndex(): void {\n if (this.virtualActive()) {\n const list = this.filteredDynamicOptions();\n const idx = list.findIndex(it => this.isSelected(it));\n this.activeIndex.set(idx >= 0 ? idx : this.firstEnabled());\n this.ensureVisible(this.activeIndex());\n return;\n }\n const list = this.registry();\n let selectedIdx = -1;\n if (this.isMulti()) {\n const arr = this.asArray(this.value());\n if (arr.length > 0) selectedIdx = list.findIndex(o => o.value === arr[0]);\n } else {\n selectedIdx = list.findIndex(o => o.value === this.value());\n }\n this.activeIndex.set(selectedIdx >= 0 ? selectedIdx : this.firstEnabled());\n }\n\n private moveActive(delta: number): void {\n // Virtual rows are never disabled or hidden (the list is already filtered),\n // so navigation is a plain wrap plus a scroll-into-view.\n if (this.virtualActive()) {\n const len = this.filteredDynamicOptions().length;\n if (len === 0) return;\n const i = (this.activeIndex() + delta + len) % len;\n this.activeIndex.set(i);\n this.ensureVisible(i);\n return;\n }\n const list = this.registry();\n if (list.length === 0) return;\n let i = this.activeIndex();\n let attempts = list.length;\n while (attempts-- > 0) {\n i = (i + delta + list.length) % list.length;\n const o = list[i];\n if (!o.disabled && !this.isOptionHidden(o.getLabel())) {\n this.activeIndex.set(i);\n return;\n }\n }\n }\n\n private firstEnabled(): number {\n if (this.virtualActive()) return this.filteredDynamicOptions().length > 0 ? 0 : -1;\n return this.registry().findIndex(o => !o.disabled && !this.isOptionHidden(o.getLabel()));\n }\n\n private lastEnabled(): number {\n if (this.virtualActive()) return this.filteredDynamicOptions().length - 1;\n const list = this.registry();\n let found = -1;\n list.forEach((o, i) => {\n if (!o.disabled && !this.isOptionHidden(o.getLabel())) found = i;\n });\n return found;\n }\n\n /** Coerce the multi-mode value into an array (tolerates a scalar or null write). */\n private asArray(value: unknown): readonly unknown[] {\n if (Array.isArray(value)) return value as readonly unknown[];\n if (value == null) return [];\n return [value];\n }\n\n // Overlay\n\n private openOverlay(): void {\n if (this.overlayRef) return;\n\n // On small viewports (when opted in) detach from the trigger and present\n // the panel as a full-width slide-up sheet pinned to the bottom edge.\n const asSheet = wrPresentAsSheet(this.responsive(), this.responsiveConfig);\n\n const positionStrategy = asSheet\n ? this.overlay.position().global().centerHorizontally().bottom('0')\n : this.overlay\n .position()\n .flexibleConnectedTo(this.host)\n .withPositions([\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n ])\n .withPush(true);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: asSheet ? this.scrollStrategies.block() : this.scrollStrategies.reposition(),\n // Floor the panel at the trigger width (it can still grow for long\n // options) instead of pinning it. The panel fills this via `width: 100%`,\n // so the flex overlay pane has no transparent gutter beside a\n // content-narrow panel — that gutter would otherwise sit \"inside\" the\n // overlay and swallow outside-clicks, leaving the panel open. Mirrors how\n // mat-select sizes its overlay.\n width: asSheet ? '100%' : undefined,\n minWidth: asSheet ? undefined : this.host.nativeElement.getBoundingClientRect().width,\n hasBackdrop: asSheet,\n backdropClass: asSheet ? 'wr-select-backdrop' : undefined,\n panelClass: asSheet ? ['wr-select-overlay', 'wr-overlay-sheet'] : 'wr-select-overlay',\n });\n\n const portal = new TemplatePortal(this.panelTpl(), this.vcr);\n this.overlayRef.attach(portal);\n\n if (asSheet) {\n this.overlayRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.open.set(false));\n }\n\n this.overlayRef\n .outsidePointerEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n if (this.host.nativeElement.contains(event.target as Node)) return;\n this.open.set(false);\n });\n\n this.overlayRef\n .keydownEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.open.set(false);\n }\n });\n }\n\n private closeOverlay(): void {\n if (!this.overlayRef) return;\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n}\n","@if (isSearch()) {\n <!-- Search mode: a real text input drives a filtered overlay panel.\n The wrapper isn't itself focusable — the input is the tabstop. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events,@angular-eslint/template/interactive-supports-focus -->\n <div class=\"wr-select__trigger wr-select__trigger--search\" (click)=\"focusSearchInput()\">\n <input\n #searchInput\n type=\"text\"\n role=\"combobox\"\n class=\"wr-select__search-input\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"isDisabled()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listboxId\"\n [attr.aria-activedescendant]=\"open() ? activeOptionId() || null : null\"\n [placeholder]=\"resolvedPlaceholder()\"\n [value]=\"searchDisplay()\"\n (input)=\"onSearchInput($event)\"\n (focus)=\"onSearchFocus()\"\n (keydown)=\"onSearchKey($event)\"\n (blur)=\"touch.emit()\"\n />\n @if (clearable() && hasSelection() && !isDisabled()) {\n <span\n class=\"wr-select__clear\"\n role=\"button\"\n [attr.aria-label]=\"resolvedClear()\"\n tabindex=\"-1\"\n (click)=\"clearAll($event)\"\n (keydown.enter)=\"clearAll($event)\"\n (keydown.space)=\"clearAll($event)\"\n >\n <svg\n class=\"wr-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </span>\n }\n <svg\n class=\"wr-icon__svg wr-select__chevron\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </div>\n} @else if (isTag()) {\n <!-- Tag mode: a focusable input lives inside, so the wrapper itself\n only exists to host chips and forward whitespace clicks to the\n input. Keyboard users tab straight into the input — no need for a\n separate role. The click handler is a mouse-only convenience. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events,@angular-eslint/template/interactive-supports-focus -->\n <div\n class=\"wr-select__trigger wr-select__trigger--tag\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (click)=\"focusTagInput()\"\n >\n <span class=\"wr-select__chips\">\n @for (chip of visibleChips(); track $index) {\n <span class=\"wr-select__chip\">\n <span class=\"wr-select__chip-label\">{{ chip.label }}</span>\n <span\n class=\"wr-select__chip-remove\"\n role=\"button\"\n [attr.aria-label]=\"chipRemoveLabel({ label: chip.label })\"\n tabindex=\"-1\"\n (click)=\"removeChip(chip.value, $event)\"\n (keydown.enter)=\"removeChip(chip.value, $event)\"\n (keydown.space)=\"removeChip(chip.value, $event)\"\n >\n <svg\n class=\"wr-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </span>\n </span>\n }\n @if (hiddenChipCount(); as extra) {\n <span class=\"wr-select__chip wr-select__chip--more\">+{{ extra }} more</span>\n }\n <input\n #tagInput\n type=\"text\"\n class=\"wr-select__tag-input\"\n [value]=\"draft()\"\n [disabled]=\"isDisabled() || atCapacity()\"\n [placeholder]=\"hasSelection() ? '' : resolvedPlaceholder()\"\n (input)=\"onTagInput($event)\"\n (keydown)=\"onTagKeydown($event)\"\n (paste)=\"onTagPaste($event)\"\n (blur)=\"onTagBlur()\"\n />\n </span>\n\n @if (clearable() && hasSelection() && !isDisabled()) {\n <span\n class=\"wr-select__clear\"\n role=\"button\"\n [attr.aria-label]=\"resolvedClear()\"\n tabindex=\"-1\"\n (click)=\"clearAll($event)\"\n (keydown.enter)=\"clearAll($event)\"\n (keydown.space)=\"clearAll($event)\"\n >\n <svg\n class=\"wr-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </span>\n }\n </div>\n} @else {\n <button\n type=\"button\"\n class=\"wr-select__trigger\"\n role=\"combobox\"\n [disabled]=\"isDisabled()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listboxId\"\n [attr.aria-multiselectable]=\"isMulti() ? 'true' : null\"\n [attr.aria-activedescendant]=\"open() ? activeOptionId() || null : null\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKey($event)\"\n (blur)=\"touch.emit()\"\n >\n @if (isMulti()) {\n @if (hasSelection()) {\n <span class=\"wr-select__chips\">\n @for (chip of visibleChips(); track $index) {\n <span class=\"wr-select__chip\">\n <span class=\"wr-select__chip-label\">{{ chip.label }}</span>\n <span\n class=\"wr-select__chip-remove\"\n role=\"button\"\n [attr.aria-label]=\"chipRemoveLabel({ label: chip.label })\"\n tabindex=\"-1\"\n (click)=\"removeChip(chip.value, $event)\"\n (keydown.enter)=\"removeChip(chip.value, $event)\"\n (keydown.space)=\"removeChip(chip.value, $event)\"\n >\n <svg\n class=\"wr-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </span>\n </span>\n }\n @if (hiddenChipCount(); as extra) {\n <span class=\"wr-select__chip wr-select__chip--more\">+{{ extra }} more</span>\n }\n </span>\n } @else {\n <span class=\"wr-select__placeholder\">{{ resolvedPlaceholder() }}</span>\n }\n } @else {\n @if (selectedLabel(); as label) {\n <span class=\"wr-select__value\">{{ label }}</span>\n } @else {\n <span class=\"wr-select__placeholder\">{{ resolvedPlaceholder() }}</span>\n }\n }\n\n @if (isMulti() && clearable() && hasSelection() && !isDisabled()) {\n <span\n class=\"wr-select__clear\"\n role=\"button\"\n [attr.aria-label]=\"resolvedClear()\"\n tabindex=\"-1\"\n (click)=\"clearAll($event)\"\n (keydown.enter)=\"clearAll($event)\"\n (keydown.space)=\"clearAll($event)\"\n >\n <svg\n class=\"wr-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </span>\n }\n\n <svg\n class=\"wr-icon__svg wr-select__chevron\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n}\n\n<ng-template #panelTpl>\n <div\n class=\"wr-select-panel\"\n [class.wr-select-panel--sm]=\"size() === 'sm'\"\n [class.wr-select-panel--lg]=\"size() === 'lg'\"\n [class.wr-select-panel--virtual]=\"virtualActive()\"\n role=\"listbox\"\n [attr.id]=\"listboxId\"\n [attr.aria-multiselectable]=\"isMulti() ? 'true' : null\"\n >\n @if (loading()) {\n <div class=\"wr-select-panel__loading\" aria-busy=\"true\">{{ resolvedLoading() }}</div>\n }\n\n @if (virtualActive()) {\n <!-- Windowed data-array rows: plain role=\"option\" elements (not <wr-option>),\n navigated via the input's aria-activedescendant, selected by value. -->\n <div class=\"wr-select-panel__vlist\" [style.max-height]=\"resolvedViewportHeight()\">\n @if (virtualWindow().padTop > 0) {\n <div class=\"wr-select-panel__vspacer\" aria-hidden=\"true\" [style.height.px]=\"virtualWindow().padTop\"></div>\n }\n @for (entry of windowOptions(); track entry.index) {\n <!-- Keyboard handled by the search input via aria-activedescendant; the\n row is a pointer target only. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events,@angular-eslint/template/interactive-supports-focus -->\n <div\n role=\"option\"\n class=\"wr-option\"\n [id]=\"virtualRowId(entry.index)\"\n [class.wr-option--active]=\"entry.index === activeIndex()\"\n [class.wr-option--selected]=\"isSelected(entry.item)\"\n [attr.aria-selected]=\"isSelected(entry.item)\"\n [attr.aria-setsize]=\"filteredDynamicOptions().length\"\n [attr.aria-posinset]=\"entry.index + 1\"\n (click)=\"selectOption(entry.item)\"\n >\n {{ displayWith()(entry.item) }}\n </div>\n }\n @if (virtualWindow().padBottom > 0) {\n <div class=\"wr-select-panel__vspacer\" aria-hidden=\"true\" [style.height.px]=\"virtualWindow().padBottom\"></div>\n }\n </div>\n } @else {\n <!-- Dynamic options from [options] or async [loader] (search mode).\n Rendered as wr-option so the standard registration / filter\n pipeline applies uniformly. -->\n @for (item of dynamicOptions(); track $index) {\n <wr-option [value]=\"item\">{{ displayWith()(item) }}</wr-option>\n }\n }\n\n <!-- Projected static options — always present (a conditional `<ng-content>`\n would drop projected content). Empty whenever `virtualActive`. -->\n <ng-content />\n\n @if (hasNoResults()) {\n <div class=\"wr-select-panel__empty\">{{ resolvedNoResults() }}</div>\n }\n </div>\n</ng-template>\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 { Component, ViewEncapsulation, input } from '@angular/core';\n\n/**\n * Visually groups options under a label inside a `<wr-select>`.\n *\n * @example\n * ```html\n * <wr-option-group label=\"Sizes\">\n * <wr-option value=\"sm\">Small</wr-option>\n * <wr-option value=\"md\">Medium</wr-option>\n * </wr-option-group>\n * ```\n */\n@Component({\n selector: 'wr-option-group',\n templateUrl: './option-group.html',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'wr-option-group', role: 'group' },\n})\nexport class WrOptionGroup {\n /** Section heading shown above the options. */\n readonly label = input.required<string>();\n}\n","<div class=\"wr-option-group__label\">{{ label() }}</div>\n<ng-content />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -73,10 +73,10 @@ class WrShinyText {
73
73
  return `linear-gradient(${this.spread()}deg, ${base} 0%, ${base} 35%, ${shine} 50%, ${base} 65%, ${base} 100%)`;
74
74
  }, /* @ts-ignore */
75
75
  ...(ngDevMode ? [{ debugName: "gradient" }] : /* istanbul ignore next */ []));
76
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: WrShinyText, deps: [], target: i0.ɵɵFactoryTarget.Component });
77
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.4", type: WrShinyText, isStandalone: true, selector: "wr-shiny-text", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, speed: { classPropertyName: "speed", publicName: "speed", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, shineColor: { classPropertyName: "shineColor", publicName: "shineColor", isSignal: true, isRequired: false, transformFunction: null }, spread: { classPropertyName: "spread", publicName: "spread", isSignal: true, isRequired: false, transformFunction: null }, yoyo: { classPropertyName: "yoyo", publicName: "yoyo", isSignal: true, isRequired: false, transformFunction: null }, pauseOnHover: { classPropertyName: "pauseOnHover", publicName: "pauseOnHover", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.wr-shiny-text--paused": "disabled()", "class.wr-shiny-text--pause-on-hover": "pauseOnHover()", "class.wr-shiny-text--yoyo": "yoyo()", "class.wr-shiny-text--reverse": "direction() === 'right'", "style.background-image": "gradient()", "style.animation-duration": "totalDuration() + 's'" }, classAttribute: "wr-shiny-text" }, ngImport: i0, template: '{{ text() }}', isInline: true, styles: [".wr-shiny-text{--wr-shiny-text-base: var(--wr-color-medium, #8594a4);--wr-shiny-text-shine: var(--wr-color-dark, #0f172a);display:inline-block;background-size:200% auto;background-position:150% center;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation-name:wr-shiny-text-sweep;animation-timing-function:linear;animation-iteration-count:infinite;animation-direction:normal;animation-fill-mode:both;animation-play-state:running}.wr-shiny-text--reverse{animation-direction:reverse}.wr-shiny-text--yoyo{animation-direction:alternate}.wr-shiny-text--yoyo.wr-shiny-text--reverse{animation-direction:alternate-reverse}.wr-shiny-text--paused,.wr-shiny-text--pause-on-hover:hover{animation-play-state:paused}@keyframes wr-shiny-text-sweep{0%{background-position:150% center}50%{background-position:-50% center}to{background-position:-50% center}}@media(prefers-reduced-motion:reduce){.wr-shiny-text{animation:none!important}}@keyframes wr-shimmer{to{background-position-x:-200%}}.wr-shimmer{background:linear-gradient(110deg,var(--wr-color-dark) 30%,rgba(var(--wr-color-primary-rgb),.9) 50%,var(--wr-color-dark) 70%);background-size:200% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;color:transparent;animation:wr-shimmer 2.5s linear infinite}@media(prefers-reduced-motion:reduce){.wr-shimmer{animation:none}}[data-theme=dark] .wr-shiny-text{--wr-shiny-text-base: #b5b5b5;--wr-shiny-text-shine: #ffffff}\n"], encapsulation: i0.ViewEncapsulation.None });
76
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: WrShinyText, deps: [], target: i0.ɵɵFactoryTarget.Component });
77
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: WrShinyText, isStandalone: true, selector: "wr-shiny-text", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, speed: { classPropertyName: "speed", publicName: "speed", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, shineColor: { classPropertyName: "shineColor", publicName: "shineColor", isSignal: true, isRequired: false, transformFunction: null }, spread: { classPropertyName: "spread", publicName: "spread", isSignal: true, isRequired: false, transformFunction: null }, yoyo: { classPropertyName: "yoyo", publicName: "yoyo", isSignal: true, isRequired: false, transformFunction: null }, pauseOnHover: { classPropertyName: "pauseOnHover", publicName: "pauseOnHover", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.wr-shiny-text--paused": "disabled()", "class.wr-shiny-text--pause-on-hover": "pauseOnHover()", "class.wr-shiny-text--yoyo": "yoyo()", "class.wr-shiny-text--reverse": "direction() === 'right'", "style.background-image": "gradient()", "style.animation-duration": "totalDuration() + 's'" }, classAttribute: "wr-shiny-text" }, ngImport: i0, template: '{{ text() }}', isInline: true, styles: [".wr-shiny-text{--wr-shiny-text-base: var(--wr-color-on-surface-muted, #8594a4);--wr-shiny-text-shine: var(--wr-color-on-surface, #0f172a);display:inline-block;background-size:200% auto;background-position:150% center;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation-name:wr-shiny-text-sweep;animation-timing-function:linear;animation-iteration-count:infinite;animation-direction:normal;animation-fill-mode:both;animation-play-state:running}.wr-shiny-text--reverse{animation-direction:reverse}.wr-shiny-text--yoyo{animation-direction:alternate}.wr-shiny-text--yoyo.wr-shiny-text--reverse{animation-direction:alternate-reverse}.wr-shiny-text--paused,.wr-shiny-text--pause-on-hover:hover{animation-play-state:paused}@keyframes wr-shiny-text-sweep{0%{background-position:150% center}50%{background-position:-50% center}to{background-position:-50% center}}@media(prefers-reduced-motion:reduce){.wr-shiny-text{animation:none!important}}@keyframes wr-shimmer{to{background-position-x:-200%}}.wr-shimmer{background:linear-gradient(110deg,var(--wr-color-on-surface) 30%,rgba(var(--wr-color-primary-rgb),.9) 50%,var(--wr-color-on-surface) 70%);background-size:200% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;color:transparent;animation:wr-shimmer 2.5s linear infinite}@media(prefers-reduced-motion:reduce){.wr-shimmer{animation:none}}[data-theme=dark] .wr-shiny-text{--wr-shiny-text-base: #b5b5b5;--wr-shiny-text-shine: #ffffff}\n"], encapsulation: i0.ViewEncapsulation.None });
78
78
  }
79
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: WrShinyText, decorators: [{
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: WrShinyText, decorators: [{
80
80
  type: Component,
81
81
  args: [{ selector: 'wr-shiny-text', template: '{{ text() }}', encapsulation: ViewEncapsulation.None, host: {
82
82
  class: 'wr-shiny-text',
@@ -86,7 +86,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
86
86
  '[class.wr-shiny-text--reverse]': "direction() === 'right'",
87
87
  '[style.background-image]': 'gradient()',
88
88
  '[style.animation-duration]': "totalDuration() + 's'",
89
- }, styles: [".wr-shiny-text{--wr-shiny-text-base: var(--wr-color-medium, #8594a4);--wr-shiny-text-shine: var(--wr-color-dark, #0f172a);display:inline-block;background-size:200% auto;background-position:150% center;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation-name:wr-shiny-text-sweep;animation-timing-function:linear;animation-iteration-count:infinite;animation-direction:normal;animation-fill-mode:both;animation-play-state:running}.wr-shiny-text--reverse{animation-direction:reverse}.wr-shiny-text--yoyo{animation-direction:alternate}.wr-shiny-text--yoyo.wr-shiny-text--reverse{animation-direction:alternate-reverse}.wr-shiny-text--paused,.wr-shiny-text--pause-on-hover:hover{animation-play-state:paused}@keyframes wr-shiny-text-sweep{0%{background-position:150% center}50%{background-position:-50% center}to{background-position:-50% center}}@media(prefers-reduced-motion:reduce){.wr-shiny-text{animation:none!important}}@keyframes wr-shimmer{to{background-position-x:-200%}}.wr-shimmer{background:linear-gradient(110deg,var(--wr-color-dark) 30%,rgba(var(--wr-color-primary-rgb),.9) 50%,var(--wr-color-dark) 70%);background-size:200% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;color:transparent;animation:wr-shimmer 2.5s linear infinite}@media(prefers-reduced-motion:reduce){.wr-shimmer{animation:none}}[data-theme=dark] .wr-shiny-text{--wr-shiny-text-base: #b5b5b5;--wr-shiny-text-shine: #ffffff}\n"] }]
89
+ }, styles: [".wr-shiny-text{--wr-shiny-text-base: var(--wr-color-on-surface-muted, #8594a4);--wr-shiny-text-shine: var(--wr-color-on-surface, #0f172a);display:inline-block;background-size:200% auto;background-position:150% center;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation-name:wr-shiny-text-sweep;animation-timing-function:linear;animation-iteration-count:infinite;animation-direction:normal;animation-fill-mode:both;animation-play-state:running}.wr-shiny-text--reverse{animation-direction:reverse}.wr-shiny-text--yoyo{animation-direction:alternate}.wr-shiny-text--yoyo.wr-shiny-text--reverse{animation-direction:alternate-reverse}.wr-shiny-text--paused,.wr-shiny-text--pause-on-hover:hover{animation-play-state:paused}@keyframes wr-shiny-text-sweep{0%{background-position:150% center}50%{background-position:-50% center}to{background-position:-50% center}}@media(prefers-reduced-motion:reduce){.wr-shiny-text{animation:none!important}}@keyframes wr-shimmer{to{background-position-x:-200%}}.wr-shimmer{background:linear-gradient(110deg,var(--wr-color-on-surface) 30%,rgba(var(--wr-color-primary-rgb),.9) 50%,var(--wr-color-on-surface) 70%);background-size:200% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;color:transparent;animation:wr-shimmer 2.5s linear infinite}@media(prefers-reduced-motion:reduce){.wr-shimmer{animation:none}}[data-theme=dark] .wr-shiny-text{--wr-shiny-text-base: #b5b5b5;--wr-shiny-text-shine: #ffffff}\n"] }]
90
90
  }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], speed: [{ type: i0.Input, args: [{ isSignal: true, alias: "speed", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], shineColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "shineColor", required: false }] }], spread: [{ type: i0.Input, args: [{ isSignal: true, alias: "spread", required: false }] }], yoyo: [{ type: i0.Input, args: [{ isSignal: true, alias: "yoyo", required: false }] }], pauseOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseOnHover", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], delay: [{ type: i0.Input, args: [{ isSignal: true, alias: "delay", required: false }] }] } });
91
91
 
92
92
  /**
@@ -108,10 +108,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
108
108
  * ```
109
109
  */
110
110
  class WrShimmer {
111
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: WrShimmer, deps: [], target: i0.ɵɵFactoryTarget.Directive });
112
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.4", type: WrShimmer, isStandalone: true, selector: "[wrShimmer]", host: { classAttribute: "wr-shimmer" }, ngImport: i0 });
111
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: WrShimmer, deps: [], target: i0.ɵɵFactoryTarget.Directive });
112
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.0", type: WrShimmer, isStandalone: true, selector: "[wrShimmer]", host: { classAttribute: "wr-shimmer" }, ngImport: i0 });
113
113
  }
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: WrShimmer, decorators: [{
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: WrShimmer, decorators: [{
115
115
  type: Directive,
116
116
  args: [{
117
117
  selector: '[wrShimmer]',
@@ -1 +1 @@
1
- {"version":3,"file":"ngwr-shiny-text.mjs","sources":["../../../projects/lib/shiny-text/shiny-text.ts","../../../projects/lib/shiny-text/shimmer.ts","../../../projects/lib/shiny-text/ngwr-shiny-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 ShinyText effect by David Haz / reactbits.dev.\n * Original: https://www.reactbits.dev/text-animations/shiny-text\n *\n * The reactbits version uses `motion/react` to drive `background-position`\n * via rAF. This port is pure CSS — the same effect via a keyframe that\n * sweeps `background-position`, parameterised by `[speed]` / `[delay]` /\n * `[yoyo]` / `[direction]`.\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 * Animated shimmer-over-text effect. A bright stripe sweeps across the\n * text using `background-clip: text` + an animated `background-position`.\n *\n * @example\n * ```html\n * <wr-shiny-text text=\"Premium\" />\n * <wr-shiny-text\n * text=\"Custom\"\n * color=\"#444\"\n * shineColor=\"#a0e0ff\"\n * [speed]=\"3\"\n * [delay]=\"0.5\"\n * [yoyo]=\"true\"\n * [pauseOnHover]=\"true\"\n * />\n * ```\n *\n * @see https://www.reactbits.dev/text-animations/shiny-text\n */\n@Component({\n selector: 'wr-shiny-text',\n template: '{{ text() }}',\n styleUrl: './shiny-text.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'wr-shiny-text',\n '[class.wr-shiny-text--paused]': 'disabled()',\n '[class.wr-shiny-text--pause-on-hover]': 'pauseOnHover()',\n '[class.wr-shiny-text--yoyo]': 'yoyo()',\n '[class.wr-shiny-text--reverse]': \"direction() === 'right'\",\n '[style.background-image]': 'gradient()',\n '[style.animation-duration]': \"totalDuration() + 's'\",\n },\n})\nexport class WrShinyText {\n /** Text to render. */\n readonly text = input.required<string>();\n\n /** Pause the animation. @default false */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n /** Time for the bright stripe to traverse the text, in seconds. @default 2 */\n readonly speed = input(2, { transform: numAttr(2) });\n\n /** Base text colour (outside the bright stripe). @default '#b5b5b5' */\n /** Base text colour. When unset, the theme decides. */\n readonly color = input<string | null>(null);\n\n /** Bright stripe colour. @default '#ffffff' */\n /** Sweep highlight colour. When unset, the theme decides. */\n readonly shineColor = input<string | null>(null);\n\n /** Gradient angle in degrees. @default 120 */\n readonly spread = input(120, { transform: numAttr(120) });\n\n /** Bounce the stripe back-and-forth instead of restarting. @default false */\n readonly yoyo = input(false, { transform: coerceBooleanProperty });\n\n /** Pause the animation while hovered. @default false */\n readonly pauseOnHover = input(false, { transform: coerceBooleanProperty });\n\n /** Sweep direction. @default 'left' */\n readonly direction = input<'left' | 'right'>('left');\n\n /** Pause between sweeps in seconds. @default 0 */\n readonly delay = input(0, { transform: numAttr(0) });\n\n /** Total animation cycle (speed + delay) in seconds. */\n protected readonly totalDuration = computed(() => this.speed() + this.delay());\n\n protected readonly gradient = computed(() => {\n const base = this.color() ?? 'var(--wr-shiny-text-base)';\n const shine = this.shineColor() ?? 'var(--wr-shiny-text-shine)';\n return `linear-gradient(${this.spread()}deg, ${base} 0%, ${base} 35%, ${shine} 50%, ${base} 65%, ${base} 100%)`;\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 { Directive } from '@angular/core';\n\n/**\n * Gradient sweep over text. Applies a `background-clip: text` gradient\n * with a moving highlight — gives any text a subtle shimmer.\n *\n * The directive only adds the `wr-shimmer` host class. Pair with the\n * styles in `ngwr/animations` (which include the `wr-shimmer` keyframes).\n *\n * @example\n * ```html\n * <h1 wrShimmer>Premium</h1>\n * ```\n */\n@Directive({\n selector: '[wrShimmer]',\n host: { class: 'wr-shimmer' },\n})\nexport class WrShimmer {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngwr-shiny-text.mjs","sources":["../../../projects/lib/shiny-text/shiny-text.ts","../../../projects/lib/shiny-text/shimmer.ts","../../../projects/lib/shiny-text/ngwr-shiny-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 ShinyText effect by David Haz / reactbits.dev.\n * Original: https://www.reactbits.dev/text-animations/shiny-text\n *\n * The reactbits version uses `motion/react` to drive `background-position`\n * via rAF. This port is pure CSS — the same effect via a keyframe that\n * sweeps `background-position`, parameterised by `[speed]` / `[delay]` /\n * `[yoyo]` / `[direction]`.\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 * Animated shimmer-over-text effect. A bright stripe sweeps across the\n * text using `background-clip: text` + an animated `background-position`.\n *\n * @example\n * ```html\n * <wr-shiny-text text=\"Premium\" />\n * <wr-shiny-text\n * text=\"Custom\"\n * color=\"#444\"\n * shineColor=\"#a0e0ff\"\n * [speed]=\"3\"\n * [delay]=\"0.5\"\n * [yoyo]=\"true\"\n * [pauseOnHover]=\"true\"\n * />\n * ```\n *\n * @see https://www.reactbits.dev/text-animations/shiny-text\n */\n@Component({\n selector: 'wr-shiny-text',\n template: '{{ text() }}',\n styleUrl: './shiny-text.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'wr-shiny-text',\n '[class.wr-shiny-text--paused]': 'disabled()',\n '[class.wr-shiny-text--pause-on-hover]': 'pauseOnHover()',\n '[class.wr-shiny-text--yoyo]': 'yoyo()',\n '[class.wr-shiny-text--reverse]': \"direction() === 'right'\",\n '[style.background-image]': 'gradient()',\n '[style.animation-duration]': \"totalDuration() + 's'\",\n },\n})\nexport class WrShinyText {\n /** Text to render. */\n readonly text = input.required<string>();\n\n /** Pause the animation. @default false */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n /** Time for the bright stripe to traverse the text, in seconds. @default 2 */\n readonly speed = input(2, { transform: numAttr(2) });\n\n /** Base text colour (outside the bright stripe). @default '#b5b5b5' */\n /** Base text colour. When unset, the theme decides. */\n readonly color = input<string | null>(null);\n\n /** Bright stripe colour. @default '#ffffff' */\n /** Sweep highlight colour. When unset, the theme decides. */\n readonly shineColor = input<string | null>(null);\n\n /** Gradient angle in degrees. @default 120 */\n readonly spread = input(120, { transform: numAttr(120) });\n\n /** Bounce the stripe back-and-forth instead of restarting. @default false */\n readonly yoyo = input(false, { transform: coerceBooleanProperty });\n\n /** Pause the animation while hovered. @default false */\n readonly pauseOnHover = input(false, { transform: coerceBooleanProperty });\n\n /** Sweep direction. @default 'left' */\n readonly direction = input<'left' | 'right'>('left');\n\n /** Pause between sweeps in seconds. @default 0 */\n readonly delay = input(0, { transform: numAttr(0) });\n\n /** Total animation cycle (speed + delay) in seconds. */\n protected readonly totalDuration = computed(() => this.speed() + this.delay());\n\n protected readonly gradient = computed(() => {\n const base = this.color() ?? 'var(--wr-shiny-text-base)';\n const shine = this.shineColor() ?? 'var(--wr-shiny-text-shine)';\n return `linear-gradient(${this.spread()}deg, ${base} 0%, ${base} 35%, ${shine} 50%, ${base} 65%, ${base} 100%)`;\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 { Directive } from '@angular/core';\n\n/**\n * Gradient sweep over text. Applies a `background-clip: text` gradient\n * with a moving highlight — gives any text a subtle shimmer.\n *\n * The directive only adds the `wr-shimmer` host class. Pair with the\n * styles in `ngwr/animations` (which include the `wr-shimmer` keyframes).\n *\n * @example\n * ```html\n * <h1 wrShimmer>Premium</h1>\n * ```\n */\n@Directive({\n selector: '[wrShimmer]',\n host: { class: 'wr-shimmer' },\n})\nexport class WrShimmer {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}