@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,546 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, input, inject, output, Directive, ElementRef, effect, viewChild, TemplateRef, contentChildren, Component, ChangeDetectionStrategy, signal, afterNextRender } from '@angular/core';
3
+ import { documentListener, uniqueId } from '@ngbase/adk/utils';
4
+ import * as i1 from '@ngbase/adk/a11y';
5
+ import { AccessibleGroup, AccessibleItem } from '@ngbase/adk/a11y';
6
+ import { Keys } from '@ngbase/adk/keys';
7
+ import { NgbList } from '@ngbase/adk/list';
8
+ import { NgbOption } from '@ngbase/adk/select';
9
+ import { Subject, BehaviorSubject } from 'rxjs';
10
+ import { injectDirectionality } from '@ngbase/adk/bidi';
11
+ import { ngbPopoverPortal } from '@ngbase/adk/popover';
12
+
13
+ class MenuService {
14
+ constructor() {
15
+ this.currentRef = null;
16
+ }
17
+ close() {
18
+ this.currentRef?.close();
19
+ this.currentRef = null;
20
+ }
21
+ setCurrentRef(ref) {
22
+ this.close();
23
+ this.currentRef = ref;
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: MenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
26
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: MenuService, providedIn: 'root' }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: MenuService, decorators: [{
29
+ type: Injectable,
30
+ args: [{ providedIn: 'root' }]
31
+ }] });
32
+ class NgbContextMenu {
33
+ constructor() {
34
+ this.ngbContextMenu = input.required();
35
+ this.menuService = inject(MenuService);
36
+ this.ctxOpen = output();
37
+ this.ctxClose = output();
38
+ this.listeners = (() => {
39
+ const ev = ['click', 'contextmenu'].map(ev => documentListener(ev, () => this.menuService.close(), { once: true, lazy: true }));
40
+ return { on: () => ev.forEach(e => e.on()), off: () => ev.forEach(e => e.off()) };
41
+ })();
42
+ }
43
+ open(ev) {
44
+ ev.preventDefault();
45
+ ev.stopPropagation();
46
+ const menu = this.ngbContextMenu();
47
+ menu.open({
48
+ target: ev.target,
49
+ client: { x: ev.clientX, y: ev.clientY, w: 1, h: 1 },
50
+ maxHeight: '400px',
51
+ backdrop: false,
52
+ offset: 0,
53
+ });
54
+ this.ctxOpen.emit(true);
55
+ this.menuService.setCurrentRef(menu.diaRef);
56
+ menu.diaRef.afterClosed.subscribe(() => {
57
+ this.ctxClose.emit(true);
58
+ this.listeners.off();
59
+ });
60
+ this.listeners.on();
61
+ }
62
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgbContextMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
63
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.0", type: NgbContextMenu, isStandalone: true, selector: "[ngbContextMenu]", inputs: { ngbContextMenu: { classPropertyName: "ngbContextMenu", publicName: "ngbContextMenu", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { ctxOpen: "ctxOpen", ctxClose: "ctxClose" }, host: { listeners: { "contextmenu": "open($event)" } }, ngImport: i0 }); }
64
+ }
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgbContextMenu, decorators: [{
66
+ type: Directive,
67
+ args: [{
68
+ selector: '[ngbContextMenu]',
69
+ host: {
70
+ '(contextmenu)': 'open($event)',
71
+ },
72
+ }]
73
+ }] });
74
+
75
+ class NgbMentionTrigger {
76
+ constructor() {
77
+ this.el = inject(ElementRef);
78
+ this.ngbMentionTrigger = input.required();
79
+ this.options = input();
80
+ this.key = input.required();
81
+ this.search = output();
82
+ }
83
+ open() {
84
+ // open the menu in a position where the cursor is at '@' character
85
+ const { selectionStart } = this.el.nativeElement;
86
+ // check the word before the cursor which should starts with the key character
87
+ const word = this.getCurrentWord();
88
+ if (word.length <= 0 || word[0] !== this.key()) {
89
+ this.close?.();
90
+ this.close = undefined;
91
+ return;
92
+ }
93
+ this.search.emit(word.substring(1));
94
+ if (this.close) {
95
+ return;
96
+ }
97
+ let client = null;
98
+ if (!this.options()?.focus) {
99
+ client = this.getPositionAt(selectionStart);
100
+ // console.log('x', x, 'y', y, 'w', w, 'h', h);
101
+ }
102
+ // open the menu at the cursor position
103
+ const menu = this.ngbMentionTrigger();
104
+ menu.open({
105
+ maxHeight: '400px',
106
+ target: this.el.nativeElement,
107
+ client,
108
+ width: this.options()?.width === 'full' ? 'target' : undefined,
109
+ });
110
+ this.close = menu.close;
111
+ }
112
+ getCurrentWord() {
113
+ const textarea = this.el.nativeElement;
114
+ // Get the current cursor position in the textarea
115
+ const cursorPosition = textarea.selectionStart;
116
+ // Get the text up to the cursor position
117
+ const textUpToCursor = textarea.value.substring(0, cursorPosition);
118
+ // Find the start of the current word
119
+ const wordStart = textUpToCursor.lastIndexOf(' ') + 1;
120
+ // Get the text after the cursor position up to the end of the textarea
121
+ const textAfterCursor = textarea.value.substring(cursorPosition);
122
+ // Find the end of the current word
123
+ const wordEnd = textAfterCursor.indexOf(' ');
124
+ const currentWord = textarea.value.substring(wordStart, cursorPosition + (wordEnd > -1 ? wordEnd : textAfterCursor.length));
125
+ return currentWord;
126
+ }
127
+ getPositionAt(index) {
128
+ const textarea = this.el.nativeElement;
129
+ const text = textarea.value.substring(0, index);
130
+ const mirror = document.createElement('div');
131
+ const cursor = document.createElement('span');
132
+ const style = window.getComputedStyle(textarea);
133
+ const textareaRect = textarea.getBoundingClientRect();
134
+ // Setup the mirror div to accurately reflect the textarea's position and styles
135
+ mirror.style.position = 'fixed';
136
+ mirror.style.top = `${textareaRect.top}px`; // Position at the same vertical position
137
+ mirror.style.left = `${textareaRect.left}px`; // Position at the same horizontal position
138
+ mirror.style.visibility = 'hidden';
139
+ mirror.style.whiteSpace = 'pre-wrap';
140
+ mirror.style.wordWrap = 'break-word';
141
+ mirror.style.fontFamily = style.fontFamily;
142
+ mirror.style.fontSize = style.fontSize;
143
+ mirror.style.lineHeight = style.lineHeight;
144
+ mirror.style.padding = style.padding;
145
+ mirror.style.border = style.border;
146
+ mirror.style.width = `${textarea.offsetWidth}px`; // Ensure width matches
147
+ mirror.style.height = `${textarea.offsetHeight}px`; // Mat
148
+ // Append mirror to the body to measure
149
+ document.body.appendChild(mirror);
150
+ mirror.textContent = text.substring(0, index - 1);
151
+ cursor.textContent = '|';
152
+ mirror.appendChild(cursor);
153
+ const rect = cursor.getBoundingClientRect();
154
+ document.body.removeChild(mirror);
155
+ // Return the position relative to the viewport
156
+ return {
157
+ x: rect.left,
158
+ y: rect.top,
159
+ h: rect.height,
160
+ w: rect.width,
161
+ };
162
+ }
163
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgbMentionTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
164
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.0", type: NgbMentionTrigger, isStandalone: true, selector: "[ngbMentionTrigger]", inputs: { ngbMentionTrigger: { classPropertyName: "ngbMentionTrigger", publicName: "ngbMentionTrigger", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { search: "search" }, host: { listeners: { "input": "open()" } }, ngImport: i0 }); }
165
+ }
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgbMentionTrigger, decorators: [{
167
+ type: Directive,
168
+ args: [{
169
+ selector: '[ngbMentionTrigger]',
170
+ host: {
171
+ '(input)': 'open()',
172
+ },
173
+ }]
174
+ }] });
175
+
176
+ class MenuGroup {
177
+ constructor() {
178
+ this.menu = inject(NgbMenu);
179
+ this.allyGroup = inject(AccessibleGroup);
180
+ // we need to wait for angular to check the changes
181
+ // on component creation this data is not available
182
+ effect(() => {
183
+ this.allyGroup._ayId.set(this.menu.diaRef.options.ayId);
184
+ this.allyGroup._isPopup.set(true);
185
+ });
186
+ }
187
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: MenuGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
188
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0", type: MenuGroup, isStandalone: true, selector: "[ngbMenuGroup]", host: { listeners: { "click": "menu.close()" } }, hostDirectives: [{ directive: i1.AccessibleGroup }], ngImport: i0 }); }
189
+ }
190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: MenuGroup, decorators: [{
191
+ type: Directive,
192
+ args: [{
193
+ selector: '[ngbMenuGroup]',
194
+ hostDirectives: [AccessibleGroup],
195
+ host: {
196
+ '(click)': 'menu.close()',
197
+ },
198
+ }]
199
+ }], ctorParameters: () => [] });
200
+ class NgbMenu {
201
+ constructor() {
202
+ this.dir = injectDirectionality();
203
+ this.popover = ngbPopoverPortal();
204
+ this.menuEl = viewChild(MenuGroup, {
205
+ read: ElementRef,
206
+ });
207
+ this.container = viewChild.required('container', { read: TemplateRef });
208
+ this.options = contentChildren(NgbOption, { descendants: true });
209
+ this.lists = contentChildren(NgbList, { descendants: true });
210
+ this.manager = new Keys();
211
+ this.selected = output();
212
+ this.ayId = uniqueId();
213
+ this.events = new Subject();
214
+ this.activeOption = new BehaviorSubject(null);
215
+ this.isOpen = false;
216
+ this.close = () => {
217
+ if (!this.isOpen)
218
+ return;
219
+ this.diaRef?.close();
220
+ this.activeOption.next(null);
221
+ this.isOpen = false;
222
+ };
223
+ effect(cleanup => {
224
+ const options = this.options().length ? this.options() : this.lists();
225
+ options.forEach(option => {
226
+ const mouseover = () => {
227
+ if (this.activeOption.getValue() !== option) {
228
+ this.activeOption.next(option);
229
+ }
230
+ };
231
+ option.el.nativeElement.addEventListener('mouseover', mouseover);
232
+ cleanup(() => option.el.nativeElement.removeEventListener('mouseover', mouseover));
233
+ });
234
+ });
235
+ effect(cleanup => {
236
+ const el = this.menuEl()?.nativeElement;
237
+ if (!el) {
238
+ return;
239
+ }
240
+ const enter = (ev) => this.events.next({ event: ev, type: 'enter' });
241
+ const leave = (ev) => this.events.next({ event: ev, type: 'leave' });
242
+ // we need to fire the mouseenter event
243
+ el.addEventListener('mouseenter', enter);
244
+ el.addEventListener('mouseleave', leave);
245
+ cleanup(() => {
246
+ el.removeEventListener('mouseenter', enter);
247
+ el.removeEventListener('mouseleave', leave);
248
+ });
249
+ });
250
+ }
251
+ open(options, subMenu = false) {
252
+ const rtl = this.dir.isRtl();
253
+ const { diaRef } = this.popover.open(this.container(), {
254
+ ...this.options(),
255
+ backdrop: !subMenu,
256
+ position: subMenu ? (rtl ? 'left' : 'right') : rtl ? 'br' : 'bl',
257
+ offset: 4,
258
+ ayId: this.ayId,
259
+ ...options,
260
+ });
261
+ this.diaRef = diaRef;
262
+ this.opened();
263
+ }
264
+ opened() {
265
+ this.isOpen = true;
266
+ this.options().forEach(list => {
267
+ list.setAyId(this.diaRef.options.ayId);
268
+ });
269
+ this.lists().forEach(list => {
270
+ list.setAyId(this.diaRef.options.ayId);
271
+ });
272
+ }
273
+ get rootParent() {
274
+ return this.parentMenuTrigger?.rootParent || this;
275
+ }
276
+ ngOnDestroy() {
277
+ this.close();
278
+ }
279
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgbMenu, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
280
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.0", type: NgbMenu, isStandalone: true, selector: "[ngbMenu]", outputs: { selected: "selected" }, queries: [{ propertyName: "options", predicate: NgbOption, descendants: true, isSignal: true }, { propertyName: "lists", predicate: NgbList, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "menuEl", first: true, predicate: MenuGroup, descendants: true, read: ElementRef, isSignal: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: TemplateRef, isSignal: true }], exportAs: ["ngbMenu"], ngImport: i0, template: `
281
+ <ng-template #container>
282
+ <div ngbMenuGroup>
283
+ <ng-content />
284
+ </div>
285
+ </ng-template>
286
+ `, isInline: true, dependencies: [{ kind: "directive", type: MenuGroup, selector: "[ngbMenuGroup]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
287
+ }
288
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgbMenu, decorators: [{
289
+ type: Component,
290
+ args: [{
291
+ selector: '[ngbMenu]',
292
+ exportAs: 'ngbMenu',
293
+ changeDetection: ChangeDetectionStrategy.OnPush,
294
+ imports: [AccessibleGroup, MenuGroup],
295
+ template: `
296
+ <ng-template #container>
297
+ <div ngbMenuGroup>
298
+ <ng-content />
299
+ </div>
300
+ </ng-template>
301
+ `,
302
+ }]
303
+ }], ctorParameters: () => [] });
304
+ const provideMenu = (menu) => ({
305
+ provide: NgbMenu,
306
+ useExisting: menu,
307
+ });
308
+
309
+ class NgbNavigationMenu {
310
+ constructor() {
311
+ this.popover = ngbPopoverPortal();
312
+ this.dir = injectDirectionality();
313
+ this.menus = contentChildren(NgbMenuTrigger, { descendants: true });
314
+ this.hover = input(false);
315
+ this.ayId = uniqueId();
316
+ this.timerId = 0;
317
+ this.clicked = false;
318
+ documentListener('click', () => {
319
+ if (this.close) {
320
+ this.clicked = false;
321
+ this.currentEl = undefined;
322
+ this.close();
323
+ }
324
+ });
325
+ effect(cleanup => {
326
+ const menus = this.menus();
327
+ const hover = this.hover();
328
+ const sub = menus.map(menu => menu.events.subscribe(({ type, menu }) => {
329
+ const isSame = this.currentEl === menu;
330
+ if ((type === 'enter' && (hover || this.clicked)) ||
331
+ (type === 'click' && !hover && !isSame)) {
332
+ this.clicked = true;
333
+ this.currentEl = menu;
334
+ this.open(menu);
335
+ }
336
+ else if (isSame && (hover || type === 'click')) {
337
+ this.scheduleClose();
338
+ }
339
+ }));
340
+ cleanup(() => sub.forEach(x => x.unsubscribe()));
341
+ });
342
+ }
343
+ open(menuTrigger) {
344
+ clearTimeout(this.timerId);
345
+ const menu = menuTrigger.ngbMenuTrigger();
346
+ const target = menuTrigger.el.nativeElement;
347
+ if (this.close) {
348
+ // console.log('navigation menu open existing', menu);
349
+ this.popoverOpen?.replace?.(menu.container());
350
+ this.popoverOpen?.parent.target?.set(target);
351
+ menu.diaRef = this.popoverOpen.diaRef;
352
+ // We need to change the id so that new menu items gets registered for a11y
353
+ menu.diaRef.options.ayId = uniqueId();
354
+ menu.opened();
355
+ return;
356
+ }
357
+ // console.log('navigation menu open');
358
+ this.popoverOpen = this.popover.open(menu.container(), {
359
+ target,
360
+ position: this.dir.isRtl() ? 'br' : 'bl',
361
+ className: 'transition-all',
362
+ ayId: this.ayId,
363
+ backdrop: false,
364
+ });
365
+ menu.diaRef = this.popoverOpen.diaRef;
366
+ if (this.hover()) {
367
+ this.popoverOpen.events.subscribe(e => {
368
+ if (e.type === 'mouseenter') {
369
+ clearTimeout(this.timerId);
370
+ }
371
+ else {
372
+ this.scheduleClose();
373
+ }
374
+ });
375
+ }
376
+ menu.opened();
377
+ this.close = () => {
378
+ menu.close();
379
+ this.close = undefined;
380
+ this.popoverOpen = undefined;
381
+ };
382
+ }
383
+ scheduleClose() {
384
+ clearTimeout(this.timerId);
385
+ this.timerId = setTimeout(() => {
386
+ this.clicked = false;
387
+ this.currentEl = undefined;
388
+ this.close?.();
389
+ }, 200);
390
+ }
391
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgbNavigationMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
392
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "19.0.0", type: NgbNavigationMenu, isStandalone: true, selector: "[ngbNavigationMenu]", inputs: { hover: { classPropertyName: "hover", publicName: "hover", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "menus", predicate: NgbMenuTrigger, descendants: true, isSignal: true }], ngImport: i0 }); }
393
+ }
394
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgbNavigationMenu, decorators: [{
395
+ type: Directive,
396
+ args: [{
397
+ selector: '[ngbNavigationMenu]',
398
+ }]
399
+ }], ctorParameters: () => [] });
400
+
401
+ class NgbMenuTrigger {
402
+ constructor() {
403
+ this.nav = inject(NgbNavigationMenu, { optional: true });
404
+ this.parent = inject(NgbMenu, { optional: true });
405
+ this.el = inject(ElementRef);
406
+ this.a11y = inject(AccessibleItem, { optional: true });
407
+ this.ngbMenuTrigger = input.required();
408
+ this.ngbMenuTriggerData = input();
409
+ this.options = input({});
410
+ this._menuOpen = signal(false);
411
+ this.menuOpen = this._menuOpen.asReadonly();
412
+ this.events = new Subject();
413
+ this.closeParent = true;
414
+ this.delayTimer = 0;
415
+ this.isMouseOverTrigger = false;
416
+ // if a11y is provided, then we should open on keyleft and keyright
417
+ this.a11y?.events.subscribe(ev => {
418
+ if (!this.menu.isOpen && ev.type === 'keyRight') {
419
+ this.open();
420
+ }
421
+ else if (this.menu.isOpen && ev.type === 'keyLeft') {
422
+ this.closeParent = false;
423
+ this.closeMenu();
424
+ }
425
+ });
426
+ afterNextRender(() => {
427
+ this.parent?.activeOption.subscribe(option => {
428
+ if (option?.el.nativeElement === this.el.nativeElement) {
429
+ this.open();
430
+ }
431
+ else if (this.menu.isOpen) {
432
+ this.closeParent = false;
433
+ this.closeMenu();
434
+ }
435
+ });
436
+ // if parent is provided, then this is a sub-menu and we should open on mouseenter and close on mouseleave
437
+ if (this.parent || this.nav) {
438
+ this.el.nativeElement.addEventListener('mouseenter', ev => {
439
+ this.events.next({ event: ev, type: 'enter', menu: this });
440
+ this.isMouseOverTrigger = true;
441
+ if (this.nav) {
442
+ return;
443
+ }
444
+ clearTimeout(this.delayTimer);
445
+ // console.log('mouseenter', this.debugId());
446
+ this.open(ev);
447
+ });
448
+ this.el.nativeElement.addEventListener('mouseleave', ev => {
449
+ this.events.next({ event: ev, type: 'leave', menu: this });
450
+ this.isMouseOverTrigger = false;
451
+ if (this.nav) {
452
+ return;
453
+ }
454
+ });
455
+ }
456
+ });
457
+ }
458
+ get menu() {
459
+ return this.ngbMenuTrigger();
460
+ }
461
+ get rootParent() {
462
+ return this.parent?.rootParent || this.parent;
463
+ }
464
+ clickOpen(ev) {
465
+ ev.preventDefault();
466
+ ev.stopPropagation();
467
+ if (this.nav) {
468
+ this.events.next({ event: ev, type: 'click', menu: this });
469
+ return;
470
+ }
471
+ else {
472
+ this.openMenu();
473
+ }
474
+ }
475
+ open(ev) {
476
+ ev?.preventDefault();
477
+ ev?.stopPropagation();
478
+ this.openMenu();
479
+ }
480
+ closeMenu() {
481
+ this.ngbMenuTrigger().close();
482
+ }
483
+ openMenu() {
484
+ const menu = this.ngbMenuTrigger();
485
+ if (menu.isOpen) {
486
+ return;
487
+ }
488
+ // console.log('open menu', this.parent);
489
+ // const { diaRef, events } = this.popover.open(menu.container()!, {
490
+ // ...this.options(),
491
+ // data: this.ngbMenuTriggerData(),
492
+ // backdrop: !this.parent,
493
+ // target: this.el.nativeElement,
494
+ // position: this.parent ? 'right' : 'bl',
495
+ // offset: 4,
496
+ // ayId: this.ayId(),
497
+ // });
498
+ menu.open({ target: this.el.nativeElement, data: this.ngbMenuTriggerData() }, !!this.parent);
499
+ this._menuOpen.set(true);
500
+ menu.parentMenuTrigger = this;
501
+ // if (this.nav) {
502
+ // events.subscribe(ev => {
503
+ // if (ev.type === 'mouseleave') {
504
+ // this.delayTimer = setTimeout(() => {
505
+ // this.closeMenu();
506
+ // }, 300);
507
+ // } else {
508
+ // clearTimeout(this.delayTimer);
509
+ // }
510
+ // });
511
+ // }
512
+ menu.diaRef?.afterClosed.subscribe(() => {
513
+ if (this.closeParent)
514
+ this.rootParent?.close();
515
+ this.closeParent = true;
516
+ menu.close();
517
+ this._menuOpen.set(false);
518
+ });
519
+ }
520
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgbMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
521
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.0", type: NgbMenuTrigger, isStandalone: true, selector: "[ngbMenuTrigger]", inputs: { ngbMenuTrigger: { classPropertyName: "ngbMenuTrigger", publicName: "ngbMenuTrigger", isSignal: true, isRequired: true, transformFunction: null }, ngbMenuTriggerData: { classPropertyName: "ngbMenuTriggerData", publicName: "ngbMenuTriggerData", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0" }, listeners: { "click": "clickOpen($event)" }, properties: { "attr.aria-expanded": "menuOpen()", "attr.aria-haspopup": "true" } }, exportAs: ["ngbMenuTrigger"], ngImport: i0 }); }
522
+ }
523
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgbMenuTrigger, decorators: [{
524
+ type: Directive,
525
+ args: [{
526
+ selector: '[ngbMenuTrigger]',
527
+ exportAs: 'ngbMenuTrigger',
528
+ host: {
529
+ '(click)': 'clickOpen($event)',
530
+ '[attr.aria-expanded]': 'menuOpen()',
531
+ '[attr.aria-haspopup]': 'true',
532
+ tabindex: '0',
533
+ },
534
+ }]
535
+ }], ctorParameters: () => [] });
536
+
537
+ /*
538
+ * Public API Surface of menu
539
+ */
540
+
541
+ /**
542
+ * Generated bundle index. Do not edit.
543
+ */
544
+
545
+ export { MenuGroup, NgbContextMenu, NgbMentionTrigger, NgbMenu, NgbMenuTrigger, NgbNavigationMenu, provideMenu };
546
+ //# sourceMappingURL=ngbase-adk-menu.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngbase-adk-menu.mjs","sources":["../../../projects/adk/menu/context-menu.ts","../../../projects/adk/menu/mention.ts","../../../projects/adk/menu/menu.ts","../../../projects/adk/menu/navigation-menu.ts","../../../projects/adk/menu/menu-trigger.ts","../../../projects/adk/menu/public-api.ts","../../../projects/adk/menu/ngbase-adk-menu.ts"],"sourcesContent":["import { Directive, inject, Injectable, input, output } from '@angular/core';\nimport { DialogRef } from '@ngbase/adk/portal';\nimport { documentListener } from '@ngbase/adk/utils';\nimport { NgbMenu } from './menu';\n\n@Injectable({ providedIn: 'root' })\nclass MenuService {\n private currentRef: DialogRef<any> | null = null;\n\n close() {\n this.currentRef?.close();\n this.currentRef = null;\n }\n\n setCurrentRef(ref: DialogRef<any>) {\n this.close();\n this.currentRef = ref;\n }\n}\n\n@Directive({\n selector: '[ngbContextMenu]',\n host: {\n '(contextmenu)': 'open($event)',\n },\n})\nexport class NgbContextMenu {\n readonly ngbContextMenu = input.required<NgbMenu>();\n readonly menuService = inject(MenuService);\n\n readonly ctxOpen = output<boolean>();\n readonly ctxClose = output<boolean>();\n\n private listeners = (() => {\n const ev = ['click', 'contextmenu'].map(ev =>\n documentListener(ev, () => this.menuService.close(), { once: true, lazy: true }),\n );\n return { on: () => ev.forEach(e => e.on()), off: () => ev.forEach(e => e.off()) };\n })();\n\n open(ev: MouseEvent) {\n ev.preventDefault();\n ev.stopPropagation();\n const menu = this.ngbContextMenu();\n menu.open({\n target: ev.target as HTMLElement,\n client: { x: ev.clientX, y: ev.clientY, w: 1, h: 1 },\n maxHeight: '400px',\n backdrop: false,\n offset: 0,\n });\n this.ctxOpen.emit(true);\n this.menuService.setCurrentRef(menu.diaRef);\n menu.diaRef.afterClosed.subscribe(() => {\n this.ctxClose.emit(true);\n this.listeners.off();\n });\n this.listeners.on();\n }\n}\n","import { Directive, ElementRef, inject, input, output } from '@angular/core';\nimport { NgbMenu } from './menu';\n\n@Directive({\n selector: '[ngbMentionTrigger]',\n host: {\n '(input)': 'open()',\n },\n})\nexport class NgbMentionTrigger {\n private readonly el = inject<ElementRef<HTMLTextAreaElement>>(ElementRef);\n\n readonly ngbMentionTrigger = input.required<NgbMenu>();\n readonly options = input<{ focus?: 'el'; width?: 'full' }>();\n readonly key = input.required<string>();\n readonly search = output<string>();\n\n private close?: VoidFunction;\n\n open() {\n // open the menu in a position where the cursor is at '@' character\n const { selectionStart } = this.el.nativeElement;\n // check the word before the cursor which should starts with the key character\n const word = this.getCurrentWord();\n if (word.length <= 0 || word[0] !== this.key()) {\n this.close?.();\n this.close = undefined;\n return;\n }\n\n this.search.emit(word.substring(1));\n\n if (this.close) {\n return;\n }\n\n let client = null;\n\n if (!this.options()?.focus) {\n client = this.getPositionAt(selectionStart);\n // console.log('x', x, 'y', y, 'w', w, 'h', h);\n }\n\n // open the menu at the cursor position\n const menu = this.ngbMentionTrigger();\n menu.open({\n maxHeight: '400px',\n target: this.el.nativeElement,\n client,\n width: this.options()?.width === 'full' ? 'target' : undefined,\n });\n this.close = menu.close;\n }\n\n private getCurrentWord() {\n const textarea = this.el.nativeElement;\n // Get the current cursor position in the textarea\n const cursorPosition = textarea.selectionStart;\n\n // Get the text up to the cursor position\n const textUpToCursor = textarea.value.substring(0, cursorPosition);\n\n // Find the start of the current word\n const wordStart = textUpToCursor.lastIndexOf(' ') + 1;\n\n // Get the text after the cursor position up to the end of the textarea\n const textAfterCursor = textarea.value.substring(cursorPosition);\n\n // Find the end of the current word\n const wordEnd = textAfterCursor.indexOf(' ');\n const currentWord = textarea.value.substring(\n wordStart,\n cursorPosition + (wordEnd > -1 ? wordEnd : textAfterCursor.length),\n );\n\n return currentWord;\n }\n\n private getPositionAt(index: number): {\n x: number;\n y: number;\n h: number;\n w: number;\n } {\n const textarea = this.el.nativeElement;\n const text = textarea.value.substring(0, index);\n const mirror = document.createElement('div');\n const cursor = document.createElement('span');\n const style = window.getComputedStyle(textarea);\n const textareaRect = textarea.getBoundingClientRect();\n\n // Setup the mirror div to accurately reflect the textarea's position and styles\n mirror.style.position = 'fixed';\n mirror.style.top = `${textareaRect.top}px`; // Position at the same vertical position\n mirror.style.left = `${textareaRect.left}px`; // Position at the same horizontal position\n mirror.style.visibility = 'hidden';\n mirror.style.whiteSpace = 'pre-wrap';\n mirror.style.wordWrap = 'break-word';\n mirror.style.fontFamily = style.fontFamily;\n mirror.style.fontSize = style.fontSize;\n mirror.style.lineHeight = style.lineHeight;\n mirror.style.padding = style.padding;\n mirror.style.border = style.border;\n mirror.style.width = `${textarea.offsetWidth}px`; // Ensure width matches\n mirror.style.height = `${textarea.offsetHeight}px`; // Mat\n\n // Append mirror to the body to measure\n document.body.appendChild(mirror);\n mirror.textContent = text.substring(0, index - 1);\n cursor.textContent = '|';\n mirror.appendChild(cursor);\n\n const rect = cursor.getBoundingClientRect();\n\n document.body.removeChild(mirror);\n\n // Return the position relative to the viewport\n return {\n x: rect.left,\n y: rect.top,\n h: rect.height,\n w: rect.width,\n };\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n OnDestroy,\n TemplateRef,\n contentChildren,\n effect,\n inject,\n output,\n viewChild,\n} from '@angular/core';\nimport { AccessibleGroup } from '@ngbase/adk/a11y';\nimport { Keys } from '@ngbase/adk/keys';\nimport { NgbList } from '@ngbase/adk/list';\nimport { DialogRef } from '@ngbase/adk/portal';\nimport { NgbOption } from '@ngbase/adk/select';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { NgbMenuTrigger } from './menu-trigger';\nimport { injectDirectionality } from '@ngbase/adk/bidi';\nimport { ngbPopoverPortal, PopoverOptions } from '@ngbase/adk/popover';\nimport { uniqueId } from '@ngbase/adk/utils';\n\n@Directive({\n selector: '[ngbMenuGroup]',\n hostDirectives: [AccessibleGroup],\n host: {\n '(click)': 'menu.close()',\n },\n})\nexport class MenuGroup {\n readonly menu = inject(NgbMenu);\n readonly allyGroup = inject(AccessibleGroup);\n\n constructor() {\n // we need to wait for angular to check the changes\n // on component creation this data is not available\n effect(() => {\n this.allyGroup._ayId.set(this.menu.diaRef.options.ayId!);\n this.allyGroup._isPopup.set(true);\n });\n }\n}\n\n@Component({\n selector: '[ngbMenu]',\n exportAs: 'ngbMenu',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AccessibleGroup, MenuGroup],\n template: `\n <ng-template #container>\n <div ngbMenuGroup>\n <ng-content />\n </div>\n </ng-template>\n `,\n})\nexport class NgbMenu implements OnDestroy {\n readonly dir = injectDirectionality();\n readonly popover = ngbPopoverPortal();\n private readonly menuEl = viewChild<MenuGroup, ElementRef<HTMLDivElement>>(MenuGroup, {\n read: ElementRef,\n });\n readonly container = viewChild.required('container', { read: TemplateRef });\n readonly options = contentChildren(NgbOption, { descendants: true });\n readonly lists = contentChildren(NgbList, { descendants: true });\n readonly manager = new Keys();\n readonly selected = output<string>();\n readonly ayId = uniqueId();\n\n // this will be injected by the MenuTrigger directive\n parentMenuTrigger?: NgbMenuTrigger;\n\n // this will be injected by the MenuTrigger directive\n diaRef!: DialogRef;\n readonly events = new Subject<{ event: MouseEvent; type: 'enter' | 'leave' }>();\n readonly activeOption = new BehaviorSubject<NgbOption<any> | NgbList | null>(null);\n isOpen = false;\n\n constructor() {\n effect(cleanup => {\n const options = this.options().length ? this.options() : this.lists();\n options.forEach(option => {\n const mouseover = () => {\n if (this.activeOption.getValue() !== option) {\n this.activeOption.next(option);\n }\n };\n option.el.nativeElement.addEventListener('mouseover', mouseover);\n cleanup(() => option.el.nativeElement.removeEventListener('mouseover', mouseover));\n });\n });\n effect(cleanup => {\n const el = this.menuEl()?.nativeElement;\n if (!el) {\n return;\n }\n const enter = (ev: MouseEvent) => this.events.next({ event: ev, type: 'enter' });\n const leave = (ev: MouseEvent) => this.events.next({ event: ev, type: 'leave' });\n // we need to fire the mouseenter event\n el.addEventListener('mouseenter', enter);\n el.addEventListener('mouseleave', leave);\n cleanup(() => {\n el.removeEventListener('mouseenter', enter);\n el.removeEventListener('mouseleave', leave);\n });\n });\n }\n\n open(options: PopoverOptions, subMenu: boolean = false) {\n const rtl = this.dir.isRtl();\n const { diaRef } = this.popover.open(this.container()!, {\n ...this.options(),\n backdrop: !subMenu,\n position: subMenu ? (rtl ? 'left' : 'right') : rtl ? 'br' : 'bl',\n offset: 4,\n ayId: this.ayId,\n ...options,\n });\n this.diaRef = diaRef;\n this.opened();\n }\n\n opened() {\n this.isOpen = true;\n this.options().forEach(list => {\n list.setAyId(this.diaRef.options.ayId!);\n });\n this.lists().forEach(list => {\n list.setAyId(this.diaRef.options.ayId!);\n });\n }\n\n get rootParent(): NgbMenu | undefined {\n return this.parentMenuTrigger?.rootParent || this;\n }\n\n close = () => {\n if (!this.isOpen) return;\n this.diaRef?.close();\n this.activeOption.next(null);\n this.isOpen = false;\n };\n\n ngOnDestroy() {\n this.close();\n }\n}\n\nexport const provideMenu = (menu: typeof NgbMenu) => ({\n provide: NgbMenu,\n useExisting: menu,\n});\n","import { Directive, contentChildren, effect, input } from '@angular/core';\nimport { injectDirectionality } from '@ngbase/adk/bidi';\nimport { PopoverOpen, ngbPopoverPortal } from '@ngbase/adk/popover';\nimport { documentListener, uniqueId } from '@ngbase/adk/utils';\nimport { NgbMenuTrigger } from './menu-trigger';\n\n@Directive({\n selector: '[ngbNavigationMenu]',\n})\nexport class NgbNavigationMenu {\n private popover = ngbPopoverPortal();\n private readonly dir = injectDirectionality();\n private readonly menus = contentChildren(NgbMenuTrigger, { descendants: true });\n\n readonly hover = input<boolean>(false);\n\n private ayId = uniqueId();\n close?: VoidFunction;\n private timerId: any = 0;\n private popoverOpen?: PopoverOpen<any>;\n private clicked = false;\n private currentEl?: NgbMenuTrigger;\n\n constructor() {\n documentListener('click', () => {\n if (this.close) {\n this.clicked = false;\n this.currentEl = undefined;\n this.close();\n }\n });\n effect(cleanup => {\n const menus = this.menus();\n const hover = this.hover();\n const sub = menus.map(menu =>\n menu.events.subscribe(({ type, menu }) => {\n const isSame = this.currentEl === menu;\n if (\n (type === 'enter' && (hover || this.clicked)) ||\n (type === 'click' && !hover && !isSame)\n ) {\n this.clicked = true;\n this.currentEl = menu;\n this.open(menu);\n } else if (isSame && (hover || type === 'click')) {\n this.scheduleClose();\n }\n }),\n );\n cleanup(() => sub.forEach(x => x.unsubscribe()));\n });\n }\n\n open(menuTrigger: NgbMenuTrigger) {\n clearTimeout(this.timerId);\n const menu = menuTrigger.ngbMenuTrigger();\n const target = menuTrigger.el.nativeElement;\n if (this.close) {\n // console.log('navigation menu open existing', menu);\n this.popoverOpen?.replace?.(menu.container()!);\n this.popoverOpen?.parent.target?.set(target);\n menu.diaRef = this.popoverOpen!.diaRef;\n // We need to change the id so that new menu items gets registered for a11y\n menu.diaRef.options.ayId = uniqueId();\n menu.opened();\n return;\n }\n // console.log('navigation menu open');\n\n this.popoverOpen = this.popover.open(menu.container()!, {\n target,\n position: this.dir.isRtl() ? 'br' : 'bl',\n className: 'transition-all',\n ayId: this.ayId,\n backdrop: false,\n });\n menu.diaRef = this.popoverOpen.diaRef;\n if (this.hover()) {\n this.popoverOpen.events.subscribe(e => {\n if (e.type === 'mouseenter') {\n clearTimeout(this.timerId);\n } else {\n this.scheduleClose();\n }\n });\n }\n menu.opened();\n this.close = () => {\n menu.close();\n this.close = undefined;\n this.popoverOpen = undefined;\n };\n }\n\n private scheduleClose() {\n clearTimeout(this.timerId);\n this.timerId = setTimeout(() => {\n this.clicked = false;\n this.currentEl = undefined;\n this.close?.();\n }, 200);\n }\n}\n","import { Directive, ElementRef, afterNextRender, inject, input, signal } from '@angular/core';\nimport { AccessibleItem } from '@ngbase/adk/a11y';\nimport { DialogOptions } from '@ngbase/adk/portal';\nimport { Subject } from 'rxjs';\nimport { NgbMenu } from './menu';\nimport { NgbNavigationMenu } from './navigation-menu';\n\n@Directive({\n selector: '[ngbMenuTrigger]',\n exportAs: 'ngbMenuTrigger',\n host: {\n '(click)': 'clickOpen($event)',\n '[attr.aria-expanded]': 'menuOpen()',\n '[attr.aria-haspopup]': 'true',\n tabindex: '0',\n },\n})\nexport class NgbMenuTrigger {\n private readonly nav = inject(NgbNavigationMenu, { optional: true });\n private readonly parent = inject(NgbMenu, { optional: true });\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly a11y = inject(AccessibleItem, { optional: true });\n\n readonly ngbMenuTrigger = input.required<NgbMenu>();\n readonly ngbMenuTriggerData = input();\n readonly options = input<DialogOptions>({});\n\n private readonly _menuOpen = signal<boolean>(false);\n readonly menuOpen = this._menuOpen.asReadonly();\n readonly events = new Subject<{\n event: MouseEvent;\n type: 'enter' | 'leave' | 'click';\n menu: NgbMenuTrigger;\n }>();\n private closeParent = true;\n private delayTimer: any = 0;\n private isMouseOverTrigger = false;\n\n constructor() {\n // if a11y is provided, then we should open on keyleft and keyright\n this.a11y?.events.subscribe(ev => {\n if (!this.menu.isOpen && ev.type === 'keyRight') {\n this.open();\n } else if (this.menu.isOpen && ev.type === 'keyLeft') {\n this.closeParent = false;\n this.closeMenu();\n }\n });\n afterNextRender(() => {\n this.parent?.activeOption.subscribe(option => {\n if (option?.el.nativeElement === this.el.nativeElement) {\n this.open();\n } else if (this.menu.isOpen) {\n this.closeParent = false;\n this.closeMenu();\n }\n });\n // if parent is provided, then this is a sub-menu and we should open on mouseenter and close on mouseleave\n if (this.parent || this.nav) {\n this.el.nativeElement.addEventListener('mouseenter', ev => {\n this.events.next({ event: ev, type: 'enter', menu: this });\n this.isMouseOverTrigger = true;\n if (this.nav) {\n return;\n }\n clearTimeout(this.delayTimer);\n // console.log('mouseenter', this.debugId());\n this.open(ev);\n });\n this.el.nativeElement.addEventListener('mouseleave', ev => {\n this.events.next({ event: ev, type: 'leave', menu: this });\n this.isMouseOverTrigger = false;\n if (this.nav) {\n return;\n }\n });\n }\n });\n }\n\n private get menu() {\n return this.ngbMenuTrigger();\n }\n\n get rootParent() {\n return this.parent?.rootParent || this.parent;\n }\n\n clickOpen(ev: MouseEvent) {\n ev.preventDefault();\n ev.stopPropagation();\n if (this.nav) {\n this.events.next({ event: ev, type: 'click', menu: this });\n return;\n } else {\n this.openMenu();\n }\n }\n\n private open(ev?: MouseEvent) {\n ev?.preventDefault();\n ev?.stopPropagation();\n this.openMenu();\n }\n\n private closeMenu() {\n this.ngbMenuTrigger().close();\n }\n\n openMenu() {\n const menu = this.ngbMenuTrigger();\n if (menu.isOpen) {\n return;\n }\n // console.log('open menu', this.parent);\n // const { diaRef, events } = this.popover.open(menu.container()!, {\n // ...this.options(),\n // data: this.ngbMenuTriggerData(),\n // backdrop: !this.parent,\n // target: this.el.nativeElement,\n // position: this.parent ? 'right' : 'bl',\n // offset: 4,\n // ayId: this.ayId(),\n // });\n menu.open({ target: this.el.nativeElement, data: this.ngbMenuTriggerData() }, !!this.parent);\n this._menuOpen.set(true);\n menu.parentMenuTrigger = this;\n // if (this.nav) {\n // events.subscribe(ev => {\n // if (ev.type === 'mouseleave') {\n // this.delayTimer = setTimeout(() => {\n // this.closeMenu();\n // }, 300);\n // } else {\n // clearTimeout(this.delayTimer);\n // }\n // });\n // }\n menu.diaRef?.afterClosed.subscribe(() => {\n if (this.closeParent) this.rootParent?.close();\n this.closeParent = true;\n menu.close();\n this._menuOpen.set(false);\n });\n }\n}\n","/*\n * Public API Surface of menu\n */\n\nexport * from './context-menu';\nexport * from './mention';\nexport * from './menu';\nexport * from './menu-trigger';\nexport * from './navigation-menu';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}