ngwr 6.1.1 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (609) hide show
  1. package/LICENSE +1 -3
  2. package/README.md +179 -32
  3. package/affix/styles/_index.scss +12 -0
  4. package/alert/styles/_index.scss +75 -32
  5. package/anchor/styles/_index.scss +59 -0
  6. package/aurora/aurora.scss +1 -0
  7. package/aurora/styles/_index.scss +30 -0
  8. package/avatar/styles/_index.scss +30 -14
  9. package/back-top/styles/_index.scss +42 -0
  10. package/badge/styles/_index.scss +80 -0
  11. package/badge/styles/_tag.scss +81 -0
  12. package/bar-chart/styles/_index.scss +56 -0
  13. package/blur-text/blur-text.scss +1 -0
  14. package/blur-text/styles/_index.scss +14 -0
  15. package/border-glow/border-glow.scss +4 -0
  16. package/border-glow/styles/_index.scss +228 -0
  17. package/breadcrumbs/breadcrumbs.scss +1 -0
  18. package/breadcrumbs/styles/_index.scss +76 -0
  19. package/burger/styles/_index.scss +101 -0
  20. package/button/styles/_index.scss +148 -125
  21. package/calendar/styles/_index.scss +252 -0
  22. package/calendar-heatmap/styles/_index.scss +69 -0
  23. package/card/card.scss +1 -0
  24. package/card/styles/_index.scss +96 -0
  25. package/carousel/styles/_index.scss +102 -0
  26. package/cascader/cascader.scss +1 -0
  27. package/cascader/styles/_index.scss +174 -0
  28. package/checkbox/styles/_index.scss +76 -60
  29. package/circular-text/circular-text.scss +1 -0
  30. package/circular-text/styles/_index.scss +45 -0
  31. package/click-spark/click-spark.scss +1 -0
  32. package/click-spark/styles/_index.scss +16 -0
  33. package/collapse/styles/_index.scss +92 -0
  34. package/color-picker/styles/_index.scss +247 -0
  35. package/command-palette/styles/_index.scss +188 -0
  36. package/compare/styles/_index.scss +100 -0
  37. package/context-menu/styles/_index.scss +112 -0
  38. package/counter/styles/_index.scss +44 -0
  39. package/date-picker/styles/_index.scss +204 -0
  40. package/decrypt-text/decrypt-text.scss +1 -0
  41. package/decrypt-text/styles/_index.scss +26 -0
  42. package/density/styles/_index.scss +37 -0
  43. package/descriptions/styles/_index.scss +104 -0
  44. package/dialog/styles/_index.scss +101 -27
  45. package/divider/styles/_index.scss +43 -24
  46. package/donut-chart/styles/_index.scss +76 -0
  47. package/drag-drop/sortable-list.scss +1 -0
  48. package/drag-drop/styles/_index.scss +99 -0
  49. package/drawer/styles/_index.scss +164 -0
  50. package/dropdown/styles/_index.scss +76 -56
  51. package/empty/styles/_index.scss +49 -0
  52. package/falling-text/falling-text.scss +1 -0
  53. package/falling-text/styles/_index.scss +30 -0
  54. package/fesm2022/ngwr-affix.mjs +102 -0
  55. package/fesm2022/ngwr-affix.mjs.map +1 -0
  56. package/fesm2022/ngwr-alert.mjs +70 -52
  57. package/fesm2022/ngwr-alert.mjs.map +1 -1
  58. package/fesm2022/ngwr-anchor.mjs +103 -0
  59. package/fesm2022/ngwr-anchor.mjs.map +1 -0
  60. package/fesm2022/ngwr-aurora.mjs +309 -0
  61. package/fesm2022/ngwr-aurora.mjs.map +1 -0
  62. package/fesm2022/ngwr-avatar.mjs +81 -71
  63. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  64. package/fesm2022/ngwr-back-top.mjs +81 -0
  65. package/fesm2022/ngwr-back-top.mjs.map +1 -0
  66. package/fesm2022/ngwr-badge.mjs +192 -0
  67. package/fesm2022/ngwr-badge.mjs.map +1 -0
  68. package/fesm2022/ngwr-bar-chart.mjs +69 -0
  69. package/fesm2022/ngwr-bar-chart.mjs.map +1 -0
  70. package/fesm2022/ngwr-blur-text.mjs +181 -0
  71. package/fesm2022/ngwr-blur-text.mjs.map +1 -0
  72. package/fesm2022/ngwr-border-glow.mjs +278 -0
  73. package/fesm2022/ngwr-border-glow.mjs.map +1 -0
  74. package/fesm2022/ngwr-breadcrumbs.mjs +101 -0
  75. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -0
  76. package/fesm2022/ngwr-burger.mjs +60 -0
  77. package/fesm2022/ngwr-burger.mjs.map +1 -0
  78. package/fesm2022/ngwr-button.mjs +179 -104
  79. package/fesm2022/ngwr-button.mjs.map +1 -1
  80. package/fesm2022/ngwr-calendar-heatmap.mjs +145 -0
  81. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -0
  82. package/fesm2022/ngwr-calendar.mjs +402 -0
  83. package/fesm2022/ngwr-calendar.mjs.map +1 -0
  84. package/fesm2022/ngwr-card.mjs +100 -0
  85. package/fesm2022/ngwr-card.mjs.map +1 -0
  86. package/fesm2022/ngwr-carousel.mjs +128 -0
  87. package/fesm2022/ngwr-carousel.mjs.map +1 -0
  88. package/fesm2022/ngwr-cascader.mjs +280 -0
  89. package/fesm2022/ngwr-cascader.mjs.map +1 -0
  90. package/fesm2022/ngwr-checkbox.mjs +214 -54
  91. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  92. package/fesm2022/ngwr-circular-text.mjs +168 -0
  93. package/fesm2022/ngwr-circular-text.mjs.map +1 -0
  94. package/fesm2022/ngwr-click-spark.mjs +163 -0
  95. package/fesm2022/ngwr-click-spark.mjs.map +1 -0
  96. package/fesm2022/ngwr-clipboard.mjs +130 -0
  97. package/fesm2022/ngwr-clipboard.mjs.map +1 -0
  98. package/fesm2022/ngwr-collapse.mjs +232 -0
  99. package/fesm2022/ngwr-collapse.mjs.map +1 -0
  100. package/fesm2022/ngwr-color-picker.mjs +646 -0
  101. package/fesm2022/ngwr-color-picker.mjs.map +1 -0
  102. package/fesm2022/ngwr-command-palette.mjs +259 -0
  103. package/fesm2022/ngwr-command-palette.mjs.map +1 -0
  104. package/fesm2022/ngwr-compare.mjs +137 -0
  105. package/fesm2022/ngwr-compare.mjs.map +1 -0
  106. package/fesm2022/ngwr-confetti.mjs +160 -0
  107. package/fesm2022/ngwr-confetti.mjs.map +1 -0
  108. package/fesm2022/ngwr-context-menu.mjs +653 -0
  109. package/fesm2022/ngwr-context-menu.mjs.map +1 -0
  110. package/fesm2022/ngwr-cookie.mjs +127 -0
  111. package/fesm2022/ngwr-cookie.mjs.map +1 -0
  112. package/fesm2022/ngwr-counter.mjs +415 -0
  113. package/fesm2022/ngwr-counter.mjs.map +1 -0
  114. package/fesm2022/ngwr-date-adapter-fns.mjs +180 -0
  115. package/fesm2022/ngwr-date-adapter-fns.mjs.map +1 -0
  116. package/fesm2022/ngwr-date-adapter-luxon.mjs +201 -0
  117. package/fesm2022/ngwr-date-adapter-luxon.mjs.map +1 -0
  118. package/fesm2022/ngwr-date-adapter.mjs +419 -0
  119. package/fesm2022/ngwr-date-adapter.mjs.map +1 -0
  120. package/fesm2022/ngwr-date-picker.mjs +624 -0
  121. package/fesm2022/ngwr-date-picker.mjs.map +1 -0
  122. package/fesm2022/ngwr-decrypt-text.mjs +396 -0
  123. package/fesm2022/ngwr-decrypt-text.mjs.map +1 -0
  124. package/fesm2022/ngwr-density.mjs +157 -0
  125. package/fesm2022/ngwr-density.mjs.map +1 -0
  126. package/fesm2022/ngwr-descriptions.mjs +83 -0
  127. package/fesm2022/ngwr-descriptions.mjs.map +1 -0
  128. package/fesm2022/ngwr-dialog.mjs +249 -377
  129. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  130. package/fesm2022/ngwr-directives.mjs +315 -0
  131. package/fesm2022/ngwr-directives.mjs.map +1 -0
  132. package/fesm2022/ngwr-divider.mjs +74 -59
  133. package/fesm2022/ngwr-divider.mjs.map +1 -1
  134. package/fesm2022/ngwr-donut-chart.mjs +131 -0
  135. package/fesm2022/ngwr-donut-chart.mjs.map +1 -0
  136. package/fesm2022/ngwr-drag-drop.mjs +117 -0
  137. package/fesm2022/ngwr-drag-drop.mjs.map +1 -0
  138. package/fesm2022/ngwr-drawer.mjs +315 -0
  139. package/fesm2022/ngwr-drawer.mjs.map +1 -0
  140. package/fesm2022/ngwr-dropdown.mjs +276 -229
  141. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  142. package/fesm2022/ngwr-empty.mjs +57 -0
  143. package/fesm2022/ngwr-empty.mjs.map +1 -0
  144. package/fesm2022/ngwr-falling-text.mjs +316 -0
  145. package/fesm2022/ngwr-falling-text.mjs.map +1 -0
  146. package/fesm2022/ngwr-file-upload.mjs +260 -0
  147. package/fesm2022/ngwr-file-upload.mjs.map +1 -0
  148. package/fesm2022/ngwr-form.mjs +133 -48
  149. package/fesm2022/ngwr-form.mjs.map +1 -1
  150. package/fesm2022/ngwr-fuzzy-text.mjs +373 -0
  151. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -0
  152. package/fesm2022/ngwr-gauge.mjs +83 -0
  153. package/fesm2022/ngwr-gauge.mjs.map +1 -0
  154. package/fesm2022/ngwr-glitch-text.mjs +67 -0
  155. package/fesm2022/ngwr-glitch-text.mjs.map +1 -0
  156. package/fesm2022/ngwr-gradient-text.mjs +109 -0
  157. package/fesm2022/ngwr-gradient-text.mjs.map +1 -0
  158. package/fesm2022/ngwr-hotkey.mjs +263 -0
  159. package/fesm2022/ngwr-hotkey.mjs.map +1 -0
  160. package/fesm2022/ngwr-i18n-en.mjs +168 -0
  161. package/fesm2022/ngwr-i18n-en.mjs.map +1 -0
  162. package/fesm2022/ngwr-i18n-ru.mjs +156 -0
  163. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -0
  164. package/fesm2022/ngwr-i18n.mjs +478 -0
  165. package/fesm2022/ngwr-i18n.mjs.map +1 -0
  166. package/fesm2022/ngwr-icon-adapters-feather.mjs +74 -0
  167. package/fesm2022/ngwr-icon-adapters-feather.mjs.map +1 -0
  168. package/fesm2022/ngwr-icon-adapters-lucide.mjs +88 -0
  169. package/fesm2022/ngwr-icon-adapters-lucide.mjs.map +1 -0
  170. package/fesm2022/ngwr-icon.mjs +189 -649
  171. package/fesm2022/ngwr-icon.mjs.map +1 -1
  172. package/fesm2022/ngwr-image-cropper.mjs +299 -0
  173. package/fesm2022/ngwr-image-cropper.mjs.map +1 -0
  174. package/fesm2022/ngwr-input-number.mjs +239 -0
  175. package/fesm2022/ngwr-input-number.mjs.map +1 -0
  176. package/fesm2022/ngwr-input-otp.mjs +216 -0
  177. package/fesm2022/ngwr-input-otp.mjs.map +1 -0
  178. package/fesm2022/ngwr-input.mjs +183 -104
  179. package/fesm2022/ngwr-input.mjs.map +1 -1
  180. package/fesm2022/ngwr-keyboard.mjs +47 -0
  181. package/fesm2022/ngwr-keyboard.mjs.map +1 -0
  182. package/fesm2022/ngwr-knob.mjs +227 -0
  183. package/fesm2022/ngwr-knob.mjs.map +1 -0
  184. package/fesm2022/ngwr-layout.mjs +197 -0
  185. package/fesm2022/ngwr-layout.mjs.map +1 -0
  186. package/fesm2022/ngwr-lightbox.mjs +131 -0
  187. package/fesm2022/ngwr-lightbox.mjs.map +1 -0
  188. package/fesm2022/ngwr-line-chart.mjs +176 -0
  189. package/fesm2022/ngwr-line-chart.mjs.map +1 -0
  190. package/fesm2022/ngwr-list.mjs +132 -0
  191. package/fesm2022/ngwr-list.mjs.map +1 -0
  192. package/fesm2022/ngwr-loading-bar.mjs +160 -0
  193. package/fesm2022/ngwr-loading-bar.mjs.map +1 -0
  194. package/fesm2022/ngwr-marquee.mjs +224 -0
  195. package/fesm2022/ngwr-marquee.mjs.map +1 -0
  196. package/fesm2022/ngwr-media.mjs +132 -0
  197. package/fesm2022/ngwr-media.mjs.map +1 -0
  198. package/fesm2022/ngwr-mention.mjs +374 -0
  199. package/fesm2022/ngwr-mention.mjs.map +1 -0
  200. package/fesm2022/ngwr-meta.mjs +323 -0
  201. package/fesm2022/ngwr-meta.mjs.map +1 -0
  202. package/fesm2022/ngwr-meter-group.mjs +73 -0
  203. package/fesm2022/ngwr-meter-group.mjs.map +1 -0
  204. package/fesm2022/ngwr-overlay.mjs +145 -0
  205. package/fesm2022/ngwr-overlay.mjs.map +1 -0
  206. package/fesm2022/ngwr-page-header.mjs +53 -0
  207. package/fesm2022/ngwr-page-header.mjs.map +1 -0
  208. package/fesm2022/ngwr-pagination.mjs +152 -96
  209. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  210. package/fesm2022/ngwr-pipes.mjs +290 -11
  211. package/fesm2022/ngwr-pipes.mjs.map +1 -1
  212. package/fesm2022/ngwr-platform.mjs +63 -0
  213. package/fesm2022/ngwr-platform.mjs.map +1 -0
  214. package/fesm2022/ngwr-popconfirm.mjs +188 -0
  215. package/fesm2022/ngwr-popconfirm.mjs.map +1 -0
  216. package/fesm2022/ngwr-popover.mjs +365 -0
  217. package/fesm2022/ngwr-popover.mjs.map +1 -0
  218. package/fesm2022/ngwr-progress.mjs +47 -39
  219. package/fesm2022/ngwr-progress.mjs.map +1 -1
  220. package/fesm2022/ngwr-qr.mjs +160 -179
  221. package/fesm2022/ngwr-qr.mjs.map +1 -1
  222. package/fesm2022/ngwr-radio.mjs +204 -0
  223. package/fesm2022/ngwr-radio.mjs.map +1 -0
  224. package/fesm2022/ngwr-rating.mjs +180 -0
  225. package/fesm2022/ngwr-rating.mjs.map +1 -0
  226. package/fesm2022/ngwr-result.mjs +119 -0
  227. package/fesm2022/ngwr-result.mjs.map +1 -0
  228. package/fesm2022/ngwr-rotating-text.mjs +256 -0
  229. package/fesm2022/ngwr-rotating-text.mjs.map +1 -0
  230. package/fesm2022/ngwr-scramble-text.mjs +165 -0
  231. package/fesm2022/ngwr-scramble-text.mjs.map +1 -0
  232. package/fesm2022/ngwr-scroll.mjs +107 -0
  233. package/fesm2022/ngwr-scroll.mjs.map +1 -0
  234. package/fesm2022/ngwr-segmented.mjs +96 -0
  235. package/fesm2022/ngwr-segmented.mjs.map +1 -0
  236. package/fesm2022/ngwr-select.mjs +844 -309
  237. package/fesm2022/ngwr-select.mjs.map +1 -1
  238. package/fesm2022/ngwr-shiny-text.mjs +127 -0
  239. package/fesm2022/ngwr-shiny-text.mjs.map +1 -0
  240. package/fesm2022/ngwr-sidebar.mjs +134 -0
  241. package/fesm2022/ngwr-sidebar.mjs.map +1 -0
  242. package/fesm2022/ngwr-skeleton.mjs +59 -34
  243. package/fesm2022/ngwr-skeleton.mjs.map +1 -1
  244. package/fesm2022/ngwr-slider.mjs +234 -0
  245. package/fesm2022/ngwr-slider.mjs.map +1 -0
  246. package/fesm2022/ngwr-sparkline.mjs +104 -0
  247. package/fesm2022/ngwr-sparkline.mjs.map +1 -0
  248. package/fesm2022/ngwr-speed-dial.mjs +79 -0
  249. package/fesm2022/ngwr-speed-dial.mjs.map +1 -0
  250. package/fesm2022/ngwr-spinner.mjs +34 -28
  251. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  252. package/fesm2022/ngwr-splash-cursor.mjs +970 -0
  253. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -0
  254. package/fesm2022/ngwr-split-text.mjs +200 -0
  255. package/fesm2022/ngwr-split-text.mjs.map +1 -0
  256. package/fesm2022/ngwr-splitter.mjs +125 -0
  257. package/fesm2022/ngwr-splitter.mjs.map +1 -0
  258. package/fesm2022/ngwr-spotlight-card.mjs +138 -0
  259. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -0
  260. package/fesm2022/ngwr-squircle.mjs +320 -0
  261. package/fesm2022/ngwr-squircle.mjs.map +1 -0
  262. package/fesm2022/ngwr-star-border.mjs +72 -0
  263. package/fesm2022/ngwr-star-border.mjs.map +1 -0
  264. package/fesm2022/ngwr-statistic.mjs +220 -0
  265. package/fesm2022/ngwr-statistic.mjs.map +1 -0
  266. package/fesm2022/ngwr-stepper.mjs +186 -0
  267. package/fesm2022/ngwr-stepper.mjs.map +1 -0
  268. package/fesm2022/ngwr-storage.mjs +317 -0
  269. package/fesm2022/ngwr-storage.mjs.map +1 -0
  270. package/fesm2022/ngwr-switch.mjs +99 -0
  271. package/fesm2022/ngwr-switch.mjs.map +1 -0
  272. package/fesm2022/ngwr-table.mjs +217 -206
  273. package/fesm2022/ngwr-table.mjs.map +1 -1
  274. package/fesm2022/ngwr-tabs.mjs +217 -0
  275. package/fesm2022/ngwr-tabs.mjs.map +1 -0
  276. package/fesm2022/ngwr-textarea.mjs +106 -120
  277. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  278. package/fesm2022/ngwr-theme.mjs +152 -0
  279. package/fesm2022/ngwr-theme.mjs.map +1 -0
  280. package/fesm2022/ngwr-tilt-card.mjs +137 -0
  281. package/fesm2022/ngwr-tilt-card.mjs.map +1 -0
  282. package/fesm2022/ngwr-timeline.mjs +73 -0
  283. package/fesm2022/ngwr-timeline.mjs.map +1 -0
  284. package/fesm2022/ngwr-toast.mjs +446 -0
  285. package/fesm2022/ngwr-toast.mjs.map +1 -0
  286. package/fesm2022/ngwr-toolbar.mjs +46 -0
  287. package/fesm2022/ngwr-toolbar.mjs.map +1 -0
  288. package/fesm2022/ngwr-tree.mjs +483 -0
  289. package/fesm2022/ngwr-tree.mjs.map +1 -0
  290. package/fesm2022/ngwr-typewriter.mjs +229 -0
  291. package/fesm2022/ngwr-typewriter.mjs.map +1 -0
  292. package/fesm2022/ngwr-typography.mjs +79 -0
  293. package/fesm2022/ngwr-typography.mjs.map +1 -0
  294. package/fesm2022/ngwr-utils.mjs +535 -0
  295. package/fesm2022/ngwr-utils.mjs.map +1 -0
  296. package/fesm2022/ngwr-validators.mjs +214 -0
  297. package/fesm2022/ngwr-validators.mjs.map +1 -0
  298. package/fesm2022/ngwr-version.mjs +51 -0
  299. package/fesm2022/ngwr-version.mjs.map +1 -0
  300. package/fesm2022/ngwr-virtual-scroll.mjs +99 -0
  301. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -0
  302. package/fesm2022/ngwr-waves.mjs +356 -0
  303. package/fesm2022/ngwr-waves.mjs.map +1 -0
  304. package/fesm2022/ngwr-window.mjs +1141 -0
  305. package/fesm2022/ngwr-window.mjs.map +1 -0
  306. package/fesm2022/ngwr.mjs +0 -3
  307. package/fesm2022/ngwr.mjs.map +1 -1
  308. package/file-upload/styles/_index.scss +152 -0
  309. package/form/styles/_index.scss +85 -42
  310. package/gauge/styles/_index.scss +37 -0
  311. package/glitch-text/glitch-text.scss +1 -0
  312. package/glitch-text/styles/_index.scss +144 -0
  313. package/gradient-text/gradient-text.scss +1 -0
  314. package/gradient-text/styles/_index.scss +113 -0
  315. package/icon/styles/_index.scss +21 -15
  316. package/image-cropper/styles/_index.scss +114 -0
  317. package/input/styles/_index.scss +133 -93
  318. package/input-number/styles/_index.scss +75 -0
  319. package/input-otp/styles/_index.scss +53 -0
  320. package/keyboard/styles/_index.scss +55 -0
  321. package/knob/styles/_index.scss +54 -0
  322. package/layout/styles/_index.scss +65 -0
  323. package/lightbox/lightbox.scss +1 -0
  324. package/lightbox/styles/_index.scss +144 -0
  325. package/line-chart/styles/_index.scss +93 -0
  326. package/list/list.scss +1 -0
  327. package/list/styles/_index.scss +101 -0
  328. package/loading-bar/loading-bar.scss +1 -0
  329. package/loading-bar/styles/_index.scss +29 -0
  330. package/marquee/marquee.scss +1 -0
  331. package/marquee/styles/_index.scss +138 -0
  332. package/mention/styles/_index.scss +47 -0
  333. package/meter-group/styles/_index.scss +61 -0
  334. package/package.json +586 -104
  335. package/page-header/styles/_index.scss +78 -0
  336. package/pagination/styles/_index.scss +89 -34
  337. package/popconfirm/styles/_index.scss +32 -0
  338. package/popover/styles/_index.scss +99 -0
  339. package/progress/styles/_index.scss +29 -14
  340. package/qr/styles/_index.scss +6 -3
  341. package/radio/styles/_index.scss +111 -0
  342. package/rating/styles/_index.scss +63 -0
  343. package/result/styles/_index.scss +69 -0
  344. package/rotating-text/rotating-text.scss +1 -0
  345. package/rotating-text/styles/_index.scss +39 -0
  346. package/schematics/collection.json +37 -0
  347. package/schematics/component-style/index.js +49 -0
  348. package/{cdk/utils/index.d.ts → schematics/component-style/schema.js} +2 -8
  349. package/schematics/component-style/schema.json +20 -0
  350. package/schematics/icon-set/index.js +96 -0
  351. package/schematics/icon-set/schema.js +8 -0
  352. package/schematics/icon-set/schema.json +39 -0
  353. package/schematics/migrations/v7/index.js +187 -0
  354. package/schematics/migrations.json +10 -0
  355. package/schematics/ng-add/index.js +180 -0
  356. package/schematics/ng-add/schema.js +8 -0
  357. package/schematics/ng-add/schema.json +80 -0
  358. package/schematics/page/index.js +63 -0
  359. package/schematics/page/schema.js +8 -0
  360. package/schematics/page/schema.json +39 -0
  361. package/schematics/page/templates.js +198 -0
  362. package/schematics/provider/index.js +126 -0
  363. package/schematics/provider/schema.js +8 -0
  364. package/schematics/provider/schema.json +52 -0
  365. package/schematics/use/index.js +143 -0
  366. package/schematics/use/schema.js +8 -0
  367. package/schematics/use/schema.json +25 -0
  368. package/schematics/use/symbol-map.json +357 -0
  369. package/scramble-text/scramble-text.scss +1 -0
  370. package/scramble-text/styles/_index.scss +8 -0
  371. package/segmented/styles/_index.scss +92 -0
  372. package/select/styles/_index.scss +245 -159
  373. package/shiny-text/shiny-text.scss +1 -0
  374. package/shiny-text/styles/_index.scss +101 -0
  375. package/sidebar/styles/_index.scss +208 -0
  376. package/skeleton/styles/_index.scss +33 -33
  377. package/slider/styles/_index.scss +77 -0
  378. package/sparkline/styles/_index.scss +9 -0
  379. package/speed-dial/styles/_index.scss +158 -0
  380. package/spinner/styles/_index.scss +38 -22
  381. package/splash-cursor/splash-cursor.scss +1 -0
  382. package/splash-cursor/styles/_index.scss +27 -0
  383. package/split-text/split-text.scss +1 -0
  384. package/split-text/styles/_index.scss +22 -0
  385. package/splitter/styles/_index.scss +85 -0
  386. package/spotlight-card/spotlight-card.scss +1 -0
  387. package/spotlight-card/styles/_index.scss +43 -0
  388. package/squircle/styles/_index.scss +34 -0
  389. package/star-border/star-border.scss +1 -0
  390. package/star-border/styles/_index.scss +118 -0
  391. package/statistic/styles/_index.scss +54 -0
  392. package/stepper/styles/_index.scss +162 -0
  393. package/styles/_animations.scss +198 -0
  394. package/styles/_breakpoints.scss +75 -0
  395. package/styles/_grid.scss +71 -0
  396. package/styles/_reset.scss +123 -0
  397. package/styles/_typography.scss +122 -0
  398. package/styles.scss +103 -13
  399. package/switch/styles/_index.scss +82 -0
  400. package/table/styles/_index.scss +255 -4
  401. package/tabs/styles/_index.scss +71 -0
  402. package/textarea/styles/_index.scss +47 -56
  403. package/theme/styles/_colors.scss +83 -0
  404. package/theme/styles/_dark.scss +85 -0
  405. package/theme/styles/_focus.scss +93 -0
  406. package/theme/styles/_index.scss +5 -0
  407. package/theme/styles/_mixins.scss +57 -0
  408. package/theme/styles/_variables.scss +118 -0
  409. package/tilt-card/styles/_index.scss +40 -0
  410. package/tilt-card/tilt-card.scss +1 -0
  411. package/timeline/styles/_index.scss +127 -0
  412. package/toast/styles/_index.scss +263 -0
  413. package/toolbar/styles/_index.scss +65 -0
  414. package/tree/styles/_index.scss +271 -0
  415. package/types/ngwr-affix.d.ts +43 -0
  416. package/types/ngwr-alert.d.ts +68 -0
  417. package/types/ngwr-anchor.d.ts +53 -0
  418. package/types/ngwr-aurora.d.ts +52 -0
  419. package/types/ngwr-avatar.d.ts +90 -0
  420. package/types/ngwr-back-top.d.ts +37 -0
  421. package/types/ngwr-badge.d.ts +158 -0
  422. package/types/ngwr-bar-chart.d.ts +47 -0
  423. package/types/ngwr-blur-text.d.ts +62 -0
  424. package/types/ngwr-border-glow.d.ts +66 -0
  425. package/types/ngwr-breadcrumbs.d.ts +61 -0
  426. package/types/ngwr-burger.d.ts +36 -0
  427. package/types/ngwr-button.d.ts +176 -0
  428. package/types/ngwr-calendar-heatmap.d.ts +58 -0
  429. package/types/ngwr-calendar.d.ts +116 -0
  430. package/types/ngwr-card.d.ts +50 -0
  431. package/types/ngwr-carousel.d.ts +57 -0
  432. package/types/ngwr-cascader.d.ts +107 -0
  433. package/types/ngwr-checkbox.d.ts +139 -0
  434. package/types/ngwr-circular-text.d.ts +49 -0
  435. package/types/ngwr-click-spark.d.ts +52 -0
  436. package/types/ngwr-clipboard.d.ts +53 -0
  437. package/types/ngwr-collapse.d.ts +139 -0
  438. package/types/ngwr-color-picker.d.ts +302 -0
  439. package/types/ngwr-command-palette.d.ts +113 -0
  440. package/types/ngwr-compare.d.ts +55 -0
  441. package/types/ngwr-confetti.d.ts +70 -0
  442. package/types/ngwr-context-menu.d.ts +207 -0
  443. package/types/ngwr-cookie.d.ts +60 -0
  444. package/types/ngwr-counter.d.ts +182 -0
  445. package/types/ngwr-date-adapter-fns.d.ts +73 -0
  446. package/types/ngwr-date-adapter-luxon.d.ts +73 -0
  447. package/types/ngwr-date-adapter.d.ts +198 -0
  448. package/types/ngwr-date-picker.d.ts +117 -0
  449. package/types/ngwr-decrypt-text.d.ts +85 -0
  450. package/types/ngwr-density.d.ts +97 -0
  451. package/types/ngwr-descriptions.d.ts +41 -0
  452. package/types/ngwr-dialog.d.ts +210 -0
  453. package/types/ngwr-directives.d.ts +125 -0
  454. package/types/ngwr-divider.d.ts +73 -0
  455. package/types/ngwr-donut-chart.d.ts +53 -0
  456. package/types/ngwr-drag-drop.d.ts +83 -0
  457. package/types/ngwr-drawer.d.ts +155 -0
  458. package/types/ngwr-dropdown.d.ts +124 -0
  459. package/types/ngwr-empty.d.ts +38 -0
  460. package/types/ngwr-falling-text.d.ts +63 -0
  461. package/types/ngwr-file-upload.d.ts +94 -0
  462. package/types/ngwr-form.d.ts +95 -0
  463. package/types/ngwr-fuzzy-text.d.ts +74 -0
  464. package/types/ngwr-gauge.d.ts +39 -0
  465. package/types/ngwr-glitch-text.d.ts +31 -0
  466. package/types/ngwr-gradient-text.d.ts +46 -0
  467. package/types/ngwr-hotkey.d.ts +142 -0
  468. package/types/ngwr-i18n-en.d.ts +18 -0
  469. package/types/ngwr-i18n-ru.d.ts +6 -0
  470. package/types/ngwr-i18n.d.ts +336 -0
  471. package/types/ngwr-icon-adapters-feather.d.ts +44 -0
  472. package/types/ngwr-icon-adapters-lucide.d.ts +54 -0
  473. package/types/ngwr-icon.d.ts +180 -0
  474. package/types/ngwr-image-cropper.d.ts +110 -0
  475. package/types/ngwr-input-number.d.ts +77 -0
  476. package/types/ngwr-input-otp.d.ts +78 -0
  477. package/types/ngwr-input.d.ts +131 -0
  478. package/types/ngwr-keyboard.d.ts +34 -0
  479. package/types/ngwr-knob.d.ts +77 -0
  480. package/types/ngwr-layout.d.ts +89 -0
  481. package/types/ngwr-lightbox.d.ts +50 -0
  482. package/types/ngwr-line-chart.d.ts +90 -0
  483. package/types/ngwr-list.d.ts +71 -0
  484. package/types/ngwr-loading-bar.d.ts +79 -0
  485. package/types/ngwr-marquee.d.ts +95 -0
  486. package/types/ngwr-media.d.ts +74 -0
  487. package/types/ngwr-mention.d.ts +110 -0
  488. package/types/ngwr-meta.d.ts +188 -0
  489. package/types/ngwr-meter-group.d.ts +57 -0
  490. package/types/ngwr-overlay.d.ts +110 -0
  491. package/types/ngwr-page-header.d.ts +35 -0
  492. package/types/ngwr-pagination.d.ts +119 -0
  493. package/types/ngwr-pipes.d.ts +177 -0
  494. package/types/ngwr-platform.d.ts +38 -0
  495. package/types/ngwr-popconfirm.d.ts +79 -0
  496. package/types/ngwr-popover.d.ts +90 -0
  497. package/types/ngwr-progress.d.ts +33 -0
  498. package/types/ngwr-qr.d.ts +56 -0
  499. package/types/ngwr-radio.d.ts +120 -0
  500. package/types/ngwr-rating.d.ts +62 -0
  501. package/types/ngwr-result.d.ts +64 -0
  502. package/types/ngwr-rotating-text.d.ts +72 -0
  503. package/types/ngwr-scramble-text.d.ts +49 -0
  504. package/types/ngwr-scroll.d.ts +65 -0
  505. package/types/ngwr-segmented.d.ts +65 -0
  506. package/types/ngwr-select.d.ts +413 -0
  507. package/types/ngwr-shiny-text.d.ts +70 -0
  508. package/types/ngwr-sidebar.d.ts +83 -0
  509. package/types/ngwr-skeleton.d.ts +41 -0
  510. package/types/ngwr-slider.d.ts +86 -0
  511. package/types/ngwr-sparkline.d.ts +48 -0
  512. package/types/ngwr-speed-dial.d.ts +51 -0
  513. package/types/ngwr-spinner.d.ts +41 -0
  514. package/types/ngwr-splash-cursor.d.ts +94 -0
  515. package/types/ngwr-split-text.d.ts +83 -0
  516. package/types/ngwr-splitter.d.ts +52 -0
  517. package/types/ngwr-spotlight-card.d.ts +71 -0
  518. package/types/ngwr-squircle.d.ts +132 -0
  519. package/types/ngwr-star-border.d.ts +40 -0
  520. package/types/ngwr-statistic.d.ts +88 -0
  521. package/types/ngwr-stepper.d.ts +99 -0
  522. package/types/ngwr-storage.d.ts +178 -0
  523. package/types/ngwr-switch.d.ts +39 -0
  524. package/types/ngwr-table.d.ts +237 -0
  525. package/types/ngwr-tabs.d.ts +125 -0
  526. package/types/ngwr-textarea.d.ts +60 -0
  527. package/types/ngwr-theme.d.ts +124 -0
  528. package/types/ngwr-tilt-card.d.ts +63 -0
  529. package/types/ngwr-timeline.d.ts +40 -0
  530. package/types/ngwr-toast.d.ts +230 -0
  531. package/types/ngwr-toolbar.d.ts +30 -0
  532. package/types/ngwr-tree.d.ts +150 -0
  533. package/types/ngwr-typewriter.d.ts +84 -0
  534. package/types/ngwr-typography.d.ts +56 -0
  535. package/types/ngwr-utils.d.ts +447 -0
  536. package/types/ngwr-validators.d.ts +70 -0
  537. package/types/ngwr-version.d.ts +44 -0
  538. package/types/ngwr-virtual-scroll.d.ts +64 -0
  539. package/types/ngwr-waves.d.ts +71 -0
  540. package/types/ngwr-window.d.ts +437 -0
  541. package/typewriter/styles/_index.scss +33 -0
  542. package/typewriter/typewriter.scss +1 -0
  543. package/typography/styles/_index.scss +211 -0
  544. package/virtual-scroll/styles/_index.scss +27 -0
  545. package/virtual-scroll/virtual-scroll.scss +1 -0
  546. package/waves/styles/_index.scss +24 -0
  547. package/waves/waves.scss +1 -0
  548. package/window/styles/_index.scss +430 -0
  549. package/alert/index.d.ts +0 -32
  550. package/alert/styles/theming.scss +0 -26
  551. package/alert/styles/vars.scss +0 -11
  552. package/avatar/index.d.ts +0 -30
  553. package/button/index.d.ts +0 -45
  554. package/button/styles/vars.scss +0 -13
  555. package/cdk/index.d.ts +0 -24
  556. package/cdk/rxjs/index.d.ts +0 -40
  557. package/cdk/types/index.d.ts +0 -27
  558. package/checkbox/index.d.ts +0 -31
  559. package/checkbox/styles/vars.scss +0 -16
  560. package/dialog/index.d.ts +0 -193
  561. package/dialog/styles/vars.scss +0 -7
  562. package/divider/index.d.ts +0 -16
  563. package/dropdown/index.d.ts +0 -68
  564. package/dropdown/styles/vars.scss +0 -18
  565. package/fesm2022/ngwr-cdk-rxjs.mjs +0 -53
  566. package/fesm2022/ngwr-cdk-rxjs.mjs.map +0 -1
  567. package/fesm2022/ngwr-cdk-types.mjs +0 -44
  568. package/fesm2022/ngwr-cdk-types.mjs.map +0 -1
  569. package/fesm2022/ngwr-cdk-utils.mjs +0 -30
  570. package/fesm2022/ngwr-cdk-utils.mjs.map +0 -1
  571. package/fesm2022/ngwr-cdk.mjs +0 -46
  572. package/fesm2022/ngwr-cdk.mjs.map +0 -1
  573. package/fesm2022/ngwr-tag.mjs +0 -87
  574. package/fesm2022/ngwr-tag.mjs.map +0 -1
  575. package/form/index.d.ts +0 -28
  576. package/icon/index.d.ts +0 -830
  577. package/icon/styles/vars.scss +0 -3
  578. package/input/index.d.ts +0 -43
  579. package/input/styles/vars.scss +0 -17
  580. package/pagination/index.d.ts +0 -34
  581. package/pagination/styles/vars.scss +0 -14
  582. package/pipes/index.d.ts +0 -17
  583. package/progress/index.d.ts +0 -13
  584. package/progress/styles/theming.scss +0 -8
  585. package/progress/styles/vars.scss +0 -6
  586. package/qr/index.d.ts +0 -127
  587. package/select/index.d.ts +0 -121
  588. package/select/styles/vars.scss +0 -32
  589. package/skeleton/index.d.ts +0 -13
  590. package/spinner/index.d.ts +0 -23
  591. package/styles/animations.scss +0 -92
  592. package/styles/cdk.scss +0 -5
  593. package/styles/colors.scss +0 -72
  594. package/styles/grid.scss +0 -99
  595. package/styles/maps.scss +0 -31
  596. package/styles/reset.scss +0 -112
  597. package/styles/variables.scss +0 -72
  598. package/table/index.d.ts +0 -101
  599. package/table/styles/table-filter.scss +0 -202
  600. package/table/styles/table-sort.scss +0 -47
  601. package/table/styles/table.scss +0 -232
  602. package/table/styles/vars.scss +0 -21
  603. package/tag/index.d.ts +0 -24
  604. package/tag/styles/_index.scss +0 -32
  605. package/tag/styles/theming.scss +0 -21
  606. package/tag/styles/vars.scss +0 -12
  607. package/textarea/index.d.ts +0 -47
  608. package/textarea/styles/vars.scss +0 -17
  609. /package/{index.d.ts → types/ngwr.d.ts} +0 -0
@@ -1,10 +1,11 @@
1
- import { Overlay, ScrollStrategyOptions } from '@angular/cdk/overlay';
1
+ import { ScrollStrategyOptions } from '@angular/cdk/overlay';
2
2
  import { TemplatePortal } from '@angular/cdk/portal';
3
3
  import * as i0 from '@angular/core';
4
- import { input, signal, inject, ElementRef, ViewContainerRef, DestroyRef, effect, Directive, HostBinding, HostListener, Component, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, booleanAttribute } from '@angular/core';
4
+ import { input, output, inject, ElementRef, ViewContainerRef, DestroyRef, signal, effect, Directive, viewChild, TemplateRef, ViewEncapsulation, Component, computed } from '@angular/core';
5
5
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
- import { filter, fromEvent, merge } from 'rxjs';
7
- import { WrIconComponent } from 'ngwr/icon';
6
+ import { WR_OVERLAY } from 'ngwr/overlay';
7
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
8
+ import { WrIcon } from 'ngwr/icon';
8
9
 
9
10
  /**
10
11
  * @license
@@ -12,71 +13,20 @@ import { WrIconComponent } from 'ngwr/icon';
12
13
  * Use of this source code is governed by an MIT-style license that can be
13
14
  * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
14
15
  */
16
+ /**
17
+ * Maps friendly names to CDK ConnectedPosition fallback lists.
18
+ *
19
+ * @internal
20
+ */
15
21
  const WR_DROPDOWN_POSITIONS = {
16
- top: [
17
- {
18
- originX: 'center',
19
- originY: 'top',
20
- overlayX: 'center',
21
- overlayY: 'bottom',
22
- },
23
- ],
24
- topLeft: [
25
- {
26
- originX: 'start',
27
- originY: 'top',
28
- overlayX: 'start',
29
- overlayY: 'bottom',
30
- },
31
- ],
32
- topRight: [
33
- {
34
- originX: 'end',
35
- originY: 'top',
36
- overlayX: 'end',
37
- overlayY: 'bottom',
38
- },
39
- ],
40
- bottom: [
41
- {
42
- originX: 'center',
43
- originY: 'bottom',
44
- overlayX: 'center',
45
- overlayY: 'top',
46
- },
47
- ],
48
- bottomLeft: [
49
- {
50
- originX: 'start',
51
- originY: 'bottom',
52
- overlayX: 'start',
53
- overlayY: 'top',
54
- },
55
- ],
56
- bottomRight: [
57
- {
58
- originX: 'end',
59
- originY: 'bottom',
60
- overlayX: 'end',
61
- overlayY: 'top',
62
- },
63
- ],
64
- left: [
65
- {
66
- originX: 'start',
67
- originY: 'center',
68
- overlayX: 'end',
69
- overlayY: 'center',
70
- },
71
- ],
72
- right: [
73
- {
74
- originX: 'end',
75
- originY: 'center',
76
- overlayX: 'start',
77
- overlayY: 'center',
78
- },
79
- ],
22
+ top: [{ originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' }],
23
+ 'top-start': [{ originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' }],
24
+ 'top-end': [{ originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' }],
25
+ bottom: [{ originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' }],
26
+ 'bottom-start': [{ originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' }],
27
+ 'bottom-end': [{ originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' }],
28
+ left: [{ originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' }],
29
+ right: [{ originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' }],
80
30
  };
81
31
 
82
32
  /**
@@ -85,149 +35,226 @@ const WR_DROPDOWN_POSITIONS = {
85
35
  * Use of this source code is governed by an MIT-style license that can be
86
36
  * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
87
37
  */
88
- class WrDropdownDirective {
89
- get hostClasses() {
90
- return {
91
- 'wr-dropdown-trigger': true,
92
- };
93
- }
38
+ /**
39
+ * Attach to any element to open a `<wr-dropdown-menu>` as a CDK overlay.
40
+ *
41
+ * @example
42
+ * ```html
43
+ * <button [wrDropdown]="menu" position="bottom-start" trigger="click">
44
+ * Actions
45
+ * </button>
46
+ *
47
+ * <wr-dropdown-menu #menu>
48
+ * <wr-dropdown-item icon="copy" (click)="copy()">Copy</wr-dropdown-item>
49
+ * <wr-dropdown-item icon="trash" (click)="remove()">Delete</wr-dropdown-item>
50
+ * </wr-dropdown-menu>
51
+ * ```
52
+ *
53
+ * @see https://ngwr.dev/components/dropdown
54
+ */
55
+ let triggerUid = 0;
56
+ class WrDropdown {
57
+ /** Menu to open. Pass a `<wr-dropdown-menu>` template reference. */
58
+ menu = input.required({ ...(ngDevMode ? { debugName: "menu" } : /* istanbul ignore next */ {}), alias: 'wrDropdown' });
59
+ /** How the menu opens. @default 'click' */
60
+ trigger = input('click', /* @ts-ignore */
61
+ ...(ngDevMode ? [{ debugName: "trigger" }] : /* istanbul ignore next */ []));
62
+ /** Where the menu anchors relative to the trigger. @default 'bottom-start' */
63
+ position = input('bottom-start', /* @ts-ignore */
64
+ ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
65
+ /** Fires after the menu opens. */
66
+ opened = output();
67
+ /** Fires after the menu closes. */
68
+ closed = output();
69
+ host = inject(ElementRef);
70
+ overlay = inject(WR_OVERLAY);
71
+ vcr = inject(ViewContainerRef);
72
+ scrollStrategies = inject(ScrollStrategyOptions);
73
+ destroyRef = inject(DestroyRef);
74
+ /** @internal Public so host bindings can read it. */
75
+ isOpen = signal(false, /* @ts-ignore */
76
+ ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
77
+ /** Auto-generated id for `aria-labelledby` wiring on the menu. */
78
+ triggerId = `wr-dropdown-trigger-${++triggerUid}`;
79
+ overlayRef = null;
94
80
  constructor() {
95
- this.dropdownMenu = input(...(ngDevMode ? [undefined, { debugName: "dropdownMenu" }] : []));
96
- this.trigger = input('click', ...(ngDevMode ? [{ debugName: "trigger" }] : []));
97
- this.position = input('bottomLeft', ...(ngDevMode ? [{ debugName: "position" }] : []));
98
- this.isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
99
- this.clickTimeStamp = 0;
100
- this.overlay = inject(Overlay);
101
- this.elementRef = inject(ElementRef);
102
- this.viewContainerRef = inject(ViewContainerRef);
103
- this.scrollStrategyOptions = inject(ScrollStrategyOptions);
104
- this.destroyRef = inject(DestroyRef);
105
- const isOpen = this.isOpen;
106
81
  effect(() => {
107
- if (isOpen()) {
108
- this.open();
82
+ if (this.isOpen()) {
83
+ this.openOverlay();
109
84
  }
110
85
  else {
111
- this.close();
86
+ this.closeOverlay();
112
87
  }
113
88
  });
114
89
  }
115
- ngOnDestroy() {
116
- this.destroyOverlay();
90
+ /** Open the menu. */
91
+ open() {
92
+ this.isOpen.set(true);
117
93
  }
94
+ /** Close the menu. */
95
+ close() {
96
+ this.isOpen.set(false);
97
+ }
98
+ /** Toggle the menu. */
99
+ toggle() {
100
+ this.isOpen.update(v => !v);
101
+ }
102
+ // Host listeners
103
+ /** @internal */
118
104
  onClick(event) {
119
- if (this.trigger() !== 'click') {
105
+ if (this.trigger() !== 'click')
120
106
  return;
121
- }
122
107
  event.stopPropagation();
123
- if (event.timeStamp === this.clickTimeStamp) {
124
- return;
125
- }
126
- this.isOpen.update(value => !value);
108
+ this.toggle();
127
109
  }
110
+ /** @internal */
128
111
  onMouseEnter() {
129
- if (this.trigger() !== 'hover') {
112
+ if (this.trigger() !== 'hover')
130
113
  return;
131
- }
132
114
  this.isOpen.set(true);
133
115
  }
134
- open() {
135
- if (this.overlayRef || !this.dropdownMenu()) {
116
+ /** @internal */
117
+ onMouseLeave(event) {
118
+ if (this.trigger() !== 'hover')
119
+ return;
120
+ const related = event.relatedTarget;
121
+ if (related && this.overlayRef?.overlayElement.contains(related))
122
+ return;
123
+ this.isOpen.set(false);
124
+ }
125
+ // Overlay management
126
+ openOverlay() {
127
+ if (this.overlayRef)
136
128
  return;
137
- }
138
129
  const positionStrategy = this.overlay
139
130
  .position()
140
- .flexibleConnectedTo(this.elementRef)
131
+ .flexibleConnectedTo(this.host)
141
132
  .withPositions(WR_DROPDOWN_POSITIONS[this.position()])
142
133
  .withPush(true);
143
134
  this.overlayRef = this.overlay.create({
144
135
  positionStrategy,
145
- scrollStrategy: this.scrollStrategyOptions.reposition(),
146
- panelClass: ['wr-dropdown-overlay', `wr-dropdown--${this.position()}`],
136
+ scrollStrategy: this.scrollStrategies.reposition(),
137
+ panelClass: ['wr-dropdown-overlay', `wr-dropdown-overlay--${this.position()}`],
147
138
  });
148
- const portal = new TemplatePortal(this.dropdownMenu().contentTpl, this.viewContainerRef);
139
+ // Wire trigger id into menu so it can render aria-labelledby.
140
+ this.menu().triggerId.set(this.triggerId);
141
+ const portal = new TemplatePortal(this.menu().contentTpl(), this.vcr);
149
142
  this.overlayRef.attach(portal);
150
- if (this.trigger() === 'hover') {
151
- this.setupHoverEvents();
152
- }
153
- else {
154
- this.setupClickEvents();
155
- }
143
+ // Focus the first menu item after the menu renders.
144
+ queueMicrotask(() => this.focusItemAt(0));
156
145
  this.overlayRef
157
- .keydownEvents()
146
+ .outsidePointerEvents()
158
147
  .pipe(takeUntilDestroyed(this.destroyRef))
159
148
  .subscribe(event => {
160
- if (event.key === 'Escape') {
161
- this.clickTimeStamp = event.timeStamp;
162
- this.isOpen.set(false);
163
- }
164
- });
165
- setTimeout(() => {
166
- this.overlayRef?.updatePosition();
167
- });
168
- }
169
- setupClickEvents() {
170
- this.overlayRef.outsidePointerEvents()
171
- .pipe(filter(event => !this.elementRef.nativeElement.contains(event.target)), takeUntilDestroyed(this.destroyRef))
172
- .subscribe(event => {
173
- this.clickTimeStamp = event.timeStamp;
149
+ if (this.host.nativeElement.contains(event.target))
150
+ return;
174
151
  this.isOpen.set(false);
175
152
  });
176
- }
177
- setupHoverEvents() {
178
- const overlayElement = this.overlayRef.overlayElement;
179
- const triggerElement = this.elementRef.nativeElement;
180
- const triggerLeave$ = fromEvent(triggerElement, 'mouseleave').pipe(filter(event => {
181
- const relatedTarget = event.relatedTarget;
182
- return !overlayElement.contains(relatedTarget) && relatedTarget !== overlayElement;
183
- }));
184
- const overlayLeave$ = fromEvent(overlayElement, 'mouseleave').pipe(filter(event => {
185
- const relatedTarget = event.relatedTarget;
186
- return !triggerElement.contains(relatedTarget) && relatedTarget !== triggerElement;
187
- }));
188
- merge(triggerLeave$, overlayLeave$)
189
- .pipe(takeUntilDestroyed(this.destroyRef))
190
- .subscribe(() => {
191
- if (!triggerElement.matches(':hover') && !overlayElement.matches(':hover')) {
192
- this.isOpen.set(false);
193
- }
194
- });
195
- fromEvent(overlayElement, 'mouseenter')
153
+ this.overlayRef
154
+ .keydownEvents()
196
155
  .pipe(takeUntilDestroyed(this.destroyRef))
197
- .subscribe(() => {
198
- this.isOpen.set(true);
156
+ .subscribe(event => {
157
+ this.handleMenuKeydown(event);
199
158
  });
159
+ if (this.trigger() === 'hover') {
160
+ this.overlayRef.overlayElement.addEventListener('mouseleave', this.onOverlayMouseLeave);
161
+ }
162
+ this.opened.emit();
200
163
  }
201
- close() {
202
- if (this.overlayRef) {
203
- this.overlayRef.detach();
204
- this.destroyOverlay();
164
+ closeOverlay() {
165
+ if (!this.overlayRef)
166
+ return;
167
+ if (this.trigger() === 'hover') {
168
+ this.overlayRef.overlayElement.removeEventListener('mouseleave', this.onOverlayMouseLeave);
205
169
  }
170
+ this.overlayRef.dispose();
171
+ this.overlayRef = null;
172
+ this.closed.emit();
206
173
  }
207
- destroyOverlay() {
208
- if (this.overlayRef) {
209
- this.overlayRef.dispose();
210
- this.overlayRef = undefined;
174
+ // Keyboard handling
175
+ /** @internal Trigger keydown — ArrowDown/Up/Enter/Space open the menu. */
176
+ onKeydown(event) {
177
+ if (this.isOpen())
178
+ return;
179
+ if (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'Enter' || event.key === ' ') {
180
+ event.preventDefault();
181
+ this.open();
211
182
  }
212
183
  }
213
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: WrDropdownDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
214
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.10", type: WrDropdownDirective, isStandalone: true, selector: "[wrDropdown]", inputs: { dropdownMenu: { classPropertyName: "dropdownMenu", publicName: "dropdownMenu", isSignal: true, isRequired: false, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "trigger", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick($event)", "mouseenter": "onMouseEnter()" }, properties: { "class": "this.hostClasses" } }, ngImport: i0 }); }
184
+ handleMenuKeydown(event) {
185
+ const items = this.getItems();
186
+ if (items.length === 0 && event.key !== 'Escape' && event.key !== 'Tab')
187
+ return;
188
+ const current = document.activeElement;
189
+ const idx = current ? items.indexOf(current) : -1;
190
+ switch (event.key) {
191
+ case 'Escape':
192
+ event.preventDefault();
193
+ this.isOpen.set(false);
194
+ this.host.nativeElement.focus();
195
+ break;
196
+ case 'Tab':
197
+ // Let focus leave naturally; close the menu.
198
+ this.isOpen.set(false);
199
+ break;
200
+ case 'ArrowDown':
201
+ event.preventDefault();
202
+ this.focusItemAt(idx < items.length - 1 ? idx + 1 : 0);
203
+ break;
204
+ case 'ArrowUp':
205
+ event.preventDefault();
206
+ this.focusItemAt(idx > 0 ? idx - 1 : items.length - 1);
207
+ break;
208
+ case 'Home':
209
+ event.preventDefault();
210
+ this.focusItemAt(0);
211
+ break;
212
+ case 'End':
213
+ event.preventDefault();
214
+ this.focusItemAt(items.length - 1);
215
+ break;
216
+ default:
217
+ break;
218
+ }
219
+ }
220
+ getItems() {
221
+ if (!this.overlayRef)
222
+ return [];
223
+ return Array.from(this.overlayRef.overlayElement.querySelectorAll('.wr-dropdown-item:not(.wr-dropdown-item--disabled)'));
224
+ }
225
+ focusItemAt(index) {
226
+ const items = this.getItems();
227
+ if (items.length === 0)
228
+ return;
229
+ const clamped = ((index % items.length) + items.length) % items.length;
230
+ items[clamped]?.focus();
231
+ }
232
+ onOverlayMouseLeave = (event) => {
233
+ const related = event.relatedTarget;
234
+ if (related && this.host.nativeElement.contains(related))
235
+ return;
236
+ this.isOpen.set(false);
237
+ };
238
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrDropdown, deps: [], target: i0.ɵɵFactoryTarget.Directive });
239
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: WrDropdown, isStandalone: true, selector: "[wrDropdown]", inputs: { menu: { classPropertyName: "menu", publicName: "wrDropdown", isSignal: true, isRequired: true, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "trigger", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "click": "onClick($event)", "keydown": "onKeydown($event)", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave($event)" }, properties: { "attr.id": "triggerId", "attr.aria-haspopup": "\"menu\"", "attr.aria-expanded": "isOpen()", "attr.aria-controls": "isOpen() ? menu().menuId() : null" }, classAttribute: "wr-dropdown-trigger" }, ngImport: i0 });
215
240
  }
216
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: WrDropdownDirective, decorators: [{
241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrDropdown, decorators: [{
217
242
  type: Directive,
218
243
  args: [{
219
244
  selector: '[wrDropdown]',
245
+ host: {
246
+ class: 'wr-dropdown-trigger',
247
+ '[attr.id]': 'triggerId',
248
+ '[attr.aria-haspopup]': '"menu"',
249
+ '[attr.aria-expanded]': 'isOpen()',
250
+ '[attr.aria-controls]': 'isOpen() ? menu().menuId() : null',
251
+ '(click)': 'onClick($event)',
252
+ '(keydown)': 'onKeydown($event)',
253
+ '(mouseenter)': 'onMouseEnter()',
254
+ '(mouseleave)': 'onMouseLeave($event)',
255
+ },
220
256
  }]
221
- }], ctorParameters: () => [], propDecorators: { dropdownMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "dropdownMenu", required: false }] }], trigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "trigger", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], hostClasses: [{
222
- type: HostBinding,
223
- args: ['class']
224
- }], onClick: [{
225
- type: HostListener,
226
- args: ['click', ['$event']]
227
- }], onMouseEnter: [{
228
- type: HostListener,
229
- args: ['mouseenter']
230
- }] } });
257
+ }], ctorParameters: () => [], propDecorators: { menu: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrDropdown", required: true }] }], trigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "trigger", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
231
258
 
232
259
  /**
233
260
  * @license
@@ -235,70 +262,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImpo
235
262
  * Use of this source code is governed by an MIT-style license that can be
236
263
  * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
237
264
  */
238
- class WrDropdownMenuComponent {
239
- get hostClasses() {
240
- return {
241
- display: 'none',
242
- };
243
- }
244
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: WrDropdownMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
245
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.10", type: WrDropdownMenuComponent, isStandalone: true, selector: "wr-dropdown-menu", host: { properties: { "style": "this.hostClasses" } }, viewQueries: [{ propertyName: "contentTpl", first: true, predicate: ["contentTpl"], descendants: true }], exportAs: ["wrDropdownMenu"], ngImport: i0, template: "<ng-template #contentTpl>\n <div class=\"wr-dropdown-menu\">\n <ng-content />\n </div>\n</ng-template>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
246
- }
247
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: WrDropdownMenuComponent, decorators: [{
248
- type: Component,
249
- args: [{ selector: 'wr-dropdown-menu', exportAs: 'wrDropdownMenu', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-template #contentTpl>\n <div class=\"wr-dropdown-menu\">\n <ng-content />\n </div>\n</ng-template>\n" }]
250
- }], propDecorators: { hostClasses: [{
251
- type: HostBinding,
252
- args: ['style']
253
- }], contentTpl: [{
254
- type: ViewChild,
255
- args: ['contentTpl']
256
- }] } });
257
-
265
+ let uid = 0;
258
266
  /**
259
- * @license
267
+ * Holds the menu content rendered when a {@link WrDropdown} opens.
260
268
  *
261
- * Use of this source code is governed by an MIT-style license that can be
262
- * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
269
+ * The component itself doesn't render anywhere — the directive grabs its
270
+ * internal `<ng-template>` and portals it into an overlay.
271
+ *
272
+ * @example
273
+ * ```html
274
+ * <button [wrDropdown]="menu">Actions</button>
275
+ * <wr-dropdown-menu #menu>
276
+ * <wr-dropdown-item icon="copy">Copy</wr-dropdown-item>
277
+ * <wr-dropdown-item icon="trash">Delete</wr-dropdown-item>
278
+ * </wr-dropdown-menu>
279
+ * ```
280
+ *
281
+ * @see https://ngwr.dev/components/dropdown
263
282
  */
264
- class WrDropdownMenuItemComponent {
265
- constructor() {
266
- this.icon = input(null, ...(ngDevMode ? [{ debugName: "icon" }] : []));
267
- this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
268
- this.attrRole = 'menuitem';
269
- this.tabindex = this.disabled() ? '' : '0';
270
- }
271
- get hostClasses() {
272
- return {
273
- 'wr-dropdown-item': true,
274
- 'wr-dropdown-item--disabled': this.disabled(),
275
- };
276
- }
277
- onClick(event) {
278
- if (this.disabled()) {
279
- event.preventDefault();
280
- event.stopPropagation();
281
- }
282
- }
283
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: WrDropdownMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
284
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.10", type: WrDropdownMenuItemComponent, isStandalone: true, selector: "wr-dropdown-menu-item", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick($event)" }, properties: { "class": "this.hostClasses", "attr.role": "this.attrRole", "attr.tabindex": "this.tabindex" } }, ngImport: i0, template: "<div class=\"wr-dropdown-item__content\">\n @if (icon()) {\n <wr-icon class=\"wr-dropdown-item__icon\" [name]=\"icon()!\" />\n }\n <span class=\"wr-dropdown-item__label\">\n <ng-content></ng-content>\n </span>\n</div>\n", dependencies: [{ kind: "component", type: WrIconComponent, selector: "wr-icon", inputs: ["name"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
283
+ class WrDropdownMenu {
284
+ /** The internal template the directive portals into the overlay. @internal */
285
+ contentTpl = viewChild.required(TemplateRef);
286
+ /** Stable id used on the menu element and referenced from the trigger's `aria-controls`. */
287
+ menuId = signal(`wr-dropdown-menu-${++uid}`, /* @ts-ignore */
288
+ ...(ngDevMode ? [{ debugName: "menuId" }] : /* istanbul ignore next */ []));
289
+ /** Trigger element id, set by the directive for `aria-labelledby` wiring. */
290
+ triggerId = signal(null, /* @ts-ignore */
291
+ ...(ngDevMode ? [{ debugName: "triggerId" }] : /* istanbul ignore next */ []));
292
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrDropdownMenu, deps: [], target: i0.ɵɵFactoryTarget.Component });
293
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.2", type: WrDropdownMenu, isStandalone: true, selector: "wr-dropdown-menu", host: { styleAttribute: "display:none" }, viewQueries: [{ propertyName: "contentTpl", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], exportAs: ["wrDropdownMenu"], ngImport: i0, template: '<ng-template><div class="wr-dropdown-menu" role="menu" [attr.id]="menuId()" [attr.aria-labelledby]="triggerId() || null"><ng-content /></div></ng-template>', isInline: true, encapsulation: i0.ViewEncapsulation.None });
285
294
  }
286
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: WrDropdownMenuItemComponent, decorators: [{
295
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrDropdownMenu, decorators: [{
287
296
  type: Component,
288
- args: [{ selector: 'wr-dropdown-menu-item', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [WrIconComponent], template: "<div class=\"wr-dropdown-item__content\">\n @if (icon()) {\n <wr-icon class=\"wr-dropdown-item__icon\" [name]=\"icon()!\" />\n }\n <span class=\"wr-dropdown-item__label\">\n <ng-content></ng-content>\n </span>\n</div>\n" }]
289
- }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], hostClasses: [{
290
- type: HostBinding,
291
- args: ['class']
292
- }], attrRole: [{
293
- type: HostBinding,
294
- args: ['attr.role']
295
- }], tabindex: [{
296
- type: HostBinding,
297
- args: ['attr.tabindex']
298
- }], onClick: [{
299
- type: HostListener,
300
- args: ['click', ['$event']]
301
- }] } });
297
+ args: [{
298
+ selector: 'wr-dropdown-menu',
299
+ template: '<ng-template><div class="wr-dropdown-menu" role="menu" [attr.id]="menuId()" [attr.aria-labelledby]="triggerId() || null"><ng-content /></div></ng-template>',
300
+ exportAs: 'wrDropdownMenu',
301
+ encapsulation: ViewEncapsulation.None,
302
+ host: { style: 'display:none' },
303
+ }]
304
+ }], propDecorators: { contentTpl: [{ type: i0.ViewChild, args: [i0.forwardRef(() => TemplateRef), { isSignal: true }] }] } });
302
305
 
303
306
  /**
304
307
  * @license
@@ -306,10 +309,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImpo
306
309
  * Use of this source code is governed by an MIT-style license that can be
307
310
  * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
308
311
  */
312
+ /**
313
+ * Single row inside a `<wr-dropdown-menu>`.
314
+ *
315
+ * @example
316
+ * ```html
317
+ * <wr-dropdown-item icon="copy" (click)="copy()">Copy</wr-dropdown-item>
318
+ * <wr-dropdown-item icon="trash" disabled>Delete</wr-dropdown-item>
319
+ * ```
320
+ */
321
+ class WrDropdownItem {
322
+ /** Optional leading icon name. @default null */
323
+ icon = input(null, /* @ts-ignore */
324
+ ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
325
+ /** Disable interaction (suppresses pointer + keyboard). @default false */
326
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
327
+ classes = computed(() => {
328
+ const parts = ['wr-dropdown-item'];
329
+ if (this.disabled())
330
+ parts.push('wr-dropdown-item--disabled');
331
+ return parts.join(' ');
332
+ }, /* @ts-ignore */
333
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
334
+ host = inject(ElementRef);
335
+ /** @internal Keyboard activation — fires the same click consumers bind to. */
336
+ activate(event) {
337
+ if (this.disabled())
338
+ return;
339
+ event.preventDefault();
340
+ this.host.nativeElement.click();
341
+ }
342
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrDropdownItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
343
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: WrDropdownItem, isStandalone: true, selector: "wr-dropdown-item", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "menuitem" }, listeners: { "keydown.enter": "activate($event)", "keydown.space": "activate($event)" }, properties: { "class": "classes()", "attr.tabindex": "-1", "attr.aria-disabled": "disabled() ? true : null" } }, ngImport: i0, template: "@if (icon(); as name) {\n <wr-icon class=\"wr-dropdown-item__icon\" [name]=\"name\" />\n}\n<span class=\"wr-dropdown-item__label\">\n <ng-content />\n</span>\n", dependencies: [{ kind: "component", type: WrIcon, selector: "wr-icon", inputs: ["name"] }], encapsulation: i0.ViewEncapsulation.None });
344
+ }
345
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrDropdownItem, decorators: [{
346
+ type: Component,
347
+ args: [{ selector: 'wr-dropdown-item', encapsulation: ViewEncapsulation.None, host: {
348
+ role: 'menuitem',
349
+ '[class]': 'classes()',
350
+ '[attr.tabindex]': '-1',
351
+ '[attr.aria-disabled]': 'disabled() ? true : null',
352
+ '(keydown.enter)': 'activate($event)',
353
+ '(keydown.space)': 'activate($event)',
354
+ }, imports: [WrIcon], template: "@if (icon(); as name) {\n <wr-icon class=\"wr-dropdown-item__icon\" [name]=\"name\" />\n}\n<span class=\"wr-dropdown-item__label\">\n <ng-content />\n</span>\n" }]
355
+ }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
309
356
 
310
357
  /**
311
358
  * Generated bundle index. Do not edit.
312
359
  */
313
360
 
314
- export { WR_DROPDOWN_POSITIONS, WrDropdownDirective, WrDropdownMenuComponent, WrDropdownMenuItemComponent };
361
+ export { WrDropdown, WrDropdownItem, WrDropdownMenu };
315
362
  //# sourceMappingURL=ngwr-dropdown.mjs.map