@ngbase/adk 0.1.16 → 0.1.18

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 (203) 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 +319 -41
  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 +134 -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 -46
  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 +52 -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 +91 -91
  109. package/schematics/components/files/accordion/accordion.ts.template +9 -6
  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/button/button-llm.md.template +3 -2
  115. package/schematics/components/files/charts/area-chart.component.ts.template +278 -0
  116. package/schematics/components/files/charts/bar-chart.component.ts.template +262 -0
  117. package/schematics/components/files/charts/chart-tooltip.component.ts.template +168 -0
  118. package/schematics/components/files/charts/index.ts.template +4 -0
  119. package/schematics/components/files/charts/line-chart.component.ts.template +238 -0
  120. package/schematics/components/files/charts/pie-chart.component.ts.template +283 -0
  121. package/schematics/components/files/checkbox/checkbox.ts.template +2 -2
  122. package/schematics/components/files/color-picker/color-picker.ts.template +2 -2
  123. package/schematics/components/files/dialog/dialog.ts.template +18 -14
  124. package/schematics/components/files/drawer/drawer.ts.template +30 -27
  125. package/schematics/components/files/form-field/form-field.ts.template +51 -23
  126. package/schematics/components/files/pagination/pagination.ts.template +4 -4
  127. package/schematics/components/files/picasa/picasa-base.component.ts.template +15 -30
  128. package/schematics/components/files/popover/popover.ts.template +15 -4
  129. package/schematics/components/files/select/list-selection.ts.template +0 -2
  130. package/schematics/components/files/select/option.ts.template +1 -1
  131. package/schematics/components/files/selectable/selectable.ts.template +2 -2
  132. package/schematics/components/files/sheet/sheet.ts.template +26 -14
  133. package/schematics/components/files/sidenav/sidenav.ts.template +7 -5
  134. package/schematics/components/files/sonner/sonner.ts.template +1 -2
  135. package/schematics/components/files/stepper/stepper.ts.template +2 -4
  136. package/schematics/components/files/switch/switch.ts.template +2 -2
  137. package/schematics/components/files/table/table.ts.template +43 -3
  138. package/schematics/components/files/tabs/tab.ts.template +3 -3
  139. package/schematics/components/files/theme/theme.service.ts.template +3 -3
  140. package/schematics/components/files/toggle/toggle.ts.template +1 -1
  141. package/schematics/components/files/toggle-group/toggle-group.ts.template +1 -1
  142. package/schematics/components/files/tooltip/tooltip.ts.template +2 -3
  143. package/schematics/components/schema.json +2 -0
  144. package/{accordion/index.d.ts → types/ngbase-adk-accordion.d.ts} +1 -3
  145. package/{autocomplete/index.d.ts → types/ngbase-adk-autocomplete.d.ts} +2 -7
  146. package/{checkbox/index.d.ts → types/ngbase-adk-checkbox.d.ts} +8 -14
  147. package/types/ngbase-adk-clipboard.d.ts +12 -0
  148. package/{color-picker/index.d.ts → types/ngbase-adk-color-picker.d.ts} +14 -26
  149. package/{datepicker/index.d.ts → types/ngbase-adk-datepicker.d.ts} +9 -18
  150. package/{dialog/index.d.ts → types/ngbase-adk-dialog.d.ts} +3 -8
  151. package/types/ngbase-adk-form-field.d.ts +88 -0
  152. package/{inline-edit/index.d.ts → types/ngbase-adk-inline-edit.d.ts} +8 -16
  153. package/types/ngbase-adk-jwt.d.ts +64 -0
  154. package/{menu/index.d.ts → types/ngbase-adk-menu.d.ts} +6 -5
  155. package/{otp/index.d.ts → types/ngbase-adk-otp.d.ts} +8 -16
  156. package/{popover/index.d.ts → types/ngbase-adk-popover.d.ts} +14 -2
  157. package/{portal/index.d.ts → types/ngbase-adk-portal.d.ts} +29 -8
  158. package/{radio/index.d.ts → types/ngbase-adk-radio.d.ts} +9 -12
  159. package/{resizable/index.d.ts → types/ngbase-adk-resizable.d.ts} +4 -4
  160. package/{scroll-area/index.d.ts → types/ngbase-adk-scroll-area.d.ts} +2 -1
  161. package/{select/index.d.ts → types/ngbase-adk-select.d.ts} +8 -22
  162. package/{selectable/index.d.ts → types/ngbase-adk-selectable.d.ts} +6 -10
  163. package/{sheet/index.d.ts → types/ngbase-adk-sheet.d.ts} +4 -3
  164. package/{sidenav/index.d.ts → types/ngbase-adk-sidenav.d.ts} +6 -6
  165. package/{slider/index.d.ts → types/ngbase-adk-slider.d.ts} +8 -17
  166. package/{sonner/index.d.ts → types/ngbase-adk-sonner.d.ts} +1 -3
  167. package/{stepper/index.d.ts → types/ngbase-adk-stepper.d.ts} +1 -4
  168. package/{switch/index.d.ts → types/ngbase-adk-switch.d.ts} +7 -14
  169. package/{table/index.d.ts → types/ngbase-adk-table.d.ts} +126 -3
  170. package/{test/index.d.ts → types/ngbase-adk-test.d.ts} +1 -1
  171. package/{toggle-group/index.d.ts → types/ngbase-adk-toggle-group.d.ts} +5 -10
  172. package/types/ngbase-adk-toggle.d.ts +14 -0
  173. package/{tooltip/index.d.ts → types/ngbase-adk-tooltip.d.ts} +9 -11
  174. package/{tour/index.d.ts → types/ngbase-adk-tour.d.ts} +4 -6
  175. package/{utils/index.d.ts → types/ngbase-adk-utils.d.ts} +15 -11
  176. package/clipboard/index.d.ts +0 -11
  177. package/form-field/index.d.ts +0 -97
  178. package/jwt/index.d.ts +0 -20
  179. package/toggle/index.d.ts +0 -16
  180. /package/{a11y/index.d.ts → types/ngbase-adk-a11y.d.ts} +0 -0
  181. /package/{avatar/index.d.ts → types/ngbase-adk-avatar.d.ts} +0 -0
  182. /package/{bidi/index.d.ts → types/ngbase-adk-bidi.d.ts} +0 -0
  183. /package/{breadcrumb/index.d.ts → types/ngbase-adk-breadcrumb.d.ts} +0 -0
  184. /package/{cache/index.d.ts → types/ngbase-adk-cache.d.ts} +0 -0
  185. /package/{carousel/index.d.ts → types/ngbase-adk-carousel.d.ts} +0 -0
  186. /package/{chip/index.d.ts → types/ngbase-adk-chip.d.ts} +0 -0
  187. /package/{collections/index.d.ts → types/ngbase-adk-collections.d.ts} +0 -0
  188. /package/{cookies/index.d.ts → types/ngbase-adk-cookies.d.ts} +0 -0
  189. /package/{drag/index.d.ts → types/ngbase-adk-drag.d.ts} +0 -0
  190. /package/{hover-card/index.d.ts → types/ngbase-adk-hover-card.d.ts} +0 -0
  191. /package/{icon/index.d.ts → types/ngbase-adk-icon.d.ts} +0 -0
  192. /package/{keys/index.d.ts → types/ngbase-adk-keys.d.ts} +0 -0
  193. /package/{layout/index.d.ts → types/ngbase-adk-layout.d.ts} +0 -0
  194. /package/{list/index.d.ts → types/ngbase-adk-list.d.ts} +0 -0
  195. /package/{mask/index.d.ts → types/ngbase-adk-mask.d.ts} +0 -0
  196. /package/{network/index.d.ts → types/ngbase-adk-network.d.ts} +0 -0
  197. /package/{pagination/index.d.ts → types/ngbase-adk-pagination.d.ts} +0 -0
  198. /package/{progress/index.d.ts → types/ngbase-adk-progress.d.ts} +0 -0
  199. /package/{tabs/index.d.ts → types/ngbase-adk-tabs.d.ts} +0 -0
  200. /package/{translate/index.d.ts → types/ngbase-adk-translate.d.ts} +0 -0
  201. /package/{tree/index.d.ts → types/ngbase-adk-tree.d.ts} +0 -0
  202. /package/{virtualizer/index.d.ts → types/ngbase-adk-virtualizer.d.ts} +0 -0
  203. /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":";;;;;;;;AAKM,SAAU,iBAAiB,CAAI,SAAkB,EAAA;IACrD,MAAM,IAAI,GAAG,SAAS;IACtB,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;AAExC,IAAA,SAAS,IAAI,CAAI,SAAyB,EAAE,OAAuB,EAAA;QACjE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CACxD,SAAS,EACT,CAAC,IAAI,EAAE,GAAG,KAAI;AACZ,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAsB;AAC5C,YAAA,QAAQ,CAAC,UAAU,CAAC,GAAqB,CAAC;QAC5C,CAAC,EACD,OAAO,CACR;QAED,OAAO;YACL,MAAM;AACN,YAAA,MAAM,EAAG,MAAM,CAAC,QAAuB,CAAC,MAAM;YAC9C,MAAM,EAAE,MAAM,CAAC,QAAQ;YACvB,OAAO;YACP,WAAW;SACZ;IACH;AAEA,IAAA,SAAS,QAAQ,GAAA;QACf,IAAI,CAAC,QAAQ,EAAE;IACjB;AACA,IAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC3B;;ACDA;AACA,IAAY,QAaX;AAbD,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,QAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,QAAA,CAAA,SAAA,CAAA,GAAA,IAAc;AACd,IAAA,QAAA,CAAA,UAAA,CAAA,GAAA,IAAe;AACf,IAAA,QAAA,CAAA,YAAA,CAAA,GAAA,IAAiB;AACjB,IAAA,QAAA,CAAA,aAAA,CAAA,GAAA,IAAkB;AAClB,IAAA,QAAA,CAAA,YAAA,CAAA,GAAA,IAAiB;AACjB,IAAA,QAAA,CAAA,UAAA,CAAA,GAAA,IAAe;AACf,IAAA,QAAA,CAAA,WAAA,CAAA,GAAA,IAAgB;AAChB,IAAA,QAAA,CAAA,SAAA,CAAA,GAAA,IAAc;AAChB,CAAC,EAbW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;AAmCpB;AACA,MAAM,aAAa,GAAmC;AACpD,IAAA,CAAC,QAAQ,CAAC,GAAG,GAAG;AACd,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,KAAK,EAAE,QAAQ;QACf,gBAAgB,EAAE,QAAQ,CAAC,MAAM;AACjC,QAAA,SAAS,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC5B,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM;YACvC,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM;AACzC,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC;SACvD,CAAC;AACH,KAAA;AACD,IAAA,CAAC,QAAQ,CAAC,MAAM,GAAG;AACjB,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,KAAK,EAAE,QAAQ;QACf,gBAAgB,EAAE,QAAQ,CAAC,GAAG;AAC9B,QAAA,SAAS,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC;QACxD,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM;YACvC,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM;AACxC,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC;SACvD,CAAC;AACH,KAAA;AACD,IAAA,CAAC,QAAQ,CAAC,IAAI,GAAG;AACf,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,KAAK,EAAE,QAAQ;QACf,gBAAgB,EAAE,QAAQ,CAAC,KAAK;AAChC,QAAA,SAAS,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC;QAC1D,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM;AACvC,YAAA,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;YACtD,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,MAAM;SAC3C,CAAC;AACH,KAAA;AACD,IAAA,CAAC,QAAQ,CAAC,KAAK,GAAG;AAChB,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,KAAK,EAAE,QAAQ;QACf,gBAAgB,EAAE,QAAQ,CAAC,IAAI;AAC/B,QAAA,SAAS,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC;QACzD,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM;AACvC,YAAA,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;YACtD,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM;SAC1C,CAAC;AACH,KAAA;AACD,IAAA,CAAC,QAAQ,CAAC,OAAO,GAAG;AAClB,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,KAAK,EAAE,OAAO;QACd,gBAAgB,EAAE,QAAQ,CAAC,UAAU;AACrC,QAAA,SAAS,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC;QACzE,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM;YACvC,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM;YACzC,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC;AACH,KAAA;AACD,IAAA,CAAC,QAAQ,CAAC,QAAQ,GAAG;AACnB,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,KAAK,EAAE,KAAK;QACZ,gBAAgB,EAAE,QAAQ,CAAC,WAAW;AACtC,QAAA,SAAS,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC;QACxE,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM;YACvC,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM;YACzC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;SACjD,CAAC;AACH,KAAA;AACD,IAAA,CAAC,QAAQ,CAAC,UAAU,GAAG;AACrB,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,KAAK,EAAE,OAAO;QACd,gBAAgB,EAAE,QAAQ,CAAC,WAAW;AACtC,QAAA,SAAS,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC;QACtE,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM;YACvC,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM;YACxC,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC;AACH,KAAA;AACD,IAAA,CAAC,QAAQ,CAAC,WAAW,GAAG;AACtB,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,KAAK,EAAE,KAAK;QACZ,gBAAgB,EAAE,QAAQ,CAAC,UAAU;AACrC,QAAA,SAAS,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC;QACrE,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM;YACvC,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM;YACxC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;SACjD,CAAC;AACH,KAAA;AACD,IAAA,CAAC,QAAQ,CAAC,UAAU,GAAG;AACrB,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,KAAK,EAAE,OAAO;QACd,gBAAgB,EAAE,QAAQ,CAAC,QAAQ;AACnC,QAAA,SAAS,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC;QACpE,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM;YACvC,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM;SAC1C,CAAC;AACH,KAAA;AACD,IAAA,CAAC,QAAQ,CAAC,QAAQ,GAAG;AACnB,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,KAAK,EAAE,KAAK;QACZ,gBAAgB,EAAE,QAAQ,CAAC,OAAO;AAClC,QAAA,SAAS,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC;QACtE,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM;YACvC,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;YAChD,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM;SAC1C,CAAC;AACH,KAAA;AACD,IAAA,CAAC,QAAQ,CAAC,SAAS,GAAG;AACpB,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,KAAK,EAAE,OAAO;QACd,gBAAgB,EAAE,QAAQ,CAAC,OAAO;AAClC,QAAA,SAAS,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC;QACrE,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM;YACvC,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,MAAM;SAC3C,CAAC;AACH,KAAA;AACD,IAAA,CAAC,QAAQ,CAAC,OAAO,GAAG;AAClB,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,KAAK,EAAE,KAAK;QACZ,gBAAgB,EAAE,QAAQ,CAAC,QAAQ;AACnC,QAAA,SAAS,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC;QACvE,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM;YACvC,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;YAChD,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,MAAM;SAC3C,CAAC;AACH,KAAA;CACF;MAEY,iBAAiB,CAAA;AAK5B,IAAA,WAAA,CACU,MAAyB,EACzB,gBAAmD,EACnD,cAAc,CAAC,EAAA;QAFf,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,WAAW,GAAX,WAAW;QAEnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC;IAC/C;IAEO,iBAAiB,GAAA;AACtB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;AACvC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;;QAGxC,MAAM,eAAe,GAAI,IAAI,CAAC,MAAM,CAAC,QAAqB,IAAI,QAAQ,CAAC,MAAM;;QAG7E,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,UAAU,CAAC;;AAGvE,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;QAC/F,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC;IAChE;IAEQ,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACtB,YAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AACzC,YAAA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QACjD;QACA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE;IACnD;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAG;QAC1B,OAAO;AACL,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,EAAE,CAAC,WAAW;YACrB,MAAM,EAAE,EAAE,CAAC,YAAY;SACxB;IACH;IAEQ,gBAAgB,CAAC,eAAyB,EAAE,UAAgB,EAAA;;QAElE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE;AACxD,YAAA,OAAO,eAAe;QACxB;;QAGA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;;AAGhD,QAAA,MAAM,IAAI,GAAG,aAAa,CAAC,eAAe,CAAC;;AAG3C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB;QACtC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE;AACjD,YAAA,OAAO,QAAQ;QACjB;;AAGA,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE;AACjD,gBAAA,OAAO,QAAQ;YACjB;QACF;;AAGA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;YAC5B,MAAM,iBAAiB,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM;YACnF,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,UAAU,CAAC,EAAE;AAC1D,gBAAA,OAAO,iBAAiB;YAC1B;QACF;;AAGA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;YAC9B,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK;YACrF,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,UAAU,CAAC,EAAE;AAC5D,gBAAA,OAAO,mBAAmB;YAC5B;QACF;;QAGA,OAAO,IAAI,CAAC,4BAA4B,CAAC,eAAe,EAAE,UAAU,CAAC;IACvE;AAEQ,IAAA,iBAAiB,CAAC,UAAgB,EAAA;QAMxC,OAAO;YACL,GAAG,EAAE,UAAU,CAAC,GAAG;AACnB,YAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;AACzE,YAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;YAC3E,IAAI,EAAE,UAAU,CAAC,IAAI;SACtB;IACH;IAEQ,iBAAiB,CAAC,QAAkB,EAAE,UAAgB,EAAA;AAC5D,QAAA,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;AAChC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;AAC/D,QAAA,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,gBAAgB;;AAG1E,QAAA,QACE,MAAM,CAAC,IAAI,GAAG,CAAC;YACf,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,WAAW;YAC3D,MAAM,CAAC,GAAG,GAAG,CAAC;AACd,YAAA,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,GAAG,YAAY;IAEhE;IAEQ,iBAAiB,CAAC,QAAkB,EAAE,UAAgB,EAAA;AAC5D,QAAA,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;AAChC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;AAC/D,QAAA,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,gBAAgB;QAE1E,IAAI,MAAM,GAAG,CAAC;;AAGd,QAAA,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC;YAAE,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QACpD,IAAI,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,WAAW;YAC3C,MAAM,IAAI,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,WAAW;AACrD,QAAA,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC;YAAE,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;QAClD,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,YAAY;YAC5C,MAAM,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,YAAY;AAEtD,QAAA,OAAO,MAAM;IACf;IAEQ,4BAA4B,CAAC,eAAyB,EAAE,UAAgB,EAAA;AAC9E,QAAA,MAAM,gBAAgB,GAAG,CAAC,eAAe,EAAE,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC;QAEvF,IAAI,YAAY,GAAG,eAAe;QAClC,IAAI,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,UAAU,CAAC;AAEvE,QAAA,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC7D,YAAA,IAAI,QAAQ,GAAG,aAAa,EAAE;gBAC5B,aAAa,GAAG,QAAQ;gBACxB,YAAY,GAAG,QAAQ;YACzB;QACF;AAEA,QAAA,OAAO,YAAY;IACrB;AAEQ,IAAA,gBAAgB,CACtB,MAAqC,EACrC,QAAkB,EAClB,UAAgB,EAAA;AAEhB,QAAA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;AAChC,QAAA,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,gBAAgB;AAC1E,QAAA,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC;;AAGpC,QAAA,IAAI,SAA6B;AACjC,QAAA,IAAI,QAA4B;;QAGhC,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;YAC7B,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU;QACpD;AAAO,aAAA,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,GAAG,YAAY,EAAE;AAChE,YAAA,SAAS,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC;QACtF;;AAGA,QAAA,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,WAAW,EAAE;YACxD,QAAQ,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU;QACjD;;AAGA,QAAA,MAAM,CAAC,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM;AAClE,QAAA,MAAM,CAAC,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK;;AAG/D,QAAA,IAAI,WAAW,GAAuB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;AAClF,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;;AAG/D,QAAA,IAAI,MAA0B;AAC9B,QAAA,IAAI,KAAyB;;AAG7B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;YAC3D,MAAM,GAAG,YAAY,IAAI,WAAW,GAAG,CAAC,CAAC;YACzC,WAAW,GAAG,SAAS;QACzB;;AAGA,QAAA,IAAI,YAAY,GAAG,CAAC,GAAG,WAAW,EAAE;YAClC,YAAY,GAAG,CAAC;YAChB,KAAK,GAAG,CAAC;QACX;AAAO,aAAA,IACL,IAAI,CAAC,KAAK,KAAK,KAAK;AACpB,aAAC,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,EAC3D;AACA,YAAA,KAAK,GAAG,WAAW,IAAI,YAAY,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW;QAC7D;QAEA,OAAO;AACL,YAAA,GAAG,EAAE,WAAW;YAChB,IAAI,EAAE,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,YAAY;YACpD,MAAM;YACN,KAAK;YACL,QAAQ;AACR,YAAA,SAAS,EAAE,SAAS,IAAI,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,SAAS;AAC7D,YAAA,QAAQ,EAAE,QAAQ,IAAI,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,SAAS;SAC1D;IACH;AACD;AAED;AACM,SAAU,eAAe,CAC7B,MAAyB,EACzB,gBAAgB,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,EAC3E,WAAW,GAAG,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,WAAW,EAAA;IAEtE,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,WAAW,CAAC;AAC/E,IAAA,OAAO,UAAU,CAAC,iBAAiB,EAAE;AACvC;;ACtaA;;;;;AAKG;MAKU,mBAAmB,CAAA;AAJhC,IAAA,WAAA,GAAA;AAKW,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AAC9C,IAAA;8GAFY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,qBAAqB;AAChC,iBAAA;;MAKY,mBAAmB,CAAA;AAAhC,IAAA,WAAA,GAAA;QACE,IAAA,CAAA,GAAG,GAAI,CAAC;QACR,IAAA,CAAA,IAAI,GAAI,CAAC;QACT,IAAA,CAAA,KAAK,GAAI,CAAC;QACV,IAAA,CAAA,MAAM,GAAI,CAAC;IAGb;AAAC;MAEY,qBAAqB,GAAG,IAAI,cAAc,CAEpD,qBAAqB;SAER,0BAA0B,GAAA;IACxC,OAAO;AACL,QAAA,OAAO,EAAE,qBAAqB;AAC9B,QAAA,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAsB,IAAI,mBAAmB,EAAE,CAAC,EAAE,CAAC;KACvF;AACH;MAwCa,eAAe,CAAA;AAtC5B,IAAA,WAAA,GAAA;AAuCW,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC5C,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,KAAK,kDAAC;AACrB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;;QAEpC,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE3D,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AACvD,YAAA,IAAI,MAAM,IAAI,QAAQ,EAAE;AACtB,gBAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;YAC3E;AACA,YAAA,OAAO,EAAE;AACX,QAAA,CAAC,kDAAC;AA0EH,IAAA;AAxES,IAAA,oBAAoB,CAAC,QAAyB,EAAE,MAAmB,EAAE,EAAe,EAAA;AAC1F,QAAA,MAAM,MAAM,GAAG,EAAE,CAAC,qBAAqB,EAAE;AACzC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE;;;QAIjD,IAAI,SAAS,GAAG,CAAC;QACjB,IAAI,UAAU,GAAG,CAAC;AAClB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE;YACxE,SAAS,GAAG,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG;YACrC,UAAU,GAAG,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI;YACxC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;QACxC;QAEA,IAAI,GAAG,GAAG,MAAM;QAChB,IAAI,SAAS,GAAG,GAAG;QACnB,IAAI,UAAU,GAAG,GAAG;;QAEpB,MAAM,UAAU,GAAG,CAAC;;QAGpB,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC;QAC5D,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;;;QAI5D,MAAM,WAAW,GAAG,aAAa,GAAG,MAAM,CAAC,IAAI,GAAG,UAAU;QAC5D,MAAM,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC,GAAG,GAAG,SAAS;;AAGzD,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK;AACjC,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM;;AAGnC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC,CAAC;AAC5F,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,GAAG,UAAU,CAAC,CAAC;;QAG3F,QAAQ,QAAQ;AACd,YAAA,KAAK,KAAK;AACV,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,IAAI;gBACP,GAAG,GAAG,MAAM;gBACZ,SAAS,GAAG,MAAM;AAClB,gBAAA,UAAU,GAAG,CAAA,EAAG,aAAa,CAAA,EAAA,CAAI;gBACjC;AACF,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,IAAI;gBACP,GAAG,GAAG,QAAQ;gBACd,SAAS,GAAG,GAAG;AACf,gBAAA,UAAU,GAAG,CAAA,EAAG,aAAa,CAAA,EAAA,CAAI;gBACjC;AACF,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,IAAI;gBACP,GAAG,GAAG,QAAQ;gBACd,UAAU,GAAG,MAAM;AACnB,gBAAA,SAAS,GAAG,CAAA,EAAG,YAAY,CAAA,EAAA,CAAI;gBAC/B;AACF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,IAAI;gBACP,GAAG,GAAG,OAAO;gBACb,UAAU,GAAG,GAAG;AAChB,gBAAA,SAAS,GAAG,CAAA,EAAG,YAAY,CAAA,EAAA,CAAI;gBAC/B;;AAGJ,QAAA,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE;IAC1F;8GAtFW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,UAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ybAAA,CAAA,EAAA,CAAA,CAAA;;2FAKU,eAAe,EAAA,UAAA,EAAA,CAAA;kBAtC3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,UAAU;AACtB,qBAAA;AACF,iBAAA;;;MCvDY,kBAAkB,CAAA;AAI7B,IAAA,WAAA,GAAA;AAHS,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAGpC,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,SAAS,IAAI,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAC1F;8GANW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,oDAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,gCAAA,EAAA,OAAA,EAAA,qCAAA,EAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAT9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;oBAChC,cAAc,EAAE,CAAC,SAAS,CAAC;AAC3B,oBAAA,IAAI,EAAE;AACJ,wBAAA,kBAAkB,EAAE,gCAAgC;AACpD,wBAAA,SAAS,EAAE,qCAAqC;AAChD,wBAAA,SAAS,EAAE,oDAAoD;AAChE,qBAAA;AACF,iBAAA;;MAgBY,cAAc,CAAA;AAN3B,IAAA,WAAA,GAAA;AAOW,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AACtC,IAAA;8GAFY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,6BAA6B;AACzC,qBAAA;AACF,iBAAA;;AASK,MAAO,UAAW,SAAQ,UAAU,CAAA;AAoCxC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QApCA,IAAA,CAAA,gBAAgB,GAAG,SAAS,CAAC,kBAAkB,6DAAI,IAAI,EAAE,gBAAgB,EAAA,CAAG;AAC5E,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,qBAAqB,CAAC;QACpC,IAAA,CAAA,SAAS,GAAG,SAAS,EAAE;;AAG/B,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAA0C,cAAc,EAAE;AAC/F,YAAA,IAAI,EAAE,UAAU;AACjB,SAAA,CAAC;QACO,IAAA,CAAA,eAAe,GAAG,SAAS,CAClC,kBAAkB,4DAChB,IAAI,EAAE,UAAU,EAAA,CACnB;AAEQ,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAiB,EAAoB,mDAAC;QACvD,IAAA,CAAA,YAAY,GAAoB,KAAK;AACpC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,CAAC,oDAAC;AAEpB,QAAA,IAAA,CAAA,MAAM,GAA6C,IAAI,UAAU,CAAC,UAAU,IAAG;;YAEtF,cAAc,CAAC,MAAK;gBAClB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAG,CAAC,aAAa;gBAC1C,MAAM,UAAU,GAAG,SAAS,CAAC,EAAE,EAAE,YAAY,CAAC;gBAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,EAAE,EAAE,YAAY,CAAC;gBAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAC3B,SAAS,CAAC,CAAC,IACT,UAAU,CAAC,IAAI,CACb,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAC5C,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAC5C,CACF,CACF;AACD,gBAAA,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;AAC7B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAgEM,IAAA,CAAA,uBAAuB,GAAG,MAAK;AACrC,YAAA,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;AAC9D,QAAA,CAAC;QA7DC,MAAM,CAAC,OAAO,IAAG;YACf,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAG,CAAC,aAAa;AAC1C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,YAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,gBAAA,OAAO,CAAC,MAAM,GAAG,EAAE;YACrB;YACA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ;;AAEhD,YAAA,IAAI,OAAO,CAAC,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;AAsBxB,gBAAA,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAK;AAChC,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAChC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC;AACjD,gBAAA,CAAC,CAAC;YACJ;iBAAO;gBACL,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC;YACjD;;AAGA,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACrB,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,uBAAuB,CAAC;AAC/D,gBAAA,OAAO,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACnF;;AAGA,YAAA,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;;gBAE7C,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC;AACjD,YAAA,CAAC,CAAC;AACF,YAAA,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;YAC9B,OAAO,CAAC,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;AAC5C,QAAA,CAAC,CAAC;IACJ;IAES,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM;IAC/C;AAMQ,IAAA,qBAAqB,CAAC,MAAmB,EAAE,EAAe,EAAE,OAAuB,EAAA;;;;;AAKzF,QAAA,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;;YAE9B,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,MAAM,CAAC,WAAW,CAAA,EAAA,CAAI;QAC5C;AAAO,aAAA,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,EAAE;YACnC,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,MAAM,CAAC,WAAW,CAAA,EAAA,CAAI;QAC/C;AAAO,aAAA,IAAI,OAAO,CAAC,KAAK,EAAE;YACxB,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;QAChC;AACA,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;QAClC;AACA,QAAA,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS;QACxC;QAEA,IAAI,CAAC,uBAAuB,EAAE;IAChC;IAEQ,eAAe,GAAA;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAG,CAAC,aAAa;AAC1C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;QAC/B,IAAI,CAAC,MAAM,EAAE;YACX;QACF;AACA,QAAA,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC;YAClF,MAAM;YACN,EAAE;YACF,QAAQ,EAAE,IAAI,CAAC,YAAY;AAC3B,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM;AAC7B,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM;AAC7B,YAAA,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU;AACtC,SAAA,CAAC;;;;;AAKF,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;;AAE5B,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,MAAM,IAAI;AAC/B,YAAA,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE;QACnB;aAAO;YACL,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,GAAG,IAAI;AACzB,YAAA,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;QACtB;AACA,QAAA,IAAI,KAAK,IAAI,SAAS,EAAE;YACtB,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,KAAK,IAAI;AAC7B,YAAA,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE;QACpB;aAAO;YACL,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,IAAI;AAC3B,YAAA,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE;QACrB;QAEA,IAAI,SAAS,EAAE;YACb,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,EAAG,SAAS,IAAI;QACvC;QACA,IAAI,QAAQ,EAAE;YACZ,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAA,EAAG,QAAQ,IAAI;QACrC;QACA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9E;AAES,IAAA,UAAU,CAAC,OAAuB,EAAA;;AAEzC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC3B;8GA5KW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAC6C,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAKD,cAAc,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACvF,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGhB,kBAAkB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACV,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAbV,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;2FAED,UAAU,EAAA,UAAA,EAAA,CAAA;kBAJtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,EAAE;AACb,iBAAA;wGAEuC,kBAAkB,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAKH,cAAc,CAAA,EAAA,EAAA,GAAE;AAC/F,4BAAA,IAAI,EAAE,UAAU;AACjB,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAEC,kBAAkB,CAAA,EAAA,EAAA,GAClB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAoKxB,SAAS,eAAe,CAAC,MAAmB,EAAA;AAC1C,IAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAG;AAC3B,QAAA,IAAI,OAAe;QACnB,IAAI,UAAU,GAAG,IAAI;QACrB,IAAI,YAAY,GAAG,CAAC;QAEpB,MAAM,qBAAqB,GAAG,MAAK;YACjC,UAAU,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS;YAErE,IAAI,OAAO,KAAK,IAAI,IAAI,UAAU,KAAK,OAAO,EAAE;AAC9C,gBAAA,YAAY,EAAE;AACd,gBAAA,IAAI,YAAY,GAAG,CAAC,EAAE;oBACpB,OAAO,CAAC,IAAI,CAAC;oBACb;gBACF;YACF;iBAAO;gBACL,YAAY,GAAG,CAAC;gBAChB,OAAO,GAAG,UAAU;YACtB;YAEA,qBAAqB,CAAC,qBAAqB,CAAC;AAC9C,QAAA,CAAC;;;;;;AAMD,QAAA,MAAM,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC/D,qBAAqB,CAAC,qBAAqB,CAAC;AAC9C,IAAA,CAAC,CAAC;AACJ;AAGM,MAAO,eAAgB,SAAQ,cAAc,CAAA;AADnD,IAAA,WAAA,GAAA;;QAEW,IAAA,CAAA,eAAe,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAE;AAKnC,IAAA;IAHU,KAAK,GAAA;QACZ,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IACrC;8GALW,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,SAAS;mBAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE;;AAStC,SAAU,YAAY,CAAC,OAA0B,EAAA;AACrD,IAAA,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,0BAA0B,EAAE,CAAC;AACtF;;ACrQM,MAAO,cAAe,SAAQ,aAAa,CAAA;AAYhD;AAUD,MAAM,aAAa,GAAG,IAAI,cAAc,CAAmB,eAAe,CAAC;SAI3D,gBAAgB,GAAA;AAC9B,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,UAAU;AACvE,IAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC;AAEvC,IAAA,SAAS,IAAI,CAAI,SAAyB,EAAE,OAAuB,EAAA;QACjE,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;IACtC;IAEA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC1C;AAEO,MAAM,kBAAkB,GAAG,CAAC,OAA0B,KAAI;IAC/D,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE;AACtD;;MCtCa,iBAAiB,CAAA;AAP9B,IAAA,WAAA,GAAA;QAQW,IAAA,CAAA,aAAa,GAAG,gBAAgB,EAAE;AAClC,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAA0B,UAAU,CAAC;AAEhD,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAC,QAAQ,4DAAoB;QACtD,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAE;QAC/B,IAAA,CAAA,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAoD;AAEpE,QAAA,IAAA,CAAA,OAAO,GAAiB,MAAK,EAAE,CAAC;AAgBzC,IAAA;IAdC,IAAI,GAAA;AACF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE;AACnE,YAAA,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa;YAC7B,MAAM,EAAE,OAAO,EAAE,MAAM;AACvB,YAAA,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,KAAK;AACpC,YAAA,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE;AACnC,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK;IAC7B;IAEA,KAAK,GAAA;QACH,IAAI,CAAC,OAAO,EAAE;IAChB;8GAvBW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,QAAQ;AACpB,qBAAA;AACF,iBAAA;;;ACTD;;AAEG;;ACFH;;AAEG;;;;"}
@@ -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,26 @@ 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
+ }
38
63
  }
39
64
  onOpen() {
40
65
  // make the body not scrollable and add padding to the right
@@ -51,34 +76,96 @@ class BaseDialog {
51
76
  }
52
77
  }
53
78
  class DialogRef {
79
+ // Expose closing state for consumers who need to check
80
+ get isClosing() {
81
+ return this._isClosing;
82
+ }
83
+ get parent() {
84
+ return this._parent;
85
+ }
86
+ get children() {
87
+ return this._children;
88
+ }
89
+ get root() {
90
+ return this._parent?.root ?? this;
91
+ }
54
92
  constructor(options, destroyParent, closeAllFn, animation = true) {
55
93
  this.options = options;
56
94
  this.destroyParent = destroyParent;
57
95
  this.closeAllFn = closeAllFn;
58
96
  this.animation = animation;
59
97
  this.data = this.options.data;
60
- this.backdropSub = null;
98
+ this.baseDialog = null;
99
+ this.pendingCloseData = undefined;
100
+ this._isClosing = false;
61
101
  this.onDestroySource = new Subject();
62
102
  this.onDestroy = this.onDestroySource.asObservable().pipe(first());
63
103
  this.afterClosedSource = new Subject();
64
104
  this.afterClosed = this.afterClosedSource.asObservable().pipe(first());
65
105
  this.events = new Subject();
66
- this.close = (data) => {
67
- this.afterClosedSource.next(data);
68
- // if (!this.animation) {
106
+ // Parent-child relationship
107
+ this._parent = null;
108
+ this._children = new Set();
109
+ this.close = (data, options) => {
110
+ // Guard: do nothing if already closing - makes close() idempotent
111
+ if (this._isClosing) {
112
+ return;
113
+ }
114
+ this._isClosing = true;
115
+ // 1. Close all children first (if closeChildrenOnClose is true)
116
+ if (this.options.closeChildrenOnClose !== false) {
117
+ // Create a copy since children will remove themselves during close
118
+ [...this._children].forEach(child => child.close());
119
+ }
120
+ // 2. If we have a BaseDialog and animation is enabled, trigger the leave animation
121
+ if (this.baseDialog && this.animation) {
122
+ this.pendingCloseData = data;
123
+ this.baseDialog.close();
124
+ }
125
+ else {
126
+ // No animation, close immediately
127
+ this.afterClosedSource.next(data);
128
+ this.destroy();
129
+ }
130
+ // 3. If closeParent is true, close parent after self (child → parent order)
131
+ // This ensures children animate out before parents, maintaining visual hierarchy
132
+ if (options?.closeParent && this._parent) {
133
+ this._parent.close(undefined, { closeParent: true });
134
+ }
135
+ };
136
+ // Called by BaseDialog.animationDone() after leave animation completes
137
+ this._completeClose = () => {
138
+ this.afterClosedSource.next(this.pendingCloseData);
69
139
  this.destroy();
70
- // }
71
140
  };
141
+ // Register with parent if provided
142
+ if (options.parent) {
143
+ this._setParent(options.parent);
144
+ }
145
+ }
146
+ _setParent(parent) {
147
+ this._parent = parent;
148
+ parent._addChild(this);
149
+ }
150
+ _addChild(child) {
151
+ this._children.add(child);
152
+ }
153
+ _removeChild(child) {
154
+ this._children.delete(child);
155
+ }
156
+ // Set the BaseDialog reference so we can trigger animations
157
+ setBaseDialog(baseDialog) {
158
+ this.baseDialog = baseDialog;
72
159
  }
73
160
  closeAll() {
74
161
  this.closeAllFn();
75
162
  }
76
163
  destroy() {
77
- this.backdropSub?.unsubscribe();
164
+ // Remove self from parent's children
165
+ this._parent?._removeChild(this);
78
166
  this.afterClosedSource.complete();
79
167
  this.onDestroySource.next(false);
80
168
  this.destroyParent();
81
- // console.log('destroyed parent');
82
169
  }
83
170
  }
84
171
  class DialogTestingRef {
@@ -92,6 +179,7 @@ class DialogOptions {
92
179
  this.classNames = [];
93
180
  this.disableClose = false;
94
181
  this.focusTrap = true;
182
+ this.closeChildrenOnClose = true;
95
183
  }
96
184
  }
97
185
  const DIALOG_INJ = new InjectionToken('dialogInj');
@@ -118,10 +206,10 @@ class NgbPortalClose {
118
206
  close(data = this.ngbPortalClose()) {
119
207
  this.dialogRef.close(data);
120
208
  }
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 }); }
209
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbPortalClose, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
210
+ 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
211
  }
124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbPortalClose, decorators: [{
212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbPortalClose, decorators: [{
125
213
  type: Directive,
126
214
  args: [{
127
215
  selector: '[ngbPortalClose]',
@@ -129,23 +217,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImpor
129
217
  '(click)': 'close()',
130
218
  },
131
219
  }]
132
- }] });
220
+ }], propDecorators: { ngbPortalClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngbPortalClose", required: false }] }] } });
133
221
 
134
222
  class Portal {
135
223
  constructor() {
136
- this.myDialog = viewChild('myDialog', ...(ngDevMode ? [{ debugName: "myDialog", read: ViewContainerRef }] : [{ read: ViewContainerRef }]));
224
+ this.myDialog = viewChild('myDialog', { ...(ngDevMode ? { debugName: "myDialog" } : {}), read: ViewContainerRef });
137
225
  }
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 }); }
226
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: Portal, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
227
+ 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
228
  }
141
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: Portal, decorators: [{
229
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: Portal, decorators: [{
142
230
  type: Component,
143
231
  args: [{
144
232
  selector: 'ngb-portal',
145
233
  template: `<ng-container #myDialog />`,
146
234
  changeDetection: ChangeDetectionStrategy.OnPush,
147
235
  }]
148
- }] });
236
+ }], propDecorators: { myDialog: [{ type: i0.ViewChild, args: ['myDialog', { ...{ read: ViewContainerRef }, isSignal: true }] }] } });
149
237
 
150
238
  class PortalService {
151
239
  constructor() {
@@ -188,17 +276,18 @@ class PortalService {
188
276
  clear(container) {
189
277
  if (this.trackElements.has(container)) {
190
278
  const elements = this.trackElements.get(container);
191
- elements?.forEach(c => c.destroy());
192
- this.trackElements.delete(container);
279
+ // Trigger close on each component to play leave animations
280
+ // The BaseDialog.close() method will handle the animation and eventual destruction
281
+ elements?.forEach(c => c.instance?.close?.());
193
282
  }
194
283
  }
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' }); }
284
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PortalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
285
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PortalService, providedIn: 'root' }); }
197
286
  }
198
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: PortalService, decorators: [{
287
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PortalService, decorators: [{
199
288
  type: Injectable,
200
289
  args: [{ providedIn: 'root' }]
201
- }] });
290
+ }], ctorParameters: () => [] });
202
291
 
203
292
  function basePortal(name, baseComponent) {
204
293
  const NAME = name;
@@ -220,28 +309,25 @@ function basePortal(name, baseComponent) {
220
309
  if (component === undefined) {
221
310
  return { diaRef, parent, instance: null, childSignal };
222
311
  }
223
- // close on esc
312
+ const parentInstance = parent.instance;
313
+ // close on esc - call parentInstance.close() to trigger leave animation
224
314
  if (!options.disableClose) {
225
- sub = keyMap('esc', () => diaRef.close(), { injector, stop: true });
315
+ sub = keyMap('esc', () => parentInstance.close(), { injector, stop: true });
226
316
  }
227
317
  function destroy() {
228
318
  portal.delete(NAME, parent);
229
319
  sub?.();
230
320
  }
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
- });
321
+ // Trigger change detection to initialize viewChild signals
322
+ parent.changeDetectorRef.detectChanges();
323
+ // VCR is now available after detectChanges
324
+ const vcRef = parentInstance.vcRef;
325
+ const child = createChild(component, vcRef);
326
+ diaRef.events.next('created');
327
+ childSignal.set(child);
240
328
  function replace(component) {
241
- if (vwRef) {
242
- vwRef.clear();
243
- createChild(component, vwRef);
244
- }
329
+ vcRef.clear();
330
+ createChild(component, vcRef);
245
331
  }
246
332
  function createChild(component, vcRef) {
247
333
  // for template type
@@ -256,6 +342,7 @@ function basePortal(name, baseComponent) {
256
342
  return { diaRef, parent, replace, childSignal };
257
343
  }
258
344
  function closeAll() {
345
+ // Close each dialog properly to trigger leave animations
259
346
  portal.clear(NAME);
260
347
  }
261
348
  return { open, closeAll, updateBaseComponent };