@ngbase/adk 0.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 (355) hide show
  1. package/README.md +57 -0
  2. package/a11y/accessibility-group.d.ts +49 -0
  3. package/a11y/accessibility-item.d.ts +49 -0
  4. package/a11y/accessibility.service.d.ts +17 -0
  5. package/a11y/autofocus.d.ts +12 -0
  6. package/a11y/focus-trap.d.ts +15 -0
  7. package/a11y/index.d.ts +5 -0
  8. package/a11y/public-api.d.ts +4 -0
  9. package/accordion/accordion-content.d.ts +8 -0
  10. package/accordion/accordion-group.d.ts +10 -0
  11. package/accordion/accordion-header.d.ts +7 -0
  12. package/accordion/accordion-item.d.ts +10 -0
  13. package/accordion/index.d.ts +5 -0
  14. package/accordion/public-api.d.ts +4 -0
  15. package/autocomplete/autocomplete-input.d.ts +21 -0
  16. package/autocomplete/autocomplete.d.ts +25 -0
  17. package/autocomplete/index.d.ts +5 -0
  18. package/autocomplete/public-api.d.ts +2 -0
  19. package/avatar/avatar.d.ts +22 -0
  20. package/avatar/index.d.ts +5 -0
  21. package/avatar/public-api.d.ts +1 -0
  22. package/bidi/direction.service.d.ts +14 -0
  23. package/bidi/index.d.ts +5 -0
  24. package/bidi/public-api.d.ts +1 -0
  25. package/breadcrumb/breadcrumb-link.d.ts +7 -0
  26. package/breadcrumb/breadcrumb-separator.d.ts +10 -0
  27. package/breadcrumb/breadcrumb.d.ts +12 -0
  28. package/breadcrumb/breadcrumbs.d.ts +7 -0
  29. package/breadcrumb/index.d.ts +5 -0
  30. package/breadcrumb/public-api.d.ts +4 -0
  31. package/cache/cache-config.d.ts +22 -0
  32. package/cache/cache.d.ts +17 -0
  33. package/cache/cache.interecptor.d.ts +2 -0
  34. package/cache/index.d.ts +5 -0
  35. package/cache/public-api.d.ts +3 -0
  36. package/carousel/carousel-item.d.ts +7 -0
  37. package/carousel/carousel-next.d.ts +8 -0
  38. package/carousel/carousel.d.ts +61 -0
  39. package/carousel/index.d.ts +5 -0
  40. package/carousel/public-api.d.ts +3 -0
  41. package/checkbox/checkbox.d.ts +22 -0
  42. package/checkbox/index.d.ts +5 -0
  43. package/checkbox/public-api.d.ts +1 -0
  44. package/chip/chip-group.d.ts +7 -0
  45. package/chip/chip.d.ts +19 -0
  46. package/chip/index.d.ts +5 -0
  47. package/chip/public-api.d.ts +2 -0
  48. package/clipboard/clipboard.d.ts +7 -0
  49. package/clipboard/index.d.ts +5 -0
  50. package/clipboard/public-api.d.ts +1 -0
  51. package/collections/SelectionModel.d.ts +14 -0
  52. package/collections/index.d.ts +5 -0
  53. package/collections/public-api.d.ts +1 -0
  54. package/color-picker/color-input.d.ts +16 -0
  55. package/color-picker/color-picker-trigger.d.ts +30 -0
  56. package/color-picker/color-picker.d.ts +72 -0
  57. package/color-picker/index.d.ts +5 -0
  58. package/color-picker/public-api.d.ts +3 -0
  59. package/color-picker/utils.d.ts +21 -0
  60. package/cookies/cookie.service.d.ts +32 -0
  61. package/cookies/index.d.ts +5 -0
  62. package/cookies/public-api.d.ts +1 -0
  63. package/datepicker/calendar.d.ts +121 -0
  64. package/datepicker/datepicker-trigger.d.ts +49 -0
  65. package/datepicker/datepicker.d.ts +54 -0
  66. package/datepicker/index.d.ts +5 -0
  67. package/datepicker/native-date-adapter.d.ts +33 -0
  68. package/datepicker/public-api.d.ts +5 -0
  69. package/datepicker/time.d.ts +42 -0
  70. package/dialog/dialog.animation.d.ts +3 -0
  71. package/dialog/dialog.d.ts +49 -0
  72. package/dialog/dialog.service.d.ts +7 -0
  73. package/dialog/index.d.ts +5 -0
  74. package/dialog/public-api.d.ts +3 -0
  75. package/drag/drag-drop.d.ts +37 -0
  76. package/drag/drag-move.d.ts +17 -0
  77. package/drag/drag.d.ts +53 -0
  78. package/drag/index.d.ts +5 -0
  79. package/drag/public-api.d.ts +3 -0
  80. package/fesm2022/ngbase-adk-a11y.mjs +617 -0
  81. package/fesm2022/ngbase-adk-a11y.mjs.map +1 -0
  82. package/fesm2022/ngbase-adk-accordion.mjs +117 -0
  83. package/fesm2022/ngbase-adk-accordion.mjs.map +1 -0
  84. package/fesm2022/ngbase-adk-autocomplete.mjs +150 -0
  85. package/fesm2022/ngbase-adk-autocomplete.mjs.map +1 -0
  86. package/fesm2022/ngbase-adk-avatar.mjs +69 -0
  87. package/fesm2022/ngbase-adk-avatar.mjs.map +1 -0
  88. package/fesm2022/ngbase-adk-bidi.mjs +42 -0
  89. package/fesm2022/ngbase-adk-bidi.mjs.map +1 -0
  90. package/fesm2022/ngbase-adk-breadcrumb.mjs +103 -0
  91. package/fesm2022/ngbase-adk-breadcrumb.mjs.map +1 -0
  92. package/fesm2022/ngbase-adk-cache.mjs +127 -0
  93. package/fesm2022/ngbase-adk-cache.mjs.map +1 -0
  94. package/fesm2022/ngbase-adk-carousel.mjs +337 -0
  95. package/fesm2022/ngbase-adk-carousel.mjs.map +1 -0
  96. package/fesm2022/ngbase-adk-checkbox.mjs +78 -0
  97. package/fesm2022/ngbase-adk-checkbox.mjs.map +1 -0
  98. package/fesm2022/ngbase-adk-chip.mjs +60 -0
  99. package/fesm2022/ngbase-adk-chip.mjs.map +1 -0
  100. package/fesm2022/ngbase-adk-clipboard.mjs +41 -0
  101. package/fesm2022/ngbase-adk-clipboard.mjs.map +1 -0
  102. package/fesm2022/ngbase-adk-collections.mjs +39 -0
  103. package/fesm2022/ngbase-adk-collections.mjs.map +1 -0
  104. package/fesm2022/ngbase-adk-color-picker.mjs +580 -0
  105. package/fesm2022/ngbase-adk-color-picker.mjs.map +1 -0
  106. package/fesm2022/ngbase-adk-cookies.mjs +81 -0
  107. package/fesm2022/ngbase-adk-cookies.mjs.map +1 -0
  108. package/fesm2022/ngbase-adk-datepicker.mjs +1130 -0
  109. package/fesm2022/ngbase-adk-datepicker.mjs.map +1 -0
  110. package/fesm2022/ngbase-adk-dialog.mjs +223 -0
  111. package/fesm2022/ngbase-adk-dialog.mjs.map +1 -0
  112. package/fesm2022/ngbase-adk-drag.mjs +406 -0
  113. package/fesm2022/ngbase-adk-drag.mjs.map +1 -0
  114. package/fesm2022/ngbase-adk-form-field.mjs +364 -0
  115. package/fesm2022/ngbase-adk-form-field.mjs.map +1 -0
  116. package/fesm2022/ngbase-adk-hover-card.mjs +79 -0
  117. package/fesm2022/ngbase-adk-hover-card.mjs.map +1 -0
  118. package/fesm2022/ngbase-adk-icon.mjs +90 -0
  119. package/fesm2022/ngbase-adk-icon.mjs.map +1 -0
  120. package/fesm2022/ngbase-adk-inline-edit.mjs +127 -0
  121. package/fesm2022/ngbase-adk-inline-edit.mjs.map +1 -0
  122. package/fesm2022/ngbase-adk-jwt.mjs +90 -0
  123. package/fesm2022/ngbase-adk-jwt.mjs.map +1 -0
  124. package/fesm2022/ngbase-adk-keys.mjs +219 -0
  125. package/fesm2022/ngbase-adk-keys.mjs.map +1 -0
  126. package/fesm2022/ngbase-adk-layout.mjs +100 -0
  127. package/fesm2022/ngbase-adk-layout.mjs.map +1 -0
  128. package/fesm2022/ngbase-adk-list.mjs +110 -0
  129. package/fesm2022/ngbase-adk-list.mjs.map +1 -0
  130. package/fesm2022/ngbase-adk-mask.mjs +234 -0
  131. package/fesm2022/ngbase-adk-mask.mjs.map +1 -0
  132. package/fesm2022/ngbase-adk-menu.mjs +546 -0
  133. package/fesm2022/ngbase-adk-menu.mjs.map +1 -0
  134. package/fesm2022/ngbase-adk-network.mjs +90 -0
  135. package/fesm2022/ngbase-adk-network.mjs.map +1 -0
  136. package/fesm2022/ngbase-adk-pagination.mjs +187 -0
  137. package/fesm2022/ngbase-adk-pagination.mjs.map +1 -0
  138. package/fesm2022/ngbase-adk-popover.mjs +953 -0
  139. package/fesm2022/ngbase-adk-popover.mjs.map +1 -0
  140. package/fesm2022/ngbase-adk-portal.mjs +279 -0
  141. package/fesm2022/ngbase-adk-portal.mjs.map +1 -0
  142. package/fesm2022/ngbase-adk-progress.mjs +57 -0
  143. package/fesm2022/ngbase-adk-progress.mjs.map +1 -0
  144. package/fesm2022/ngbase-adk-radio.mjs +129 -0
  145. package/fesm2022/ngbase-adk-radio.mjs.map +1 -0
  146. package/fesm2022/ngbase-adk-resizable.mjs +367 -0
  147. package/fesm2022/ngbase-adk-resizable.mjs.map +1 -0
  148. package/fesm2022/ngbase-adk-scroll-area.mjs +232 -0
  149. package/fesm2022/ngbase-adk-scroll-area.mjs.map +1 -0
  150. package/fesm2022/ngbase-adk-select.mjs +599 -0
  151. package/fesm2022/ngbase-adk-select.mjs.map +1 -0
  152. package/fesm2022/ngbase-adk-selectable.mjs +79 -0
  153. package/fesm2022/ngbase-adk-selectable.mjs.map +1 -0
  154. package/fesm2022/ngbase-adk-sidenav.mjs +209 -0
  155. package/fesm2022/ngbase-adk-sidenav.mjs.map +1 -0
  156. package/fesm2022/ngbase-adk-slider.mjs +337 -0
  157. package/fesm2022/ngbase-adk-slider.mjs.map +1 -0
  158. package/fesm2022/ngbase-adk-sonner.mjs +176 -0
  159. package/fesm2022/ngbase-adk-sonner.mjs.map +1 -0
  160. package/fesm2022/ngbase-adk-stepper.mjs +211 -0
  161. package/fesm2022/ngbase-adk-stepper.mjs.map +1 -0
  162. package/fesm2022/ngbase-adk-switch.mjs +115 -0
  163. package/fesm2022/ngbase-adk-switch.mjs.map +1 -0
  164. package/fesm2022/ngbase-adk-table.mjs +348 -0
  165. package/fesm2022/ngbase-adk-table.mjs.map +1 -0
  166. package/fesm2022/ngbase-adk-tabs.mjs +386 -0
  167. package/fesm2022/ngbase-adk-tabs.mjs.map +1 -0
  168. package/fesm2022/ngbase-adk-test.mjs +267 -0
  169. package/fesm2022/ngbase-adk-test.mjs.map +1 -0
  170. package/fesm2022/ngbase-adk-toggle-group.mjs +114 -0
  171. package/fesm2022/ngbase-adk-toggle-group.mjs.map +1 -0
  172. package/fesm2022/ngbase-adk-toggle.mjs +48 -0
  173. package/fesm2022/ngbase-adk-toggle.mjs.map +1 -0
  174. package/fesm2022/ngbase-adk-tooltip.mjs +237 -0
  175. package/fesm2022/ngbase-adk-tooltip.mjs.map +1 -0
  176. package/fesm2022/ngbase-adk-tour.mjs +312 -0
  177. package/fesm2022/ngbase-adk-tour.mjs.map +1 -0
  178. package/fesm2022/ngbase-adk-translate.mjs +162 -0
  179. package/fesm2022/ngbase-adk-translate.mjs.map +1 -0
  180. package/fesm2022/ngbase-adk-tree.mjs +301 -0
  181. package/fesm2022/ngbase-adk-tree.mjs.map +1 -0
  182. package/fesm2022/ngbase-adk-utils.mjs +228 -0
  183. package/fesm2022/ngbase-adk-utils.mjs.map +1 -0
  184. package/fesm2022/ngbase-adk-virtualizer.mjs +198 -0
  185. package/fesm2022/ngbase-adk-virtualizer.mjs.map +1 -0
  186. package/fesm2022/ngbase-adk.mjs +6 -0
  187. package/fesm2022/ngbase-adk.mjs.map +1 -0
  188. package/form-field/auto-height.d.ts +9 -0
  189. package/form-field/error.d.ts +18 -0
  190. package/form-field/form-field.d.ts +14 -0
  191. package/form-field/index.d.ts +5 -0
  192. package/form-field/input.d.ts +16 -0
  193. package/form-field/label.d.ts +7 -0
  194. package/form-field/otp.d.ts +48 -0
  195. package/form-field/public-api.d.ts +6 -0
  196. package/hover-card/hover-card.d.ts +18 -0
  197. package/hover-card/index.d.ts +5 -0
  198. package/hover-card/public-api.d.ts +1 -0
  199. package/icon/icon.d.ts +12 -0
  200. package/icon/icon.service.d.ts +12 -0
  201. package/icon/index.d.ts +5 -0
  202. package/icon/public-api.d.ts +2 -0
  203. package/index.d.ts +5 -0
  204. package/inline-edit/index.d.ts +5 -0
  205. package/inline-edit/inline-edit.d.ts +47 -0
  206. package/inline-edit/public-api.d.ts +1 -0
  207. package/jwt/index.d.ts +5 -0
  208. package/jwt/jwt.service.d.ts +27 -0
  209. package/jwt/public-api.d.ts +1 -0
  210. package/keys/index.d.ts +5 -0
  211. package/keys/keys.service.d.ts +13 -0
  212. package/keys/public-api.d.ts +2 -0
  213. package/keys/shortcuts.service.d.ts +38 -0
  214. package/layout/index.d.ts +5 -0
  215. package/layout/layout.d.ts +16 -0
  216. package/layout/public-api.d.ts +1 -0
  217. package/list/index.d.ts +5 -0
  218. package/list/list.d.ts +20 -0
  219. package/list/list.directive.d.ts +12 -0
  220. package/list/public-api.d.ts +2 -0
  221. package/mask/index.d.ts +5 -0
  222. package/mask/mask-pipe.d.ts +7 -0
  223. package/mask/mask.d.ts +25 -0
  224. package/mask/public-api.d.ts +2 -0
  225. package/menu/context-menu.d.ts +21 -0
  226. package/menu/index.d.ts +5 -0
  227. package/menu/mention.d.ts +18 -0
  228. package/menu/menu-trigger.d.ts +34 -0
  229. package/menu/menu.d.ts +52 -0
  230. package/menu/navigation-menu.d.ts +19 -0
  231. package/menu/public-api.d.ts +5 -0
  232. package/network/index.d.ts +5 -0
  233. package/network/network.interceptor.d.ts +6 -0
  234. package/network/network.service.d.ts +18 -0
  235. package/network/public-api.d.ts +2 -0
  236. package/package.json +247 -0
  237. package/pagination/index.d.ts +5 -0
  238. package/pagination/pagination.d.ts +28 -0
  239. package/pagination/public-api.d.ts +1 -0
  240. package/popover/base-popover.service.d.ts +16 -0
  241. package/popover/index.d.ts +5 -0
  242. package/popover/popover-trigger.d.ts +21 -0
  243. package/popover/popover.d.ts +50 -0
  244. package/popover/popover.service.d.ts +42 -0
  245. package/popover/public-api.d.ts +5 -0
  246. package/popover/utils.d.ts +85 -0
  247. package/portal/dialog-ref.d.ts +71 -0
  248. package/portal/index.d.ts +5 -0
  249. package/portal/portal-base.service.d.ts +19 -0
  250. package/portal/portal-close.directive.d.ts +8 -0
  251. package/portal/portal.component.d.ts +7 -0
  252. package/portal/portal.service.d.ts +16 -0
  253. package/portal/public-api.d.ts +5 -0
  254. package/progress/index.d.ts +5 -0
  255. package/progress/progress.d.ts +13 -0
  256. package/progress/public-api.d.ts +1 -0
  257. package/public-api.d.ts +2 -0
  258. package/radio/index.d.ts +5 -0
  259. package/radio/public-api.d.ts +2 -0
  260. package/radio/radio-group.d.ts +19 -0
  261. package/radio/radio.d.ts +22 -0
  262. package/resizable/index.d.ts +5 -0
  263. package/resizable/public-api.d.ts +2 -0
  264. package/resizable/resizable-group.d.ts +22 -0
  265. package/resizable/resizable.d.ts +50 -0
  266. package/scroll-area/index.d.ts +5 -0
  267. package/scroll-area/public-api.d.ts +1 -0
  268. package/scroll-area/scroll-area.d.ts +56 -0
  269. package/select/index.d.ts +5 -0
  270. package/select/list-selection.d.ts +7 -0
  271. package/select/option-group.d.ts +7 -0
  272. package/select/option.d.ts +25 -0
  273. package/select/public-api.d.ts +6 -0
  274. package/select/select-base.d.ts +64 -0
  275. package/select/select-input.d.ts +23 -0
  276. package/select/select.d.ts +50 -0
  277. package/selectable/index.d.ts +5 -0
  278. package/selectable/public-api.d.ts +2 -0
  279. package/selectable/selectable-item.d.ts +12 -0
  280. package/selectable/selectable.d.ts +19 -0
  281. package/sidenav/index.d.ts +5 -0
  282. package/sidenav/public-api.d.ts +3 -0
  283. package/sidenav/sidenav-header.d.ts +31 -0
  284. package/sidenav/sidenav.d.ts +23 -0
  285. package/sidenav/sidenav.service.d.ts +18 -0
  286. package/slider/index.d.ts +5 -0
  287. package/slider/public-api.d.ts +1 -0
  288. package/slider/slider.d.ts +73 -0
  289. package/sonner/index.d.ts +5 -0
  290. package/sonner/public-api.d.ts +2 -0
  291. package/sonner/sonner.d.ts +24 -0
  292. package/sonner/sonner.service.d.ts +21 -0
  293. package/stepper/animation.d.ts +1 -0
  294. package/stepper/index.d.ts +5 -0
  295. package/stepper/public-api.d.ts +3 -0
  296. package/stepper/step.d.ts +24 -0
  297. package/stepper/stepper.d.ts +26 -0
  298. package/switch/index.d.ts +5 -0
  299. package/switch/public-api.d.ts +1 -0
  300. package/switch/switch.d.ts +44 -0
  301. package/table/body-cell.d.ts +11 -0
  302. package/table/body-row.d.ts +21 -0
  303. package/table/column.d.ts +10 -0
  304. package/table/head-cell.d.ts +12 -0
  305. package/table/head-row.d.ts +21 -0
  306. package/table/index.d.ts +5 -0
  307. package/table/public-api.d.ts +8 -0
  308. package/table/table.d.ts +32 -0
  309. package/tabs/index.d.ts +5 -0
  310. package/tabs/public-api.d.ts +2 -0
  311. package/tabs/tab-group.d.ts +52 -0
  312. package/tabs/tab.d.ts +31 -0
  313. package/test/index.d.ts +5 -0
  314. package/test/public-api.d.ts +1 -0
  315. package/test/utils.d.ts +62 -0
  316. package/toggle/index.d.ts +5 -0
  317. package/toggle/public-api.d.ts +1 -0
  318. package/toggle/toggle.d.ts +13 -0
  319. package/toggle-group/index.d.ts +5 -0
  320. package/toggle-group/public-api.d.ts +2 -0
  321. package/toggle-group/toggle-group.d.ts +25 -0
  322. package/toggle-group/toggle-item.d.ts +14 -0
  323. package/tooltip/index.d.ts +5 -0
  324. package/tooltip/public-api.d.ts +2 -0
  325. package/tooltip/tooltip.d.ts +20 -0
  326. package/tooltip/tooltip.directive.d.ts +34 -0
  327. package/tooltip/tooltip.service.d.ts +26 -0
  328. package/tour/animation.d.ts +2 -0
  329. package/tour/index.d.ts +5 -0
  330. package/tour/public-api.d.ts +5 -0
  331. package/tour/tour-base.d.ts +21 -0
  332. package/tour/tour-step.d.ts +11 -0
  333. package/tour/tour.d.ts +9 -0
  334. package/tour/tour.service.d.ts +30 -0
  335. package/translate/config.d.ts +16 -0
  336. package/translate/index.d.ts +5 -0
  337. package/translate/public-api.d.ts +3 -0
  338. package/translate/translate.d.ts +11 -0
  339. package/translate/translate.service.d.ts +31 -0
  340. package/tree/index.d.ts +5 -0
  341. package/tree/public-api.d.ts +3 -0
  342. package/tree/tree-node.d.ts +28 -0
  343. package/tree/tree-toggle.d.ts +16 -0
  344. package/tree/tree.d.ts +55 -0
  345. package/utils/animation.d.ts +3 -0
  346. package/utils/disposals.d.ts +7 -0
  347. package/utils/index.d.ts +5 -0
  348. package/utils/number-only.d.ts +22 -0
  349. package/utils/public-api.d.ts +6 -0
  350. package/utils/range.pipe.d.ts +7 -0
  351. package/utils/ssr.d.ts +2 -0
  352. package/utils/utils.d.ts +27 -0
  353. package/virtualizer/index.d.ts +5 -0
  354. package/virtualizer/public-api.d.ts +1 -0
  355. package/virtualizer/virtualizer.d.ts +42 -0
@@ -0,0 +1,110 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, ElementRef, input, booleanAttribute, linkedSignal, Directive, contentChildren, signal, afterNextRender, effect, untracked } from '@angular/core';
3
+ import * as i1 from '@ngbase/adk/a11y';
4
+ import { AccessibleItem } from '@ngbase/adk/a11y';
5
+ import { documentListener } from '@ngbase/adk/utils';
6
+
7
+ class NgbList {
8
+ constructor() {
9
+ // Dependencies
10
+ this.allyItem = inject(AccessibleItem);
11
+ this.el = inject(ElementRef);
12
+ // Inputs
13
+ this.ayId = input();
14
+ this.disabled = input(false, { transform: booleanAttribute });
15
+ this.allyItem._ayId = linkedSignal(this.ayId);
16
+ }
17
+ setAyId(id) {
18
+ this.allyItem._ayId.set(id);
19
+ }
20
+ select() {
21
+ this.el.nativeElement.click();
22
+ }
23
+ focus() {
24
+ this.el.nativeElement.scrollIntoView({ block: 'nearest' });
25
+ this.el.nativeElement.classList.add('bg-muted-background');
26
+ }
27
+ unselect() {
28
+ this.el.nativeElement.classList.remove('bg-muted-background');
29
+ }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgbList, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
31
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.0", type: NgbList, isStandalone: true, selector: "[ngbList]", inputs: { ayId: { classPropertyName: "ayId", publicName: "ayId", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "list" } }, hostDirectives: [{ directive: i1.AccessibleItem, inputs: ["role", "role", "disabled", "disabled"] }], ngImport: i0 }); }
32
+ }
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgbList, decorators: [{
34
+ type: Directive,
35
+ args: [{
36
+ selector: '[ngbList]',
37
+ hostDirectives: [{ directive: AccessibleItem, inputs: ['role', 'disabled'] }],
38
+ host: {
39
+ role: 'list',
40
+ },
41
+ }]
42
+ }], ctorParameters: () => [] });
43
+ function provideList(list) {
44
+ return {
45
+ provide: NgbList,
46
+ useExisting: list,
47
+ };
48
+ }
49
+
50
+ class NgbListActionGroup {
51
+ constructor() {
52
+ this.options = contentChildren(NgbList, { descendants: true });
53
+ this.activeIndex = signal(undefined);
54
+ this.optionsMap = new WeakMap();
55
+ this.handleKeyDown = (event) => {
56
+ const options = this.options();
57
+ const lastIndex = this.activeIndex();
58
+ const i = this.optionsMap.get(this.activeIndex() || options[0]);
59
+ if (event.key === 'ArrowDown') {
60
+ this.activeIndex.set(options[Math.min(i + 1, options.length - 1)]);
61
+ }
62
+ else if (event.key === 'ArrowUp') {
63
+ this.activeIndex.set(options[Math.max(i - 1, 0)]);
64
+ }
65
+ else if (event.key === 'Enter') {
66
+ lastIndex?.select();
67
+ }
68
+ if (lastIndex !== this.activeIndex()) {
69
+ event.preventDefault();
70
+ this.afterAction(lastIndex);
71
+ }
72
+ };
73
+ documentListener('keydown', this.handleKeyDown);
74
+ afterNextRender(() => this.afterAction());
75
+ effect(() => {
76
+ const options = this.options();
77
+ options.forEach((x, i) => this.optionsMap.set(x, i));
78
+ untracked(() => {
79
+ const lastIndex = this.activeIndex();
80
+ this.activeIndex.set(options[0]);
81
+ this.afterAction(lastIndex);
82
+ });
83
+ });
84
+ }
85
+ afterAction(lastIndex) {
86
+ const option = this.activeIndex();
87
+ lastIndex?.unselect();
88
+ option?.focus();
89
+ }
90
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgbListActionGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
91
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "19.0.0", type: NgbListActionGroup, isStandalone: true, selector: "[ngbActionGroup]", queries: [{ propertyName: "options", predicate: NgbList, descendants: true, isSignal: true }], ngImport: i0 }); }
92
+ }
93
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgbListActionGroup, decorators: [{
94
+ type: Directive,
95
+ args: [{
96
+ selector: '[ngbActionGroup]',
97
+ }]
98
+ }], ctorParameters: () => [] });
99
+
100
+ /*
101
+ * Public API Surface of list
102
+ */
103
+ // export * from './list-selection.component';
104
+
105
+ /**
106
+ * Generated bundle index. Do not edit.
107
+ */
108
+
109
+ export { NgbList, NgbListActionGroup, provideList };
110
+ //# sourceMappingURL=ngbase-adk-list.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngbase-adk-list.mjs","sources":["../../../projects/adk/list/list.ts","../../../projects/adk/list/list.directive.ts","../../../projects/adk/list/public-api.ts","../../../projects/adk/list/ngbase-adk-list.ts"],"sourcesContent":["import {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n input,\n linkedSignal,\n WritableSignal,\n} from '@angular/core';\nimport { AccessibleItem } from '@ngbase/adk/a11y';\n\n@Directive({\n selector: '[ngbList]',\n hostDirectives: [{ directive: AccessibleItem, inputs: ['role', 'disabled'] }],\n host: {\n role: 'list',\n },\n})\nexport class NgbList {\n // Dependencies\n private readonly allyItem = inject(AccessibleItem);\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n // Inputs\n readonly ayId = input<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n constructor() {\n this.allyItem._ayId = linkedSignal(this.ayId) as WritableSignal<string>;\n }\n\n setAyId(id: string) {\n this.allyItem._ayId.set(id);\n }\n\n select() {\n this.el.nativeElement.click();\n }\n\n focus() {\n this.el.nativeElement.scrollIntoView({ block: 'nearest' });\n this.el.nativeElement.classList.add('bg-muted-background');\n }\n\n unselect() {\n this.el.nativeElement.classList.remove('bg-muted-background');\n }\n}\n\nexport function provideList(list: typeof NgbList) {\n return {\n provide: NgbList,\n useExisting: list,\n };\n}\n","import {\n Directive,\n afterNextRender,\n contentChildren,\n effect,\n signal,\n untracked,\n} from '@angular/core';\nimport { documentListener } from '@ngbase/adk/utils';\nimport { NgbList } from './list';\n\n@Directive({\n selector: '[ngbActionGroup]',\n})\nexport class NgbListActionGroup {\n readonly options = contentChildren(NgbList, { descendants: true });\n\n private readonly activeIndex = signal<NgbList | undefined>(undefined);\n private readonly optionsMap = new WeakMap<NgbList, number>();\n\n constructor() {\n documentListener('keydown', this.handleKeyDown);\n afterNextRender(() => this.afterAction());\n\n effect(() => {\n const options = this.options();\n options.forEach((x, i) => this.optionsMap.set(x, i));\n untracked(() => {\n const lastIndex = this.activeIndex();\n this.activeIndex.set(options[0]);\n this.afterAction(lastIndex);\n });\n });\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n const options = this.options();\n const lastIndex = this.activeIndex();\n const i = this.optionsMap.get(this.activeIndex() || options[0])!;\n if (event.key === 'ArrowDown') {\n this.activeIndex.set(options[Math.min(i + 1, options.length - 1)]);\n } else if (event.key === 'ArrowUp') {\n this.activeIndex.set(options[Math.max(i - 1, 0)]);\n } else if (event.key === 'Enter') {\n lastIndex?.select();\n }\n if (lastIndex !== this.activeIndex()) {\n event.preventDefault();\n this.afterAction(lastIndex);\n }\n };\n\n private afterAction(lastIndex?: NgbList) {\n const option = this.activeIndex();\n lastIndex?.unselect();\n option?.focus();\n }\n}\n","/*\n * Public API Surface of list\n */\n\nexport * from './list';\nexport * from './list.directive';\n// export * from './list-selection.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,234 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, ElementRef, input, linkedSignal, afterRenderEffect, Directive, Pipe } from '@angular/core';
3
+ import { NgControl } from '@angular/forms';
4
+ import * as i1 from '@ngbase/adk/form-field';
5
+ import { InputBase } from '@ngbase/adk/form-field';
6
+
7
+ class Mask {
8
+ // private lastValue = '';
9
+ constructor() {
10
+ // this.control?.valueChanges?.subscribe(value => {
11
+ // if (value !== this.lastValue) this.handleValue(value);
12
+ // });
13
+ // Dependencies
14
+ this.el = inject(ElementRef);
15
+ this.control = inject(NgControl, { optional: true });
16
+ this.inputC = inject(InputBase);
17
+ // Inputs
18
+ this.ngbMask = input('');
19
+ this.showMaskType = input(false);
20
+ this.localValue = linkedSignal(() => this.inputC.value() ?? '');
21
+ afterRenderEffect(() => {
22
+ const mask = this.ngbMask();
23
+ const value = this.localValue();
24
+ this.el.nativeElement.value = this.updateView(value, mask);
25
+ });
26
+ }
27
+ onKeyDown(event) {
28
+ // console.log('onKeyDown', event);
29
+ const input = event.target;
30
+ const keyCode = event.key;
31
+ // Allow navigation keys
32
+ if ([
33
+ 'ArrowLeft',
34
+ 'ArrowRight',
35
+ 'Home',
36
+ 'End',
37
+ 'Tab',
38
+ 'Backspace',
39
+ 'Delete',
40
+ 'Shift',
41
+ 'Meta',
42
+ 'Control',
43
+ 'Alt',
44
+ 'Escape',
45
+ 'CapsLock',
46
+ ].includes(keyCode)) {
47
+ return;
48
+ }
49
+ event.preventDefault();
50
+ const cursorPos = input.selectionStart || 0;
51
+ const key = event.key;
52
+ // Get the current value and mask
53
+ const currentValue = input.value;
54
+ const mask = this.ngbMask();
55
+ // Check if the key matches the mask at current position
56
+ if (this.isValidChar(key, this.getCurrentMaskChar(mask, cursorPos))) {
57
+ // Insert the character at cursor position
58
+ const newValue = currentValue.substring(0, cursorPos) + key + currentValue.substring(cursorPos);
59
+ this.handleValue(newValue, cursorPos);
60
+ }
61
+ }
62
+ getCurrentMaskChar(mask, cursorPos) {
63
+ // we only have to check cursor position and have to skip non-mask characters
64
+ for (let i = cursorPos; i < mask.length; i++) {
65
+ if (mask[i] !== '#' && mask[i] !== 'a' && mask[i] !== '*') {
66
+ continue;
67
+ }
68
+ return mask[i];
69
+ }
70
+ return '';
71
+ }
72
+ onPaste(event) {
73
+ event.preventDefault();
74
+ const input = event.target;
75
+ const cursorPos = input.selectionStart || 0;
76
+ const pastedText = event.clipboardData?.getData('text') || '';
77
+ const currentValue = input.value;
78
+ const beforeCursor = currentValue.substring(0, cursorPos);
79
+ const afterCursor = currentValue.substring(cursorPos);
80
+ const newValue = beforeCursor + pastedText + afterCursor;
81
+ this.handleValue(newValue, cursorPos);
82
+ }
83
+ isValidChar(char, maskChar) {
84
+ switch (maskChar) {
85
+ case '#':
86
+ return /\d/.test(char);
87
+ case 'a':
88
+ return /[a-zA-Z]/.test(char);
89
+ case '*':
90
+ return /[a-zA-Z0-9]/.test(char);
91
+ default:
92
+ return char === maskChar;
93
+ }
94
+ }
95
+ handleValue(value, cursorPos) {
96
+ // Apply mask and update view
97
+ const maskedValue = this.updateView(value);
98
+ // Update actualValue
99
+ const actualValue = this.unmask(maskedValue);
100
+ this.updateLocalValue(actualValue, actualValue !== value);
101
+ // Set cursor position after update
102
+ // if (cursorPos !== undefined) {
103
+ // setTimeout(() => {
104
+ // const newPos = this.calculateCursorPosition(maskedValue, cursorPos);
105
+ // this.el.nativeElement.setSelectionRange(newPos, newPos);
106
+ // });
107
+ // }
108
+ }
109
+ calculateCursorPosition(maskedValue, oldPos) {
110
+ const mask = this.ngbMask();
111
+ let newPos = oldPos;
112
+ // Move cursor past any fixed mask characters
113
+ while (newPos < mask.length && !'#a*'.includes(mask[newPos])) {
114
+ newPos++;
115
+ }
116
+ return Math.min(newPos, maskedValue.length);
117
+ }
118
+ updateLocalValue(value, emit = true) {
119
+ this.inputC.setValue(value);
120
+ // this.lastValue = value;
121
+ this.localValue.set(value);
122
+ if (emit)
123
+ this.control?.control?.setValue(value);
124
+ }
125
+ writeValue(value) {
126
+ this.handleValue(value);
127
+ }
128
+ updateView(value, mask = this.ngbMask()) {
129
+ return maskTransform(value, mask);
130
+ }
131
+ unmask(value) {
132
+ const mask = this.ngbMask();
133
+ let unmaskedValue = '';
134
+ let valueIndex = 0;
135
+ for (let maskIndex = 0; maskIndex < mask.length && valueIndex < value.length; maskIndex++) {
136
+ const maskChar = mask[maskIndex];
137
+ const valueChar = value[valueIndex];
138
+ if ('#a*'.includes(maskChar)) {
139
+ unmaskedValue += valueChar;
140
+ valueIndex++;
141
+ }
142
+ else if (maskChar === valueChar) {
143
+ valueIndex++;
144
+ }
145
+ }
146
+ return unmaskedValue;
147
+ }
148
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: Mask, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
149
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.0", type: Mask, isStandalone: true, selector: "[ngbMask]", inputs: { ngbMask: { classPropertyName: "ngbMask", publicName: "ngbMask", isSignal: true, isRequired: false, transformFunction: null }, showMaskType: { classPropertyName: "showMaskType", publicName: "showMaskType", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "onKeyDown($event)", "paste": "onPaste($event)" } }, hostDirectives: [{ directive: i1.InputBase }], ngImport: i0 }); }
150
+ }
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: Mask, decorators: [{
152
+ type: Directive,
153
+ args: [{
154
+ selector: '[ngbMask]',
155
+ hostDirectives: [InputBase],
156
+ host: {
157
+ '(keydown)': 'onKeyDown($event)',
158
+ '(paste)': 'onPaste($event)',
159
+ },
160
+ }]
161
+ }], ctorParameters: () => [] });
162
+ function maskTransform(value, mask, showMaskType = false) {
163
+ let result = '';
164
+ let valueIndex = 0;
165
+ for (let maskIndex = 0; maskIndex < mask.length && valueIndex < value.length; maskIndex++) {
166
+ const maskChar = mask[maskIndex];
167
+ const valueChar = value[valueIndex];
168
+ switch (maskChar) {
169
+ case '#':
170
+ if (/\d/.test(valueChar)) {
171
+ result += valueChar;
172
+ valueIndex++;
173
+ }
174
+ else if (showMaskType) {
175
+ result += '_';
176
+ }
177
+ else {
178
+ return result;
179
+ }
180
+ break;
181
+ case 'a':
182
+ if (/[a-zA-Z]/.test(valueChar)) {
183
+ result += valueChar;
184
+ valueIndex++;
185
+ }
186
+ else if (showMaskType) {
187
+ result += '_';
188
+ }
189
+ else {
190
+ return result;
191
+ }
192
+ break;
193
+ case '*':
194
+ if (/[a-zA-Z0-9]/.test(valueChar)) {
195
+ result += valueChar;
196
+ valueIndex++;
197
+ }
198
+ else if (showMaskType) {
199
+ result += '_';
200
+ }
201
+ else {
202
+ return result;
203
+ }
204
+ break;
205
+ default:
206
+ result += maskChar;
207
+ if (maskChar === valueChar && valueIndex === maskIndex) {
208
+ valueIndex++;
209
+ }
210
+ }
211
+ }
212
+ return result;
213
+ }
214
+
215
+ class MaskPipe {
216
+ transform(value, mask) {
217
+ return maskTransform(value, mask);
218
+ }
219
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: MaskPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
220
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.0.0", ngImport: i0, type: MaskPipe, isStandalone: true, name: "mask" }); }
221
+ }
222
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: MaskPipe, decorators: [{
223
+ type: Pipe,
224
+ args: [{
225
+ name: 'mask',
226
+ }]
227
+ }] });
228
+
229
+ /**
230
+ * Generated bundle index. Do not edit.
231
+ */
232
+
233
+ export { Mask, MaskPipe };
234
+ //# sourceMappingURL=ngbase-adk-mask.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngbase-adk-mask.mjs","sources":["../../../projects/adk/mask/mask.ts","../../../projects/adk/mask/mask-pipe.ts","../../../projects/adk/mask/ngbase-adk-mask.ts"],"sourcesContent":["import {\n afterRenderEffect,\n Directive,\n ElementRef,\n inject,\n input,\n linkedSignal,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { InputBase } from '@ngbase/adk/form-field';\n\n@Directive({\n selector: '[ngbMask]',\n hostDirectives: [InputBase],\n host: {\n '(keydown)': 'onKeyDown($event)',\n '(paste)': 'onPaste($event)',\n },\n})\nexport class Mask {\n // Dependencies\n private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n readonly control = inject(NgControl, { optional: true });\n private readonly inputC = inject(InputBase);\n\n // Inputs\n readonly ngbMask = input<string>('');\n readonly showMaskType = input(false);\n\n readonly localValue = linkedSignal(() => (this.inputC.value() as string) ?? '');\n // private lastValue = '';\n\n constructor() {\n // this.control?.valueChanges?.subscribe(value => {\n // if (value !== this.lastValue) this.handleValue(value);\n // });\n\n afterRenderEffect(() => {\n const mask = this.ngbMask();\n const value = this.localValue();\n this.el.nativeElement.value = this.updateView(value, mask);\n });\n }\n\n onKeyDown(event: KeyboardEvent): void {\n // console.log('onKeyDown', event);\n const input = event.target as HTMLInputElement;\n const keyCode = event.key;\n\n // Allow navigation keys\n if (\n [\n 'ArrowLeft',\n 'ArrowRight',\n 'Home',\n 'End',\n 'Tab',\n 'Backspace',\n 'Delete',\n 'Shift',\n 'Meta',\n 'Control',\n 'Alt',\n 'Escape',\n 'CapsLock',\n ].includes(keyCode)\n ) {\n return;\n }\n\n event.preventDefault();\n const cursorPos = input.selectionStart || 0;\n const key = event.key;\n\n // Get the current value and mask\n const currentValue = input.value;\n const mask = this.ngbMask();\n\n // Check if the key matches the mask at current position\n if (this.isValidChar(key, this.getCurrentMaskChar(mask, cursorPos))) {\n // Insert the character at cursor position\n const newValue =\n currentValue.substring(0, cursorPos) + key + currentValue.substring(cursorPos);\n\n this.handleValue(newValue, cursorPos);\n }\n }\n\n getCurrentMaskChar(mask: string, cursorPos: number): string {\n // we only have to check cursor position and have to skip non-mask characters\n for (let i = cursorPos; i < mask.length; i++) {\n if (mask[i] !== '#' && mask[i] !== 'a' && mask[i] !== '*') {\n continue;\n }\n return mask[i];\n }\n return '';\n }\n\n onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const input = event.target as HTMLInputElement;\n const cursorPos = input.selectionStart || 0;\n const pastedText = event.clipboardData?.getData('text') || '';\n\n const currentValue = input.value;\n const beforeCursor = currentValue.substring(0, cursorPos);\n const afterCursor = currentValue.substring(cursorPos);\n\n const newValue = beforeCursor + pastedText + afterCursor;\n this.handleValue(newValue, cursorPos);\n }\n\n private isValidChar(char: string, maskChar: string): boolean {\n switch (maskChar) {\n case '#':\n return /\\d/.test(char);\n case 'a':\n return /[a-zA-Z]/.test(char);\n case '*':\n return /[a-zA-Z0-9]/.test(char);\n default:\n return char === maskChar;\n }\n }\n\n handleValue(value: string, cursorPos?: number) {\n // Apply mask and update view\n const maskedValue = this.updateView(value);\n // Update actualValue\n const actualValue = this.unmask(maskedValue);\n\n this.updateLocalValue(actualValue, actualValue !== value);\n\n // Set cursor position after update\n // if (cursorPos !== undefined) {\n // setTimeout(() => {\n // const newPos = this.calculateCursorPosition(maskedValue, cursorPos);\n // this.el.nativeElement.setSelectionRange(newPos, newPos);\n // });\n // }\n }\n\n private calculateCursorPosition(maskedValue: string, oldPos: number): number {\n const mask = this.ngbMask();\n let newPos = oldPos;\n\n // Move cursor past any fixed mask characters\n while (newPos < mask.length && !'#a*'.includes(mask[newPos])) {\n newPos++;\n }\n\n return Math.min(newPos, maskedValue.length);\n }\n\n private updateLocalValue(value: string, emit = true) {\n this.inputC.setValue(value);\n // this.lastValue = value;\n this.localValue.set(value);\n if (emit) this.control?.control?.setValue(value);\n }\n\n writeValue(value: string): void {\n this.handleValue(value);\n }\n\n private updateView(value: string, mask = this.ngbMask()): string {\n return maskTransform(value, mask);\n }\n\n private unmask(value: string): string {\n const mask = this.ngbMask();\n let unmaskedValue = '';\n let valueIndex = 0;\n\n for (let maskIndex = 0; maskIndex < mask.length && valueIndex < value.length; maskIndex++) {\n const maskChar = mask[maskIndex];\n const valueChar = value[valueIndex];\n\n if ('#a*'.includes(maskChar)) {\n unmaskedValue += valueChar;\n valueIndex++;\n } else if (maskChar === valueChar) {\n valueIndex++;\n }\n }\n\n return unmaskedValue;\n }\n}\n\nexport function maskTransform(value: string, mask: string, showMaskType = false): string {\n let result = '';\n let valueIndex = 0;\n\n for (let maskIndex = 0; maskIndex < mask.length && valueIndex < value.length; maskIndex++) {\n const maskChar = mask[maskIndex];\n const valueChar = value[valueIndex];\n\n switch (maskChar) {\n case '#':\n if (/\\d/.test(valueChar)) {\n result += valueChar;\n valueIndex++;\n } else if (showMaskType) {\n result += '_';\n } else {\n return result;\n }\n break;\n case 'a':\n if (/[a-zA-Z]/.test(valueChar)) {\n result += valueChar;\n valueIndex++;\n } else if (showMaskType) {\n result += '_';\n } else {\n return result;\n }\n break;\n case '*':\n if (/[a-zA-Z0-9]/.test(valueChar)) {\n result += valueChar;\n valueIndex++;\n } else if (showMaskType) {\n result += '_';\n } else {\n return result;\n }\n break;\n default:\n result += maskChar;\n if (maskChar === valueChar && valueIndex === maskIndex) {\n valueIndex++;\n }\n }\n }\n\n return result;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { maskTransform } from './mask';\n\n@Pipe({\n name: 'mask',\n})\nexport class MaskPipe implements PipeTransform {\n transform(value: string, mask: string): string {\n return maskTransform(value, mask);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}