@ngbase/adk 0.1.17 → 0.1.19

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 (205) hide show
  1. package/fesm2022/ngbase-adk-a11y.mjs +42 -42
  2. package/fesm2022/ngbase-adk-a11y.mjs.map +1 -1
  3. package/fesm2022/ngbase-adk-accordion.mjs +20 -26
  4. package/fesm2022/ngbase-adk-accordion.mjs.map +1 -1
  5. package/fesm2022/ngbase-adk-autocomplete.mjs +11 -11
  6. package/fesm2022/ngbase-adk-autocomplete.mjs.map +1 -1
  7. package/fesm2022/ngbase-adk-avatar.mjs +13 -13
  8. package/fesm2022/ngbase-adk-avatar.mjs.map +1 -1
  9. package/fesm2022/ngbase-adk-bidi.mjs +3 -3
  10. package/fesm2022/ngbase-adk-bidi.mjs.map +1 -1
  11. package/fesm2022/ngbase-adk-breadcrumb.mjs +14 -14
  12. package/fesm2022/ngbase-adk-breadcrumb.mjs.map +1 -1
  13. package/fesm2022/ngbase-adk-cache.mjs +3 -3
  14. package/fesm2022/ngbase-adk-cache.mjs.map +1 -1
  15. package/fesm2022/ngbase-adk-carousel.mjs +18 -18
  16. package/fesm2022/ngbase-adk-carousel.mjs.map +1 -1
  17. package/fesm2022/ngbase-adk-checkbox.mjs +15 -21
  18. package/fesm2022/ngbase-adk-checkbox.mjs.map +1 -1
  19. package/fesm2022/ngbase-adk-chip.mjs +12 -12
  20. package/fesm2022/ngbase-adk-chip.mjs.map +1 -1
  21. package/fesm2022/ngbase-adk-clipboard.mjs +7 -5
  22. package/fesm2022/ngbase-adk-clipboard.mjs.map +1 -1
  23. package/fesm2022/ngbase-adk-collections.mjs.map +1 -1
  24. package/fesm2022/ngbase-adk-color-picker.mjs +44 -53
  25. package/fesm2022/ngbase-adk-color-picker.mjs.map +1 -1
  26. package/fesm2022/ngbase-adk-cookies.mjs +3 -3
  27. package/fesm2022/ngbase-adk-cookies.mjs.map +1 -1
  28. package/fesm2022/ngbase-adk-datepicker.mjs +70 -89
  29. package/fesm2022/ngbase-adk-datepicker.mjs.map +1 -1
  30. package/fesm2022/ngbase-adk-dialog.mjs +17 -39
  31. package/fesm2022/ngbase-adk-dialog.mjs.map +1 -1
  32. package/fesm2022/ngbase-adk-drag.mjs +20 -20
  33. package/fesm2022/ngbase-adk-drag.mjs.map +1 -1
  34. package/fesm2022/ngbase-adk-form-field.mjs +65 -118
  35. package/fesm2022/ngbase-adk-form-field.mjs.map +1 -1
  36. package/fesm2022/ngbase-adk-hover-card.mjs +5 -5
  37. package/fesm2022/ngbase-adk-hover-card.mjs.map +1 -1
  38. package/fesm2022/ngbase-adk-icon.mjs +9 -11
  39. package/fesm2022/ngbase-adk-icon.mjs.map +1 -1
  40. package/fesm2022/ngbase-adk-inline-edit.mjs +27 -35
  41. package/fesm2022/ngbase-adk-inline-edit.mjs.map +1 -1
  42. package/fesm2022/ngbase-adk-jwt.mjs +6 -6
  43. package/fesm2022/ngbase-adk-jwt.mjs.map +1 -1
  44. package/fesm2022/ngbase-adk-keys.mjs +6 -6
  45. package/fesm2022/ngbase-adk-keys.mjs.map +1 -1
  46. package/fesm2022/ngbase-adk-layout.mjs.map +1 -1
  47. package/fesm2022/ngbase-adk-list.mjs +10 -10
  48. package/fesm2022/ngbase-adk-list.mjs.map +1 -1
  49. package/fesm2022/ngbase-adk-mask.mjs +8 -8
  50. package/fesm2022/ngbase-adk-mask.mjs.map +1 -1
  51. package/fesm2022/ngbase-adk-menu.mjs +69 -79
  52. package/fesm2022/ngbase-adk-menu.mjs.map +1 -1
  53. package/fesm2022/ngbase-adk-network.mjs +3 -3
  54. package/fesm2022/ngbase-adk-network.mjs.map +1 -1
  55. package/fesm2022/ngbase-adk-otp.mjs +24 -45
  56. package/fesm2022/ngbase-adk-otp.mjs.map +1 -1
  57. package/fesm2022/ngbase-adk-pagination.mjs +9 -9
  58. package/fesm2022/ngbase-adk-pagination.mjs.map +1 -1
  59. package/fesm2022/ngbase-adk-popover.mjs +120 -89
  60. package/fesm2022/ngbase-adk-popover.mjs.map +1 -1
  61. package/fesm2022/ngbase-adk-portal.mjs +139 -47
  62. package/fesm2022/ngbase-adk-portal.mjs.map +1 -1
  63. package/fesm2022/ngbase-adk-progress.mjs +7 -7
  64. package/fesm2022/ngbase-adk-progress.mjs.map +1 -1
  65. package/fesm2022/ngbase-adk-radio.mjs +20 -27
  66. package/fesm2022/ngbase-adk-radio.mjs.map +1 -1
  67. package/fesm2022/ngbase-adk-resizable.mjs +138 -48
  68. package/fesm2022/ngbase-adk-resizable.mjs.map +1 -1
  69. package/fesm2022/ngbase-adk-scroll-area.mjs +28 -20
  70. package/fesm2022/ngbase-adk-scroll-area.mjs.map +1 -1
  71. package/fesm2022/ngbase-adk-select.mjs +58 -80
  72. package/fesm2022/ngbase-adk-select.mjs.map +1 -1
  73. package/fesm2022/ngbase-adk-selectable.mjs +19 -30
  74. package/fesm2022/ngbase-adk-selectable.mjs.map +1 -1
  75. package/fesm2022/ngbase-adk-sheet.mjs +6 -20
  76. package/fesm2022/ngbase-adk-sheet.mjs.map +1 -1
  77. package/fesm2022/ngbase-adk-sidenav.mjs +65 -48
  78. package/fesm2022/ngbase-adk-sidenav.mjs.map +1 -1
  79. package/fesm2022/ngbase-adk-slider.mjs +40 -53
  80. package/fesm2022/ngbase-adk-slider.mjs.map +1 -1
  81. package/fesm2022/ngbase-adk-sonner.mjs +12 -19
  82. package/fesm2022/ngbase-adk-sonner.mjs.map +1 -1
  83. package/fesm2022/ngbase-adk-stepper.mjs +17 -25
  84. package/fesm2022/ngbase-adk-stepper.mjs.map +1 -1
  85. package/fesm2022/ngbase-adk-switch.mjs +25 -32
  86. package/fesm2022/ngbase-adk-switch.mjs.map +1 -1
  87. package/fesm2022/ngbase-adk-table.mjs +581 -83
  88. package/fesm2022/ngbase-adk-table.mjs.map +1 -1
  89. package/fesm2022/ngbase-adk-tabs.mjs +37 -35
  90. package/fesm2022/ngbase-adk-tabs.mjs.map +1 -1
  91. package/fesm2022/ngbase-adk-test.mjs.map +1 -1
  92. package/fesm2022/ngbase-adk-toggle-group.mjs +20 -34
  93. package/fesm2022/ngbase-adk-toggle-group.mjs.map +1 -1
  94. package/fesm2022/ngbase-adk-toggle.mjs +14 -19
  95. package/fesm2022/ngbase-adk-toggle.mjs.map +1 -1
  96. package/fesm2022/ngbase-adk-tooltip.mjs +12 -19
  97. package/fesm2022/ngbase-adk-tooltip.mjs.map +1 -1
  98. package/fesm2022/ngbase-adk-tour.mjs +47 -52
  99. package/fesm2022/ngbase-adk-tour.mjs.map +1 -1
  100. package/fesm2022/ngbase-adk-translate.mjs +8 -10
  101. package/fesm2022/ngbase-adk-translate.mjs.map +1 -1
  102. package/fesm2022/ngbase-adk-tree.mjs +20 -20
  103. package/fesm2022/ngbase-adk-tree.mjs.map +1 -1
  104. package/fesm2022/ngbase-adk-utils.mjs +30 -43
  105. package/fesm2022/ngbase-adk-utils.mjs.map +1 -1
  106. package/fesm2022/ngbase-adk-virtualizer.mjs +9 -9
  107. package/fesm2022/ngbase-adk-virtualizer.mjs.map +1 -1
  108. package/package.json +101 -101
  109. package/schematics/components/files/accordion/accordion.ts.template +10 -5
  110. package/schematics/components/files/audio/AudioPlayer.ts.template +245 -0
  111. package/schematics/components/files/audio/AudioRecorder.ts.template +377 -0
  112. package/schematics/components/files/audio/AudioVisualizer.ts.template +175 -0
  113. package/schematics/components/files/audio/index.ts.template +3 -0
  114. package/schematics/components/files/badge/badge-llm.md.template +2 -2
  115. package/schematics/components/files/badge/badge.ts.template +29 -9
  116. package/schematics/components/files/card/card.ts.template +1 -1
  117. package/schematics/components/files/charts/area-chart.component.ts.template +278 -0
  118. package/schematics/components/files/charts/bar-chart.component.ts.template +262 -0
  119. package/schematics/components/files/charts/chart-tooltip.component.ts.template +168 -0
  120. package/schematics/components/files/charts/index.ts.template +4 -0
  121. package/schematics/components/files/charts/line-chart.component.ts.template +238 -0
  122. package/schematics/components/files/charts/pie-chart.component.ts.template +283 -0
  123. package/schematics/components/files/checkbox/checkbox.ts.template +4 -7
  124. package/schematics/components/files/color-picker/color-picker.ts.template +2 -2
  125. package/schematics/components/files/dialog/dialog.ts.template +11 -14
  126. package/schematics/components/files/drawer/drawer.ts.template +25 -28
  127. package/schematics/components/files/form-field/form-field.ts.template +59 -23
  128. package/schematics/components/files/inline-edit/inline-edit.ts.template +3 -1
  129. package/schematics/components/files/pagination/pagination.ts.template +6 -6
  130. package/schematics/components/files/picasa/picasa-base.component.ts.template +9 -30
  131. package/schematics/components/files/popover/popover.ts.template +9 -4
  132. package/schematics/components/files/select/list-selection.ts.template +0 -2
  133. package/schematics/components/files/select/option.ts.template +1 -1
  134. package/schematics/components/files/selectable/selectable.ts.template +2 -2
  135. package/schematics/components/files/sheet/sheet.ts.template +20 -14
  136. package/schematics/components/files/sidenav/sidenav.ts.template +69 -6
  137. package/schematics/components/files/sonner/sonner.ts.template +1 -2
  138. package/schematics/components/files/stepper/stepper-llm.md.template +7 -0
  139. package/schematics/components/files/stepper/stepper.ts.template +2 -4
  140. package/schematics/components/files/switch/switch.ts.template +2 -2
  141. package/schematics/components/files/table/table-llm.md.template +14 -2
  142. package/schematics/components/files/table/table.ts.template +42 -3
  143. package/schematics/components/files/theme/theme.service.ts.template +3 -3
  144. package/schematics/components/files/toggle/toggle.ts.template +1 -1
  145. package/schematics/components/files/toggle-group/toggle-group.ts.template +1 -1
  146. package/schematics/components/files/tooltip/tooltip.ts.template +2 -3
  147. package/{accordion/index.d.ts → types/ngbase-adk-accordion.d.ts} +1 -3
  148. package/{autocomplete/index.d.ts → types/ngbase-adk-autocomplete.d.ts} +2 -7
  149. package/{checkbox/index.d.ts → types/ngbase-adk-checkbox.d.ts} +8 -14
  150. package/types/ngbase-adk-clipboard.d.ts +12 -0
  151. package/{color-picker/index.d.ts → types/ngbase-adk-color-picker.d.ts} +14 -26
  152. package/{datepicker/index.d.ts → types/ngbase-adk-datepicker.d.ts} +9 -18
  153. package/{dialog/index.d.ts → types/ngbase-adk-dialog.d.ts} +3 -8
  154. package/types/ngbase-adk-form-field.d.ts +88 -0
  155. package/{inline-edit/index.d.ts → types/ngbase-adk-inline-edit.d.ts} +8 -16
  156. package/{menu/index.d.ts → types/ngbase-adk-menu.d.ts} +6 -5
  157. package/{otp/index.d.ts → types/ngbase-adk-otp.d.ts} +8 -16
  158. package/{popover/index.d.ts → types/ngbase-adk-popover.d.ts} +14 -2
  159. package/{portal/index.d.ts → types/ngbase-adk-portal.d.ts} +30 -8
  160. package/{radio/index.d.ts → types/ngbase-adk-radio.d.ts} +9 -12
  161. package/{resizable/index.d.ts → types/ngbase-adk-resizable.d.ts} +4 -4
  162. package/{scroll-area/index.d.ts → types/ngbase-adk-scroll-area.d.ts} +2 -1
  163. package/{select/index.d.ts → types/ngbase-adk-select.d.ts} +8 -22
  164. package/{selectable/index.d.ts → types/ngbase-adk-selectable.d.ts} +6 -10
  165. package/{sheet/index.d.ts → types/ngbase-adk-sheet.d.ts} +4 -3
  166. package/{sidenav/index.d.ts → types/ngbase-adk-sidenav.d.ts} +7 -8
  167. package/{slider/index.d.ts → types/ngbase-adk-slider.d.ts} +8 -17
  168. package/{sonner/index.d.ts → types/ngbase-adk-sonner.d.ts} +1 -3
  169. package/{stepper/index.d.ts → types/ngbase-adk-stepper.d.ts} +1 -4
  170. package/{switch/index.d.ts → types/ngbase-adk-switch.d.ts} +7 -14
  171. package/{table/index.d.ts → types/ngbase-adk-table.d.ts} +126 -3
  172. package/{test/index.d.ts → types/ngbase-adk-test.d.ts} +1 -1
  173. package/{toggle-group/index.d.ts → types/ngbase-adk-toggle-group.d.ts} +5 -10
  174. package/types/ngbase-adk-toggle.d.ts +14 -0
  175. package/{tooltip/index.d.ts → types/ngbase-adk-tooltip.d.ts} +9 -11
  176. package/{tour/index.d.ts → types/ngbase-adk-tour.d.ts} +3 -6
  177. package/{utils/index.d.ts → types/ngbase-adk-utils.d.ts} +15 -11
  178. package/clipboard/index.d.ts +0 -11
  179. package/form-field/index.d.ts +0 -97
  180. package/toggle/index.d.ts +0 -16
  181. /package/{a11y/index.d.ts → types/ngbase-adk-a11y.d.ts} +0 -0
  182. /package/{avatar/index.d.ts → types/ngbase-adk-avatar.d.ts} +0 -0
  183. /package/{bidi/index.d.ts → types/ngbase-adk-bidi.d.ts} +0 -0
  184. /package/{breadcrumb/index.d.ts → types/ngbase-adk-breadcrumb.d.ts} +0 -0
  185. /package/{cache/index.d.ts → types/ngbase-adk-cache.d.ts} +0 -0
  186. /package/{carousel/index.d.ts → types/ngbase-adk-carousel.d.ts} +0 -0
  187. /package/{chip/index.d.ts → types/ngbase-adk-chip.d.ts} +0 -0
  188. /package/{collections/index.d.ts → types/ngbase-adk-collections.d.ts} +0 -0
  189. /package/{cookies/index.d.ts → types/ngbase-adk-cookies.d.ts} +0 -0
  190. /package/{drag/index.d.ts → types/ngbase-adk-drag.d.ts} +0 -0
  191. /package/{hover-card/index.d.ts → types/ngbase-adk-hover-card.d.ts} +0 -0
  192. /package/{icon/index.d.ts → types/ngbase-adk-icon.d.ts} +0 -0
  193. /package/{jwt/index.d.ts → types/ngbase-adk-jwt.d.ts} +0 -0
  194. /package/{keys/index.d.ts → types/ngbase-adk-keys.d.ts} +0 -0
  195. /package/{layout/index.d.ts → types/ngbase-adk-layout.d.ts} +0 -0
  196. /package/{list/index.d.ts → types/ngbase-adk-list.d.ts} +0 -0
  197. /package/{mask/index.d.ts → types/ngbase-adk-mask.d.ts} +0 -0
  198. /package/{network/index.d.ts → types/ngbase-adk-network.d.ts} +0 -0
  199. /package/{pagination/index.d.ts → types/ngbase-adk-pagination.d.ts} +0 -0
  200. /package/{progress/index.d.ts → types/ngbase-adk-progress.d.ts} +0 -0
  201. /package/{tabs/index.d.ts → types/ngbase-adk-tabs.d.ts} +0 -0
  202. /package/{translate/index.d.ts → types/ngbase-adk-translate.d.ts} +0 -0
  203. /package/{tree/index.d.ts → types/ngbase-adk-tree.d.ts} +0 -0
  204. /package/{virtualizer/index.d.ts → types/ngbase-adk-virtualizer.d.ts} +0 -0
  205. /package/{index.d.ts → types/ngbase-adk.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ngbase-adk-popover.mjs","sources":["../../../projects/adk/popover/base-popover.service.ts","../../../projects/adk/popover/utils.ts","../../../projects/adk/popover/popover-arrow.ng.ts","../../../projects/adk/popover/popover.ts","../../../projects/adk/popover/popover.service.ts","../../../projects/adk/popover/popover-trigger.ts","../../../projects/adk/popover/public-api.ts","../../../projects/adk/popover/ngbase-adk-popover.ts"],"sourcesContent":["import { Type } from '@angular/core';\nimport { basePortal, DialogInput } from '@ngbase/adk/portal';\nimport { NgbPopover } from './popover';\nimport { PopoverOptions } from './popover.service';\n\nexport function basePopoverPortal<T>(component: Type<T>) {\n const NAME = 'popover';\n const base = basePortal(NAME, component);\n\n function open<T>(component: DialogInput<T>, options: PopoverOptions) {\n const { diaRef, parent, replace, childSignal } = base.open(\n component,\n (comp, opt) => {\n const compInst = comp.instance as NgbPopover;\n compInst.setOptions(opt as PopoverOptions);\n },\n options,\n );\n\n return {\n diaRef,\n events: (parent.instance as NgbPopover).events,\n parent: parent.instance,\n replace,\n childSignal,\n };\n }\n\n function closeAll() {\n base.closeAll();\n }\n return { open, closeAll };\n}\n","export interface PopoverUtilConfig {\n offset?: number;\n sideOffset?: number;\n smoothScroll?: boolean;\n position?: Position | OverlayPosition;\n client?: { x: number; y: number; w: number; h: number } | null;\n target: HTMLElement;\n el?: HTMLElement;\n}\n\nexport interface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport type OverlayPosition =\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'rs'\n | 're'\n | 'ls'\n | 'le'\n | 'tl'\n | 'tr'\n | 'bl'\n | 'br';\n\n// Main position enum with all supported positions\nexport enum Position {\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right',\n TopLeft = 'tl',\n TopRight = 'tr',\n BottomLeft = 'bl',\n BottomRight = 'br',\n RightStart = 'rs',\n RightEnd = 're',\n LeftStart = 'ls',\n LeftEnd = 'le',\n}\n\nexport interface PositionResult {\n top?: number;\n left?: number;\n bottom?: number;\n right?: number;\n position: Position;\n maxHeight?: number;\n maxWidth?: number;\n}\n\n// Position metadata - defines each position in terms of main axis, alignment, and coordinates calculation\ninterface PositionMeta {\n main: 'vertical' | 'horizontal';\n placement: 'before' | 'after';\n align: 'start' | 'center' | 'end';\n oppositePosition: Position;\n fallbacks: Position[];\n getCoords: (targetRect: Rect, elementRect: Rect, offset: number) => { top: number; left: number };\n}\n\n// Position metadata definitions\nconst POSITION_META: Record<Position, PositionMeta> = {\n [Position.Top]: {\n main: 'vertical',\n placement: 'before',\n align: 'center',\n oppositePosition: Position.Bottom,\n fallbacks: [Position.Bottom],\n getCoords: (target, element, offset) => ({\n top: target.top - element.height - offset,\n left: target.left + (target.width - element.width) / 2,\n }),\n },\n [Position.Bottom]: {\n main: 'vertical',\n placement: 'after',\n align: 'center',\n oppositePosition: Position.Top,\n fallbacks: [Position.Top, Position.Right, Position.Left],\n getCoords: (target, element, offset) => ({\n top: target.top + target.height + offset,\n left: target.left + (target.width - element.width) / 2,\n }),\n },\n [Position.Left]: {\n main: 'horizontal',\n placement: 'before',\n align: 'center',\n oppositePosition: Position.Right,\n fallbacks: [Position.Right, Position.Top, Position.Bottom],\n getCoords: (target, element, offset) => ({\n top: target.top + (target.height - element.height) / 2,\n left: target.left - element.width - offset,\n }),\n },\n [Position.Right]: {\n main: 'horizontal',\n placement: 'after',\n align: 'center',\n oppositePosition: Position.Left,\n fallbacks: [Position.Left, Position.Top, Position.Bottom],\n getCoords: (target, element, offset) => ({\n top: target.top + (target.height - element.height) / 2,\n left: target.left + target.width + offset,\n }),\n },\n [Position.TopLeft]: {\n main: 'vertical',\n placement: 'before',\n align: 'start',\n oppositePosition: Position.BottomLeft,\n fallbacks: [Position.BottomLeft, Position.TopRight, Position.BottomRight],\n getCoords: (target, element, offset) => ({\n top: target.top - element.height - offset,\n left: target.left,\n }),\n },\n [Position.TopRight]: {\n main: 'vertical',\n placement: 'before',\n align: 'end',\n oppositePosition: Position.BottomRight,\n fallbacks: [Position.BottomRight, Position.TopLeft, Position.BottomLeft],\n getCoords: (target, element, offset) => ({\n top: target.top - element.height - offset,\n left: target.left + target.width - element.width,\n }),\n },\n [Position.BottomLeft]: {\n main: 'vertical',\n placement: 'after',\n align: 'start',\n oppositePosition: Position.BottomRight,\n fallbacks: [Position.BottomRight, Position.TopLeft, Position.TopRight],\n getCoords: (target, element, offset) => ({\n top: target.top + target.height + offset,\n left: target.left,\n }),\n },\n [Position.BottomRight]: {\n main: 'vertical',\n placement: 'after',\n align: 'end',\n oppositePosition: Position.BottomLeft,\n fallbacks: [Position.BottomLeft, Position.TopRight, Position.TopLeft],\n getCoords: (target, element, offset) => ({\n top: target.top + target.height + offset,\n left: target.left + target.width - element.width,\n }),\n },\n [Position.RightStart]: {\n main: 'horizontal',\n placement: 'after',\n align: 'start',\n oppositePosition: Position.RightEnd,\n fallbacks: [Position.RightEnd, Position.LeftStart, Position.LeftEnd],\n getCoords: (target, element, offset) => ({\n top: target.top,\n left: target.left + target.width + offset,\n }),\n },\n [Position.RightEnd]: {\n main: 'horizontal',\n placement: 'after',\n align: 'end',\n oppositePosition: Position.LeftEnd,\n fallbacks: [Position.LeftEnd, Position.RightStart, Position.LeftStart],\n getCoords: (target, element, offset) => ({\n top: target.top + target.height - element.height,\n left: target.left + target.width + offset,\n }),\n },\n [Position.LeftStart]: {\n main: 'horizontal',\n placement: 'before',\n align: 'start',\n oppositePosition: Position.LeftEnd,\n fallbacks: [Position.LeftEnd, Position.RightStart, Position.RightEnd],\n getCoords: (target, element, offset) => ({\n top: target.top,\n left: target.left - element.width - offset,\n }),\n },\n [Position.LeftEnd]: {\n main: 'horizontal',\n placement: 'before',\n align: 'end',\n oppositePosition: Position.RightEnd,\n fallbacks: [Position.RightEnd, Position.LeftStart, Position.RightStart],\n getCoords: (target, element, offset) => ({\n top: target.top + target.height - element.height,\n left: target.left - element.width - offset,\n }),\n },\n};\n\nexport class PopoverPositioner {\n private offset: number;\n private sideOffset: number;\n private elementRect!: Rect;\n\n constructor(\n private config: PopoverUtilConfig,\n private windowDimensions: { width: number; height: number },\n private scrollWidth = 0,\n ) {\n this.offset = this.config.offset || 5;\n this.sideOffset = this.config.sideOffset || 0;\n }\n\n public calculatePosition(): PositionResult {\n const targetRect = this.getTargetRect();\n this.elementRect = this.getElementRect();\n\n // Get initial position or use bottom as default\n const initialPosition = (this.config.position as Position) || Position.Bottom;\n\n // Find best position\n const bestPosition = this.findBestPosition(initialPosition, targetRect);\n\n // Generate and finalize coordinates\n const coords = POSITION_META[bestPosition].getCoords(targetRect, this.elementRect, this.offset);\n return this.finalizePosition(coords, bestPosition, targetRect);\n }\n\n private getTargetRect(): Rect {\n if (this.config.client) {\n const { x, y, w, h } = this.config.client;\n return { top: y, left: x, width: w, height: h };\n }\n return this.config.target.getBoundingClientRect();\n }\n\n private getElementRect(): Rect {\n const el = this.config.el!;\n return {\n top: 0,\n left: 0,\n width: el.clientWidth,\n height: el.clientHeight,\n };\n }\n\n private findBestPosition(initialPosition: Position, targetRect: Rect): Position {\n // If the initial position works, use it\n if (!this.positionOverflows(initialPosition, targetRect)) {\n return initialPosition;\n }\n\n // Get available space in each direction\n const space = this.getAvailableSpace(targetRect);\n\n // Special handling for simple cases (e.g., choosing between top and bottom based on space)\n const meta = POSITION_META[initialPosition];\n\n // 1. Try the opposite position on the same axis (e.g., bottom for top)\n const opposite = meta.oppositePosition;\n if (!this.positionOverflows(opposite, targetRect)) {\n return opposite;\n }\n\n // 2. Try fallbacks in order\n for (const fallback of meta.fallbacks) {\n if (!this.positionOverflows(fallback, targetRect)) {\n return fallback;\n }\n }\n\n // 3. For vertical positions, prefer the side with more space\n if (meta.main === 'vertical') {\n const preferredVertical = space.top > space.bottom ? Position.Top : Position.Bottom;\n if (!this.positionOverflows(preferredVertical, targetRect)) {\n return preferredVertical;\n }\n }\n\n // 4. For horizontal positions, prefer the side with more space\n if (meta.main === 'horizontal') {\n const preferredHorizontal = space.left > space.right ? Position.Left : Position.Right;\n if (!this.positionOverflows(preferredHorizontal, targetRect)) {\n return preferredHorizontal;\n }\n }\n\n // 5. If all positions have issues, find the one with the best fit\n return this.getPositionWithLeastOverflow(initialPosition, targetRect);\n }\n\n private getAvailableSpace(targetRect: Rect): {\n top: number;\n right: number;\n bottom: number;\n left: number;\n } {\n return {\n top: targetRect.top,\n right: this.windowDimensions.width - (targetRect.left + targetRect.width),\n bottom: this.windowDimensions.height - (targetRect.top + targetRect.height),\n left: targetRect.left,\n };\n }\n\n private positionOverflows(position: Position, targetRect: Rect): boolean {\n const meta = POSITION_META[position];\n const element = this.elementRect;\n const coords = meta.getCoords(targetRect, element, this.offset);\n const { width: windowWidth, height: windowHeight } = this.windowDimensions;\n\n // Check boundaries and consider sideOffset\n return (\n coords.left < 0 ||\n coords.left + element.width + this.sideOffset > windowWidth ||\n coords.top < 0 ||\n coords.top + element.height + this.sideOffset > windowHeight\n );\n }\n\n private getOverflowAmount(position: Position, targetRect: Rect): number {\n const meta = POSITION_META[position];\n const element = this.elementRect;\n const coords = meta.getCoords(targetRect, element, this.offset);\n const { width: windowWidth, height: windowHeight } = this.windowDimensions;\n\n let amount = 0;\n\n // Calculate overflow for each edge\n if (coords.left < 0) amount += Math.abs(coords.left);\n if (coords.left + element.width > windowWidth)\n amount += coords.left + element.width - windowWidth;\n if (coords.top < 0) amount += Math.abs(coords.top);\n if (coords.top + element.height > windowHeight)\n amount += coords.top + element.height - windowHeight;\n\n return amount;\n }\n\n private getPositionWithLeastOverflow(initialPosition: Position, targetRect: Rect): Position {\n const positionsToCheck = [initialPosition, ...POSITION_META[initialPosition].fallbacks];\n\n let bestPosition = initialPosition;\n let leastOverflow = this.getOverflowAmount(initialPosition, targetRect);\n\n for (const position of positionsToCheck) {\n const overflow = this.getOverflowAmount(position, targetRect);\n if (overflow < leastOverflow) {\n leastOverflow = overflow;\n bestPosition = position;\n }\n }\n\n return bestPosition;\n }\n\n private finalizePosition(\n coords: { top: number; left: number },\n position: Position,\n targetRect: Rect,\n ): PositionResult {\n const { top, left } = coords;\n const element = this.elementRect;\n const { width: windowWidth, height: windowHeight } = this.windowDimensions;\n const meta = POSITION_META[position];\n\n // Calculate max dimensions\n let maxHeight: number | undefined;\n let maxWidth: number | undefined;\n\n // Set maxHeight if needed\n if (top - this.sideOffset < 0) {\n maxHeight = element.height + top - this.sideOffset;\n } else if (top + element.height + this.sideOffset > windowHeight) {\n maxHeight = element.height - (top + element.height + this.sideOffset - windowHeight);\n }\n\n // Set maxWidth if needed\n if (left + element.width + this.sideOffset > windowWidth) {\n maxWidth = windowWidth - left - this.sideOffset;\n }\n\n // Add sideOffset to maxHeight and maxWidth because the sideOffset is used for the maxHeight and maxWidth\n const h = maxHeight ? maxHeight + this.sideOffset : element.height;\n const w = maxWidth ? maxWidth + this.sideOffset : element.width;\n\n // Calculate adjusted coordinates\n let adjustedTop: number | undefined = Math.max(0, Math.min(top, windowHeight - h));\n let adjustedLeft = Math.max(0, Math.min(left, windowWidth - w));\n\n // Calculate bottom and right (for RTL support)\n let bottom: number | undefined;\n let right: number | undefined;\n\n // Set bottom if appropriate\n if (meta.main === 'vertical' && meta.placement === 'before') {\n bottom = windowHeight - (adjustedTop + h);\n adjustedTop = undefined;\n }\n\n // Set right if appropriate\n if (adjustedLeft + w > windowWidth) {\n adjustedLeft = 0;\n right = 0;\n } else if (\n meta.align === 'end' ||\n (meta.main === 'horizontal' && meta.placement === 'before')\n ) {\n right = windowWidth - (adjustedLeft + w) - this.scrollWidth;\n }\n\n return {\n top: adjustedTop,\n left: right !== undefined ? undefined : adjustedLeft,\n bottom,\n right,\n position,\n maxHeight: maxHeight && maxHeight > 0 ? maxHeight : undefined,\n maxWidth: maxWidth && maxWidth > 0 ? maxWidth : undefined,\n };\n }\n}\n\n// Main function to use the class\nexport function tooltipPosition(\n config: PopoverUtilConfig,\n windowDimensions = { width: window.innerWidth, height: window.innerHeight },\n scrollWidth = window.innerWidth - document.documentElement.clientWidth,\n): PositionResult {\n const positioner = new PopoverPositioner(config, windowDimensions, scrollWidth);\n return positioner.calculatePosition();\n}\n","import {\n Component,\n computed,\n ElementRef,\n inject,\n input,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { InjectionToken } from '@angular/core';\nimport { PopoverPosition } from './popover.service';\n\nexport class PopoverArrowTracker {\n top? = 0;\n left? = 0;\n right? = 0;\n bottom? = 0;\n target?: HTMLElement;\n position?: PopoverPosition;\n}\n\nexport const POPOVER_ARROW_TRACKER = new InjectionToken<{\n values: WritableSignal<PopoverArrowTracker>;\n}>('popoverArrowTracker');\n\nexport function providePopoverArrowTracker() {\n return {\n provide: POPOVER_ARROW_TRACKER,\n useFactory: () => ({ values: signal<PopoverArrowTracker>(new PopoverArrowTracker()) }),\n };\n}\n\n@Component({\n selector: '[ngbPopoverArrow]',\n template: `\n <ng-content />\n @if (anchor()) {\n <style>\n :host {\n --action-angle: 180deg;\n --action-left: 50%;\n --action-top: -1rem;\n --action-color: var(--color-background);\n }\n :host::before {\n content: '';\n position: absolute;\n width: 0;\n height: 0;\n border-style: solid;\n border-top: 0.5rem solid var(--action-color);\n border-left: 0.45rem solid transparent;\n border-right: 0.45rem solid transparent;\n top: var(--action-top);\n left: var(--action-left);\n transform: translateX(-50%) rotate(var(--action-angle, 180deg));\n /* Add shadow to match the container shadow */\n /* filter: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06));\n z-index: -1; */\n }\n </style>\n }\n `,\n host: {\n '[style]': 'styles()',\n },\n})\nexport class NgbPopoverArrow {\n readonly arrowTracker = inject(POPOVER_ARROW_TRACKER);\n readonly anchor = input(false);\n readonly el = inject(ElementRef<HTMLElement>);\n readonly styles = computed(() => {\n const { target, position } = this.arrowTracker.values();\n if (target && position) {\n return this.updateAnchorPosition(position, target, this.el.nativeElement);\n }\n return {};\n });\n\n private updateAnchorPosition(position: PopoverPosition, target: HTMLElement, el: HTMLElement) {\n const { height, width, top } = el.getBoundingClientRect();\n const { height: tHeight, width: tWidth, top: tTop } = target.getBoundingClientRect();\n let deg = '0deg';\n let anchorTop = '50%';\n let anchorLeft = '50%';\n const anchorWidth = 8;\n\n const thHeight = tHeight / 2 - anchorWidth / 2;\n const thWidth = tWidth / 2;\n\n switch (position) {\n case 'top':\n case 'tl':\n case 'tr':\n anchorTop = '100%';\n break;\n case 'left':\n deg = '270deg';\n anchorLeft = `calc(100% + ${anchorWidth / 2}px)`;\n anchorTop =\n tHeight > height\n ? `calc(50% - ${anchorWidth / 2}px)`\n : `calc(${thHeight + (tTop - top)}px)`;\n break;\n case 'right':\n deg = '90deg';\n anchorLeft = `-${anchorWidth / 2}px`;\n anchorTop =\n tHeight > height\n ? `calc(50% - ${anchorWidth / 2}px)`\n : `calc(${thHeight + (tTop - top)}px)`;\n break;\n case 'bottom':\n case 'bl':\n case 'br':\n deg = '180deg';\n anchorTop = '-0.5rem';\n anchorLeft = thWidth > width ? '50%' : `calc(100% - ${thWidth}px)`;\n break;\n }\n\n return { '--action-angle': deg, '--action-left': anchorLeft, '--action-top': anchorTop };\n }\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport {\n Component,\n Directive,\n ElementRef,\n ViewContainerRef,\n effect,\n inject,\n input,\n linkedSignal,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FocusTrap } from '@ngbase/adk/a11y';\nimport { BaseDialog, NgbPortalClose } from '@ngbase/adk/portal';\nimport { createHostAnimation, disposals } from '@ngbase/adk/utils';\nimport { EMPTY, Observable, fromEvent, map, startWith, switchMap } from 'rxjs';\nimport { PopoverOptions, PopoverPosition } from './popover.service';\nimport { tooltipPosition } from './utils';\nimport { POPOVER_ARROW_TRACKER, providePopoverArrowTracker } from './popover-arrow.ng';\n\n@Directive({\n selector: '[ngbPopoverBackdrop]',\n hostDirectives: [FocusTrap],\n host: {\n '[style.clipPath]': 'popover.options().clipPath?.()',\n '[class]': 'popover.options().backdropClassName',\n '(click)': '!popover.options().disableClose && popover.close()',\n },\n})\nexport class NgbPopoverBackdrop {\n readonly popover = inject(NgbPopover);\n readonly focusTrap = inject(FocusTrap);\n\n constructor() {\n this.focusTrap._focusTrap = linkedSignal(() => this.popover.options().focusTrap ?? true);\n }\n}\n\n@Directive({\n selector: '[ngbPopoverMain]',\n host: {\n '[class]': 'popover.options().className',\n },\n})\nexport class NgbPopoverMain {\n readonly popover = inject(NgbPopover);\n}\n\n@Component({\n selector: 'ngb-popover',\n template: '',\n host: {\n '[@parentAnimation]': '',\n '(@parentAnimation.done)': 'animationDone()',\n },\n animations: [\n createHostAnimation(['@slideInOutAnimation']),\n trigger('slideInOutAnimation', [\n state('1', style({ transform: 'none', opacity: 1 })),\n state('void', style({ transform: 'translateY(-10px) scale(0.95)', opacity: 0 })),\n state('0', style({ transform: 'translateY(-10px) scale(0.95)', opacity: 0 })),\n transition('* => *', animate('100ms ease-out')),\n ]),\n ],\n})\nexport class NgbPopover extends BaseDialog {\n readonly arrowTracker = inject(POPOVER_ARROW_TRACKER);\n private readonly disposals = disposals();\n\n readonly myDialog = viewChild.required('myDialog', { read: ViewContainerRef });\n readonly container = viewChild.required<NgbPopoverMain, ElementRef<HTMLElement>>(NgbPopoverMain, {\n read: ElementRef,\n });\n readonly backdropElement = viewChild<NgbPopoverBackdrop, ElementRef<HTMLElement>>(\n NgbPopoverBackdrop,\n { read: ElementRef },\n );\n\n readonly options = signal<PopoverOptions>({} as PopoverOptions);\n private lastPosition: PopoverPosition = 'top';\n readonly scrolled = signal(0);\n\n readonly events: Observable<{ type: string; value: any }> = this._afterViewSource.pipe(\n switchMap(e => {\n const el = this.container()!.nativeElement;\n const mouseenter = fromEvent(el, 'mouseenter');\n const mouseleave = fromEvent(el, 'mouseleave');\n const event = mouseenter.pipe(\n switchMap(e =>\n mouseleave.pipe(\n map(x => ({ type: 'mouseleave', value: x })),\n startWith({ type: 'mouseenter', value: e }),\n ),\n ),\n );\n return e ? event : EMPTY;\n }),\n );\n\n constructor() {\n super();\n\n const dialog = effect(() => {\n this._afterViewSource.next(this.myDialog()!);\n dialog.destroy();\n });\n\n effect(cleanup => {\n const el = this.container()!.nativeElement;\n const options = this.options();\n const target = this.getTarget();\n if (options.anchor) {\n options.offset = 16;\n }\n this.lastPosition = options.position || 'bottom';\n // this.schedulePopoverUpdate(target, el);\n if (options.smoothScroll) {\n // target.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n\n // fromEvent(window, 'scroll')\n // .pipe(\n // startWith(1),\n // tap((x) => console.count('scroll 50')),\n // debounceTime(50),\n // take(1),\n // )\n // .subscribe(() => {});\n // fromEvent(window, 'scroll')\n // .pipe(\n // startWith(1),\n // tap((x) => console.count('scroll 10')),\n // debounceTime(10),\n // take(1),\n // )\n // .subscribe(() => {\n // this.scrolled.update((x) => x + 1);\n // this.schedulePopoverUpdate(target, el);\n // });\n scrollToElement(target).then(() => {\n this.scrolled.update(x => x + 1);\n this.schedulePopoverUpdate(target, el, options);\n });\n } else {\n this.schedulePopoverUpdate(target, el, options);\n }\n\n // TODO: remove this once we have multi cleanup support\n if (!options.backdrop) {\n window.addEventListener('scroll', this.scheduleUpdateDimension);\n cleanup(() => window.removeEventListener('scroll', this.scheduleUpdateDimension));\n }\n\n // observe the target element position change\n const resizeObserver = new ResizeObserver(() => {\n // console.log('resizeObserver');\n this.schedulePopoverUpdate(target, el, options);\n });\n resizeObserver.observe(target);\n cleanup(() => resizeObserver.disconnect());\n });\n }\n\n override getTarget(): HTMLElement {\n return this.target() || this.options().target;\n }\n\n private scheduleUpdateDimension = () => {\n this.disposals.afterNextRender(() => this.updateDimension());\n };\n\n private schedulePopoverUpdate(target: HTMLElement, el: HTMLElement, options: PopoverOptions) {\n // this.options().target = target;\n // if (options.backdrop) {\n // this.onOpen();\n // }\n if (options.width === 'target') {\n // update the width of the container to be the same as the target\n el.style.width = `${target.offsetWidth}px`;\n } else if (options.width === 'free') {\n el.style.minWidth = `${target.offsetWidth}px`;\n } else if (options.width) {\n el.style.width = options.width;\n }\n if (options.height) {\n el.style.height = options.height;\n }\n if (options.maxHeight) {\n el.style.maxHeight = options.maxHeight;\n }\n\n this.scheduleUpdateDimension();\n }\n\n private updateDimension() {\n const el = this.container()!.nativeElement;\n const target = this.getTarget();\n if (!target) {\n return;\n }\n const { top, bottom, left, right, position, maxHeight, maxWidth } = tooltipPosition({\n target,\n el,\n position: this.lastPosition,\n client: this.options().client,\n offset: this.options().offset,\n sideOffset: this.options().sideOffset,\n });\n // change the anchor position\n // if (this.options().anchor) {\n // this.updateAnchorPosition(position, el, target);\n // }\n this.lastPosition = position;\n // we need to update the values directly instead of signal to avoid too many CD checks\n if (bottom !== undefined) {\n el.style.bottom = `${bottom}px`;\n el.style.top = '';\n } else {\n el.style.top = `${top}px`;\n el.style.bottom = '';\n }\n if (right != undefined) {\n el.style.right = `${right}px`;\n el.style.left = '';\n } else {\n el.style.left = `${left}px`;\n el.style.right = '';\n }\n\n if (maxHeight) {\n el.style.maxHeight = `${maxHeight}px`;\n }\n if (maxWidth) {\n el.style.maxWidth = `${maxWidth}px`;\n }\n this.arrowTracker.values.set({ top, bottom, left, right, target, position });\n }\n\n override setOptions(options: PopoverOptions): void {\n // console.log('setOptions', options);\n this.options.set(options);\n }\n}\n\nfunction scrollToElement(target: HTMLElement) {\n return new Promise(resolve => {\n let lastPos: number;\n let currentPos = null;\n let samePosCount = 0;\n\n const checkIfScrollComplete = () => {\n currentPos = window.pageYOffset || document.documentElement.scrollTop;\n\n if (lastPos !== null && currentPos === lastPos) {\n samePosCount++;\n if (samePosCount > 2) {\n resolve(true);\n return;\n }\n } else {\n samePosCount = 0;\n lastPos = currentPos;\n }\n\n requestAnimationFrame(checkIfScrollComplete);\n };\n // scroll only if the target is not in the view\n // window.scrollTo({\n // top: target.offsetTop - 50,\n // behavior: 'smooth',\n // });\n target.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n requestAnimationFrame(checkIfScrollComplete);\n });\n}\n\n@Directive({ selector: '[ngbPopoverClose]' })\nexport class NgbPopoverClose extends NgbPortalClose {\n readonly ngbPopoverClose = input();\n\n override close() {\n super.close(this.ngbPopoverClose());\n }\n}\n\nexport function aliasPopover(popover: typeof NgbPopover) {\n return [{ provide: NgbPopover, useExisting: popover }, providePopoverArrowTracker()];\n}\n","import { inject, InjectionToken, Signal, Type, WritableSignal } from '@angular/core';\nimport { DialogInput, DialogOptions, DialogRef } from '@ngbase/adk/portal';\nimport { Observable } from 'rxjs';\nimport { basePopoverPortal } from './base-popover.service';\nimport { NgbPopover } from './popover';\nimport { OverlayPosition, PopoverUtilConfig } from './utils';\n\nexport type PopoverPosition = OverlayPosition;\n\nexport class PopoverOptions extends DialogOptions implements PopoverUtilConfig {\n target!: HTMLElement;\n el?: HTMLElement;\n position?: PopoverPosition;\n offset?: number;\n sideOffset?: number;\n client?: { x: number; y: number; w: number; h: number } | null;\n className?: string;\n backdropClassName?: string;\n clipPath?: Signal<string>;\n anchor?: boolean;\n smoothScroll?: boolean;\n}\n\nexport interface PopoverOpen<T> {\n diaRef: DialogRef<any>;\n events: Observable<{ type: string; value: any }>;\n parent: NgbPopover;\n replace: ((component: DialogInput<T>) => void) | undefined;\n childSignal: WritableSignal<any>;\n}\n\nconst POPOVER_TOKEN = new InjectionToken<Type<NgbPopover>>('POPOVER_TOKEN');\n\nexport type PopoverType = ReturnType<typeof ngbPopoverPortal>;\n\nexport function ngbPopoverPortal() {\n const popover = inject(POPOVER_TOKEN, { optional: true }) ?? NgbPopover;\n const base = basePopoverPortal(popover);\n\n function open<T>(component: DialogInput<T>, options: PopoverOptions): PopoverOpen<T> {\n return base.open(component, options);\n }\n\n return { open, closeAll: base.closeAll };\n}\n\nexport const registerNgbPopover = (popover: typeof NgbPopover) => {\n return { provide: POPOVER_TOKEN, useValue: popover };\n};\n","import { Directive, ElementRef, TemplateRef, inject, input } from '@angular/core';\nimport { PopoverPosition, ngbPopoverPortal } from './popover.service';\n\n@Directive({\n selector: '[ngbPopoverTrigger]',\n exportAs: 'ngbPopoverTrigger',\n host: {\n '(click)': 'open()',\n },\n})\nexport class NgbPopoverTrigger {\n readonly popoverPortal = ngbPopoverPortal();\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly ngbPopoverTrigger = input.required<TemplateRef<any>>();\n readonly ngbPopoverTriggerData = input();\n readonly options = input<{ position?: PopoverPosition; anchor?: boolean }>();\n\n private closeFn: VoidFunction = () => {};\n\n open() {\n const options = this.options();\n const { diaRef } = this.popoverPortal.open(this.ngbPopoverTrigger(), {\n target: this.el.nativeElement,\n anchor: options?.anchor,\n position: options?.position || 'top',\n data: this.ngbPopoverTriggerData(),\n });\n this.closeFn = diaRef.close;\n }\n\n close() {\n this.closeFn();\n }\n}\n","/*\n * Public API Surface of popover\n */\n\nexport * from './popover.service';\nexport * from './popover';\nexport * from './popover-trigger';\nexport * from './base-popover.service';\nexport * from './popover-arrow.ng';\nexport { tooltipPosition } from './utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngbase-adk-popover.mjs","sources":["../../../projects/adk/popover/base-popover.service.ts","../../../projects/adk/popover/utils.ts","../../../projects/adk/popover/popover-arrow.ng.ts","../../../projects/adk/popover/popover.ts","../../../projects/adk/popover/popover.service.ts","../../../projects/adk/popover/popover-trigger.ts","../../../projects/adk/popover/public-api.ts","../../../projects/adk/popover/ngbase-adk-popover.ts"],"sourcesContent":["import { Type } from '@angular/core';\nimport { basePortal, DialogInput } from '@ngbase/adk/portal';\nimport { NgbPopover } from './popover';\nimport { PopoverOptions } from './popover.service';\n\nexport function basePopoverPortal<T>(component: Type<T>) {\n const NAME = 'popover';\n const base = basePortal(NAME, component);\n\n function open<T>(component: DialogInput<T>, options: PopoverOptions) {\n const { diaRef, parent, replace, childSignal } = base.open(\n component,\n (comp, opt) => {\n const compInst = comp.instance as NgbPopover;\n compInst.setOptions(opt as PopoverOptions);\n },\n options,\n );\n\n return {\n diaRef,\n events: (parent.instance as NgbPopover).events,\n parent: parent.instance,\n replace,\n childSignal,\n };\n }\n\n function closeAll() {\n base.closeAll();\n }\n return { open, closeAll };\n}\n","export interface PopoverUtilConfig {\n offset?: number;\n sideOffset?: number;\n smoothScroll?: boolean;\n position?: Position | OverlayPosition;\n client?: { x: number; y: number; w: number; h: number } | null;\n target: HTMLElement;\n el?: HTMLElement;\n}\n\nexport interface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport type OverlayPosition =\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'rs'\n | 're'\n | 'ls'\n | 'le'\n | 'tl'\n | 'tr'\n | 'bl'\n | 'br';\n\n// Main position enum with all supported positions\nexport enum Position {\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right',\n TopLeft = 'tl',\n TopRight = 'tr',\n BottomLeft = 'bl',\n BottomRight = 'br',\n RightStart = 'rs',\n RightEnd = 're',\n LeftStart = 'ls',\n LeftEnd = 'le',\n}\n\nexport interface PositionResult {\n top?: number;\n left?: number;\n bottom?: number;\n right?: number;\n position: Position;\n maxHeight?: number;\n maxWidth?: number;\n}\n\n// Position metadata - defines each position in terms of main axis, alignment, and coordinates calculation\ninterface PositionMeta {\n main: 'vertical' | 'horizontal';\n placement: 'before' | 'after';\n align: 'start' | 'center' | 'end';\n oppositePosition: Position;\n fallbacks: Position[];\n getCoords: (targetRect: Rect, elementRect: Rect, offset: number) => { top: number; left: number };\n}\n\n// Position metadata definitions\nconst POSITION_META: Record<Position, PositionMeta> = {\n [Position.Top]: {\n main: 'vertical',\n placement: 'before',\n align: 'center',\n oppositePosition: Position.Bottom,\n fallbacks: [Position.Bottom],\n getCoords: (target, element, offset) => ({\n top: target.top - element.height - offset,\n left: target.left + (target.width - element.width) / 2,\n }),\n },\n [Position.Bottom]: {\n main: 'vertical',\n placement: 'after',\n align: 'center',\n oppositePosition: Position.Top,\n fallbacks: [Position.Top, Position.Right, Position.Left],\n getCoords: (target, element, offset) => ({\n top: target.top + target.height + offset,\n left: target.left + (target.width - element.width) / 2,\n }),\n },\n [Position.Left]: {\n main: 'horizontal',\n placement: 'before',\n align: 'center',\n oppositePosition: Position.Right,\n fallbacks: [Position.Right, Position.Top, Position.Bottom],\n getCoords: (target, element, offset) => ({\n top: target.top + (target.height - element.height) / 2,\n left: target.left - element.width - offset,\n }),\n },\n [Position.Right]: {\n main: 'horizontal',\n placement: 'after',\n align: 'center',\n oppositePosition: Position.Left,\n fallbacks: [Position.Left, Position.Top, Position.Bottom],\n getCoords: (target, element, offset) => ({\n top: target.top + (target.height - element.height) / 2,\n left: target.left + target.width + offset,\n }),\n },\n [Position.TopLeft]: {\n main: 'vertical',\n placement: 'before',\n align: 'start',\n oppositePosition: Position.BottomLeft,\n fallbacks: [Position.BottomLeft, Position.TopRight, Position.BottomRight],\n getCoords: (target, element, offset) => ({\n top: target.top - element.height - offset,\n left: target.left,\n }),\n },\n [Position.TopRight]: {\n main: 'vertical',\n placement: 'before',\n align: 'end',\n oppositePosition: Position.BottomRight,\n fallbacks: [Position.BottomRight, Position.TopLeft, Position.BottomLeft],\n getCoords: (target, element, offset) => ({\n top: target.top - element.height - offset,\n left: target.left + target.width - element.width,\n }),\n },\n [Position.BottomLeft]: {\n main: 'vertical',\n placement: 'after',\n align: 'start',\n oppositePosition: Position.BottomRight,\n fallbacks: [Position.BottomRight, Position.TopLeft, Position.TopRight],\n getCoords: (target, element, offset) => ({\n top: target.top + target.height + offset,\n left: target.left,\n }),\n },\n [Position.BottomRight]: {\n main: 'vertical',\n placement: 'after',\n align: 'end',\n oppositePosition: Position.BottomLeft,\n fallbacks: [Position.BottomLeft, Position.TopRight, Position.TopLeft],\n getCoords: (target, element, offset) => ({\n top: target.top + target.height + offset,\n left: target.left + target.width - element.width,\n }),\n },\n [Position.RightStart]: {\n main: 'horizontal',\n placement: 'after',\n align: 'start',\n oppositePosition: Position.RightEnd,\n fallbacks: [Position.RightEnd, Position.LeftStart, Position.LeftEnd],\n getCoords: (target, element, offset) => ({\n top: target.top,\n left: target.left + target.width + offset,\n }),\n },\n [Position.RightEnd]: {\n main: 'horizontal',\n placement: 'after',\n align: 'end',\n oppositePosition: Position.LeftEnd,\n fallbacks: [Position.LeftEnd, Position.RightStart, Position.LeftStart],\n getCoords: (target, element, offset) => ({\n top: target.top + target.height - element.height,\n left: target.left + target.width + offset,\n }),\n },\n [Position.LeftStart]: {\n main: 'horizontal',\n placement: 'before',\n align: 'start',\n oppositePosition: Position.LeftEnd,\n fallbacks: [Position.LeftEnd, Position.RightStart, Position.RightEnd],\n getCoords: (target, element, offset) => ({\n top: target.top,\n left: target.left - element.width - offset,\n }),\n },\n [Position.LeftEnd]: {\n main: 'horizontal',\n placement: 'before',\n align: 'end',\n oppositePosition: Position.RightEnd,\n fallbacks: [Position.RightEnd, Position.LeftStart, Position.RightStart],\n getCoords: (target, element, offset) => ({\n top: target.top + target.height - element.height,\n left: target.left - element.width - offset,\n }),\n },\n};\n\nexport class PopoverPositioner {\n private offset: number;\n private sideOffset: number;\n private elementRect!: Rect;\n\n constructor(\n private config: PopoverUtilConfig,\n private windowDimensions: { width: number; height: number },\n private scrollWidth = 0,\n ) {\n this.offset = this.config.offset || 5;\n this.sideOffset = this.config.sideOffset || 0;\n }\n\n public calculatePosition(): PositionResult {\n const targetRect = this.getTargetRect();\n this.elementRect = this.getElementRect();\n\n // Get initial position or use bottom as default\n const initialPosition = (this.config.position as Position) || Position.Bottom;\n\n // Find best position\n const bestPosition = this.findBestPosition(initialPosition, targetRect);\n\n // Generate and finalize coordinates\n const coords = POSITION_META[bestPosition].getCoords(targetRect, this.elementRect, this.offset);\n return this.finalizePosition(coords, bestPosition, targetRect);\n }\n\n private getTargetRect(): Rect {\n if (this.config.client) {\n const { x, y, w, h } = this.config.client;\n return { top: y, left: x, width: w, height: h };\n }\n return this.config.target.getBoundingClientRect();\n }\n\n private getElementRect(): Rect {\n const el = this.config.el!;\n return {\n top: 0,\n left: 0,\n width: el.clientWidth,\n height: el.clientHeight,\n };\n }\n\n private findBestPosition(initialPosition: Position, targetRect: Rect): Position {\n // If the initial position works, use it\n if (!this.positionOverflows(initialPosition, targetRect)) {\n return initialPosition;\n }\n\n // Get available space in each direction\n const space = this.getAvailableSpace(targetRect);\n\n // Special handling for simple cases (e.g., choosing between top and bottom based on space)\n const meta = POSITION_META[initialPosition];\n\n // 1. Try the opposite position on the same axis (e.g., bottom for top)\n const opposite = meta.oppositePosition;\n if (!this.positionOverflows(opposite, targetRect)) {\n return opposite;\n }\n\n // 2. Try fallbacks in order\n for (const fallback of meta.fallbacks) {\n if (!this.positionOverflows(fallback, targetRect)) {\n return fallback;\n }\n }\n\n // 3. For vertical positions, prefer the side with more space\n if (meta.main === 'vertical') {\n const preferredVertical = space.top > space.bottom ? Position.Top : Position.Bottom;\n if (!this.positionOverflows(preferredVertical, targetRect)) {\n return preferredVertical;\n }\n }\n\n // 4. For horizontal positions, prefer the side with more space\n if (meta.main === 'horizontal') {\n const preferredHorizontal = space.left > space.right ? Position.Left : Position.Right;\n if (!this.positionOverflows(preferredHorizontal, targetRect)) {\n return preferredHorizontal;\n }\n }\n\n // 5. If all positions have issues, find the one with the best fit\n return this.getPositionWithLeastOverflow(initialPosition, targetRect);\n }\n\n private getAvailableSpace(targetRect: Rect): {\n top: number;\n right: number;\n bottom: number;\n left: number;\n } {\n return {\n top: targetRect.top,\n right: this.windowDimensions.width - (targetRect.left + targetRect.width),\n bottom: this.windowDimensions.height - (targetRect.top + targetRect.height),\n left: targetRect.left,\n };\n }\n\n private positionOverflows(position: Position, targetRect: Rect): boolean {\n const meta = POSITION_META[position];\n const element = this.elementRect;\n const coords = meta.getCoords(targetRect, element, this.offset);\n const { width: windowWidth, height: windowHeight } = this.windowDimensions;\n\n // Check boundaries and consider sideOffset\n return (\n coords.left < 0 ||\n coords.left + element.width + this.sideOffset > windowWidth ||\n coords.top < 0 ||\n coords.top + element.height + this.sideOffset > windowHeight\n );\n }\n\n private getOverflowAmount(position: Position, targetRect: Rect): number {\n const meta = POSITION_META[position];\n const element = this.elementRect;\n const coords = meta.getCoords(targetRect, element, this.offset);\n const { width: windowWidth, height: windowHeight } = this.windowDimensions;\n\n let amount = 0;\n\n // Calculate overflow for each edge\n if (coords.left < 0) amount += Math.abs(coords.left);\n if (coords.left + element.width > windowWidth)\n amount += coords.left + element.width - windowWidth;\n if (coords.top < 0) amount += Math.abs(coords.top);\n if (coords.top + element.height > windowHeight)\n amount += coords.top + element.height - windowHeight;\n\n return amount;\n }\n\n private getPositionWithLeastOverflow(initialPosition: Position, targetRect: Rect): Position {\n const positionsToCheck = [initialPosition, ...POSITION_META[initialPosition].fallbacks];\n\n let bestPosition = initialPosition;\n let leastOverflow = this.getOverflowAmount(initialPosition, targetRect);\n\n for (const position of positionsToCheck) {\n const overflow = this.getOverflowAmount(position, targetRect);\n if (overflow < leastOverflow) {\n leastOverflow = overflow;\n bestPosition = position;\n }\n }\n\n return bestPosition;\n }\n\n private finalizePosition(\n coords: { top: number; left: number },\n position: Position,\n targetRect: Rect,\n ): PositionResult {\n const { top, left } = coords;\n const element = this.elementRect;\n const { width: windowWidth, height: windowHeight } = this.windowDimensions;\n const meta = POSITION_META[position];\n\n // Calculate max dimensions\n let maxHeight: number | undefined;\n let maxWidth: number | undefined;\n\n // Set maxHeight if needed\n if (top - this.sideOffset < 0) {\n maxHeight = element.height + top - this.sideOffset;\n } else if (top + element.height + this.sideOffset > windowHeight) {\n maxHeight = element.height - (top + element.height + this.sideOffset - windowHeight);\n }\n\n // Set maxWidth if needed\n if (left + element.width + this.sideOffset > windowWidth) {\n maxWidth = windowWidth - left - this.sideOffset;\n }\n\n // Add sideOffset to maxHeight and maxWidth because the sideOffset is used for the maxHeight and maxWidth\n const h = maxHeight ? maxHeight + this.sideOffset : element.height;\n const w = maxWidth ? maxWidth + this.sideOffset : element.width;\n\n // Calculate adjusted coordinates\n let adjustedTop: number | undefined = Math.max(0, Math.min(top, windowHeight - h));\n let adjustedLeft = Math.max(0, Math.min(left, windowWidth - w));\n\n // Calculate bottom and right (for RTL support)\n let bottom: number | undefined;\n let right: number | undefined;\n\n // Set bottom if appropriate\n if (meta.main === 'vertical' && meta.placement === 'before') {\n bottom = windowHeight - (adjustedTop + h);\n adjustedTop = undefined;\n }\n\n // Set right if appropriate\n if (adjustedLeft + w > windowWidth) {\n adjustedLeft = 0;\n right = 0;\n } else if (\n meta.align === 'end' ||\n (meta.main === 'horizontal' && meta.placement === 'before')\n ) {\n right = windowWidth - (adjustedLeft + w) - this.scrollWidth;\n }\n\n return {\n top: adjustedTop,\n left: right !== undefined ? undefined : adjustedLeft,\n bottom,\n right,\n position,\n maxHeight: maxHeight && maxHeight > 0 ? maxHeight : undefined,\n maxWidth: maxWidth && maxWidth > 0 ? maxWidth : undefined,\n };\n }\n}\n\n// Main function to use the class\nexport function tooltipPosition(\n config: PopoverUtilConfig,\n windowDimensions = { width: window.innerWidth, height: window.innerHeight },\n scrollWidth = window.innerWidth - document.documentElement.clientWidth,\n): PositionResult {\n const positioner = new PopoverPositioner(config, windowDimensions, scrollWidth);\n return positioner.calculatePosition();\n}\n","import {\n Component,\n computed,\n Directive,\n ElementRef,\n inject,\n InjectionToken,\n input,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { PopoverPosition } from './popover.service';\n\n/**\n * Directive to mark the host element for arrow positioning.\n * Apply this to the parent component that contains the arrow.\n * The arrow will calculate offset based on the difference between\n * the host element and the arrow element positions.\n */\n@Directive({\n selector: '[ngbPopoverArrowHost]',\n exportAs: 'ngbPopoverArrowHost',\n})\nexport class NgbPopoverArrowHost {\n readonly el = inject(ElementRef<HTMLElement>);\n}\n\nexport class PopoverArrowTracker {\n top? = 0;\n left? = 0;\n right? = 0;\n bottom? = 0;\n target?: HTMLElement;\n position?: PopoverPosition;\n}\n\nexport const POPOVER_ARROW_TRACKER = new InjectionToken<{\n values: WritableSignal<PopoverArrowTracker>;\n}>('popoverArrowTracker');\n\nexport function providePopoverArrowTracker() {\n return {\n provide: POPOVER_ARROW_TRACKER,\n useFactory: () => ({ values: signal<PopoverArrowTracker>(new PopoverArrowTracker()) }),\n };\n}\n\n@Component({\n selector: '[ngbPopoverArrow]',\n template: `\n <ng-content />\n @if (anchor()) {\n <style>\n :host {\n --action-angle: 180deg;\n --action-left: 50%;\n --action-top: -1rem;\n --action-color: var(--color-background);\n }\n :host::before {\n content: '';\n position: absolute;\n width: 0;\n height: 0;\n border-style: solid;\n border-top: 0.5rem solid var(--action-color);\n border-left: 0.45rem solid transparent;\n border-right: 0.45rem solid transparent;\n top: var(--action-top);\n left: var(--action-left);\n /* The tip of the triangle is at center-top (50% 0) */\n /* We rotate around the tip so it stays at the target position */\n transform-origin: 50% 0;\n transform: translate(-50%, 0) rotate(var(--action-angle, 180deg));\n /* Add shadow to match the container shadow */\n /* filter: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06));\n z-index: -1; */\n }\n </style>\n }\n `,\n host: {\n '[style]': 'styles()',\n },\n})\nexport class NgbPopoverArrow {\n readonly arrowTracker = inject(POPOVER_ARROW_TRACKER);\n readonly anchor = input(false);\n readonly el = inject(ElementRef<HTMLElement>);\n // Optional: inject the host directive if available (for offset calculation)\n readonly arrowHost = inject(NgbPopoverArrowHost, { optional: true });\n\n readonly styles = computed(() => {\n const { target, position } = this.arrowTracker.values();\n if (target && position) {\n return this.updateAnchorPosition(position, target, this.el.nativeElement);\n }\n return {};\n });\n\n private updateAnchorPosition(position: PopoverPosition, target: HTMLElement, el: HTMLElement) {\n const elRect = el.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n\n // Calculate offset from host element (padding + border)\n // If arrowHost is available, use the difference between host and arrow element\n let offsetTop = 0;\n let offsetLeft = 0;\n if (this.arrowHost) {\n const hostRect = this.arrowHost.el.nativeElement.getBoundingClientRect();\n offsetTop = elRect.top - hostRect.top;\n offsetLeft = elRect.left - hostRect.left;\n console.log(elRect.top - hostRect.top);\n }\n\n let deg = '0deg';\n let anchorTop = '0';\n let anchorLeft = '0';\n // Minimum distance from edge\n const minPadding = 8;\n\n // Calculate target center\n const targetCenterX = targetRect.left + targetRect.width / 2;\n const targetCenterY = targetRect.top + targetRect.height / 2;\n\n // Arrow tip position relative to the arrow element\n // Add offset to account for host padding/border\n const arrowLeftPx = targetCenterX - elRect.left + offsetLeft;\n const arrowTopPx = targetCenterY - elRect.top + offsetTop;\n\n // Content area dimensions\n const contentWidth = elRect.width;\n const contentHeight = elRect.height;\n\n // Clamp positions within content bounds\n const clampedLeftPx = Math.max(minPadding, Math.min(arrowLeftPx, contentWidth - minPadding));\n const clampedTopPx = Math.max(minPadding, Math.min(arrowTopPx, contentHeight - minPadding));\n\n // Arrow positioning - always center to target\n switch (position) {\n case 'top':\n case 'tl':\n case 'tr':\n deg = '0deg';\n anchorTop = '100%';\n anchorLeft = `${clampedLeftPx}px`;\n break;\n case 'bottom':\n case 'bl':\n case 'br':\n deg = '180deg';\n anchorTop = '0';\n anchorLeft = `${clampedLeftPx}px`;\n break;\n case 'left':\n case 'ls':\n case 'le':\n deg = '270deg';\n anchorLeft = '100%';\n anchorTop = `${clampedTopPx}px`;\n break;\n case 'right':\n case 'rs':\n case 're':\n deg = '90deg';\n anchorLeft = '0';\n anchorTop = `${clampedTopPx}px`;\n break;\n }\n\n return { '--action-angle': deg, '--action-left': anchorLeft, '--action-top': anchorTop };\n }\n}\n","import {\n Component,\n Directive,\n ElementRef,\n ViewContainerRef,\n effect,\n inject,\n input,\n linkedSignal,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FocusTrap } from '@ngbase/adk/a11y';\nimport { BaseDialog, NgbPortalClose } from '@ngbase/adk/portal';\nimport { disposals } from '@ngbase/adk/utils';\nimport { Observable, fromEvent, map, startWith, switchMap } from 'rxjs';\nimport { PopoverOptions, PopoverPosition } from './popover.service';\nimport { tooltipPosition } from './utils';\nimport { POPOVER_ARROW_TRACKER, providePopoverArrowTracker } from './popover-arrow.ng';\n\n@Directive({\n selector: '[ngbPopoverBackdrop]',\n hostDirectives: [FocusTrap],\n host: {\n '[style.clipPath]': 'popover.options().clipPath?.()',\n '[class]': 'popover.options().backdropClassName',\n '(click)': '!popover.options().disableClose && popover.close()',\n },\n})\nexport class NgbPopoverBackdrop {\n readonly popover = inject(NgbPopover);\n readonly focusTrap = inject(FocusTrap);\n\n constructor() {\n this.focusTrap._focusTrap = linkedSignal(() => this.popover.options().focusTrap ?? true);\n }\n}\n\n@Directive({\n selector: '[ngbPopoverMain]',\n host: {\n '[class]': 'popover.options().className',\n },\n})\nexport class NgbPopoverMain {\n readonly popover = inject(NgbPopover);\n}\n\n@Component({\n selector: 'ngb-popover',\n template: '',\n})\nexport class NgbPopover extends BaseDialog {\n readonly contentContainer = viewChild('contentContainer', { read: ViewContainerRef });\n readonly arrowTracker = inject(POPOVER_ARROW_TRACKER);\n private readonly disposals = disposals();\n\n // These are set by subclasses via viewChild\n readonly container = viewChild.required<NgbPopoverMain, ElementRef<HTMLElement>>(NgbPopoverMain, {\n read: ElementRef,\n });\n readonly backdropElement = viewChild<NgbPopoverBackdrop, ElementRef<HTMLElement>>(\n NgbPopoverBackdrop,\n { read: ElementRef },\n );\n\n readonly options = signal<PopoverOptions>({} as PopoverOptions);\n private lastPosition: PopoverPosition = 'top';\n readonly scrolled = signal(0);\n\n readonly events: Observable<{ type: string; value: any }> = new Observable(subscriber => {\n // Defer until container is available\n queueMicrotask(() => {\n const el = this.container()!.nativeElement;\n const mouseenter = fromEvent(el, 'mouseenter');\n const mouseleave = fromEvent(el, 'mouseleave');\n const event = mouseenter.pipe(\n switchMap(e =>\n mouseleave.pipe(\n map(x => ({ type: 'mouseleave', value: x })),\n startWith({ type: 'mouseenter', value: e }),\n ),\n ),\n );\n event.subscribe(subscriber);\n });\n });\n\n constructor() {\n super();\n\n effect(cleanup => {\n const el = this.container()!.nativeElement;\n const options = this.options();\n const target = this.getTarget();\n if (options.anchor) {\n options.offset = 16;\n }\n this.lastPosition = options.position || 'bottom';\n // this.schedulePopoverUpdate(target, el);\n if (options.smoothScroll) {\n // target.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n\n // fromEvent(window, 'scroll')\n // .pipe(\n // startWith(1),\n // tap((x) => console.count('scroll 50')),\n // debounceTime(50),\n // take(1),\n // )\n // .subscribe(() => {});\n // fromEvent(window, 'scroll')\n // .pipe(\n // startWith(1),\n // tap((x) => console.count('scroll 10')),\n // debounceTime(10),\n // take(1),\n // )\n // .subscribe(() => {\n // this.scrolled.update((x) => x + 1);\n // this.schedulePopoverUpdate(target, el);\n // });\n scrollToElement(target).then(() => {\n this.scrolled.update(x => x + 1);\n this.schedulePopoverUpdate(target, el, options);\n });\n } else {\n this.schedulePopoverUpdate(target, el, options);\n }\n\n // TODO: remove this once we have multi cleanup support\n if (!options.backdrop) {\n window.addEventListener('scroll', this.scheduleUpdateDimension);\n cleanup(() => window.removeEventListener('scroll', this.scheduleUpdateDimension));\n }\n\n // observe the target element position change\n const resizeObserver = new ResizeObserver(() => {\n // console.log('resizeObserver');\n this.schedulePopoverUpdate(target, el, options);\n });\n resizeObserver.observe(target);\n cleanup(() => resizeObserver.disconnect());\n });\n }\n\n override getTarget(): HTMLElement {\n return this.target() || this.options().target;\n }\n\n private scheduleUpdateDimension = () => {\n this.disposals.afterNextRender(() => this.updateDimension());\n };\n\n private schedulePopoverUpdate(target: HTMLElement, el: HTMLElement, options: PopoverOptions) {\n // this.options().target = target;\n // if (options.backdrop) {\n // this.onOpen();\n // }\n if (options.width === 'target') {\n // update the width of the container to be the same as the target\n el.style.width = `${target.offsetWidth}px`;\n } else if (options.width === 'free') {\n el.style.minWidth = `${target.offsetWidth}px`;\n } else if (options.width) {\n el.style.width = options.width;\n }\n if (options.height) {\n el.style.height = options.height;\n }\n if (options.maxHeight) {\n el.style.maxHeight = options.maxHeight;\n }\n\n this.scheduleUpdateDimension();\n }\n\n private updateDimension() {\n const el = this.container()!.nativeElement;\n const target = this.getTarget();\n if (!target) {\n return;\n }\n const { top, bottom, left, right, position, maxHeight, maxWidth } = tooltipPosition({\n target,\n el,\n position: this.lastPosition,\n client: this.options().client,\n offset: this.options().offset,\n sideOffset: this.options().sideOffset,\n });\n // change the anchor position\n // if (this.options().anchor) {\n // this.updateAnchorPosition(position, el, target);\n // }\n this.lastPosition = position;\n // we need to update the values directly instead of signal to avoid too many CD checks\n if (bottom !== undefined) {\n el.style.bottom = `${bottom}px`;\n el.style.top = '';\n } else {\n el.style.top = `${top}px`;\n el.style.bottom = '';\n }\n if (right != undefined) {\n el.style.right = `${right}px`;\n el.style.left = '';\n } else {\n el.style.left = `${left}px`;\n el.style.right = '';\n }\n\n if (maxHeight) {\n el.style.maxHeight = `${maxHeight}px`;\n }\n if (maxWidth) {\n el.style.maxWidth = `${maxWidth}px`;\n }\n this.arrowTracker.values.set({ top, bottom, left, right, target, position });\n }\n\n override setOptions(options: PopoverOptions): void {\n // console.log('setOptions', options);\n this.options.set(options);\n }\n}\n\nfunction scrollToElement(target: HTMLElement) {\n return new Promise(resolve => {\n let lastPos: number;\n let currentPos = null;\n let samePosCount = 0;\n\n const checkIfScrollComplete = () => {\n currentPos = window.pageYOffset || document.documentElement.scrollTop;\n\n if (lastPos !== null && currentPos === lastPos) {\n samePosCount++;\n if (samePosCount > 2) {\n resolve(true);\n return;\n }\n } else {\n samePosCount = 0;\n lastPos = currentPos;\n }\n\n requestAnimationFrame(checkIfScrollComplete);\n };\n // scroll only if the target is not in the view\n // window.scrollTo({\n // top: target.offsetTop - 50,\n // behavior: 'smooth',\n // });\n target.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n requestAnimationFrame(checkIfScrollComplete);\n });\n}\n\n@Directive({ selector: '[ngbPopoverClose]' })\nexport class NgbPopoverClose extends NgbPortalClose {\n readonly ngbPopoverClose = input();\n\n override close() {\n super.close(this.ngbPopoverClose());\n }\n}\n\nexport function aliasPopover(popover: typeof NgbPopover) {\n return [{ provide: NgbPopover, useExisting: popover }, providePopoverArrowTracker()];\n}\n","import { inject, InjectionToken, Signal, Type, WritableSignal } from '@angular/core';\nimport { DialogInput, DialogOptions, DialogRef } from '@ngbase/adk/portal';\nimport { Observable } from 'rxjs';\nimport { basePopoverPortal } from './base-popover.service';\nimport { NgbPopover } from './popover';\nimport { OverlayPosition, PopoverUtilConfig } from './utils';\n\nexport type PopoverPosition = OverlayPosition;\n\nexport class PopoverOptions extends DialogOptions implements PopoverUtilConfig {\n target!: HTMLElement;\n el?: HTMLElement;\n position?: PopoverPosition;\n offset?: number;\n sideOffset?: number;\n client?: { x: number; y: number; w: number; h: number } | null;\n className?: string;\n backdropClassName?: string;\n clipPath?: Signal<string>;\n anchor?: boolean;\n smoothScroll?: boolean;\n}\n\nexport interface PopoverOpen<T> {\n diaRef: DialogRef<any>;\n events: Observable<{ type: string; value: any }>;\n parent: NgbPopover;\n replace: ((component: DialogInput<T>) => void) | undefined;\n childSignal: WritableSignal<any>;\n}\n\nconst POPOVER_TOKEN = new InjectionToken<Type<NgbPopover>>('POPOVER_TOKEN');\n\nexport type PopoverType = ReturnType<typeof ngbPopoverPortal>;\n\nexport function ngbPopoverPortal() {\n const popover = inject(POPOVER_TOKEN, { optional: true }) ?? NgbPopover;\n const base = basePopoverPortal(popover);\n\n function open<T>(component: DialogInput<T>, options: PopoverOptions): PopoverOpen<T> {\n return base.open(component, options);\n }\n\n return { open, closeAll: base.closeAll };\n}\n\nexport const registerNgbPopover = (popover: typeof NgbPopover) => {\n return { provide: POPOVER_TOKEN, useValue: popover };\n};\n","import { Directive, ElementRef, TemplateRef, inject, input } from '@angular/core';\nimport { PopoverPosition, ngbPopoverPortal } from './popover.service';\n\n@Directive({\n selector: '[ngbPopoverTrigger]',\n exportAs: 'ngbPopoverTrigger',\n host: {\n '(click)': 'open()',\n },\n})\nexport class NgbPopoverTrigger {\n readonly popoverPortal = ngbPopoverPortal();\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly ngbPopoverTrigger = input.required<TemplateRef<any>>();\n readonly ngbPopoverTriggerData = input();\n readonly options = input<{ position?: PopoverPosition; anchor?: boolean }>();\n\n private closeFn: VoidFunction = () => {};\n\n open() {\n const options = this.options();\n const { diaRef } = this.popoverPortal.open(this.ngbPopoverTrigger(), {\n target: this.el.nativeElement,\n anchor: options?.anchor,\n position: options?.position || 'top',\n data: this.ngbPopoverTriggerData(),\n });\n this.closeFn = diaRef.close;\n }\n\n close() {\n this.closeFn();\n }\n}\n","/*\n * Public API Surface of popover\n */\n\nexport * from './popover.service';\nexport * from './popover';\nexport * from './popover-trigger';\nexport * from './base-popover.service';\nexport * from './popover-arrow.ng';\nexport { tooltipPosition } from './utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,24 +1,34 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, DOCUMENT, ElementRef, signal, InjectionToken, Injector, input, Directive, viewChild, ViewContainerRef, Component, ChangeDetectionStrategy, ApplicationRef, EnvironmentInjector, createComponent, Injectable, TemplateRef } from '@angular/core';
3
- import { BehaviorSubject, filter, Subject, first } from 'rxjs';
2
+ import { inject, DOCUMENT, ElementRef, signal, InjectionToken, Injector, input, Directive, viewChild, ViewContainerRef, ChangeDetectionStrategy, Component, ApplicationRef, EnvironmentInjector, createComponent, Injectable, TemplateRef } from '@angular/core';
3
+ import { Subject, first } from 'rxjs';
4
4
  import { keyMap } from '@ngbase/adk/keys';
5
5
 
6
6
  class BaseDialog {
7
+ get vcRef() {
8
+ return this.contentContainer();
9
+ }
7
10
  constructor() {
8
11
  this.dialogRef = inject(DialogRef);
9
12
  this.document = inject(DOCUMENT);
10
13
  this.el = inject(ElementRef);
11
- this._afterViewSource = new BehaviorSubject(null);
12
- this.afterView = this._afterViewSource.asObservable().pipe(filter(Boolean));
13
14
  this.target = signal(null, ...(ngDevMode ? [{ debugName: "target" }] : []));
14
- // counter is required because we have start and end animation
15
- // so we need to wait for both to finish before destroying the dialog
16
- this.count = 0;
15
+ // Track animation state: false = waiting for enter, true = enter complete
16
+ this.enterAnimationDone = false;
17
17
  this.isFirst = true;
18
18
  this.currentActiveElement = new WeakRef(this.document.activeElement);
19
+ // Signal to track closing state for CSS animations
20
+ this.closing = signal(false, ...(ngDevMode ? [{ debugName: "closing" }] : []));
21
+ // Override in subclasses to indicate if animations are used
22
+ // If false, close() will complete immediately without waiting for animationDone()
23
+ this.hasAnimations = false;
19
24
  this.animationDone = () => {
20
- this.count++;
21
- if (this.count === 2) {
25
+ if (!this.enterAnimationDone) {
26
+ // First animation end = enter animation complete
27
+ this.enterAnimationDone = true;
28
+ }
29
+ else if (this.closing()) {
30
+ // Second animation end while closing = leave animation complete
31
+ this.dialogRef._completeClose();
22
32
  this.onClose();
23
33
  }
24
34
  };
@@ -30,11 +40,31 @@ class BaseDialog {
30
40
  const target = this.dialogRef.options.afterFocusEl || this.getTarget() || this.currentActiveElement.deref();
31
41
  target?.focus();
32
42
  };
43
+ this.dialogRef.setBaseDialog(this);
33
44
  this.onOpen();
45
+ // If no animations, mark enter as done immediately
46
+ if (!this.hasAnimations) {
47
+ this.enterAnimationDone = true;
48
+ }
34
49
  }
35
50
  setOptions(_) { }
36
51
  close() {
37
- this.dialogRef.close();
52
+ // Only start closing if enter animation is complete
53
+ if (this.enterAnimationDone && !this.closing()) {
54
+ this.closing.set(true);
55
+ // If no animations, complete close immediately
56
+ if (!this.hasAnimations) {
57
+ this.dialogRef._completeClose();
58
+ this.onClose();
59
+ }
60
+ // Otherwise, the actual close will happen after animationDone is called
61
+ // which triggers when the leave animation completes
62
+ }
63
+ }
64
+ onAnimationEnd(event) {
65
+ if (event.target === event.currentTarget) {
66
+ this.animationDone();
67
+ }
38
68
  }
39
69
  onOpen() {
40
70
  // make the body not scrollable and add padding to the right
@@ -51,34 +81,96 @@ class BaseDialog {
51
81
  }
52
82
  }
53
83
  class DialogRef {
84
+ // Expose closing state for consumers who need to check
85
+ get isClosing() {
86
+ return this._isClosing;
87
+ }
88
+ get parent() {
89
+ return this._parent;
90
+ }
91
+ get children() {
92
+ return this._children;
93
+ }
94
+ get root() {
95
+ return this._parent?.root ?? this;
96
+ }
54
97
  constructor(options, destroyParent, closeAllFn, animation = true) {
55
98
  this.options = options;
56
99
  this.destroyParent = destroyParent;
57
100
  this.closeAllFn = closeAllFn;
58
101
  this.animation = animation;
59
102
  this.data = this.options.data;
60
- this.backdropSub = null;
103
+ this.baseDialog = null;
104
+ this.pendingCloseData = undefined;
105
+ this._isClosing = false;
61
106
  this.onDestroySource = new Subject();
62
107
  this.onDestroy = this.onDestroySource.asObservable().pipe(first());
63
108
  this.afterClosedSource = new Subject();
64
109
  this.afterClosed = this.afterClosedSource.asObservable().pipe(first());
65
110
  this.events = new Subject();
66
- this.close = (data) => {
67
- this.afterClosedSource.next(data);
68
- // if (!this.animation) {
111
+ // Parent-child relationship
112
+ this._parent = null;
113
+ this._children = new Set();
114
+ this.close = (data, options) => {
115
+ // Guard: do nothing if already closing - makes close() idempotent
116
+ if (this._isClosing) {
117
+ return;
118
+ }
119
+ this._isClosing = true;
120
+ // 1. Close all children first (if closeChildrenOnClose is true)
121
+ if (this.options.closeChildrenOnClose !== false) {
122
+ // Create a copy since children will remove themselves during close
123
+ [...this._children].forEach(child => child.close());
124
+ }
125
+ // 2. If we have a BaseDialog and animation is enabled, trigger the leave animation
126
+ if (this.baseDialog && this.animation) {
127
+ this.pendingCloseData = data;
128
+ this.baseDialog.close();
129
+ }
130
+ else {
131
+ // No animation, close immediately
132
+ this.afterClosedSource.next(data);
133
+ this.destroy();
134
+ }
135
+ // 3. If closeParent is true, close parent after self (child → parent order)
136
+ // This ensures children animate out before parents, maintaining visual hierarchy
137
+ if (options?.closeParent && this._parent) {
138
+ this._parent.close(undefined, { closeParent: true });
139
+ }
140
+ };
141
+ // Called by BaseDialog.animationDone() after leave animation completes
142
+ this._completeClose = () => {
143
+ this.afterClosedSource.next(this.pendingCloseData);
69
144
  this.destroy();
70
- // }
71
145
  };
146
+ // Register with parent if provided
147
+ if (options.parent) {
148
+ this._setParent(options.parent);
149
+ }
150
+ }
151
+ _setParent(parent) {
152
+ this._parent = parent;
153
+ parent._addChild(this);
154
+ }
155
+ _addChild(child) {
156
+ this._children.add(child);
157
+ }
158
+ _removeChild(child) {
159
+ this._children.delete(child);
160
+ }
161
+ // Set the BaseDialog reference so we can trigger animations
162
+ setBaseDialog(baseDialog) {
163
+ this.baseDialog = baseDialog;
72
164
  }
73
165
  closeAll() {
74
166
  this.closeAllFn();
75
167
  }
76
168
  destroy() {
77
- this.backdropSub?.unsubscribe();
169
+ // Remove self from parent's children
170
+ this._parent?._removeChild(this);
78
171
  this.afterClosedSource.complete();
79
172
  this.onDestroySource.next(false);
80
173
  this.destroyParent();
81
- // console.log('destroyed parent');
82
174
  }
83
175
  }
84
176
  class DialogTestingRef {
@@ -92,6 +184,7 @@ class DialogOptions {
92
184
  this.classNames = [];
93
185
  this.disableClose = false;
94
186
  this.focusTrap = true;
187
+ this.closeChildrenOnClose = true;
95
188
  }
96
189
  }
97
190
  const DIALOG_INJ = new InjectionToken('dialogInj');
@@ -118,10 +211,10 @@ class NgbPortalClose {
118
211
  close(data = this.ngbPortalClose()) {
119
212
  this.dialogRef.close(data);
120
213
  }
121
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbPortalClose, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
122
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: NgbPortalClose, isStandalone: true, selector: "[ngbPortalClose]", inputs: { ngbPortalClose: { classPropertyName: "ngbPortalClose", publicName: "ngbPortalClose", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "close()" } }, ngImport: i0 }); }
214
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbPortalClose, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
215
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: NgbPortalClose, isStandalone: true, selector: "[ngbPortalClose]", inputs: { ngbPortalClose: { classPropertyName: "ngbPortalClose", publicName: "ngbPortalClose", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "close()" } }, ngImport: i0 }); }
123
216
  }
124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbPortalClose, decorators: [{
217
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbPortalClose, decorators: [{
125
218
  type: Directive,
126
219
  args: [{
127
220
  selector: '[ngbPortalClose]',
@@ -129,23 +222,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImpor
129
222
  '(click)': 'close()',
130
223
  },
131
224
  }]
132
- }] });
225
+ }], propDecorators: { ngbPortalClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngbPortalClose", required: false }] }] } });
133
226
 
134
227
  class Portal {
135
228
  constructor() {
136
- this.myDialog = viewChild('myDialog', ...(ngDevMode ? [{ debugName: "myDialog", read: ViewContainerRef }] : [{ read: ViewContainerRef }]));
229
+ this.myDialog = viewChild('myDialog', { ...(ngDevMode ? { debugName: "myDialog" } : {}), read: ViewContainerRef });
137
230
  }
138
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: Portal, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
139
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.2.0", type: Portal, isStandalone: true, selector: "ngb-portal", viewQueries: [{ propertyName: "myDialog", first: true, predicate: ["myDialog"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `<ng-container #myDialog />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
231
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: Portal, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
232
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.0", type: Portal, isStandalone: true, selector: "ngb-portal", viewQueries: [{ propertyName: "myDialog", first: true, predicate: ["myDialog"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `<ng-container #myDialog />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
140
233
  }
141
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: Portal, decorators: [{
234
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: Portal, decorators: [{
142
235
  type: Component,
143
236
  args: [{
144
237
  selector: 'ngb-portal',
145
238
  template: `<ng-container #myDialog />`,
146
239
  changeDetection: ChangeDetectionStrategy.OnPush,
147
240
  }]
148
- }] });
241
+ }], propDecorators: { myDialog: [{ type: i0.ViewChild, args: ['myDialog', { ...{ read: ViewContainerRef }, isSignal: true }] }] } });
149
242
 
150
243
  class PortalService {
151
244
  constructor() {
@@ -188,17 +281,18 @@ class PortalService {
188
281
  clear(container) {
189
282
  if (this.trackElements.has(container)) {
190
283
  const elements = this.trackElements.get(container);
191
- elements?.forEach(c => c.destroy());
192
- this.trackElements.delete(container);
284
+ // Trigger close on each component to play leave animations
285
+ // The BaseDialog.close() method will handle the animation and eventual destruction
286
+ elements?.forEach(c => c.instance?.close?.());
193
287
  }
194
288
  }
195
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: PortalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
196
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: PortalService, providedIn: 'root' }); }
289
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PortalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
290
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PortalService, providedIn: 'root' }); }
197
291
  }
198
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: PortalService, decorators: [{
292
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PortalService, decorators: [{
199
293
  type: Injectable,
200
294
  args: [{ providedIn: 'root' }]
201
- }] });
295
+ }], ctorParameters: () => [] });
202
296
 
203
297
  function basePortal(name, baseComponent) {
204
298
  const NAME = name;
@@ -220,28 +314,25 @@ function basePortal(name, baseComponent) {
220
314
  if (component === undefined) {
221
315
  return { diaRef, parent, instance: null, childSignal };
222
316
  }
223
- // close on esc
317
+ const parentInstance = parent.instance;
318
+ // close on esc - call parentInstance.close() to trigger leave animation
224
319
  if (!options.disableClose) {
225
- sub = keyMap('esc', () => diaRef.close(), { injector, stop: true });
320
+ sub = keyMap('esc', () => parentInstance.close(), { injector, stop: true });
226
321
  }
227
322
  function destroy() {
228
323
  portal.delete(NAME, parent);
229
324
  sub?.();
230
325
  }
231
- let vwRef;
232
- const parentInstance = parent.instance;
233
- parentInstance.afterView.pipe(first()).subscribe(vcRef => {
234
- vwRef = vcRef;
235
- const child = createChild(component, vcRef);
236
- // diaRef.onDestroy.subscribe(() => child.destroy());
237
- diaRef.events.next('created');
238
- childSignal.set(child);
239
- });
326
+ // Trigger change detection to initialize viewChild signals
327
+ parent.changeDetectorRef.detectChanges();
328
+ // VCR is now available after detectChanges
329
+ const vcRef = parentInstance.vcRef;
330
+ const child = createChild(component, vcRef);
331
+ diaRef.events.next('created');
332
+ childSignal.set(child);
240
333
  function replace(component) {
241
- if (vwRef) {
242
- vwRef.clear();
243
- createChild(component, vwRef);
244
- }
334
+ vcRef.clear();
335
+ createChild(component, vcRef);
245
336
  }
246
337
  function createChild(component, vcRef) {
247
338
  // for template type
@@ -256,6 +347,7 @@ function basePortal(name, baseComponent) {
256
347
  return { diaRef, parent, replace, childSignal };
257
348
  }
258
349
  function closeAll() {
350
+ // Close each dialog properly to trigger leave animations
259
351
  portal.clear(NAME);
260
352
  }
261
353
  return { open, closeAll, updateBaseComponent };