ngwr 6.1.1 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (609) hide show
  1. package/LICENSE +1 -3
  2. package/README.md +179 -32
  3. package/affix/styles/_index.scss +12 -0
  4. package/alert/styles/_index.scss +75 -32
  5. package/anchor/styles/_index.scss +59 -0
  6. package/aurora/aurora.scss +1 -0
  7. package/aurora/styles/_index.scss +30 -0
  8. package/avatar/styles/_index.scss +30 -14
  9. package/back-top/styles/_index.scss +42 -0
  10. package/badge/styles/_index.scss +80 -0
  11. package/badge/styles/_tag.scss +81 -0
  12. package/bar-chart/styles/_index.scss +56 -0
  13. package/blur-text/blur-text.scss +1 -0
  14. package/blur-text/styles/_index.scss +14 -0
  15. package/border-glow/border-glow.scss +4 -0
  16. package/border-glow/styles/_index.scss +228 -0
  17. package/breadcrumbs/breadcrumbs.scss +1 -0
  18. package/breadcrumbs/styles/_index.scss +76 -0
  19. package/burger/styles/_index.scss +101 -0
  20. package/button/styles/_index.scss +148 -125
  21. package/calendar/styles/_index.scss +252 -0
  22. package/calendar-heatmap/styles/_index.scss +69 -0
  23. package/card/card.scss +1 -0
  24. package/card/styles/_index.scss +96 -0
  25. package/carousel/styles/_index.scss +102 -0
  26. package/cascader/cascader.scss +1 -0
  27. package/cascader/styles/_index.scss +174 -0
  28. package/checkbox/styles/_index.scss +76 -60
  29. package/circular-text/circular-text.scss +1 -0
  30. package/circular-text/styles/_index.scss +45 -0
  31. package/click-spark/click-spark.scss +1 -0
  32. package/click-spark/styles/_index.scss +16 -0
  33. package/collapse/styles/_index.scss +92 -0
  34. package/color-picker/styles/_index.scss +247 -0
  35. package/command-palette/styles/_index.scss +188 -0
  36. package/compare/styles/_index.scss +100 -0
  37. package/context-menu/styles/_index.scss +112 -0
  38. package/counter/styles/_index.scss +44 -0
  39. package/date-picker/styles/_index.scss +204 -0
  40. package/decrypt-text/decrypt-text.scss +1 -0
  41. package/decrypt-text/styles/_index.scss +26 -0
  42. package/density/styles/_index.scss +37 -0
  43. package/descriptions/styles/_index.scss +104 -0
  44. package/dialog/styles/_index.scss +101 -27
  45. package/divider/styles/_index.scss +43 -24
  46. package/donut-chart/styles/_index.scss +76 -0
  47. package/drag-drop/sortable-list.scss +1 -0
  48. package/drag-drop/styles/_index.scss +99 -0
  49. package/drawer/styles/_index.scss +164 -0
  50. package/dropdown/styles/_index.scss +76 -56
  51. package/empty/styles/_index.scss +49 -0
  52. package/falling-text/falling-text.scss +1 -0
  53. package/falling-text/styles/_index.scss +30 -0
  54. package/fesm2022/ngwr-affix.mjs +102 -0
  55. package/fesm2022/ngwr-affix.mjs.map +1 -0
  56. package/fesm2022/ngwr-alert.mjs +70 -52
  57. package/fesm2022/ngwr-alert.mjs.map +1 -1
  58. package/fesm2022/ngwr-anchor.mjs +103 -0
  59. package/fesm2022/ngwr-anchor.mjs.map +1 -0
  60. package/fesm2022/ngwr-aurora.mjs +309 -0
  61. package/fesm2022/ngwr-aurora.mjs.map +1 -0
  62. package/fesm2022/ngwr-avatar.mjs +81 -71
  63. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  64. package/fesm2022/ngwr-back-top.mjs +81 -0
  65. package/fesm2022/ngwr-back-top.mjs.map +1 -0
  66. package/fesm2022/ngwr-badge.mjs +192 -0
  67. package/fesm2022/ngwr-badge.mjs.map +1 -0
  68. package/fesm2022/ngwr-bar-chart.mjs +69 -0
  69. package/fesm2022/ngwr-bar-chart.mjs.map +1 -0
  70. package/fesm2022/ngwr-blur-text.mjs +181 -0
  71. package/fesm2022/ngwr-blur-text.mjs.map +1 -0
  72. package/fesm2022/ngwr-border-glow.mjs +278 -0
  73. package/fesm2022/ngwr-border-glow.mjs.map +1 -0
  74. package/fesm2022/ngwr-breadcrumbs.mjs +101 -0
  75. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -0
  76. package/fesm2022/ngwr-burger.mjs +60 -0
  77. package/fesm2022/ngwr-burger.mjs.map +1 -0
  78. package/fesm2022/ngwr-button.mjs +179 -104
  79. package/fesm2022/ngwr-button.mjs.map +1 -1
  80. package/fesm2022/ngwr-calendar-heatmap.mjs +145 -0
  81. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -0
  82. package/fesm2022/ngwr-calendar.mjs +402 -0
  83. package/fesm2022/ngwr-calendar.mjs.map +1 -0
  84. package/fesm2022/ngwr-card.mjs +100 -0
  85. package/fesm2022/ngwr-card.mjs.map +1 -0
  86. package/fesm2022/ngwr-carousel.mjs +128 -0
  87. package/fesm2022/ngwr-carousel.mjs.map +1 -0
  88. package/fesm2022/ngwr-cascader.mjs +280 -0
  89. package/fesm2022/ngwr-cascader.mjs.map +1 -0
  90. package/fesm2022/ngwr-checkbox.mjs +214 -54
  91. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  92. package/fesm2022/ngwr-circular-text.mjs +168 -0
  93. package/fesm2022/ngwr-circular-text.mjs.map +1 -0
  94. package/fesm2022/ngwr-click-spark.mjs +163 -0
  95. package/fesm2022/ngwr-click-spark.mjs.map +1 -0
  96. package/fesm2022/ngwr-clipboard.mjs +130 -0
  97. package/fesm2022/ngwr-clipboard.mjs.map +1 -0
  98. package/fesm2022/ngwr-collapse.mjs +232 -0
  99. package/fesm2022/ngwr-collapse.mjs.map +1 -0
  100. package/fesm2022/ngwr-color-picker.mjs +646 -0
  101. package/fesm2022/ngwr-color-picker.mjs.map +1 -0
  102. package/fesm2022/ngwr-command-palette.mjs +259 -0
  103. package/fesm2022/ngwr-command-palette.mjs.map +1 -0
  104. package/fesm2022/ngwr-compare.mjs +137 -0
  105. package/fesm2022/ngwr-compare.mjs.map +1 -0
  106. package/fesm2022/ngwr-confetti.mjs +160 -0
  107. package/fesm2022/ngwr-confetti.mjs.map +1 -0
  108. package/fesm2022/ngwr-context-menu.mjs +653 -0
  109. package/fesm2022/ngwr-context-menu.mjs.map +1 -0
  110. package/fesm2022/ngwr-cookie.mjs +127 -0
  111. package/fesm2022/ngwr-cookie.mjs.map +1 -0
  112. package/fesm2022/ngwr-counter.mjs +415 -0
  113. package/fesm2022/ngwr-counter.mjs.map +1 -0
  114. package/fesm2022/ngwr-date-adapter-fns.mjs +180 -0
  115. package/fesm2022/ngwr-date-adapter-fns.mjs.map +1 -0
  116. package/fesm2022/ngwr-date-adapter-luxon.mjs +201 -0
  117. package/fesm2022/ngwr-date-adapter-luxon.mjs.map +1 -0
  118. package/fesm2022/ngwr-date-adapter.mjs +419 -0
  119. package/fesm2022/ngwr-date-adapter.mjs.map +1 -0
  120. package/fesm2022/ngwr-date-picker.mjs +624 -0
  121. package/fesm2022/ngwr-date-picker.mjs.map +1 -0
  122. package/fesm2022/ngwr-decrypt-text.mjs +396 -0
  123. package/fesm2022/ngwr-decrypt-text.mjs.map +1 -0
  124. package/fesm2022/ngwr-density.mjs +157 -0
  125. package/fesm2022/ngwr-density.mjs.map +1 -0
  126. package/fesm2022/ngwr-descriptions.mjs +83 -0
  127. package/fesm2022/ngwr-descriptions.mjs.map +1 -0
  128. package/fesm2022/ngwr-dialog.mjs +249 -377
  129. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  130. package/fesm2022/ngwr-directives.mjs +315 -0
  131. package/fesm2022/ngwr-directives.mjs.map +1 -0
  132. package/fesm2022/ngwr-divider.mjs +74 -59
  133. package/fesm2022/ngwr-divider.mjs.map +1 -1
  134. package/fesm2022/ngwr-donut-chart.mjs +131 -0
  135. package/fesm2022/ngwr-donut-chart.mjs.map +1 -0
  136. package/fesm2022/ngwr-drag-drop.mjs +117 -0
  137. package/fesm2022/ngwr-drag-drop.mjs.map +1 -0
  138. package/fesm2022/ngwr-drawer.mjs +315 -0
  139. package/fesm2022/ngwr-drawer.mjs.map +1 -0
  140. package/fesm2022/ngwr-dropdown.mjs +276 -229
  141. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  142. package/fesm2022/ngwr-empty.mjs +57 -0
  143. package/fesm2022/ngwr-empty.mjs.map +1 -0
  144. package/fesm2022/ngwr-falling-text.mjs +316 -0
  145. package/fesm2022/ngwr-falling-text.mjs.map +1 -0
  146. package/fesm2022/ngwr-file-upload.mjs +260 -0
  147. package/fesm2022/ngwr-file-upload.mjs.map +1 -0
  148. package/fesm2022/ngwr-form.mjs +133 -48
  149. package/fesm2022/ngwr-form.mjs.map +1 -1
  150. package/fesm2022/ngwr-fuzzy-text.mjs +373 -0
  151. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -0
  152. package/fesm2022/ngwr-gauge.mjs +83 -0
  153. package/fesm2022/ngwr-gauge.mjs.map +1 -0
  154. package/fesm2022/ngwr-glitch-text.mjs +67 -0
  155. package/fesm2022/ngwr-glitch-text.mjs.map +1 -0
  156. package/fesm2022/ngwr-gradient-text.mjs +109 -0
  157. package/fesm2022/ngwr-gradient-text.mjs.map +1 -0
  158. package/fesm2022/ngwr-hotkey.mjs +263 -0
  159. package/fesm2022/ngwr-hotkey.mjs.map +1 -0
  160. package/fesm2022/ngwr-i18n-en.mjs +168 -0
  161. package/fesm2022/ngwr-i18n-en.mjs.map +1 -0
  162. package/fesm2022/ngwr-i18n-ru.mjs +156 -0
  163. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -0
  164. package/fesm2022/ngwr-i18n.mjs +478 -0
  165. package/fesm2022/ngwr-i18n.mjs.map +1 -0
  166. package/fesm2022/ngwr-icon-adapters-feather.mjs +74 -0
  167. package/fesm2022/ngwr-icon-adapters-feather.mjs.map +1 -0
  168. package/fesm2022/ngwr-icon-adapters-lucide.mjs +88 -0
  169. package/fesm2022/ngwr-icon-adapters-lucide.mjs.map +1 -0
  170. package/fesm2022/ngwr-icon.mjs +189 -649
  171. package/fesm2022/ngwr-icon.mjs.map +1 -1
  172. package/fesm2022/ngwr-image-cropper.mjs +299 -0
  173. package/fesm2022/ngwr-image-cropper.mjs.map +1 -0
  174. package/fesm2022/ngwr-input-number.mjs +239 -0
  175. package/fesm2022/ngwr-input-number.mjs.map +1 -0
  176. package/fesm2022/ngwr-input-otp.mjs +216 -0
  177. package/fesm2022/ngwr-input-otp.mjs.map +1 -0
  178. package/fesm2022/ngwr-input.mjs +183 -104
  179. package/fesm2022/ngwr-input.mjs.map +1 -1
  180. package/fesm2022/ngwr-keyboard.mjs +47 -0
  181. package/fesm2022/ngwr-keyboard.mjs.map +1 -0
  182. package/fesm2022/ngwr-knob.mjs +227 -0
  183. package/fesm2022/ngwr-knob.mjs.map +1 -0
  184. package/fesm2022/ngwr-layout.mjs +197 -0
  185. package/fesm2022/ngwr-layout.mjs.map +1 -0
  186. package/fesm2022/ngwr-lightbox.mjs +131 -0
  187. package/fesm2022/ngwr-lightbox.mjs.map +1 -0
  188. package/fesm2022/ngwr-line-chart.mjs +176 -0
  189. package/fesm2022/ngwr-line-chart.mjs.map +1 -0
  190. package/fesm2022/ngwr-list.mjs +132 -0
  191. package/fesm2022/ngwr-list.mjs.map +1 -0
  192. package/fesm2022/ngwr-loading-bar.mjs +160 -0
  193. package/fesm2022/ngwr-loading-bar.mjs.map +1 -0
  194. package/fesm2022/ngwr-marquee.mjs +224 -0
  195. package/fesm2022/ngwr-marquee.mjs.map +1 -0
  196. package/fesm2022/ngwr-media.mjs +132 -0
  197. package/fesm2022/ngwr-media.mjs.map +1 -0
  198. package/fesm2022/ngwr-mention.mjs +374 -0
  199. package/fesm2022/ngwr-mention.mjs.map +1 -0
  200. package/fesm2022/ngwr-meta.mjs +323 -0
  201. package/fesm2022/ngwr-meta.mjs.map +1 -0
  202. package/fesm2022/ngwr-meter-group.mjs +73 -0
  203. package/fesm2022/ngwr-meter-group.mjs.map +1 -0
  204. package/fesm2022/ngwr-overlay.mjs +145 -0
  205. package/fesm2022/ngwr-overlay.mjs.map +1 -0
  206. package/fesm2022/ngwr-page-header.mjs +53 -0
  207. package/fesm2022/ngwr-page-header.mjs.map +1 -0
  208. package/fesm2022/ngwr-pagination.mjs +152 -96
  209. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  210. package/fesm2022/ngwr-pipes.mjs +290 -11
  211. package/fesm2022/ngwr-pipes.mjs.map +1 -1
  212. package/fesm2022/ngwr-platform.mjs +63 -0
  213. package/fesm2022/ngwr-platform.mjs.map +1 -0
  214. package/fesm2022/ngwr-popconfirm.mjs +188 -0
  215. package/fesm2022/ngwr-popconfirm.mjs.map +1 -0
  216. package/fesm2022/ngwr-popover.mjs +365 -0
  217. package/fesm2022/ngwr-popover.mjs.map +1 -0
  218. package/fesm2022/ngwr-progress.mjs +47 -39
  219. package/fesm2022/ngwr-progress.mjs.map +1 -1
  220. package/fesm2022/ngwr-qr.mjs +160 -179
  221. package/fesm2022/ngwr-qr.mjs.map +1 -1
  222. package/fesm2022/ngwr-radio.mjs +204 -0
  223. package/fesm2022/ngwr-radio.mjs.map +1 -0
  224. package/fesm2022/ngwr-rating.mjs +180 -0
  225. package/fesm2022/ngwr-rating.mjs.map +1 -0
  226. package/fesm2022/ngwr-result.mjs +119 -0
  227. package/fesm2022/ngwr-result.mjs.map +1 -0
  228. package/fesm2022/ngwr-rotating-text.mjs +256 -0
  229. package/fesm2022/ngwr-rotating-text.mjs.map +1 -0
  230. package/fesm2022/ngwr-scramble-text.mjs +165 -0
  231. package/fesm2022/ngwr-scramble-text.mjs.map +1 -0
  232. package/fesm2022/ngwr-scroll.mjs +107 -0
  233. package/fesm2022/ngwr-scroll.mjs.map +1 -0
  234. package/fesm2022/ngwr-segmented.mjs +96 -0
  235. package/fesm2022/ngwr-segmented.mjs.map +1 -0
  236. package/fesm2022/ngwr-select.mjs +844 -309
  237. package/fesm2022/ngwr-select.mjs.map +1 -1
  238. package/fesm2022/ngwr-shiny-text.mjs +127 -0
  239. package/fesm2022/ngwr-shiny-text.mjs.map +1 -0
  240. package/fesm2022/ngwr-sidebar.mjs +134 -0
  241. package/fesm2022/ngwr-sidebar.mjs.map +1 -0
  242. package/fesm2022/ngwr-skeleton.mjs +59 -34
  243. package/fesm2022/ngwr-skeleton.mjs.map +1 -1
  244. package/fesm2022/ngwr-slider.mjs +234 -0
  245. package/fesm2022/ngwr-slider.mjs.map +1 -0
  246. package/fesm2022/ngwr-sparkline.mjs +104 -0
  247. package/fesm2022/ngwr-sparkline.mjs.map +1 -0
  248. package/fesm2022/ngwr-speed-dial.mjs +79 -0
  249. package/fesm2022/ngwr-speed-dial.mjs.map +1 -0
  250. package/fesm2022/ngwr-spinner.mjs +34 -28
  251. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  252. package/fesm2022/ngwr-splash-cursor.mjs +970 -0
  253. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -0
  254. package/fesm2022/ngwr-split-text.mjs +200 -0
  255. package/fesm2022/ngwr-split-text.mjs.map +1 -0
  256. package/fesm2022/ngwr-splitter.mjs +125 -0
  257. package/fesm2022/ngwr-splitter.mjs.map +1 -0
  258. package/fesm2022/ngwr-spotlight-card.mjs +138 -0
  259. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -0
  260. package/fesm2022/ngwr-squircle.mjs +320 -0
  261. package/fesm2022/ngwr-squircle.mjs.map +1 -0
  262. package/fesm2022/ngwr-star-border.mjs +72 -0
  263. package/fesm2022/ngwr-star-border.mjs.map +1 -0
  264. package/fesm2022/ngwr-statistic.mjs +220 -0
  265. package/fesm2022/ngwr-statistic.mjs.map +1 -0
  266. package/fesm2022/ngwr-stepper.mjs +186 -0
  267. package/fesm2022/ngwr-stepper.mjs.map +1 -0
  268. package/fesm2022/ngwr-storage.mjs +317 -0
  269. package/fesm2022/ngwr-storage.mjs.map +1 -0
  270. package/fesm2022/ngwr-switch.mjs +99 -0
  271. package/fesm2022/ngwr-switch.mjs.map +1 -0
  272. package/fesm2022/ngwr-table.mjs +217 -206
  273. package/fesm2022/ngwr-table.mjs.map +1 -1
  274. package/fesm2022/ngwr-tabs.mjs +217 -0
  275. package/fesm2022/ngwr-tabs.mjs.map +1 -0
  276. package/fesm2022/ngwr-textarea.mjs +106 -120
  277. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  278. package/fesm2022/ngwr-theme.mjs +152 -0
  279. package/fesm2022/ngwr-theme.mjs.map +1 -0
  280. package/fesm2022/ngwr-tilt-card.mjs +137 -0
  281. package/fesm2022/ngwr-tilt-card.mjs.map +1 -0
  282. package/fesm2022/ngwr-timeline.mjs +73 -0
  283. package/fesm2022/ngwr-timeline.mjs.map +1 -0
  284. package/fesm2022/ngwr-toast.mjs +446 -0
  285. package/fesm2022/ngwr-toast.mjs.map +1 -0
  286. package/fesm2022/ngwr-toolbar.mjs +46 -0
  287. package/fesm2022/ngwr-toolbar.mjs.map +1 -0
  288. package/fesm2022/ngwr-tree.mjs +483 -0
  289. package/fesm2022/ngwr-tree.mjs.map +1 -0
  290. package/fesm2022/ngwr-typewriter.mjs +229 -0
  291. package/fesm2022/ngwr-typewriter.mjs.map +1 -0
  292. package/fesm2022/ngwr-typography.mjs +79 -0
  293. package/fesm2022/ngwr-typography.mjs.map +1 -0
  294. package/fesm2022/ngwr-utils.mjs +535 -0
  295. package/fesm2022/ngwr-utils.mjs.map +1 -0
  296. package/fesm2022/ngwr-validators.mjs +214 -0
  297. package/fesm2022/ngwr-validators.mjs.map +1 -0
  298. package/fesm2022/ngwr-version.mjs +51 -0
  299. package/fesm2022/ngwr-version.mjs.map +1 -0
  300. package/fesm2022/ngwr-virtual-scroll.mjs +99 -0
  301. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -0
  302. package/fesm2022/ngwr-waves.mjs +356 -0
  303. package/fesm2022/ngwr-waves.mjs.map +1 -0
  304. package/fesm2022/ngwr-window.mjs +1141 -0
  305. package/fesm2022/ngwr-window.mjs.map +1 -0
  306. package/fesm2022/ngwr.mjs +0 -3
  307. package/fesm2022/ngwr.mjs.map +1 -1
  308. package/file-upload/styles/_index.scss +152 -0
  309. package/form/styles/_index.scss +85 -42
  310. package/gauge/styles/_index.scss +37 -0
  311. package/glitch-text/glitch-text.scss +1 -0
  312. package/glitch-text/styles/_index.scss +144 -0
  313. package/gradient-text/gradient-text.scss +1 -0
  314. package/gradient-text/styles/_index.scss +113 -0
  315. package/icon/styles/_index.scss +21 -15
  316. package/image-cropper/styles/_index.scss +114 -0
  317. package/input/styles/_index.scss +133 -93
  318. package/input-number/styles/_index.scss +75 -0
  319. package/input-otp/styles/_index.scss +53 -0
  320. package/keyboard/styles/_index.scss +55 -0
  321. package/knob/styles/_index.scss +54 -0
  322. package/layout/styles/_index.scss +65 -0
  323. package/lightbox/lightbox.scss +1 -0
  324. package/lightbox/styles/_index.scss +144 -0
  325. package/line-chart/styles/_index.scss +93 -0
  326. package/list/list.scss +1 -0
  327. package/list/styles/_index.scss +101 -0
  328. package/loading-bar/loading-bar.scss +1 -0
  329. package/loading-bar/styles/_index.scss +29 -0
  330. package/marquee/marquee.scss +1 -0
  331. package/marquee/styles/_index.scss +138 -0
  332. package/mention/styles/_index.scss +47 -0
  333. package/meter-group/styles/_index.scss +61 -0
  334. package/package.json +586 -104
  335. package/page-header/styles/_index.scss +78 -0
  336. package/pagination/styles/_index.scss +89 -34
  337. package/popconfirm/styles/_index.scss +32 -0
  338. package/popover/styles/_index.scss +99 -0
  339. package/progress/styles/_index.scss +29 -14
  340. package/qr/styles/_index.scss +6 -3
  341. package/radio/styles/_index.scss +111 -0
  342. package/rating/styles/_index.scss +63 -0
  343. package/result/styles/_index.scss +69 -0
  344. package/rotating-text/rotating-text.scss +1 -0
  345. package/rotating-text/styles/_index.scss +39 -0
  346. package/schematics/collection.json +37 -0
  347. package/schematics/component-style/index.js +49 -0
  348. package/{cdk/utils/index.d.ts → schematics/component-style/schema.js} +2 -8
  349. package/schematics/component-style/schema.json +20 -0
  350. package/schematics/icon-set/index.js +96 -0
  351. package/schematics/icon-set/schema.js +8 -0
  352. package/schematics/icon-set/schema.json +39 -0
  353. package/schematics/migrations/v7/index.js +187 -0
  354. package/schematics/migrations.json +10 -0
  355. package/schematics/ng-add/index.js +180 -0
  356. package/schematics/ng-add/schema.js +8 -0
  357. package/schematics/ng-add/schema.json +80 -0
  358. package/schematics/page/index.js +63 -0
  359. package/schematics/page/schema.js +8 -0
  360. package/schematics/page/schema.json +39 -0
  361. package/schematics/page/templates.js +198 -0
  362. package/schematics/provider/index.js +126 -0
  363. package/schematics/provider/schema.js +8 -0
  364. package/schematics/provider/schema.json +52 -0
  365. package/schematics/use/index.js +143 -0
  366. package/schematics/use/schema.js +8 -0
  367. package/schematics/use/schema.json +25 -0
  368. package/schematics/use/symbol-map.json +357 -0
  369. package/scramble-text/scramble-text.scss +1 -0
  370. package/scramble-text/styles/_index.scss +8 -0
  371. package/segmented/styles/_index.scss +92 -0
  372. package/select/styles/_index.scss +245 -159
  373. package/shiny-text/shiny-text.scss +1 -0
  374. package/shiny-text/styles/_index.scss +101 -0
  375. package/sidebar/styles/_index.scss +208 -0
  376. package/skeleton/styles/_index.scss +33 -33
  377. package/slider/styles/_index.scss +77 -0
  378. package/sparkline/styles/_index.scss +9 -0
  379. package/speed-dial/styles/_index.scss +158 -0
  380. package/spinner/styles/_index.scss +38 -22
  381. package/splash-cursor/splash-cursor.scss +1 -0
  382. package/splash-cursor/styles/_index.scss +27 -0
  383. package/split-text/split-text.scss +1 -0
  384. package/split-text/styles/_index.scss +22 -0
  385. package/splitter/styles/_index.scss +85 -0
  386. package/spotlight-card/spotlight-card.scss +1 -0
  387. package/spotlight-card/styles/_index.scss +43 -0
  388. package/squircle/styles/_index.scss +34 -0
  389. package/star-border/star-border.scss +1 -0
  390. package/star-border/styles/_index.scss +118 -0
  391. package/statistic/styles/_index.scss +54 -0
  392. package/stepper/styles/_index.scss +162 -0
  393. package/styles/_animations.scss +198 -0
  394. package/styles/_breakpoints.scss +75 -0
  395. package/styles/_grid.scss +71 -0
  396. package/styles/_reset.scss +123 -0
  397. package/styles/_typography.scss +122 -0
  398. package/styles.scss +103 -13
  399. package/switch/styles/_index.scss +82 -0
  400. package/table/styles/_index.scss +255 -4
  401. package/tabs/styles/_index.scss +71 -0
  402. package/textarea/styles/_index.scss +47 -56
  403. package/theme/styles/_colors.scss +83 -0
  404. package/theme/styles/_dark.scss +85 -0
  405. package/theme/styles/_focus.scss +93 -0
  406. package/theme/styles/_index.scss +5 -0
  407. package/theme/styles/_mixins.scss +57 -0
  408. package/theme/styles/_variables.scss +118 -0
  409. package/tilt-card/styles/_index.scss +40 -0
  410. package/tilt-card/tilt-card.scss +1 -0
  411. package/timeline/styles/_index.scss +127 -0
  412. package/toast/styles/_index.scss +263 -0
  413. package/toolbar/styles/_index.scss +65 -0
  414. package/tree/styles/_index.scss +271 -0
  415. package/types/ngwr-affix.d.ts +43 -0
  416. package/types/ngwr-alert.d.ts +68 -0
  417. package/types/ngwr-anchor.d.ts +53 -0
  418. package/types/ngwr-aurora.d.ts +52 -0
  419. package/types/ngwr-avatar.d.ts +90 -0
  420. package/types/ngwr-back-top.d.ts +37 -0
  421. package/types/ngwr-badge.d.ts +158 -0
  422. package/types/ngwr-bar-chart.d.ts +47 -0
  423. package/types/ngwr-blur-text.d.ts +62 -0
  424. package/types/ngwr-border-glow.d.ts +66 -0
  425. package/types/ngwr-breadcrumbs.d.ts +61 -0
  426. package/types/ngwr-burger.d.ts +36 -0
  427. package/types/ngwr-button.d.ts +176 -0
  428. package/types/ngwr-calendar-heatmap.d.ts +58 -0
  429. package/types/ngwr-calendar.d.ts +116 -0
  430. package/types/ngwr-card.d.ts +50 -0
  431. package/types/ngwr-carousel.d.ts +57 -0
  432. package/types/ngwr-cascader.d.ts +107 -0
  433. package/types/ngwr-checkbox.d.ts +139 -0
  434. package/types/ngwr-circular-text.d.ts +49 -0
  435. package/types/ngwr-click-spark.d.ts +52 -0
  436. package/types/ngwr-clipboard.d.ts +53 -0
  437. package/types/ngwr-collapse.d.ts +139 -0
  438. package/types/ngwr-color-picker.d.ts +302 -0
  439. package/types/ngwr-command-palette.d.ts +113 -0
  440. package/types/ngwr-compare.d.ts +55 -0
  441. package/types/ngwr-confetti.d.ts +70 -0
  442. package/types/ngwr-context-menu.d.ts +207 -0
  443. package/types/ngwr-cookie.d.ts +60 -0
  444. package/types/ngwr-counter.d.ts +182 -0
  445. package/types/ngwr-date-adapter-fns.d.ts +73 -0
  446. package/types/ngwr-date-adapter-luxon.d.ts +73 -0
  447. package/types/ngwr-date-adapter.d.ts +198 -0
  448. package/types/ngwr-date-picker.d.ts +117 -0
  449. package/types/ngwr-decrypt-text.d.ts +85 -0
  450. package/types/ngwr-density.d.ts +97 -0
  451. package/types/ngwr-descriptions.d.ts +41 -0
  452. package/types/ngwr-dialog.d.ts +210 -0
  453. package/types/ngwr-directives.d.ts +125 -0
  454. package/types/ngwr-divider.d.ts +73 -0
  455. package/types/ngwr-donut-chart.d.ts +53 -0
  456. package/types/ngwr-drag-drop.d.ts +83 -0
  457. package/types/ngwr-drawer.d.ts +155 -0
  458. package/types/ngwr-dropdown.d.ts +124 -0
  459. package/types/ngwr-empty.d.ts +38 -0
  460. package/types/ngwr-falling-text.d.ts +63 -0
  461. package/types/ngwr-file-upload.d.ts +94 -0
  462. package/types/ngwr-form.d.ts +95 -0
  463. package/types/ngwr-fuzzy-text.d.ts +74 -0
  464. package/types/ngwr-gauge.d.ts +39 -0
  465. package/types/ngwr-glitch-text.d.ts +31 -0
  466. package/types/ngwr-gradient-text.d.ts +46 -0
  467. package/types/ngwr-hotkey.d.ts +142 -0
  468. package/types/ngwr-i18n-en.d.ts +18 -0
  469. package/types/ngwr-i18n-ru.d.ts +6 -0
  470. package/types/ngwr-i18n.d.ts +336 -0
  471. package/types/ngwr-icon-adapters-feather.d.ts +44 -0
  472. package/types/ngwr-icon-adapters-lucide.d.ts +54 -0
  473. package/types/ngwr-icon.d.ts +180 -0
  474. package/types/ngwr-image-cropper.d.ts +110 -0
  475. package/types/ngwr-input-number.d.ts +77 -0
  476. package/types/ngwr-input-otp.d.ts +78 -0
  477. package/types/ngwr-input.d.ts +131 -0
  478. package/types/ngwr-keyboard.d.ts +34 -0
  479. package/types/ngwr-knob.d.ts +77 -0
  480. package/types/ngwr-layout.d.ts +89 -0
  481. package/types/ngwr-lightbox.d.ts +50 -0
  482. package/types/ngwr-line-chart.d.ts +90 -0
  483. package/types/ngwr-list.d.ts +71 -0
  484. package/types/ngwr-loading-bar.d.ts +79 -0
  485. package/types/ngwr-marquee.d.ts +95 -0
  486. package/types/ngwr-media.d.ts +74 -0
  487. package/types/ngwr-mention.d.ts +110 -0
  488. package/types/ngwr-meta.d.ts +188 -0
  489. package/types/ngwr-meter-group.d.ts +57 -0
  490. package/types/ngwr-overlay.d.ts +110 -0
  491. package/types/ngwr-page-header.d.ts +35 -0
  492. package/types/ngwr-pagination.d.ts +119 -0
  493. package/types/ngwr-pipes.d.ts +177 -0
  494. package/types/ngwr-platform.d.ts +38 -0
  495. package/types/ngwr-popconfirm.d.ts +79 -0
  496. package/types/ngwr-popover.d.ts +90 -0
  497. package/types/ngwr-progress.d.ts +33 -0
  498. package/types/ngwr-qr.d.ts +56 -0
  499. package/types/ngwr-radio.d.ts +120 -0
  500. package/types/ngwr-rating.d.ts +62 -0
  501. package/types/ngwr-result.d.ts +64 -0
  502. package/types/ngwr-rotating-text.d.ts +72 -0
  503. package/types/ngwr-scramble-text.d.ts +49 -0
  504. package/types/ngwr-scroll.d.ts +65 -0
  505. package/types/ngwr-segmented.d.ts +65 -0
  506. package/types/ngwr-select.d.ts +413 -0
  507. package/types/ngwr-shiny-text.d.ts +70 -0
  508. package/types/ngwr-sidebar.d.ts +83 -0
  509. package/types/ngwr-skeleton.d.ts +41 -0
  510. package/types/ngwr-slider.d.ts +86 -0
  511. package/types/ngwr-sparkline.d.ts +48 -0
  512. package/types/ngwr-speed-dial.d.ts +51 -0
  513. package/types/ngwr-spinner.d.ts +41 -0
  514. package/types/ngwr-splash-cursor.d.ts +94 -0
  515. package/types/ngwr-split-text.d.ts +83 -0
  516. package/types/ngwr-splitter.d.ts +52 -0
  517. package/types/ngwr-spotlight-card.d.ts +71 -0
  518. package/types/ngwr-squircle.d.ts +132 -0
  519. package/types/ngwr-star-border.d.ts +40 -0
  520. package/types/ngwr-statistic.d.ts +88 -0
  521. package/types/ngwr-stepper.d.ts +99 -0
  522. package/types/ngwr-storage.d.ts +178 -0
  523. package/types/ngwr-switch.d.ts +39 -0
  524. package/types/ngwr-table.d.ts +237 -0
  525. package/types/ngwr-tabs.d.ts +125 -0
  526. package/types/ngwr-textarea.d.ts +60 -0
  527. package/types/ngwr-theme.d.ts +124 -0
  528. package/types/ngwr-tilt-card.d.ts +63 -0
  529. package/types/ngwr-timeline.d.ts +40 -0
  530. package/types/ngwr-toast.d.ts +230 -0
  531. package/types/ngwr-toolbar.d.ts +30 -0
  532. package/types/ngwr-tree.d.ts +150 -0
  533. package/types/ngwr-typewriter.d.ts +84 -0
  534. package/types/ngwr-typography.d.ts +56 -0
  535. package/types/ngwr-utils.d.ts +447 -0
  536. package/types/ngwr-validators.d.ts +70 -0
  537. package/types/ngwr-version.d.ts +44 -0
  538. package/types/ngwr-virtual-scroll.d.ts +64 -0
  539. package/types/ngwr-waves.d.ts +71 -0
  540. package/types/ngwr-window.d.ts +437 -0
  541. package/typewriter/styles/_index.scss +33 -0
  542. package/typewriter/typewriter.scss +1 -0
  543. package/typography/styles/_index.scss +211 -0
  544. package/virtual-scroll/styles/_index.scss +27 -0
  545. package/virtual-scroll/virtual-scroll.scss +1 -0
  546. package/waves/styles/_index.scss +24 -0
  547. package/waves/waves.scss +1 -0
  548. package/window/styles/_index.scss +430 -0
  549. package/alert/index.d.ts +0 -32
  550. package/alert/styles/theming.scss +0 -26
  551. package/alert/styles/vars.scss +0 -11
  552. package/avatar/index.d.ts +0 -30
  553. package/button/index.d.ts +0 -45
  554. package/button/styles/vars.scss +0 -13
  555. package/cdk/index.d.ts +0 -24
  556. package/cdk/rxjs/index.d.ts +0 -40
  557. package/cdk/types/index.d.ts +0 -27
  558. package/checkbox/index.d.ts +0 -31
  559. package/checkbox/styles/vars.scss +0 -16
  560. package/dialog/index.d.ts +0 -193
  561. package/dialog/styles/vars.scss +0 -7
  562. package/divider/index.d.ts +0 -16
  563. package/dropdown/index.d.ts +0 -68
  564. package/dropdown/styles/vars.scss +0 -18
  565. package/fesm2022/ngwr-cdk-rxjs.mjs +0 -53
  566. package/fesm2022/ngwr-cdk-rxjs.mjs.map +0 -1
  567. package/fesm2022/ngwr-cdk-types.mjs +0 -44
  568. package/fesm2022/ngwr-cdk-types.mjs.map +0 -1
  569. package/fesm2022/ngwr-cdk-utils.mjs +0 -30
  570. package/fesm2022/ngwr-cdk-utils.mjs.map +0 -1
  571. package/fesm2022/ngwr-cdk.mjs +0 -46
  572. package/fesm2022/ngwr-cdk.mjs.map +0 -1
  573. package/fesm2022/ngwr-tag.mjs +0 -87
  574. package/fesm2022/ngwr-tag.mjs.map +0 -1
  575. package/form/index.d.ts +0 -28
  576. package/icon/index.d.ts +0 -830
  577. package/icon/styles/vars.scss +0 -3
  578. package/input/index.d.ts +0 -43
  579. package/input/styles/vars.scss +0 -17
  580. package/pagination/index.d.ts +0 -34
  581. package/pagination/styles/vars.scss +0 -14
  582. package/pipes/index.d.ts +0 -17
  583. package/progress/index.d.ts +0 -13
  584. package/progress/styles/theming.scss +0 -8
  585. package/progress/styles/vars.scss +0 -6
  586. package/qr/index.d.ts +0 -127
  587. package/select/index.d.ts +0 -121
  588. package/select/styles/vars.scss +0 -32
  589. package/skeleton/index.d.ts +0 -13
  590. package/spinner/index.d.ts +0 -23
  591. package/styles/animations.scss +0 -92
  592. package/styles/cdk.scss +0 -5
  593. package/styles/colors.scss +0 -72
  594. package/styles/grid.scss +0 -99
  595. package/styles/maps.scss +0 -31
  596. package/styles/reset.scss +0 -112
  597. package/styles/variables.scss +0 -72
  598. package/table/index.d.ts +0 -101
  599. package/table/styles/table-filter.scss +0 -202
  600. package/table/styles/table-sort.scss +0 -47
  601. package/table/styles/table.scss +0 -232
  602. package/table/styles/vars.scss +0 -21
  603. package/tag/index.d.ts +0 -24
  604. package/tag/styles/_index.scss +0 -32
  605. package/tag/styles/theming.scss +0 -21
  606. package/tag/styles/vars.scss +0 -12
  607. package/textarea/index.d.ts +0 -47
  608. package/textarea/styles/vars.scss +0 -17
  609. /package/{index.d.ts → types/ngwr.d.ts} +0 -0
@@ -0,0 +1,227 @@
1
+ import { coerceNumberProperty, coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import * as i0 from '@angular/core';
3
+ import { input, signal, computed, inject, ElementRef, forwardRef, ViewEncapsulation, Component } from '@angular/core';
4
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
+ import { clamp, noop } from 'ngwr/utils';
6
+
7
+ /**
8
+ * @license
9
+ *
10
+ * Use of this source code is governed by an MIT-style license that can be
11
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
12
+ */
13
+ const ARC_START = -135; // 7 o'clock
14
+ const ARC_END = 135; // 5 o'clock — 270° sweep total
15
+ const ARC_SWEEP = ARC_END - ARC_START;
16
+ /**
17
+ * Radial dial input. CVA-backed `number | null` value clamped to
18
+ * `[min, max]`. Drag the indicator around the dial or use ←→ / ↑↓ to step.
19
+ *
20
+ * @example
21
+ * ```html
22
+ * <wr-knob [(ngModel)]="value" [min]="0" [max]="100" />
23
+ * <wr-knob [(ngModel)]="vol" suffix="%" valueColor="var(--wr-color-success)" />
24
+ * ```
25
+ *
26
+ * @see https://ngwr.dev/components/knob
27
+ */
28
+ class WrKnob {
29
+ /** Minimum allowed value. @default 0 */
30
+ min = input(0, { ...(ngDevMode ? { debugName: "min" } : /* istanbul ignore next */ {}), transform: (v) => coerceNumberProperty(v, 0) });
31
+ /** Maximum allowed value. @default 100 */
32
+ max = input(100, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), transform: (v) => coerceNumberProperty(v, 100) });
33
+ /** Step granularity. @default 1 */
34
+ step = input(1, { ...(ngDevMode ? { debugName: "step" } : /* istanbul ignore next */ {}), transform: (v) => Math.max(0.0001, coerceNumberProperty(v, 1)) });
35
+ /** Dial diameter in CSS pixels. @default 120 */
36
+ size = input(120, { ...(ngDevMode ? { debugName: "size" } : /* istanbul ignore next */ {}), transform: (v) => Math.max(32, coerceNumberProperty(v, 120)) });
37
+ /** Stroke width of the dial arc, in CSS pixels. @default 8 */
38
+ strokeWidth = input(8, { ...(ngDevMode ? { debugName: "strokeWidth" } : /* istanbul ignore next */ {}), transform: (v) => Math.max(1, coerceNumberProperty(v, 8)) });
39
+ /** Track (unfilled) color. @default rgba(--wr-color-light, 0.6) */
40
+ trackColor = input('rgba(var(--wr-color-light-rgb), 0.6)', /* @ts-ignore */
41
+ ...(ngDevMode ? [{ debugName: "trackColor" }] : /* istanbul ignore next */ []));
42
+ /** Filled-arc color. @default var(--wr-color-primary) */
43
+ valueColor = input('var(--wr-color-primary)', /* @ts-ignore */
44
+ ...(ngDevMode ? [{ debugName: "valueColor" }] : /* istanbul ignore next */ []));
45
+ /** Show the value text in the center. @default true */
46
+ showValue = input(true, { ...(ngDevMode ? { debugName: "showValue" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
47
+ /** Optional suffix appended to the center text (e.g. `'%'`). */
48
+ suffix = input('', /* @ts-ignore */
49
+ ...(ngDevMode ? [{ debugName: "suffix" }] : /* istanbul ignore next */ []));
50
+ /** Read-only — disables interaction but keeps the visual. @default false */
51
+ readonly = input(false, { ...(ngDevMode ? { debugName: "readonly" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
52
+ /** Disable interaction. @default false */
53
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
54
+ value = signal(0, /* @ts-ignore */
55
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
56
+ disabledFromCva = signal(false, /* @ts-ignore */
57
+ ...(ngDevMode ? [{ debugName: "disabledFromCva" }] : /* istanbul ignore next */ []));
58
+ dragging = false;
59
+ effectiveDisabled = computed(() => this.disabled() || this.disabledFromCva(), /* @ts-ignore */
60
+ ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
61
+ interactive = computed(() => !this.effectiveDisabled() && !this.readonly(), /* @ts-ignore */
62
+ ...(ngDevMode ? [{ debugName: "interactive" }] : /* istanbul ignore next */ []));
63
+ classes = computed(() => {
64
+ const parts = ['wr-knob'];
65
+ if (this.effectiveDisabled())
66
+ parts.push('wr-knob--disabled');
67
+ return parts.join(' ');
68
+ }, /* @ts-ignore */
69
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
70
+ // Geometry — drawn into a 100×100 viewBox, scaled by `size`.
71
+ cx = 50;
72
+ cy = 50;
73
+ radius = computed(() => 50 - this.strokeWidth() / 2 - 0.5, /* @ts-ignore */
74
+ ...(ngDevMode ? [{ debugName: "radius" }] : /* istanbul ignore next */ []));
75
+ /** Ratio of the filled arc — `0` at min, `1` at max. */
76
+ ratio = computed(() => {
77
+ const range = this.max() - this.min();
78
+ if (range <= 0)
79
+ return 0;
80
+ return clamp((this.value() - this.min()) / range, 0, 1);
81
+ }, /* @ts-ignore */
82
+ ...(ngDevMode ? [{ debugName: "ratio" }] : /* istanbul ignore next */ []));
83
+ /** SVG path `d` for the background arc. */
84
+ trackPath = computed(() => this.arcPath(ARC_START, ARC_END), /* @ts-ignore */
85
+ ...(ngDevMode ? [{ debugName: "trackPath" }] : /* istanbul ignore next */ []));
86
+ /** SVG path `d` for the filled arc. */
87
+ valuePath = computed(() => {
88
+ const end = ARC_START + ARC_SWEEP * this.ratio();
89
+ return this.arcPath(ARC_START, end);
90
+ }, /* @ts-ignore */
91
+ ...(ngDevMode ? [{ debugName: "valuePath" }] : /* istanbul ignore next */ []));
92
+ /** Position of the handle dot — `{ x, y }` in viewBox units. */
93
+ handlePos = computed(() => {
94
+ const angle = ARC_START + ARC_SWEEP * this.ratio();
95
+ const rad = (angle * Math.PI) / 180;
96
+ return {
97
+ x: this.cx + this.radius() * Math.sin(rad),
98
+ y: this.cy - this.radius() * Math.cos(rad),
99
+ };
100
+ }, /* @ts-ignore */
101
+ ...(ngDevMode ? [{ debugName: "handlePos" }] : /* istanbul ignore next */ []));
102
+ host = inject(ElementRef);
103
+ // ControlValueAccessor
104
+ onChange = noop;
105
+ onTouched = noop;
106
+ writeValue(value) {
107
+ this.value.set(value === null || value === undefined ? this.min() : clamp(Number(value), this.min(), this.max()));
108
+ }
109
+ registerOnChange(fn) {
110
+ this.onChange = fn;
111
+ }
112
+ registerOnTouched(fn) {
113
+ this.onTouched = fn;
114
+ }
115
+ setDisabledState(isDisabled) {
116
+ this.disabledFromCva.set(coerceBooleanProperty(isDisabled));
117
+ }
118
+ // Pointer / keyboard
119
+ onPointerDown(event) {
120
+ if (!this.interactive())
121
+ return;
122
+ event.preventDefault();
123
+ this.dragging = true;
124
+ event.currentTarget.setPointerCapture(event.pointerId);
125
+ this.updateFromPointer(event);
126
+ }
127
+ onPointerMove(event) {
128
+ if (!this.dragging)
129
+ return;
130
+ this.updateFromPointer(event);
131
+ }
132
+ onPointerUp(event) {
133
+ if (!this.dragging)
134
+ return;
135
+ this.dragging = false;
136
+ event.currentTarget.releasePointerCapture(event.pointerId);
137
+ this.onTouched();
138
+ }
139
+ onKeydown(event) {
140
+ if (!this.interactive())
141
+ return;
142
+ const step = event.shiftKey ? this.step() * 10 : this.step();
143
+ let next;
144
+ switch (event.key) {
145
+ case 'ArrowRight':
146
+ case 'ArrowUp':
147
+ next = this.value() + step;
148
+ break;
149
+ case 'ArrowLeft':
150
+ case 'ArrowDown':
151
+ next = this.value() - step;
152
+ break;
153
+ case 'Home':
154
+ next = this.min();
155
+ break;
156
+ case 'End':
157
+ next = this.max();
158
+ break;
159
+ default:
160
+ return;
161
+ }
162
+ event.preventDefault();
163
+ this.commit(clamp(next, this.min(), this.max()));
164
+ }
165
+ // Internals
166
+ updateFromPointer(event) {
167
+ const rect = this.host.nativeElement.getBoundingClientRect();
168
+ const dx = event.clientX - (rect.left + rect.width / 2);
169
+ const dy = event.clientY - (rect.top + rect.height / 2);
170
+ // Angle measured from 12 o'clock, clockwise.
171
+ let angle = (Math.atan2(dx, -dy) * 180) / Math.PI;
172
+ // Map [-180, 180] into the dial's arc range, clamping outside it.
173
+ if (angle < ARC_START)
174
+ angle = angle + 360 > ARC_END ? ARC_START : angle + 360;
175
+ angle = clamp(angle, ARC_START, ARC_END);
176
+ const ratio = (angle - ARC_START) / ARC_SWEEP;
177
+ const range = this.max() - this.min();
178
+ const raw = this.min() + ratio * range;
179
+ const stepped = Math.round(raw / this.step()) * this.step();
180
+ this.commit(clamp(stepped, this.min(), this.max()));
181
+ }
182
+ commit(next) {
183
+ if (next === this.value())
184
+ return;
185
+ this.value.set(next);
186
+ this.onChange(next);
187
+ }
188
+ // Arc helper
189
+ arcPath(startDeg, endDeg) {
190
+ const r = this.radius();
191
+ const s = (startDeg * Math.PI) / 180;
192
+ const e = (endDeg * Math.PI) / 180;
193
+ const sx = this.cx + r * Math.sin(s);
194
+ const sy = this.cy - r * Math.cos(s);
195
+ const ex = this.cx + r * Math.sin(e);
196
+ const ey = this.cy - r * Math.cos(e);
197
+ const largeArc = endDeg - startDeg > 180 ? 1 : 0;
198
+ return `M ${sx} ${sy} A ${r} ${r} 0 ${largeArc} 1 ${ex} ${ey}`;
199
+ }
200
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrKnob, deps: [], target: i0.ɵɵFactoryTarget.Component });
201
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: WrKnob, isStandalone: true, selector: "wr-knob", inputs: { min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, strokeWidth: { classPropertyName: "strokeWidth", publicName: "strokeWidth", isSignal: true, isRequired: false, transformFunction: null }, trackColor: { classPropertyName: "trackColor", publicName: "trackColor", isSignal: true, isRequired: false, transformFunction: null }, valueColor: { classPropertyName: "valueColor", publicName: "valueColor", isSignal: true, isRequired: false, transformFunction: null }, showValue: { classPropertyName: "showValue", publicName: "showValue", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, providers: [
202
+ {
203
+ provide: NG_VALUE_ACCESSOR,
204
+ // eslint-disable-next-line @angular-eslint/no-forward-ref
205
+ useExisting: forwardRef(() => WrKnob),
206
+ multi: true,
207
+ },
208
+ ], ngImport: i0, template: "<div\n class=\"wr-knob__surface\"\n role=\"slider\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-disabled]=\"effectiveDisabled() || null\"\n [attr.tabindex]=\"interactive() ? 0 : -1\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (keydown)=\"onKeydown($event)\"\n>\n <svg viewBox=\"0 0 100 100\" aria-hidden=\"true\">\n <path\n class=\"wr-knob__track\"\n [attr.d]=\"trackPath()\"\n [attr.stroke]=\"trackColor()\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n stroke-linecap=\"round\"\n />\n <path\n class=\"wr-knob__value\"\n [attr.d]=\"valuePath()\"\n [attr.stroke]=\"valueColor()\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n stroke-linecap=\"round\"\n />\n <circle\n class=\"wr-knob__handle\"\n [attr.cx]=\"handlePos().x\"\n [attr.cy]=\"handlePos().y\"\n [attr.r]=\"strokeWidth() / 2\"\n [attr.fill]=\"valueColor()\"\n />\n </svg>\n @if (showValue()) {\n <div class=\"wr-knob__text\">\n {{ value() }}<span class=\"wr-knob__suffix\">{{ suffix() }}</span>\n </div>\n }\n</div>\n", encapsulation: i0.ViewEncapsulation.None });
209
+ }
210
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrKnob, decorators: [{
211
+ type: Component,
212
+ args: [{ selector: 'wr-knob', encapsulation: ViewEncapsulation.None, host: { '[class]': 'classes()' }, providers: [
213
+ {
214
+ provide: NG_VALUE_ACCESSOR,
215
+ // eslint-disable-next-line @angular-eslint/no-forward-ref
216
+ useExisting: forwardRef(() => WrKnob),
217
+ multi: true,
218
+ },
219
+ ], template: "<div\n class=\"wr-knob__surface\"\n role=\"slider\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-disabled]=\"effectiveDisabled() || null\"\n [attr.tabindex]=\"interactive() ? 0 : -1\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (keydown)=\"onKeydown($event)\"\n>\n <svg viewBox=\"0 0 100 100\" aria-hidden=\"true\">\n <path\n class=\"wr-knob__track\"\n [attr.d]=\"trackPath()\"\n [attr.stroke]=\"trackColor()\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n stroke-linecap=\"round\"\n />\n <path\n class=\"wr-knob__value\"\n [attr.d]=\"valuePath()\"\n [attr.stroke]=\"valueColor()\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n stroke-linecap=\"round\"\n />\n <circle\n class=\"wr-knob__handle\"\n [attr.cx]=\"handlePos().x\"\n [attr.cy]=\"handlePos().y\"\n [attr.r]=\"strokeWidth() / 2\"\n [attr.fill]=\"valueColor()\"\n />\n </svg>\n @if (showValue()) {\n <div class=\"wr-knob__text\">\n {{ value() }}<span class=\"wr-knob__suffix\">{{ suffix() }}</span>\n </div>\n }\n</div>\n" }]
220
+ }], propDecorators: { min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], strokeWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "strokeWidth", required: false }] }], trackColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "trackColor", required: false }] }], valueColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueColor", required: false }] }], showValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "showValue", required: false }] }], suffix: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffix", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
221
+
222
+ /**
223
+ * Generated bundle index. Do not edit.
224
+ */
225
+
226
+ export { WrKnob };
227
+ //# sourceMappingURL=ngwr-knob.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngwr-knob.mjs","sources":["../../../projects/lib/knob/knob.ts","../../../projects/lib/knob/knob.html","../../../projects/lib/knob/ngwr-knob.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { Component, ElementRef, ViewEncapsulation, computed, forwardRef, inject, input, signal } from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { clamp, noop } from 'ngwr/utils';\n\nconst ARC_START = -135; // 7 o'clock\nconst ARC_END = 135; // 5 o'clock — 270° sweep total\nconst ARC_SWEEP = ARC_END - ARC_START;\n\n/**\n * Radial dial input. CVA-backed `number | null` value clamped to\n * `[min, max]`. Drag the indicator around the dial or use ←→ / ↑↓ to step.\n *\n * @example\n * ```html\n * <wr-knob [(ngModel)]=\"value\" [min]=\"0\" [max]=\"100\" />\n * <wr-knob [(ngModel)]=\"vol\" suffix=\"%\" valueColor=\"var(--wr-color-success)\" />\n * ```\n *\n * @see https://ngwr.dev/components/knob\n */\n@Component({\n selector: 'wr-knob',\n templateUrl: './knob.html',\n encapsulation: ViewEncapsulation.None,\n host: { '[class]': 'classes()' },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n // eslint-disable-next-line @angular-eslint/no-forward-ref\n useExisting: forwardRef(() => WrKnob),\n multi: true,\n },\n ],\n})\nexport class WrKnob implements ControlValueAccessor {\n /** Minimum allowed value. @default 0 */\n readonly min = input(0, { transform: (v: unknown): number => coerceNumberProperty(v, 0) });\n\n /** Maximum allowed value. @default 100 */\n readonly max = input(100, { transform: (v: unknown): number => coerceNumberProperty(v, 100) });\n\n /** Step granularity. @default 1 */\n readonly step = input(1, { transform: (v: unknown): number => Math.max(0.0001, coerceNumberProperty(v, 1)) });\n\n /** Dial diameter in CSS pixels. @default 120 */\n readonly size = input(120, { transform: (v: unknown): number => Math.max(32, coerceNumberProperty(v, 120)) });\n\n /** Stroke width of the dial arc, in CSS pixels. @default 8 */\n readonly strokeWidth = input(8, {\n transform: (v: unknown): number => Math.max(1, coerceNumberProperty(v, 8)),\n });\n\n /** Track (unfilled) color. @default rgba(--wr-color-light, 0.6) */\n readonly trackColor = input<string>('rgba(var(--wr-color-light-rgb), 0.6)');\n\n /** Filled-arc color. @default var(--wr-color-primary) */\n readonly valueColor = input<string>('var(--wr-color-primary)');\n\n /** Show the value text in the center. @default true */\n readonly showValue = input(true, { transform: coerceBooleanProperty });\n\n /** Optional suffix appended to the center text (e.g. `'%'`). */\n readonly suffix = input<string>('');\n\n /** Read-only — disables interaction but keeps the visual. @default false */\n readonly readonly = input(false, { transform: coerceBooleanProperty });\n\n /** Disable interaction. @default false */\n readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n protected readonly value = signal<number>(0);\n private readonly disabledFromCva = signal(false);\n private dragging = false;\n\n protected readonly effectiveDisabled = computed(() => this.disabled() || this.disabledFromCva());\n protected readonly interactive = computed(() => !this.effectiveDisabled() && !this.readonly());\n\n protected readonly classes = computed(() => {\n const parts = ['wr-knob'];\n if (this.effectiveDisabled()) parts.push('wr-knob--disabled');\n return parts.join(' ');\n });\n\n // Geometry — drawn into a 100×100 viewBox, scaled by `size`.\n protected readonly cx = 50;\n protected readonly cy = 50;\n protected readonly radius = computed(() => 50 - this.strokeWidth() / 2 - 0.5);\n\n /** Ratio of the filled arc — `0` at min, `1` at max. */\n protected readonly ratio = computed(() => {\n const range = this.max() - this.min();\n if (range <= 0) return 0;\n return clamp((this.value() - this.min()) / range, 0, 1);\n });\n\n /** SVG path `d` for the background arc. */\n protected readonly trackPath = computed(() => this.arcPath(ARC_START, ARC_END));\n\n /** SVG path `d` for the filled arc. */\n protected readonly valuePath = computed(() => {\n const end = ARC_START + ARC_SWEEP * this.ratio();\n return this.arcPath(ARC_START, end);\n });\n\n /** Position of the handle dot — `{ x, y }` in viewBox units. */\n protected readonly handlePos = computed(() => {\n const angle = ARC_START + ARC_SWEEP * this.ratio();\n const rad = (angle * Math.PI) / 180;\n return {\n x: this.cx + this.radius() * Math.sin(rad),\n y: this.cy - this.radius() * Math.cos(rad),\n };\n });\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n // ControlValueAccessor\n\n private onChange: (value: number | null) => void = noop;\n private onTouched: () => void = noop;\n\n writeValue(value: number | null): void {\n this.value.set(value === null || value === undefined ? this.min() : clamp(Number(value), this.min(), this.max()));\n }\n\n registerOnChange(fn: (value: number | null) => 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 }\n\n // Pointer / keyboard\n\n protected onPointerDown(event: PointerEvent): void {\n if (!this.interactive()) return;\n event.preventDefault();\n this.dragging = true;\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\n this.updateFromPointer(event);\n }\n\n protected onPointerMove(event: PointerEvent): void {\n if (!this.dragging) return;\n this.updateFromPointer(event);\n }\n\n protected onPointerUp(event: PointerEvent): void {\n if (!this.dragging) return;\n this.dragging = false;\n (event.currentTarget as HTMLElement).releasePointerCapture(event.pointerId);\n this.onTouched();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (!this.interactive()) return;\n const step = event.shiftKey ? this.step() * 10 : this.step();\n let next: number | null;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = this.value() + step;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n next = this.value() - step;\n break;\n case 'Home':\n next = this.min();\n break;\n case 'End':\n next = this.max();\n break;\n default:\n return;\n }\n event.preventDefault();\n this.commit(clamp(next, this.min(), this.max()));\n }\n\n // Internals\n\n private updateFromPointer(event: PointerEvent): void {\n const rect = this.host.nativeElement.getBoundingClientRect();\n const dx = event.clientX - (rect.left + rect.width / 2);\n const dy = event.clientY - (rect.top + rect.height / 2);\n // Angle measured from 12 o'clock, clockwise.\n let angle = (Math.atan2(dx, -dy) * 180) / Math.PI;\n // Map [-180, 180] into the dial's arc range, clamping outside it.\n if (angle < ARC_START) angle = angle + 360 > ARC_END ? ARC_START : angle + 360;\n angle = clamp(angle, ARC_START, ARC_END);\n const ratio = (angle - ARC_START) / ARC_SWEEP;\n const range = this.max() - this.min();\n const raw = this.min() + ratio * range;\n const stepped = Math.round(raw / this.step()) * this.step();\n this.commit(clamp(stepped, this.min(), this.max()));\n }\n\n private commit(next: number): void {\n if (next === this.value()) return;\n this.value.set(next);\n this.onChange(next);\n }\n\n // Arc helper\n\n private arcPath(startDeg: number, endDeg: number): string {\n const r = this.radius();\n const s = (startDeg * Math.PI) / 180;\n const e = (endDeg * Math.PI) / 180;\n const sx = this.cx + r * Math.sin(s);\n const sy = this.cy - r * Math.cos(s);\n const ex = this.cx + r * Math.sin(e);\n const ey = this.cy - r * Math.cos(e);\n const largeArc = endDeg - startDeg > 180 ? 1 : 0;\n return `M ${sx} ${sy} A ${r} ${r} 0 ${largeArc} 1 ${ex} ${ey}`;\n }\n}\n","<div\n class=\"wr-knob__surface\"\n role=\"slider\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-disabled]=\"effectiveDisabled() || null\"\n [attr.tabindex]=\"interactive() ? 0 : -1\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (keydown)=\"onKeydown($event)\"\n>\n <svg viewBox=\"0 0 100 100\" aria-hidden=\"true\">\n <path\n class=\"wr-knob__track\"\n [attr.d]=\"trackPath()\"\n [attr.stroke]=\"trackColor()\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n stroke-linecap=\"round\"\n />\n <path\n class=\"wr-knob__value\"\n [attr.d]=\"valuePath()\"\n [attr.stroke]=\"valueColor()\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n stroke-linecap=\"round\"\n />\n <circle\n class=\"wr-knob__handle\"\n [attr.cx]=\"handlePos().x\"\n [attr.cy]=\"handlePos().y\"\n [attr.r]=\"strokeWidth() / 2\"\n [attr.fill]=\"valueColor()\"\n />\n </svg>\n @if (showValue()) {\n <div class=\"wr-knob__text\">\n {{ value() }}<span class=\"wr-knob__suffix\">{{ suffix() }}</span>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,197 @@
1
+ import * as i0 from '@angular/core';
2
+ import { model, input, output, computed, ViewEncapsulation, Component, contentChildren } from '@angular/core';
3
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
+
5
+ /**
6
+ * @license
7
+ *
8
+ * Use of this source code is governed by an MIT-style license that can be
9
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
10
+ */
11
+ /**
12
+ * Collapsible side panel. Lives inside a row `<wr-layout>` next to a
13
+ * `<wr-layout-content>`. Two-way `[(collapsed)]` controls width.
14
+ *
15
+ * @example
16
+ * ```html
17
+ * <wr-layout>
18
+ * <wr-layout-sider [(collapsed)]="collapsed" width="14rem" collapsedWidth="3rem">
19
+ * …
20
+ * </wr-layout-sider>
21
+ * <wr-layout-content>Main</wr-layout-content>
22
+ * </wr-layout>
23
+ * ```
24
+ */
25
+ class WrLayoutSider {
26
+ /** Two-way bindable collapsed state. @default false */
27
+ collapsed = model(false, /* @ts-ignore */
28
+ ...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
29
+ /** Width when expanded. Any CSS length. @default '16rem' */
30
+ width = input('16rem', /* @ts-ignore */
31
+ ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
32
+ /** Width when collapsed. Any CSS length. `0` to fully hide. @default '4rem' */
33
+ collapsedWidth = input('4rem', /* @ts-ignore */
34
+ ...(ngDevMode ? [{ debugName: "collapsedWidth" }] : /* istanbul ignore next */ []));
35
+ /** Place the sider on the right edge instead of the left. @default false */
36
+ reverse = input(false, { ...(ngDevMode ? { debugName: "reverse" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
37
+ /** Emits whenever `collapsed` changes (in addition to the two-way `[(collapsed)]`). */
38
+ collapsedChanged = output();
39
+ classes = computed(() => {
40
+ const parts = ['wr-layout-sider'];
41
+ if (this.collapsed())
42
+ parts.push('wr-layout-sider--collapsed');
43
+ if (this.reverse())
44
+ parts.push('wr-layout-sider--reverse');
45
+ return parts.join(' ');
46
+ }, /* @ts-ignore */
47
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
48
+ /** Imperative toggle helper — `[(collapsed)]` still works alongside this. */
49
+ toggle() {
50
+ const next = !this.collapsed();
51
+ this.collapsed.set(next);
52
+ this.collapsedChanged.emit(next);
53
+ }
54
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrLayoutSider, deps: [], target: i0.ɵɵFactoryTarget.Component });
55
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: WrLayoutSider, isStandalone: true, selector: "wr-layout-sider", inputs: { collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, collapsedWidth: { classPropertyName: "collapsedWidth", publicName: "collapsedWidth", isSignal: true, isRequired: false, transformFunction: null }, reverse: { classPropertyName: "reverse", publicName: "reverse", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange", collapsedChanged: "collapsedChanged" }, host: { attributes: { "role": "complementary" }, properties: { "class": "classes()", "style.width": "collapsed() ? collapsedWidth() : width()" } }, ngImport: i0, template: '<ng-content />', isInline: true, encapsulation: i0.ViewEncapsulation.None });
56
+ }
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrLayoutSider, decorators: [{
58
+ type: Component,
59
+ args: [{
60
+ selector: 'wr-layout-sider',
61
+ template: '<ng-content />',
62
+ encapsulation: ViewEncapsulation.None,
63
+ host: {
64
+ '[class]': 'classes()',
65
+ '[style.width]': 'collapsed() ? collapsedWidth() : width()',
66
+ role: 'complementary',
67
+ },
68
+ }]
69
+ }], propDecorators: { collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }, { type: i0.Output, args: ["collapsedChange"] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], collapsedWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsedWidth", required: false }] }], reverse: [{ type: i0.Input, args: [{ isSignal: true, alias: "reverse", required: false }] }], collapsedChanged: [{ type: i0.Output, args: ["collapsedChanged"] }] } });
70
+
71
+ /**
72
+ * @license
73
+ *
74
+ * Use of this source code is governed by an MIT-style license that can be
75
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
76
+ */
77
+ /**
78
+ * App-shell layout container. Lays its children out as a flex column by
79
+ * default; switches to a row when a `<wr-layout-sider>` is among the
80
+ * direct children (so `header → [sider + content] → footer` falls into
81
+ * place automatically — same convention as ng-zorro / antd Layout).
82
+ *
83
+ * @example
84
+ * ```html
85
+ * <wr-layout>
86
+ * <wr-layout-header>App bar</wr-layout-header>
87
+ * <wr-layout>
88
+ * <wr-layout-sider [(collapsed)]="collapsed">Sidebar</wr-layout-sider>
89
+ * <wr-layout-content>Main</wr-layout-content>
90
+ * </wr-layout>
91
+ * <wr-layout-footer>© 2026</wr-layout-footer>
92
+ * </wr-layout>
93
+ * ```
94
+ *
95
+ * @see https://ngwr.dev/components/layout
96
+ */
97
+ class WrLayout {
98
+ siders = contentChildren(WrLayoutSider, /* @ts-ignore */
99
+ ...(ngDevMode ? [{ debugName: "siders" }] : /* istanbul ignore next */ []));
100
+ classes = computed(() => {
101
+ const parts = ['wr-layout'];
102
+ if (this.siders().length > 0)
103
+ parts.push('wr-layout--has-sider');
104
+ return parts.join(' ');
105
+ }, /* @ts-ignore */
106
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
107
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrLayout, deps: [], target: i0.ɵɵFactoryTarget.Component });
108
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.2", type: WrLayout, isStandalone: true, selector: "wr-layout", host: { properties: { "class": "classes()" } }, queries: [{ propertyName: "siders", predicate: WrLayoutSider, isSignal: true }], ngImport: i0, template: '<ng-content />', isInline: true, encapsulation: i0.ViewEncapsulation.None });
109
+ }
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrLayout, decorators: [{
111
+ type: Component,
112
+ args: [{
113
+ selector: 'wr-layout',
114
+ template: '<ng-content />',
115
+ encapsulation: ViewEncapsulation.None,
116
+ host: { '[class]': 'classes()' },
117
+ }]
118
+ }], propDecorators: { siders: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => WrLayoutSider), { isSignal: true }] }] } });
119
+
120
+ /**
121
+ * @license
122
+ *
123
+ * Use of this source code is governed by an MIT-style license that can be
124
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
125
+ */
126
+ /**
127
+ * Top bar of a {@link WrLayout}. Stretches across the parent;
128
+ * size and stickiness are app-controlled via CSS.
129
+ */
130
+ class WrLayoutHeader {
131
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrLayoutHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
132
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.2", type: WrLayoutHeader, isStandalone: true, selector: "wr-layout-header", host: { attributes: { "role": "banner" }, classAttribute: "wr-layout-header" }, ngImport: i0, template: '<ng-content />', isInline: true, encapsulation: i0.ViewEncapsulation.None });
133
+ }
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrLayoutHeader, decorators: [{
135
+ type: Component,
136
+ args: [{
137
+ selector: 'wr-layout-header',
138
+ template: '<ng-content />',
139
+ encapsulation: ViewEncapsulation.None,
140
+ host: { class: 'wr-layout-header', role: 'banner' },
141
+ }]
142
+ }] });
143
+
144
+ /**
145
+ * @license
146
+ *
147
+ * Use of this source code is governed by an MIT-style license that can be
148
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
149
+ */
150
+ /**
151
+ * Main content area of a {@link WrLayout}. Flex-grows to fill
152
+ * remaining space.
153
+ */
154
+ class WrLayoutContent {
155
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrLayoutContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
156
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.2", type: WrLayoutContent, isStandalone: true, selector: "wr-layout-content", host: { attributes: { "role": "main" }, classAttribute: "wr-layout-content" }, ngImport: i0, template: '<ng-content />', isInline: true, encapsulation: i0.ViewEncapsulation.None });
157
+ }
158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrLayoutContent, decorators: [{
159
+ type: Component,
160
+ args: [{
161
+ selector: 'wr-layout-content',
162
+ template: '<ng-content />',
163
+ encapsulation: ViewEncapsulation.None,
164
+ host: { class: 'wr-layout-content', role: 'main' },
165
+ }]
166
+ }] });
167
+
168
+ /**
169
+ * @license
170
+ *
171
+ * Use of this source code is governed by an MIT-style license that can be
172
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
173
+ */
174
+ /**
175
+ * Bottom bar of a {@link WrLayout}. Doesn't grow — sized by its
176
+ * children.
177
+ */
178
+ class WrLayoutFooter {
179
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrLayoutFooter, deps: [], target: i0.ɵɵFactoryTarget.Component });
180
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.2", type: WrLayoutFooter, isStandalone: true, selector: "wr-layout-footer", host: { attributes: { "role": "contentinfo" }, classAttribute: "wr-layout-footer" }, ngImport: i0, template: '<ng-content />', isInline: true, encapsulation: i0.ViewEncapsulation.None });
181
+ }
182
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrLayoutFooter, decorators: [{
183
+ type: Component,
184
+ args: [{
185
+ selector: 'wr-layout-footer',
186
+ template: '<ng-content />',
187
+ encapsulation: ViewEncapsulation.None,
188
+ host: { class: 'wr-layout-footer', role: 'contentinfo' },
189
+ }]
190
+ }] });
191
+
192
+ /**
193
+ * Generated bundle index. Do not edit.
194
+ */
195
+
196
+ export { WrLayout, WrLayoutContent, WrLayoutFooter, WrLayoutHeader, WrLayoutSider };
197
+ //# sourceMappingURL=ngwr-layout.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngwr-layout.mjs","sources":["../../../projects/lib/layout/layout-sider.ts","../../../projects/lib/layout/layout.ts","../../../projects/lib/layout/layout-header.ts","../../../projects/lib/layout/layout-content.ts","../../../projects/lib/layout/layout-footer.ts","../../../projects/lib/layout/ngwr-layout.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, ViewEncapsulation, computed, input, model, output } from '@angular/core';\n\n/**\n * Collapsible side panel. Lives inside a row `<wr-layout>` next to a\n * `<wr-layout-content>`. Two-way `[(collapsed)]` controls width.\n *\n * @example\n * ```html\n * <wr-layout>\n * <wr-layout-sider [(collapsed)]=\"collapsed\" width=\"14rem\" collapsedWidth=\"3rem\">\n * …\n * </wr-layout-sider>\n * <wr-layout-content>Main</wr-layout-content>\n * </wr-layout>\n * ```\n */\n@Component({\n selector: 'wr-layout-sider',\n template: '<ng-content />',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'classes()',\n '[style.width]': 'collapsed() ? collapsedWidth() : width()',\n role: 'complementary',\n },\n})\nexport class WrLayoutSider {\n /** Two-way bindable collapsed state. @default false */\n readonly collapsed = model(false);\n\n /** Width when expanded. Any CSS length. @default '16rem' */\n readonly width = input<string>('16rem');\n\n /** Width when collapsed. Any CSS length. `0` to fully hide. @default '4rem' */\n readonly collapsedWidth = input<string>('4rem');\n\n /** Place the sider on the right edge instead of the left. @default false */\n readonly reverse = input(false, { transform: coerceBooleanProperty });\n\n /** Emits whenever `collapsed` changes (in addition to the two-way `[(collapsed)]`). */\n readonly collapsedChanged = output<boolean>();\n\n protected readonly classes = computed(() => {\n const parts = ['wr-layout-sider'];\n if (this.collapsed()) parts.push('wr-layout-sider--collapsed');\n if (this.reverse()) parts.push('wr-layout-sider--reverse');\n return parts.join(' ');\n });\n\n /** Imperative toggle helper — `[(collapsed)]` still works alongside this. */\n toggle(): void {\n const next = !this.collapsed();\n this.collapsed.set(next);\n this.collapsedChanged.emit(next);\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 { Component, ViewEncapsulation, computed, contentChildren } from '@angular/core';\n\nimport { WrLayoutSider } from './layout-sider';\n\n/**\n * App-shell layout container. Lays its children out as a flex column by\n * default; switches to a row when a `<wr-layout-sider>` is among the\n * direct children (so `header → [sider + content] → footer` falls into\n * place automatically — same convention as ng-zorro / antd Layout).\n *\n * @example\n * ```html\n * <wr-layout>\n * <wr-layout-header>App bar</wr-layout-header>\n * <wr-layout>\n * <wr-layout-sider [(collapsed)]=\"collapsed\">Sidebar</wr-layout-sider>\n * <wr-layout-content>Main</wr-layout-content>\n * </wr-layout>\n * <wr-layout-footer>© 2026</wr-layout-footer>\n * </wr-layout>\n * ```\n *\n * @see https://ngwr.dev/components/layout\n */\n@Component({\n selector: 'wr-layout',\n template: '<ng-content />',\n encapsulation: ViewEncapsulation.None,\n host: { '[class]': 'classes()' },\n})\nexport class WrLayout {\n protected readonly siders = contentChildren(WrLayoutSider);\n\n protected readonly classes = computed(() => {\n const parts = ['wr-layout'];\n if (this.siders().length > 0) parts.push('wr-layout--has-sider');\n return parts.join(' ');\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 { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Top bar of a {@link WrLayout}. Stretches across the parent;\n * size and stickiness are app-controlled via CSS.\n */\n@Component({\n selector: 'wr-layout-header',\n template: '<ng-content />',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'wr-layout-header', role: 'banner' },\n})\nexport class WrLayoutHeader {}\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 } from '@angular/core';\n\n/**\n * Main content area of a {@link WrLayout}. Flex-grows to fill\n * remaining space.\n */\n@Component({\n selector: 'wr-layout-content',\n template: '<ng-content />',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'wr-layout-content', role: 'main' },\n})\nexport class WrLayoutContent {}\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 } from '@angular/core';\n\n/**\n * Bottom bar of a {@link WrLayout}. Doesn't grow — sized by its\n * children.\n */\n@Component({\n selector: 'wr-layout-footer',\n template: '<ng-content />',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'wr-layout-footer', role: 'contentinfo' },\n})\nexport class WrLayoutFooter {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}