@raintonic/formaui 0.4.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +80 -35
- package/README.md +22 -26
- package/fesm2022/raintonic-formaui-cdk-drag-drop.mjs +39 -41
- package/fesm2022/raintonic-formaui-cdk-drag-drop.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-cdk-form-field.mjs +207 -3
- package/fesm2022/raintonic-formaui-cdk-form-field.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-cdk-overlay.mjs +19 -1
- package/fesm2022/raintonic-formaui-cdk-overlay.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-cdk-virtual-scroll.mjs +5 -12
- package/fesm2022/raintonic-formaui-cdk-virtual-scroll.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-accordion.mjs +8 -5
- package/fesm2022/raintonic-formaui-components-accordion.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-alert.mjs +16 -2
- package/fesm2022/raintonic-formaui-components-alert.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-autocomplete.mjs +255 -462
- package/fesm2022/raintonic-formaui-components-autocomplete.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-avatar.mjs +34 -59
- package/fesm2022/raintonic-formaui-components-avatar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-badge.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-badge.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-breadcrumb.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-button-group.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-button-group.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-button.mjs +15 -20
- package/fesm2022/raintonic-formaui-components-button.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-card.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-card.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-checkbox.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-checkbox.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-chip.mjs +97 -0
- package/fesm2022/raintonic-formaui-components-chip.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-components-data-table.mjs +69 -29
- package/fesm2022/raintonic-formaui-components-data-table.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-date-picker.mjs +223 -144
- package/fesm2022/raintonic-formaui-components-date-picker.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-divider.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-divider.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-drawer.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-drawer.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-dropdown-menu.mjs +888 -0
- package/fesm2022/raintonic-formaui-components-dropdown-menu.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-components-dual-tier-navigation.mjs +774 -0
- package/fesm2022/raintonic-formaui-components-dual-tier-navigation.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-components-empty-state.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-empty-state.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-file-upload.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-file-upload.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-form-field.mjs +81 -50
- package/fesm2022/raintonic-formaui-components-form-field.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-icon.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-icon.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-input.mjs +47 -12
- package/fesm2022/raintonic-formaui-components-input.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-list.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-list.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-number-input.mjs +20 -12
- package/fesm2022/raintonic-formaui-components-number-input.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-paginator.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-paginator.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-password-input.mjs +35 -110
- package/fesm2022/raintonic-formaui-components-password-input.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-popover.mjs +3 -2
- package/fesm2022/raintonic-formaui-components-popover.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-progressbar.mjs +3 -2
- package/fesm2022/raintonic-formaui-components-progressbar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-radio.mjs +5 -6
- package/fesm2022/raintonic-formaui-components-radio.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-select.mjs +257 -412
- package/fesm2022/raintonic-formaui-components-select.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-side-panel.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-side-panel.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-sidebar-nav-menu.mjs +525 -0
- package/fesm2022/raintonic-formaui-components-sidebar-nav-menu.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-components-skeleton.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-skeleton.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-slider.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-slider.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-spinner.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-spinner.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-stepper.mjs +50 -45
- package/fesm2022/raintonic-formaui-components-stepper.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-strength-meter.mjs +149 -0
- package/fesm2022/raintonic-formaui-components-strength-meter.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-components-tab.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-tab.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-time-picker.mjs +194 -154
- package/fesm2022/raintonic-formaui-components-time-picker.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-toggle-group.mjs +302 -0
- package/fesm2022/raintonic-formaui-components-toggle-group.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-components-toggle.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-toggle.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-toolbar.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-toolbar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tooltip.mjs +10 -4
- package/fesm2022/raintonic-formaui-components-tooltip.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-topbar.mjs +60 -0
- package/fesm2022/raintonic-formaui-components-topbar.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-components-tree-select.mjs +59 -69
- package/fesm2022/raintonic-formaui-components-tree-select.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tree-table.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-tree-table.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tree.mjs +31 -5
- package/fesm2022/raintonic-formaui-components-tree.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-core.mjs +279 -1
- package/fesm2022/raintonic-formaui-core.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-services-breakpoint.mjs +93 -0
- package/fesm2022/raintonic-formaui-services-breakpoint.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-services-dialog.mjs +314 -16
- package/fesm2022/raintonic-formaui-services-dialog.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-services-notification.mjs +93 -29
- package/fesm2022/raintonic-formaui-services-notification.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-services-theme.mjs +46 -196
- package/fesm2022/raintonic-formaui-services-theme.mjs.map +1 -1
- package/fesm2022/raintonic-formaui.mjs +1 -1
- package/fesm2022/raintonic-formaui.mjs.map +1 -1
- package/llms-full.txt +2329 -450
- package/llms.txt +36 -33
- package/package.json +42 -19
- package/styles/fonts/Geist-Bold.woff2 +0 -0
- package/styles/fonts/Geist-Italic.woff2 +0 -0
- package/styles/fonts/Geist-Light.woff2 +0 -0
- package/styles/fonts/Geist-Medium.woff2 +0 -0
- package/styles/fonts/Geist-Regular.woff2 +0 -0
- package/styles/fonts/Geist-SemiBold.woff2 +0 -0
- package/styles/fonts/GeistMono-Regular.woff2 +0 -0
- package/styles/generated/_tokens.scss +906 -0
- package/styles/index.scss +11 -10
- package/styles/partials/_brand.scss +46 -0
- package/styles/partials/_constants.scss +22 -20
- package/styles/partials/_fonts.scss +54 -10
- package/styles/partials/_grid.scss +29 -18
- package/styles/partials/_mixins.scss +69 -27
- package/styles/partials/_motion.scss +28 -33
- package/styles/partials/_theme.scss +28 -255
- package/styles/partials/_type.scss +117 -0
- package/styles/partials/_typography.scss +45 -45
- package/styles/partials/_utilities.scss +198 -98
- package/styles/partials/components/_button.scss +144 -75
- package/styles/partials/components/_dialog.scss +181 -180
- package/styles/partials/components/_overlay.scss +87 -87
- package/styles/partials/themes/_dark.scss +3 -268
- package/styles/partials/themes/_light.scss +4 -268
- package/styles/styles.css +7744 -0
- package/styles/styles.entry.scss +3 -0
- package/styles/utilities.css +4802 -0
- package/styles/utilities.entry.scss +3 -0
- package/types/raintonic-formaui-cdk-drag-drop.d.ts +0 -1
- package/types/raintonic-formaui-cdk-drag-drop.d.ts.map +1 -1
- package/types/raintonic-formaui-cdk-form-field.d.ts +118 -2
- package/types/raintonic-formaui-cdk-form-field.d.ts.map +1 -1
- package/types/raintonic-formaui-cdk-overlay.d.ts +2 -0
- package/types/raintonic-formaui-cdk-overlay.d.ts.map +1 -1
- package/types/raintonic-formaui-cdk-virtual-scroll.d.ts +0 -1
- package/types/raintonic-formaui-cdk-virtual-scroll.d.ts.map +1 -1
- package/types/raintonic-formaui-components-accordion.d.ts +1 -1
- package/types/raintonic-formaui-components-accordion.d.ts.map +1 -1
- package/types/raintonic-formaui-components-alert.d.ts +6 -1
- package/types/raintonic-formaui-components-alert.d.ts.map +1 -1
- package/types/raintonic-formaui-components-autocomplete.d.ts +73 -116
- package/types/raintonic-formaui-components-autocomplete.d.ts.map +1 -1
- package/types/raintonic-formaui-components-avatar.d.ts +13 -31
- package/types/raintonic-formaui-components-avatar.d.ts.map +1 -1
- package/types/raintonic-formaui-components-button.d.ts +4 -10
- package/types/raintonic-formaui-components-button.d.ts.map +1 -1
- package/types/raintonic-formaui-components-chip.d.ts +43 -0
- package/types/raintonic-formaui-components-chip.d.ts.map +1 -0
- package/types/raintonic-formaui-components-data-table.d.ts +48 -11
- package/types/raintonic-formaui-components-data-table.d.ts.map +1 -1
- package/types/raintonic-formaui-components-date-picker.d.ts +59 -23
- package/types/raintonic-formaui-components-date-picker.d.ts.map +1 -1
- package/types/raintonic-formaui-components-dropdown-menu.d.ts +394 -0
- package/types/raintonic-formaui-components-dropdown-menu.d.ts.map +1 -0
- package/types/raintonic-formaui-components-dual-tier-navigation.d.ts +87 -0
- package/types/raintonic-formaui-components-dual-tier-navigation.d.ts.map +1 -0
- package/types/raintonic-formaui-components-form-field.d.ts +51 -21
- package/types/raintonic-formaui-components-form-field.d.ts.map +1 -1
- package/types/raintonic-formaui-components-input.d.ts +20 -11
- package/types/raintonic-formaui-components-input.d.ts.map +1 -1
- package/types/raintonic-formaui-components-number-input.d.ts +5 -3
- package/types/raintonic-formaui-components-number-input.d.ts.map +1 -1
- package/types/raintonic-formaui-components-password-input.d.ts +18 -32
- package/types/raintonic-formaui-components-password-input.d.ts.map +1 -1
- package/types/raintonic-formaui-components-popover.d.ts.map +1 -1
- package/types/raintonic-formaui-components-progressbar.d.ts +1 -1
- package/types/raintonic-formaui-components-progressbar.d.ts.map +1 -1
- package/types/raintonic-formaui-components-radio.d.ts +1 -2
- package/types/raintonic-formaui-components-radio.d.ts.map +1 -1
- package/types/raintonic-formaui-components-select.d.ts +107 -76
- package/types/raintonic-formaui-components-select.d.ts.map +1 -1
- package/types/raintonic-formaui-components-sidebar-nav-menu.d.ts +223 -0
- package/types/raintonic-formaui-components-sidebar-nav-menu.d.ts.map +1 -0
- package/types/raintonic-formaui-components-stepper.d.ts +4 -2
- package/types/raintonic-formaui-components-stepper.d.ts.map +1 -1
- package/types/raintonic-formaui-components-strength-meter.d.ts +78 -0
- package/types/raintonic-formaui-components-strength-meter.d.ts.map +1 -0
- package/types/raintonic-formaui-components-time-picker.d.ts +44 -24
- package/types/raintonic-formaui-components-time-picker.d.ts.map +1 -1
- package/types/raintonic-formaui-components-toggle-group.d.ts +100 -0
- package/types/raintonic-formaui-components-toggle-group.d.ts.map +1 -0
- package/types/raintonic-formaui-components-tooltip.d.ts +2 -1
- package/types/raintonic-formaui-components-tooltip.d.ts.map +1 -1
- package/types/raintonic-formaui-components-topbar.d.ts +48 -0
- package/types/raintonic-formaui-components-topbar.d.ts.map +1 -0
- package/types/raintonic-formaui-components-tree-select.d.ts +25 -9
- package/types/raintonic-formaui-components-tree-select.d.ts.map +1 -1
- package/types/raintonic-formaui-components-tree.d.ts +12 -1
- package/types/raintonic-formaui-components-tree.d.ts.map +1 -1
- package/types/raintonic-formaui-core.d.ts +243 -5
- package/types/raintonic-formaui-core.d.ts.map +1 -1
- package/types/raintonic-formaui-services-breakpoint.d.ts +44 -0
- package/types/raintonic-formaui-services-breakpoint.d.ts.map +1 -0
- package/types/raintonic-formaui-services-dialog.d.ts +141 -2
- package/types/raintonic-formaui-services-dialog.d.ts.map +1 -1
- package/types/raintonic-formaui-services-notification.d.ts +24 -2
- package/types/raintonic-formaui-services-notification.d.ts.map +1 -1
- package/types/raintonic-formaui-services-theme.d.ts +13 -103
- package/types/raintonic-formaui-services-theme.d.ts.map +1 -1
- package/types/raintonic-formaui.d.ts +1 -1
- package/fesm2022/raintonic-formaui-components-big-menu.mjs +0 -86
- package/fesm2022/raintonic-formaui-components-big-menu.mjs.map +0 -1
- package/fesm2022/raintonic-formaui-components-menu.mjs +0 -896
- package/fesm2022/raintonic-formaui-components-menu.mjs.map +0 -1
- package/fesm2022/raintonic-formaui-components-sidebar.mjs +0 -275
- package/fesm2022/raintonic-formaui-components-sidebar.mjs.map +0 -1
- package/fesm2022/raintonic-formaui-components-tag.mjs +0 -95
- package/fesm2022/raintonic-formaui-components-tag.mjs.map +0 -1
- package/styles/_fonts-entry.scss +0 -3
- package/styles/fonts/inter-tight-latin-italic.woff2 +0 -0
- package/styles/fonts/inter-tight-latin.woff2 +0 -0
- package/types/raintonic-formaui-components-big-menu.d.ts +0 -73
- package/types/raintonic-formaui-components-big-menu.d.ts.map +0 -1
- package/types/raintonic-formaui-components-menu.d.ts +0 -403
- package/types/raintonic-formaui-components-menu.d.ts.map +0 -1
- package/types/raintonic-formaui-components-sidebar.d.ts +0 -185
- package/types/raintonic-formaui-components-sidebar.d.ts.map +0 -1
- package/types/raintonic-formaui-components-tag.d.ts +0 -43
- package/types/raintonic-formaui-components-tag.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raintonic-formaui-cdk-overlay.mjs","sources":["../../../lib/cdk/overlay/overlay.types.ts","../../../lib/cdk/overlay/overlay-ref.ts","../../../lib/cdk/overlay/overlay-container.component.ts","../../../lib/cdk/overlay/position/global-position-strategy.ts","../../../lib/cdk/overlay/position/connected-position-strategy.ts","../../../lib/cdk/overlay/scroll/scroll-strategies.ts","../../../lib/cdk/overlay/overlay.service.ts","../../../lib/cdk/overlay/portal.service.ts","../../../lib/cdk/overlay/index.ts","../../../lib/cdk/overlay/raintonic-formaui-cdk-overlay.ts"],"sourcesContent":["import { ComponentRef, ElementRef, InjectionToken, Injector, TemplateRef } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * Injection token for the overlay container element\r\n */\r\nexport const FUI_OVERLAY_CONTAINER = new InjectionToken<HTMLElement>('FUI_OVERLAY_CONTAINER');\r\n\r\n/**\r\n * Injection token for the overlay scroll strategy\r\n */\r\nexport const FUI_OVERLAY_SCROLL_STRATEGY = new InjectionToken<() => FuiScrollStrategy>('FUI_OVERLAY_SCROLL_STRATEGY');\r\n\r\n/**\r\n * Available overlay positions for connected positioning\r\n */\r\nexport interface FuiConnectedPosition {\r\n /** Horizontal alignment of the overlay relative to the origin */\r\n originX: 'start' | 'center' | 'end';\r\n /** Vertical alignment of the overlay relative to the origin */\r\n originY: 'top' | 'center' | 'bottom';\r\n /** Horizontal alignment of the overlay panel */\r\n overlayX: 'start' | 'center' | 'end';\r\n /** Vertical alignment of the overlay panel */\r\n overlayY: 'top' | 'center' | 'bottom';\r\n /** Offset in pixels along the x-axis */\r\n offsetX?: number;\r\n /** Offset in pixels along the y-axis */\r\n offsetY?: number;\r\n /** Weight for this position when multiple positions are provided */\r\n weight?: number;\r\n}\r\n\r\n/**\r\n * Global position configuration\r\n */\r\nexport interface FuiGlobalPosition {\r\n /** Top position in pixels or CSS value */\r\n top?: string | number;\r\n /** Bottom position in pixels or CSS value */\r\n bottom?: string | number;\r\n /** Left position in pixels or CSS value */\r\n left?: string | number;\r\n /** Right position in pixels or CSS value */\r\n right?: string | number;\r\n /** Width in pixels or CSS value */\r\n width?: string | number;\r\n /** Height in pixels or CSS value */\r\n height?: string | number;\r\n /** Min width in pixels or CSS value */\r\n minWidth?: string | number;\r\n /** Min height in pixels or CSS value */\r\n minHeight?: string | number;\r\n /** Max width in pixels or CSS value */\r\n maxWidth?: string | number;\r\n /** Max height in pixels or CSS value */\r\n maxHeight?: string | number;\r\n}\r\n\r\n/**\r\n * Scroll strategy types\r\n */\r\nexport type FuiScrollStrategyType = 'reposition' | 'close' | 'block' | 'noop';\r\n\r\n/**\r\n * Backdrop click behavior\r\n */\r\nexport type FuiBackdropClickBehavior = 'close' | 'ignore';\r\n\r\n/**\r\n * Configuration for creating an overlay\r\n */\r\nexport interface FuiOverlayConfig {\r\n /** Position strategy for the overlay */\r\n positionStrategy?: FuiPositionStrategy;\r\n /** Scroll strategy for the overlay */\r\n scrollStrategy?: FuiScrollStrategy;\r\n /** Whether to show a backdrop */\r\n hasBackdrop?: boolean;\r\n /** CSS class(es) to apply to the backdrop */\r\n backdropClass?: string | string[];\r\n /** Behavior when backdrop is clicked */\r\n backdropClickBehavior?: FuiBackdropClickBehavior;\r\n /** CSS class(es) to apply to the overlay pane */\r\n panelClass?: string | string[];\r\n /** Width of the overlay */\r\n width?: string | number;\r\n /** Height of the overlay */\r\n height?: string | number;\r\n /** Min width of the overlay */\r\n minWidth?: string | number;\r\n /** Min height of the overlay */\r\n minHeight?: string | number;\r\n /** Max width of the overlay */\r\n maxWidth?: string | number;\r\n /** Max height of the overlay */\r\n maxHeight?: string | number;\r\n /** Direction of the overlay content */\r\n direction?: 'ltr' | 'rtl';\r\n /** Whether to dispose the overlay when the backdrop is clicked */\r\n disposeOnNavigation?: boolean;\r\n /** Custom injector for the overlay content */\r\n injector?: Injector;\r\n}\r\n\r\n/**\r\n * Reference to an overlay instance\r\n */\r\nexport interface FuiOverlayRef {\r\n /** Unique identifier for this overlay */\r\n readonly id: string;\r\n /** The overlay pane element */\r\n readonly overlayElement: HTMLElement;\r\n /** The backdrop element (if any) */\r\n readonly backdropElement: HTMLElement | null;\r\n /** Observable that emits when the backdrop is clicked */\r\n readonly backdropClick: Observable<MouseEvent>;\r\n /** Observable that emits when a key is pressed while the overlay has focus */\r\n readonly keydownEvents: Observable<KeyboardEvent>;\r\n /** Observable that emits when the overlay is attached to the DOM */\r\n readonly attachments: Observable<void>;\r\n /** Observable that emits when the overlay is detached from the DOM */\r\n readonly detachments: Observable<void>;\r\n /** Whether the overlay is currently attached */\r\n readonly hasAttached: boolean;\r\n\r\n /**\r\n * Attaches content to the overlay\r\n * @param content The content to attach (component, template, or DOM element)\r\n * @param injector Optional injector for component content\r\n */\r\n attach<T = unknown>(\r\n content: ComponentRef<T> | TemplateRef<unknown> | HTMLElement,\r\n injector?: Injector,\r\n ): ComponentRef<T> | undefined;\r\n\r\n /**\r\n * Detaches the content from the overlay\r\n */\r\n detach(): void;\r\n\r\n /**\r\n * Disposes the overlay and cleans up resources\r\n */\r\n dispose(): void;\r\n\r\n /**\r\n * Updates the position of the overlay\r\n */\r\n updatePosition(): void;\r\n\r\n /**\r\n * Updates the size of the overlay\r\n */\r\n updateSize(\r\n config?: Pick<FuiOverlayConfig, 'width' | 'height' | 'minWidth' | 'minHeight' | 'maxWidth' | 'maxHeight'>,\r\n ): void;\r\n\r\n /**\r\n * Adds CSS classes to the overlay pane\r\n */\r\n addPanelClass(classes: string | string[]): void;\r\n\r\n /**\r\n * Removes CSS classes from the overlay pane\r\n */\r\n removePanelClass(classes: string | string[]): void;\r\n\r\n /**\r\n * Gets the current configuration of the overlay\r\n */\r\n getConfig(): FuiOverlayConfig;\r\n\r\n /**\r\n * Updates the configuration of the overlay\r\n */\r\n updateConfig(config: Partial<FuiOverlayConfig>): void;\r\n}\r\n\r\n/**\r\n * Strategy for positioning overlays\r\n */\r\nexport interface FuiPositionStrategy {\r\n /** Applies the positioning strategy */\r\n apply(): void;\r\n /** Disposes the strategy and cleans up resources */\r\n dispose(): void;\r\n /** Detaches the strategy from the overlay */\r\n detach(): void;\r\n /** Sets the overlay element reference */\r\n setOverlayElement(element: HTMLElement): void;\r\n /** Observable that emits when the position changes */\r\n readonly positionChanges: Observable<FuiConnectedOverlayPositionChange>;\r\n}\r\n\r\n/**\r\n * Strategy for handling scroll events\r\n */\r\nexport interface FuiScrollStrategy {\r\n /** Enables the scroll strategy */\r\n enable(): void;\r\n /** Disables the scroll strategy */\r\n disable(): void;\r\n /** Attaches the strategy to an overlay reference */\r\n attach(overlayRef: FuiOverlayRef): void;\r\n /** Detaches the strategy from the overlay reference */\r\n detach(): void;\r\n}\r\n\r\n/**\r\n * Position change event for connected overlays\r\n */\r\nexport interface FuiConnectedOverlayPositionChange {\r\n /** The position that was applied */\r\n connectionPair: FuiConnectedPosition;\r\n /** The scroll position that triggered the change */\r\n scrollableViewProperties: FuiScrollableViewProperties;\r\n}\r\n\r\n/**\r\n * Properties of a scrollable view\r\n */\r\nexport interface FuiScrollableViewProperties {\r\n /** The size of the scrollable view */\r\n size: { width: number; height: number };\r\n /** The scroll position of the view */\r\n scrollPosition: { top: number; left: number };\r\n}\r\n\r\n/**\r\n * Content that can be attached to an overlay\r\n */\r\nexport type FuiOverlayContent<T = unknown> = ComponentRef<T> | TemplateRef<unknown> | HTMLElement | string;\r\n\r\n/**\r\n * Factory function for creating scroll strategies\r\n */\r\nexport type FuiScrollStrategyFactory = () => FuiScrollStrategy;\r\n\r\n/**\r\n * Options for creating a connected position strategy\r\n */\r\nexport interface FuiConnectedPositionStrategyOptions {\r\n /** The element to position relative to */\r\n origin: ElementRef<HTMLElement> | HTMLElement;\r\n /** Array of preferred positions */\r\n positions: FuiConnectedPosition[];\r\n /** Whether to push the overlay on-screen if it would otherwise be clipped */\r\n withPush?: boolean;\r\n /** Whether to grow the overlay after it reaches the edge of the viewport */\r\n withGrowAfterOpen?: boolean;\r\n /** Whether to lock the position after the first time it is positioned */\r\n withLockedPosition?: boolean;\r\n /** Whether to apply the default offset */\r\n withDefaultOffsetX?: number;\r\n /** Whether to apply the default offset */\r\n withDefaultOffsetY?: number;\r\n /** Whether to transform the origin element */\r\n withTransformOriginOn?: ElementRef<HTMLElement> | HTMLElement;\r\n /** Margin between the overlay and the viewport edge */\r\n viewportMargin?: number;\r\n /** Whether to use flexible dimensions */\r\n withFlexibleDimensions?: boolean;\r\n}\r\n\r\n/**\r\n * Options for creating a global position strategy\r\n */\r\nexport interface FuiGlobalPositionStrategyOptions extends FuiGlobalPosition {\r\n /** Whether to center the overlay horizontally */\r\n centerHorizontally?: boolean;\r\n /** Whether to center the overlay vertically */\r\n centerVertically?: boolean;\r\n}\r\n\r\n/**\r\n * Overlay size configuration\r\n */\r\nexport interface FuiOverlaySizeConfig {\r\n width?: string | number;\r\n height?: string | number;\r\n minWidth?: string | number;\r\n minHeight?: string | number;\r\n maxWidth?: string | number;\r\n maxHeight?: string | number;\r\n}\r\n\r\n/**\r\n * Overlay state information\r\n */\r\nexport interface FuiOverlayState {\r\n /** Whether the overlay is attached */\r\n isAttached: boolean;\r\n /** Whether the overlay has a backdrop */\r\n hasBackdrop: boolean;\r\n /** The current size configuration */\r\n size: FuiOverlaySizeConfig;\r\n /** The current position strategy */\r\n positionStrategy: FuiPositionStrategy | null;\r\n /** The current scroll strategy */\r\n scrollStrategy: FuiScrollStrategy | null;\r\n}\r\n","import { ComponentRef, EmbeddedViewRef, Injector, Renderer2, TemplateRef } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { FuiOverlayConfig, FuiOverlayRef } from './overlay.types';\r\n\r\n/**\r\n * # FuiOverlayRefImpl\r\n *\r\n * Implementation of the FuiOverlayRef interface. This class manages the lifecycle\r\n * of an individual overlay instance, including content attachment, positioning,\r\n * and cleanup.\r\n *\r\n * ## Features\r\n * - Content attachment and detachment\r\n * - Event handling (backdrop clicks, keyboard events)\r\n * - Position and size updates\r\n * - CSS class management\r\n * - Proper cleanup and disposal\r\n */\r\nexport class FuiOverlayRefImpl implements FuiOverlayRef {\r\n private readonly _id: string;\r\n private readonly _overlayElement: HTMLElement;\r\n private readonly _renderer: Renderer2;\r\n private readonly _zIndex: number;\r\n private _backdropElement: HTMLElement | null = null;\r\n private _attachedContent: ComponentRef<unknown> | EmbeddedViewRef<unknown> | null = null;\r\n private _config: FuiOverlayConfig;\r\n private _hasAttached = false;\r\n\r\n // Event subjects\r\n private readonly _backdropClick = new Subject<MouseEvent>();\r\n private readonly _keydownEvents = new Subject<KeyboardEvent>();\r\n private readonly _attachments = new Subject<void>();\r\n private readonly _detachments = new Subject<void>();\r\n\r\n // Event listeners\r\n private _backdropClickListener?: (event: MouseEvent) => void;\r\n private _keydownListener?: (event: KeyboardEvent) => void;\r\n\r\n constructor(overlayElement: HTMLElement, config: FuiOverlayConfig, renderer: Renderer2, id?: string, zIndex = 1000) {\r\n this._id = id ?? this._generateId();\r\n this._overlayElement = overlayElement;\r\n this._config = { ...config };\r\n this._renderer = renderer;\r\n this._zIndex = zIndex;\r\n\r\n // Apply styles/classes that must be present BEFORE the element is rendered or\r\n // before consumers call attach(). Doing this synchronously prevents a one-frame\r\n // race where the element renders without its inline z-index (causing nested\r\n // overlays opened from inside a dialog to slip behind the dialog).\r\n this._setupOverlayElement();\r\n\r\n // Defer DOM-side-effect work that benefits from the element being in the\r\n // document (backdrop insertion uses overlayElement.parentElement; listeners\r\n // are independent but grouped here to avoid extra microtasks).\r\n requestAnimationFrame(() => {\r\n this._setupBackdrop();\r\n this._setupEventListeners();\r\n });\r\n }\r\n\r\n /** Unique identifier for this overlay */\r\n get id(): string {\r\n return this._id;\r\n }\r\n\r\n /** The overlay pane element */\r\n get overlayElement(): HTMLElement {\r\n return this._overlayElement;\r\n }\r\n\r\n /** The backdrop element (if any) */\r\n get backdropElement(): HTMLElement | null {\r\n return this._backdropElement;\r\n }\r\n\r\n /** Observable that emits when the backdrop is clicked */\r\n get backdropClick(): Observable<MouseEvent> {\r\n return this._backdropClick.asObservable();\r\n }\r\n\r\n /** Observable that emits when a key is pressed while the overlay has focus */\r\n get keydownEvents(): Observable<KeyboardEvent> {\r\n return this._keydownEvents.asObservable();\r\n }\r\n\r\n /** Observable that emits when the overlay is attached to the DOM */\r\n get attachments(): Observable<void> {\r\n return this._attachments.asObservable();\r\n }\r\n\r\n /** Observable that emits when the overlay is detached from the DOM */\r\n get detachments(): Observable<void> {\r\n return this._detachments.asObservable();\r\n }\r\n\r\n /** Whether the overlay is currently attached */\r\n get hasAttached(): boolean {\r\n return this._hasAttached;\r\n }\r\n\r\n /**\r\n * Attaches content to the overlay\r\n */\r\n attach<T = unknown>(\r\n content: ComponentRef<T> | TemplateRef<unknown> | HTMLElement,\r\n injector?: Injector,\r\n ): ComponentRef<T> | undefined {\r\n if (this._hasAttached) {\r\n throw new Error('Overlay already has content attached');\r\n }\r\n\r\n // Hide overlay initially to prevent flash at (0,0) before positioning\r\n this._renderer.setStyle(this._overlayElement, 'opacity', '0');\r\n\r\n let attachedContent: ComponentRef<T> | EmbeddedViewRef<unknown> | null = null;\r\n\r\n if (content instanceof ComponentRef) {\r\n // Component content\r\n attachedContent = content;\r\n this._overlayElement.appendChild(content.location.nativeElement);\r\n } else if (content instanceof TemplateRef) {\r\n // Template content\r\n const viewRef = content.createEmbeddedView({}, injector);\r\n attachedContent = viewRef;\r\n viewRef.rootNodes.forEach((node) => {\r\n this._overlayElement.appendChild(node);\r\n });\r\n } else if (content instanceof HTMLElement) {\r\n // DOM element content\r\n this._overlayElement.appendChild(content);\r\n } else if (typeof content === 'string') {\r\n // String content\r\n this._renderer.setProperty(this._overlayElement, 'textContent', content);\r\n }\r\n\r\n this._attachedContent = attachedContent;\r\n this._hasAttached = true;\r\n this._attachments.next();\r\n\r\n // Apply position strategy after DOM has settled\r\n // Use single RAF to ensure layout is complete, then make visible\r\n if (this._config.positionStrategy) {\r\n requestAnimationFrame(() => {\r\n if (this._config.positionStrategy && this._hasAttached) {\r\n this._config.positionStrategy.apply();\r\n // Make overlay visible after positioning\r\n this._renderer.setStyle(this._overlayElement, 'opacity', '1');\r\n }\r\n });\r\n } else {\r\n // No position strategy, make visible immediately\r\n this._renderer.setStyle(this._overlayElement, 'opacity', '1');\r\n }\r\n\r\n // Enable scroll strategy if available\r\n if (this._config.scrollStrategy) {\r\n this._config.scrollStrategy.enable();\r\n }\r\n\r\n return attachedContent as ComponentRef<T>;\r\n }\r\n\r\n /**\r\n * Detaches the content from the overlay\r\n */\r\n detach(): void {\r\n if (!this._hasAttached) {\r\n return;\r\n }\r\n\r\n // Disable scroll strategy\r\n if (this._config.scrollStrategy) {\r\n this._config.scrollStrategy.disable();\r\n }\r\n\r\n // Clean up attached content\r\n if (this._attachedContent) {\r\n if (this._attachedContent instanceof ComponentRef) {\r\n this._attachedContent.destroy();\r\n } else if (this._attachedContent instanceof EmbeddedViewRef) {\r\n this._attachedContent.destroy();\r\n }\r\n this._attachedContent = null;\r\n }\r\n\r\n // Clear overlay element content\r\n while (this._overlayElement.firstChild) {\r\n this._overlayElement.removeChild(this._overlayElement.firstChild);\r\n }\r\n\r\n this._hasAttached = false;\r\n this._detachments.next();\r\n }\r\n\r\n /**\r\n * Disposes the overlay and cleans up resources\r\n */\r\n dispose(): void {\r\n // Detach content first\r\n this.detach();\r\n\r\n // Dispose position strategy\r\n if (this._config.positionStrategy) {\r\n this._config.positionStrategy.dispose();\r\n }\r\n\r\n // Dispose scroll strategy\r\n if (this._config.scrollStrategy) {\r\n this._config.scrollStrategy.detach();\r\n }\r\n\r\n // Remove event listeners\r\n this._removeEventListeners();\r\n\r\n // Remove backdrop\r\n if (this._backdropElement?.parentElement) {\r\n this._backdropElement.parentElement.removeChild(this._backdropElement);\r\n }\r\n\r\n // Remove overlay element\r\n if (this._overlayElement.parentElement) {\r\n this._overlayElement.parentElement.removeChild(this._overlayElement);\r\n }\r\n\r\n // Complete subjects\r\n this._backdropClick.complete();\r\n this._keydownEvents.complete();\r\n this._attachments.complete();\r\n this._detachments.complete();\r\n }\r\n\r\n /**\r\n * Updates the position of the overlay\r\n */\r\n updatePosition(): void {\r\n if (this._config.positionStrategy) {\r\n this._config.positionStrategy.apply();\r\n }\r\n }\r\n\r\n /**\r\n * Updates the size of the overlay\r\n */\r\n updateSize(\r\n config?: Pick<FuiOverlayConfig, 'width' | 'height' | 'minWidth' | 'minHeight' | 'maxWidth' | 'maxHeight'>,\r\n ): void {\r\n if (config) {\r\n Object.assign(this._config, config);\r\n }\r\n\r\n this._applySizeConfig();\r\n }\r\n\r\n /**\r\n * Adds CSS classes to the overlay pane\r\n */\r\n addPanelClass(classes: string | string[]): void {\r\n const classArray = Array.isArray(classes) ? classes : [classes];\r\n classArray.forEach((className) => {\r\n if (className) {\r\n this._renderer.addClass(this._overlayElement, className);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Removes CSS classes from the overlay pane\r\n */\r\n removePanelClass(classes: string | string[]): void {\r\n const classArray = Array.isArray(classes) ? classes : [classes];\r\n classArray.forEach((className) => {\r\n if (className) {\r\n this._renderer.removeClass(this._overlayElement, className);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Gets the current configuration of the overlay\r\n */\r\n getConfig(): FuiOverlayConfig {\r\n return { ...this._config };\r\n }\r\n\r\n /**\r\n * Updates the configuration of the overlay\r\n */\r\n updateConfig(config: Partial<FuiOverlayConfig>): void {\r\n const oldConfig = { ...this._config };\r\n Object.assign(this._config, config);\r\n\r\n // Update backdrop if needed\r\n if (config.hasBackdrop !== undefined && config.hasBackdrop !== oldConfig.hasBackdrop) {\r\n if (config.hasBackdrop) {\r\n this._createBackdrop();\r\n } else {\r\n this._removeBackdrop();\r\n }\r\n }\r\n\r\n // Update backdrop classes\r\n const backdrop = this._backdropElement;\r\n if (config.backdropClass && backdrop) {\r\n // Remove old classes\r\n if (oldConfig.backdropClass) {\r\n const oldClasses = Array.isArray(oldConfig.backdropClass) ? oldConfig.backdropClass : [oldConfig.backdropClass];\r\n oldClasses.forEach((className) => {\r\n if (className) {\r\n this._renderer.removeClass(backdrop, className);\r\n }\r\n });\r\n }\r\n\r\n // Add new classes\r\n const newClasses = Array.isArray(config.backdropClass) ? config.backdropClass : [config.backdropClass];\r\n newClasses.forEach((className) => {\r\n if (className) {\r\n this._renderer.addClass(backdrop, className);\r\n }\r\n });\r\n }\r\n\r\n // Update panel classes\r\n if (config.panelClass) {\r\n // Remove old classes\r\n if (oldConfig.panelClass) {\r\n this.removePanelClass(oldConfig.panelClass);\r\n }\r\n\r\n // Add new classes\r\n this.addPanelClass(config.panelClass);\r\n }\r\n\r\n // Update size\r\n this._applySizeConfig();\r\n\r\n // Update position strategy\r\n if (config.positionStrategy && config.positionStrategy !== oldConfig.positionStrategy) {\r\n if (oldConfig.positionStrategy) {\r\n oldConfig.positionStrategy.dispose();\r\n }\r\n config.positionStrategy.setOverlayElement(this._overlayElement);\r\n }\r\n\r\n // Update scroll strategy\r\n if (config.scrollStrategy && config.scrollStrategy !== oldConfig.scrollStrategy) {\r\n if (oldConfig.scrollStrategy) {\r\n oldConfig.scrollStrategy.detach();\r\n }\r\n config.scrollStrategy.attach(this);\r\n }\r\n }\r\n\r\n private _setupOverlayElement(): void {\r\n // Add base classes\r\n this._renderer.addClass(this._overlayElement, 'fui-overlay-pane');\r\n\r\n // Add custom panel classes\r\n if (this._config.panelClass) {\r\n this.addPanelClass(this._config.panelClass);\r\n }\r\n\r\n // Apply z-index for proper stacking of nested overlays\r\n this._renderer.setStyle(this._overlayElement, 'z-index', String(this._zIndex));\r\n\r\n // Apply size configuration\r\n this._applySizeConfig();\r\n\r\n // Set direction\r\n if (this._config.direction) {\r\n this._renderer.setAttribute(this._overlayElement, 'dir', this._config.direction);\r\n }\r\n\r\n // Set position strategy\r\n if (this._config.positionStrategy) {\r\n this._config.positionStrategy.setOverlayElement(this._overlayElement);\r\n }\r\n }\r\n\r\n private _setupBackdrop(): void {\r\n if (this._config.hasBackdrop) {\r\n this._createBackdrop();\r\n }\r\n }\r\n\r\n private _createBackdrop(): void {\r\n if (this._backdropElement) {\r\n return;\r\n }\r\n this._backdropElement = this._renderer.createElement('div');\r\n this._renderer.addClass(this._backdropElement, 'fui-overlay-backdrop');\r\n\r\n // Apply z-index for backdrop (slightly below the overlay panel)\r\n this._renderer.setStyle(this._backdropElement, 'z-index', String(this._zIndex - 1));\r\n\r\n // Add custom backdrop classes\r\n const backdropEl = this._backdropElement;\r\n if (this._config.backdropClass && backdropEl) {\r\n const classes = Array.isArray(this._config.backdropClass)\r\n ? this._config.backdropClass\r\n : [this._config.backdropClass];\r\n classes.forEach((className) => {\r\n if (className) {\r\n this._renderer.addClass(backdropEl, className);\r\n }\r\n });\r\n }\r\n\r\n // Insert backdrop before overlay element\r\n const parent = this._overlayElement.parentElement;\r\n if (parent) {\r\n this._renderer.insertBefore(parent, this._backdropElement, this._overlayElement);\r\n }\r\n\r\n // Setup backdrop click listener\r\n this._backdropClickListener = (event: MouseEvent): void => {\r\n if (event.target === this._backdropElement) {\r\n this._backdropClick.next(event);\r\n }\r\n };\r\n\r\n if (this._backdropElement) {\r\n this._backdropElement.addEventListener('click', this._backdropClickListener);\r\n }\r\n }\r\n\r\n private _removeBackdrop(): void {\r\n if (this._backdropElement) {\r\n if (this._backdropClickListener) {\r\n this._backdropElement.removeEventListener('click', this._backdropClickListener);\r\n this._backdropClickListener = undefined;\r\n }\r\n\r\n if (this._backdropElement.parentElement) {\r\n this._backdropElement.parentElement.removeChild(this._backdropElement);\r\n }\r\n\r\n this._backdropElement = null;\r\n }\r\n }\r\n\r\n private _setupEventListeners(): void {\r\n // Keydown events\r\n this._keydownListener = (event: KeyboardEvent): void => {\r\n this._keydownEvents.next(event);\r\n };\r\n\r\n this._overlayElement.addEventListener('keydown', this._keydownListener);\r\n }\r\n\r\n private _removeEventListeners(): void {\r\n if (this._keydownListener) {\r\n this._overlayElement.removeEventListener('keydown', this._keydownListener);\r\n this._keydownListener = undefined;\r\n }\r\n\r\n if (this._backdropClickListener && this._backdropElement) {\r\n this._backdropElement.removeEventListener('click', this._backdropClickListener);\r\n this._backdropClickListener = undefined;\r\n }\r\n }\r\n\r\n private _applySizeConfig(): void {\r\n const config = this._config;\r\n\r\n if (config.width !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'width', this._coerceCssPixelValue(config.width));\r\n }\r\n\r\n if (config.height !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'height', this._coerceCssPixelValue(config.height));\r\n }\r\n\r\n if (config.minWidth !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'min-width', this._coerceCssPixelValue(config.minWidth));\r\n }\r\n\r\n if (config.minHeight !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'min-height', this._coerceCssPixelValue(config.minHeight));\r\n }\r\n\r\n if (config.maxWidth !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'max-width', this._coerceCssPixelValue(config.maxWidth));\r\n }\r\n\r\n if (config.maxHeight !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'max-height', this._coerceCssPixelValue(config.maxHeight));\r\n }\r\n }\r\n\r\n private _coerceCssPixelValue(value: string | number): string {\r\n return typeof value === 'number' ? `${value}px` : value;\r\n }\r\n\r\n private _generateId(): string {\r\n return `fui-overlay-${Math.random().toString(36).substr(2, 9)}`;\r\n }\r\n}\r\n","import { Component, ElementRef, inject, OnDestroy, OnInit } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n/**\r\n * # FuiOverlayContainer Component\r\n *\r\n * Container component that holds all overlay content. This component is automatically\r\n * created and attached to the document body when the overlay service is first used.\r\n *\r\n * ## Features\r\n * - Provides a dedicated container for all overlay content\r\n * - Manages z-index stacking for multiple overlays\r\n * - Handles cleanup when destroyed\r\n * - Applies proper CSS classes for styling\r\n *\r\n * ## Usage\r\n *\r\n * This component is used internally by the overlay service and should not be\r\n * instantiated directly by application code.\r\n */\r\n@Component({\r\n selector: 'fui-overlay-container',\r\n standalone: true,\r\n template: '',\r\n host: {\r\n class: 'fui-overlay-container',\r\n '[attr.aria-live]': '\"polite\"',\r\n '[attr.aria-atomic]': '\"true\"',\r\n },\r\n styles: [\r\n `\r\n :host {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n pointer-events: none;\r\n z-index: var(--fui-z-popover);\r\n }\r\n `,\r\n ],\r\n})\r\nexport class FuiOverlayContainerComponent implements OnInit, OnDestroy {\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _elementRef = inject(ElementRef<HTMLElement>);\r\n\r\n ngOnInit(): void {\r\n // Ensure the container is attached to the document body\r\n if (this._elementRef.nativeElement.parentElement !== this._document.body) {\r\n this._document.body.appendChild(this._elementRef.nativeElement);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Clean up the container element\r\n const element = this._elementRef.nativeElement;\r\n if (element.parentElement) {\r\n element.parentElement.removeChild(element);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the container element\r\n */\r\n getContainerElement(): HTMLElement {\r\n return this._elementRef.nativeElement;\r\n }\r\n}\r\n","import { Renderer2 } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport {\r\n FuiPositionStrategy,\r\n FuiConnectedOverlayPositionChange,\r\n FuiGlobalPositionStrategyOptions,\r\n} from '../overlay.types';\r\n\r\n/**\r\n * # FuiGlobalPositionStrategy\r\n *\r\n * A position strategy that positions the overlay at a fixed position on the screen.\r\n * This strategy is useful for modals, dialogs, and other overlays that should be\r\n * positioned relative to the viewport rather than a specific element.\r\n *\r\n * ## Features\r\n * - Fixed positioning relative to the viewport\r\n * - Support for all CSS position properties (top, bottom, left, right)\r\n * - Centering options (horizontal and vertical)\r\n * - Responsive positioning\r\n * - Size constraints (width, height, min/max dimensions)\r\n */\r\nexport class FuiGlobalPositionStrategy implements FuiPositionStrategy {\r\n private _overlayElement?: HTMLElement;\r\n private readonly _positionChanges = new Subject<FuiConnectedOverlayPositionChange>();\r\n private _isDisposed = false;\r\n\r\n constructor(\r\n private _renderer: Renderer2,\r\n private _options: FuiGlobalPositionStrategyOptions = {},\r\n ) {}\r\n\r\n /** Observable that emits when the position changes */\r\n get positionChanges(): Observable<FuiConnectedOverlayPositionChange> {\r\n return this._positionChanges.asObservable();\r\n }\r\n\r\n /**\r\n * Sets the overlay element reference\r\n */\r\n setOverlayElement(element: HTMLElement): void {\r\n this._overlayElement = element;\r\n }\r\n\r\n /**\r\n * Applies the positioning strategy\r\n */\r\n apply(): void {\r\n if (!this._overlayElement || this._isDisposed) {\r\n return;\r\n }\r\n\r\n // Set position to fixed for global positioning\r\n this._renderer.setStyle(this._overlayElement, 'position', 'fixed');\r\n\r\n // Apply positioning\r\n this._applyPosition();\r\n\r\n // Apply centering if requested\r\n this._applyCentering();\r\n\r\n // Apply size constraints\r\n this._applySizeConstraints();\r\n }\r\n\r\n /**\r\n * Sets the top position\r\n */\r\n top(value: string | number = '0'): this {\r\n this._options.top = value;\r\n this._options.bottom = undefined;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the bottom position\r\n */\r\n bottom(value: string | number = '0'): this {\r\n this._options.bottom = value;\r\n this._options.top = undefined;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the left position\r\n */\r\n left(value: string | number = '0'): this {\r\n this._options.left = value;\r\n this._options.right = undefined;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the right position\r\n */\r\n right(value: string | number = '0'): this {\r\n this._options.right = value;\r\n this._options.left = undefined;\r\n return this;\r\n }\r\n\r\n /**\r\n * Centers the overlay horizontally\r\n */\r\n centerHorizontally(): this {\r\n this._options.centerHorizontally = true;\r\n this._options.left = undefined;\r\n this._options.right = undefined;\r\n return this;\r\n }\r\n\r\n /**\r\n * Centers the overlay vertically\r\n */\r\n centerVertically(): this {\r\n this._options.centerVertically = true;\r\n this._options.top = undefined;\r\n this._options.bottom = undefined;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the width of the overlay\r\n */\r\n width(value: string | number): this {\r\n this._options.width = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the height of the overlay\r\n */\r\n height(value: string | number): this {\r\n this._options.height = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the minimum width of the overlay\r\n */\r\n minWidth(value: string | number): this {\r\n this._options.minWidth = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the minimum height of the overlay\r\n */\r\n minHeight(value: string | number): this {\r\n this._options.minHeight = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the maximum width of the overlay\r\n */\r\n maxWidth(value: string | number): this {\r\n this._options.maxWidth = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the maximum height of the overlay\r\n */\r\n maxHeight(value: string | number): this {\r\n this._options.maxHeight = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Disposes the strategy and cleans up resources\r\n */\r\n dispose(): void {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n\r\n this._isDisposed = true;\r\n this._positionChanges.complete();\r\n }\r\n\r\n /**\r\n * Detaches the strategy from the overlay\r\n */\r\n detach(): void {\r\n // Global position strategy doesn't need special detach logic\r\n }\r\n\r\n private _applyPosition(): void {\r\n if (!this._overlayElement) {\r\n return;\r\n }\r\n\r\n const options = this._options;\r\n\r\n // Apply top/bottom positioning\r\n if (options.top !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'top', this._coerceCssPixelValue(options.top));\r\n this._renderer.removeStyle(this._overlayElement, 'bottom');\r\n } else if (options.bottom !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'bottom', this._coerceCssPixelValue(options.bottom));\r\n this._renderer.removeStyle(this._overlayElement, 'top');\r\n }\r\n\r\n // Apply left/right positioning\r\n if (options.left !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'left', this._coerceCssPixelValue(options.left));\r\n this._renderer.removeStyle(this._overlayElement, 'right');\r\n } else if (options.right !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'right', this._coerceCssPixelValue(options.right));\r\n this._renderer.removeStyle(this._overlayElement, 'left');\r\n }\r\n }\r\n\r\n private _applyCentering(): void {\r\n if (!this._overlayElement) {\r\n return;\r\n }\r\n\r\n const options = this._options;\r\n\r\n if (options.centerHorizontally) {\r\n this._renderer.setStyle(this._overlayElement, 'left', '50%');\r\n this._renderer.setStyle(this._overlayElement, 'transform', 'translateX(-50%)');\r\n this._renderer.removeStyle(this._overlayElement, 'right');\r\n }\r\n\r\n if (options.centerVertically) {\r\n this._renderer.setStyle(this._overlayElement, 'top', '50%');\r\n\r\n const existingTransform = this._overlayElement.style.transform;\r\n if (existingTransform?.includes('translateX')) {\r\n this._renderer.setStyle(this._overlayElement, 'transform', 'translate(-50%, -50%)');\r\n } else {\r\n this._renderer.setStyle(this._overlayElement, 'transform', 'translateY(-50%)');\r\n }\r\n\r\n this._renderer.removeStyle(this._overlayElement, 'bottom');\r\n }\r\n }\r\n\r\n private _applySizeConstraints(): void {\r\n if (!this._overlayElement) {\r\n return;\r\n }\r\n\r\n const options = this._options;\r\n\r\n if (options.width !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'width', this._coerceCssPixelValue(options.width));\r\n }\r\n\r\n if (options.height !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'height', this._coerceCssPixelValue(options.height));\r\n }\r\n\r\n if (options.minWidth !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'min-width', this._coerceCssPixelValue(options.minWidth));\r\n }\r\n\r\n if (options.minHeight !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'min-height', this._coerceCssPixelValue(options.minHeight));\r\n }\r\n\r\n if (options.maxWidth !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'max-width', this._coerceCssPixelValue(options.maxWidth));\r\n }\r\n\r\n if (options.maxHeight !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'max-height', this._coerceCssPixelValue(options.maxHeight));\r\n }\r\n }\r\n\r\n private _coerceCssPixelValue(value: string | number): string {\r\n return typeof value === 'number' ? `${value}px` : value;\r\n }\r\n}\r\n","import { ElementRef, Renderer2 } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport {\r\n FuiPositionStrategy,\r\n FuiConnectedPosition,\r\n FuiConnectedOverlayPositionChange,\r\n FuiConnectedPositionStrategyOptions,\r\n FuiScrollableViewProperties,\r\n} from '../overlay.types';\r\n\r\n/**\r\n * # FuiConnectedPositionStrategy\r\n *\r\n * A position strategy that positions the overlay relative to a connected element.\r\n * This strategy is ideal for tooltips, dropdowns, menus, and other overlays that\r\n * should be positioned relative to a trigger element.\r\n *\r\n * ## Features\r\n * - Positions overlay relative to an origin element\r\n * - Multiple fallback positions with automatic selection\r\n * - Collision detection and viewport boundary handling\r\n * - Push and grow behaviors for constrained spaces\r\n * - Scroll and resize event handling\r\n * - Transform origin support for animations\r\n */\r\nexport class FuiConnectedPositionStrategy implements FuiPositionStrategy {\r\n private _overlayElement?: HTMLElement;\r\n private _originElement: HTMLElement;\r\n private _positions: FuiConnectedPosition[];\r\n private _appliedPosition?: FuiConnectedPosition;\r\n private _isDisposed = false;\r\n private _resizeSubscription?: () => void;\r\n private _scrollSubscription?: () => void;\r\n\r\n private readonly _positionChanges = new Subject<FuiConnectedOverlayPositionChange>();\r\n\r\n // Configuration options\r\n private _withPush = true;\r\n private _withGrowAfterOpen = false;\r\n private _withLockedPosition = false;\r\n private _defaultOffsetX = 0;\r\n private _defaultOffsetY = 0;\r\n private _transformOriginElement?: HTMLElement;\r\n private _viewportMargin = 0;\r\n private _withFlexibleDimensions = false;\r\n\r\n constructor(\r\n private _renderer: Renderer2,\r\n options: FuiConnectedPositionStrategyOptions,\r\n ) {\r\n this._originElement = options.origin instanceof ElementRef ? options.origin.nativeElement : options.origin;\r\n this._positions = [...options.positions];\r\n\r\n // Apply configuration options\r\n if (options.withPush !== undefined) {\r\n this._withPush = options.withPush;\r\n }\r\n if (options.withGrowAfterOpen !== undefined) {\r\n this._withGrowAfterOpen = options.withGrowAfterOpen;\r\n }\r\n if (options.withLockedPosition !== undefined) {\r\n this._withLockedPosition = options.withLockedPosition;\r\n }\r\n if (options.withDefaultOffsetX !== undefined) {\r\n this._defaultOffsetX = options.withDefaultOffsetX;\r\n }\r\n if (options.withDefaultOffsetY !== undefined) {\r\n this._defaultOffsetY = options.withDefaultOffsetY;\r\n }\r\n if (options.withTransformOriginOn) {\r\n this._transformOriginElement =\r\n options.withTransformOriginOn instanceof ElementRef\r\n ? options.withTransformOriginOn.nativeElement\r\n : options.withTransformOriginOn;\r\n }\r\n if (options.viewportMargin !== undefined) {\r\n this._viewportMargin = options.viewportMargin;\r\n }\r\n if (options.withFlexibleDimensions !== undefined) {\r\n this._withFlexibleDimensions = options.withFlexibleDimensions;\r\n }\r\n }\r\n\r\n /** Observable that emits when the position changes */\r\n get positionChanges(): Observable<FuiConnectedOverlayPositionChange> {\r\n return this._positionChanges.asObservable();\r\n }\r\n\r\n /**\r\n * Sets the overlay element reference\r\n */\r\n setOverlayElement(element: HTMLElement): void {\r\n this._overlayElement = element;\r\n }\r\n\r\n /**\r\n * Applies the positioning strategy\r\n */\r\n apply(): void {\r\n if (!this._overlayElement || this._isDisposed) {\r\n return;\r\n }\r\n\r\n // Set position to fixed for precise positioning\r\n this._renderer.setStyle(this._overlayElement, 'position', 'fixed');\r\n\r\n // Force a layout recalculation to ensure accurate dimensions\r\n // This is necessary to get the correct bounding rect\r\n void this._overlayElement.offsetHeight;\r\n\r\n // Find the best position\r\n const bestPosition = this._getBestPosition();\r\n\r\n if (bestPosition) {\r\n this._applyPosition(bestPosition);\r\n this._appliedPosition = bestPosition;\r\n\r\n // Set up event listeners for repositioning\r\n this._setupEventListeners();\r\n\r\n // Emit position change\r\n this._positionChanges.next({\r\n connectionPair: bestPosition,\r\n scrollableViewProperties: this._getScrollableViewProperties(),\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Updates the positions array\r\n */\r\n withPositions(positions: FuiConnectedPosition[]): this {\r\n this._positions = [...positions];\r\n return this;\r\n }\r\n\r\n /**\r\n * Enables pushing the overlay on-screen if it would otherwise be clipped\r\n */\r\n withPush(enabled = true): this {\r\n this._withPush = enabled;\r\n return this;\r\n }\r\n\r\n /**\r\n * Enables growing the overlay after it reaches the edge of the viewport\r\n */\r\n withGrowAfterOpen(enabled = true): this {\r\n this._withGrowAfterOpen = enabled;\r\n return this;\r\n }\r\n\r\n /**\r\n * Locks the position after the first time it is positioned\r\n */\r\n withLockedPosition(enabled = true): this {\r\n this._withLockedPosition = enabled;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the default offset for the x-axis\r\n */\r\n withDefaultOffsetX(offset: number): this {\r\n this._defaultOffsetX = offset;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the default offset for the y-axis\r\n */\r\n withDefaultOffsetY(offset: number): this {\r\n this._defaultOffsetY = offset;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the element to use for transform origin\r\n */\r\n withTransformOriginOn(element: ElementRef<HTMLElement> | HTMLElement): this {\r\n this._transformOriginElement = element instanceof ElementRef ? element.nativeElement : element;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the margin between the overlay and the viewport edge\r\n */\r\n withViewportMargin(margin: number): this {\r\n this._viewportMargin = margin;\r\n return this;\r\n }\r\n\r\n /**\r\n * Enables flexible dimensions\r\n */\r\n withFlexibleDimensions(enabled = true): this {\r\n this._withFlexibleDimensions = enabled;\r\n return this;\r\n }\r\n\r\n /**\r\n * Disposes the strategy and cleans up resources\r\n */\r\n dispose(): void {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n\r\n this._isDisposed = true;\r\n this._removeEventListeners();\r\n this._positionChanges.complete();\r\n }\r\n\r\n /**\r\n * Detaches the strategy from the overlay\r\n */\r\n detach(): void {\r\n this._removeEventListeners();\r\n }\r\n\r\n private _getBestPosition(): FuiConnectedPosition | null {\r\n if (!this._overlayElement || !this._originElement) {\r\n return null;\r\n }\r\n\r\n // If position is locked and we have an applied position, use it\r\n if (this._withLockedPosition && this._appliedPosition) {\r\n return this._appliedPosition;\r\n }\r\n\r\n // Force layout recalculation to ensure overlay has correct dimensions\r\n // This is critical for center-aligned positions (right, left, top, bottom)\r\n void this._overlayElement.offsetHeight;\r\n void this._overlayElement.offsetWidth;\r\n\r\n const originRect = this._originElement.getBoundingClientRect();\r\n const overlayRect = this._overlayElement.getBoundingClientRect();\r\n const viewportSize = this._getViewportSize();\r\n\r\n let bestPosition: FuiConnectedPosition | null = null;\r\n let bestScore = -1;\r\n\r\n for (const position of this._positions) {\r\n const positionedRect = this._calculatePositionedRect(position, originRect, overlayRect);\r\n const score = this._calculatePositionScore(positionedRect, viewportSize);\r\n\r\n if (score > bestScore) {\r\n bestScore = score;\r\n bestPosition = position;\r\n }\r\n\r\n // If we found a perfect position (fully visible), use it\r\n if (score === 1) {\r\n break;\r\n }\r\n }\r\n\r\n return bestPosition;\r\n }\r\n\r\n private _applyPosition(position: FuiConnectedPosition): void {\r\n if (!this._overlayElement || !this._originElement) {\r\n return;\r\n }\r\n\r\n // Force layout recalculation again to ensure dimensions are current\r\n void this._overlayElement.offsetHeight;\r\n void this._overlayElement.offsetWidth;\r\n\r\n const originRect = this._originElement.getBoundingClientRect();\r\n const overlayRect = this._overlayElement.getBoundingClientRect();\r\n const positionedRect = this._calculatePositionedRect(position, originRect, overlayRect);\r\n\r\n let { x, y } = positionedRect;\r\n\r\n // Apply push behavior if enabled\r\n if (this._withPush) {\r\n const pushedPosition = this._pushWithinViewport({ x, y, width: overlayRect.width, height: overlayRect.height });\r\n x = pushedPosition.x;\r\n y = pushedPosition.y;\r\n }\r\n\r\n // Apply the position\r\n this._renderer.setStyle(this._overlayElement, 'left', `${x}px`);\r\n this._renderer.setStyle(this._overlayElement, 'top', `${y}px`);\r\n\r\n // Apply transform origin if specified\r\n if (this._transformOriginElement) {\r\n this._setTransformOrigin(position);\r\n }\r\n\r\n // Apply flexible dimensions if enabled\r\n if (this._withFlexibleDimensions) {\r\n this._applyFlexibleDimensions(position, { x, y, width: overlayRect.width, height: overlayRect.height });\r\n }\r\n }\r\n\r\n private _calculatePositionedRect(\r\n position: FuiConnectedPosition,\r\n originRect: DOMRect,\r\n overlayRect: DOMRect,\r\n ): { x: number; y: number; width: number; height: number } {\r\n const offsetX = (position.offsetX ?? 0) + this._defaultOffsetX;\r\n const offsetY = (position.offsetY ?? 0) + this._defaultOffsetY;\r\n\r\n let x: number;\r\n let y: number;\r\n\r\n // Calculate x position\r\n switch (position.originX) {\r\n case 'start':\r\n x = originRect.left;\r\n break;\r\n case 'center':\r\n x = originRect.left + originRect.width / 2;\r\n break;\r\n case 'end':\r\n x = originRect.right;\r\n break;\r\n }\r\n\r\n switch (position.overlayX) {\r\n case 'start':\r\n // x remains as is\r\n break;\r\n case 'center':\r\n x -= overlayRect.width / 2;\r\n break;\r\n case 'end':\r\n x -= overlayRect.width;\r\n break;\r\n }\r\n\r\n // Calculate y position\r\n switch (position.originY) {\r\n case 'top':\r\n y = originRect.top;\r\n break;\r\n case 'center':\r\n y = originRect.top + originRect.height / 2;\r\n break;\r\n case 'bottom':\r\n y = originRect.bottom;\r\n break;\r\n }\r\n\r\n switch (position.overlayY) {\r\n case 'top':\r\n // y remains as is\r\n break;\r\n case 'center':\r\n y -= overlayRect.height / 2;\r\n break;\r\n case 'bottom':\r\n y -= overlayRect.height;\r\n break;\r\n }\r\n\r\n return {\r\n x: x + offsetX,\r\n y: y + offsetY,\r\n width: overlayRect.width,\r\n height: overlayRect.height,\r\n };\r\n }\r\n\r\n private _calculatePositionScore(\r\n rect: { x: number; y: number; width: number; height: number },\r\n viewportSize: { width: number; height: number },\r\n ): number {\r\n const margin = this._viewportMargin;\r\n const visibleArea =\r\n Math.max(0, Math.min(rect.x + rect.width, viewportSize.width - margin) - Math.max(rect.x, margin)) *\r\n Math.max(0, Math.min(rect.y + rect.height, viewportSize.height - margin) - Math.max(rect.y, margin));\r\n\r\n const totalArea = rect.width * rect.height;\r\n return totalArea > 0 ? visibleArea / totalArea : 0;\r\n }\r\n\r\n private _pushWithinViewport(rect: { x: number; y: number; width: number; height: number }): { x: number; y: number } {\r\n const viewportSize = this._getViewportSize();\r\n const margin = this._viewportMargin;\r\n\r\n let { x, y } = rect;\r\n\r\n // Push horizontally\r\n if (x < margin) {\r\n x = margin;\r\n } else if (x + rect.width > viewportSize.width - margin) {\r\n x = viewportSize.width - rect.width - margin;\r\n }\r\n\r\n // Push vertically\r\n if (y < margin) {\r\n y = margin;\r\n } else if (y + rect.height > viewportSize.height - margin) {\r\n y = viewportSize.height - rect.height - margin;\r\n }\r\n\r\n return { x, y };\r\n }\r\n\r\n private _setTransformOrigin(position: FuiConnectedPosition): void {\r\n if (!this._transformOriginElement || !this._overlayElement) {\r\n return;\r\n }\r\n\r\n let transformOrigin = '';\r\n\r\n // Set horizontal transform origin\r\n switch (position.overlayX) {\r\n case 'start':\r\n transformOrigin += 'left';\r\n break;\r\n case 'center':\r\n transformOrigin += 'center';\r\n break;\r\n case 'end':\r\n transformOrigin += 'right';\r\n break;\r\n }\r\n\r\n transformOrigin += ' ';\r\n\r\n // Set vertical transform origin\r\n switch (position.overlayY) {\r\n case 'top':\r\n transformOrigin += 'top';\r\n break;\r\n case 'center':\r\n transformOrigin += 'center';\r\n break;\r\n case 'bottom':\r\n transformOrigin += 'bottom';\r\n break;\r\n }\r\n\r\n this._renderer.setStyle(this._transformOriginElement, 'transform-origin', transformOrigin);\r\n }\r\n\r\n private _applyFlexibleDimensions(\r\n position: FuiConnectedPosition,\r\n rect: { x: number; y: number; width: number; height: number },\r\n ): void {\r\n if (!this._overlayElement) {\r\n return;\r\n }\r\n\r\n const viewportSize = this._getViewportSize();\r\n const margin = this._viewportMargin;\r\n\r\n // Calculate available space\r\n const availableWidth = viewportSize.width - rect.x - margin;\r\n const availableHeight = viewportSize.height - rect.y - margin;\r\n\r\n // Apply flexible width if needed\r\n if (rect.width > availableWidth) {\r\n this._renderer.setStyle(this._overlayElement, 'max-width', `${availableWidth}px`);\r\n }\r\n\r\n // Apply flexible height if needed\r\n if (rect.height > availableHeight) {\r\n this._renderer.setStyle(this._overlayElement, 'max-height', `${availableHeight}px`);\r\n }\r\n }\r\n\r\n private _setupEventListeners(): void {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n\r\n // Remove existing listeners\r\n this._removeEventListeners();\r\n\r\n // Set up resize listener\r\n this._resizeSubscription = (): void => {\r\n if (!this._isDisposed) {\r\n this.apply();\r\n }\r\n };\r\n window.addEventListener('resize', this._resizeSubscription);\r\n\r\n // Set up scroll listener\r\n this._scrollSubscription = (): void => {\r\n if (!this._isDisposed) {\r\n this.apply();\r\n }\r\n };\r\n window.addEventListener('scroll', this._scrollSubscription, true);\r\n }\r\n\r\n private _removeEventListeners(): void {\r\n if (this._resizeSubscription) {\r\n window.removeEventListener('resize', this._resizeSubscription);\r\n this._resizeSubscription = undefined;\r\n }\r\n\r\n if (this._scrollSubscription) {\r\n window.removeEventListener('scroll', this._scrollSubscription, true);\r\n this._scrollSubscription = undefined;\r\n }\r\n }\r\n\r\n private _getViewportSize(): { width: number; height: number } {\r\n return {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n };\r\n }\r\n\r\n private _getScrollableViewProperties(): FuiScrollableViewProperties {\r\n const viewportSize = this._getViewportSize();\r\n return {\r\n size: viewportSize,\r\n scrollPosition: {\r\n top: window.pageYOffset || document.documentElement.scrollTop,\r\n left: window.pageXOffset || document.documentElement.scrollLeft,\r\n },\r\n };\r\n }\r\n}\r\n","import { FuiScrollStrategy, FuiOverlayRef } from '../overlay.types';\r\n\r\n/**\r\n * # FuiNoopScrollStrategy\r\n *\r\n * A scroll strategy that does nothing when the user scrolls.\r\n * This is useful for overlays that should remain in their position\r\n * regardless of scrolling.\r\n */\r\nexport class FuiNoopScrollStrategy implements FuiScrollStrategy {\r\n enable(): void {\r\n // Intentionally empty\r\n }\r\n\r\n disable(): void {\r\n // Intentionally empty\r\n }\r\n\r\n attach(_overlayRef: FuiOverlayRef): void {\r\n // Intentionally empty\r\n }\r\n\r\n detach(): void {\r\n // Intentionally empty\r\n }\r\n}\r\n\r\n/**\r\n * # FuiCloseScrollStrategy\r\n *\r\n * A scroll strategy that closes the overlay when the user scrolls.\r\n * This is useful for overlays like tooltips or dropdowns that should\r\n * disappear when the user scrolls away from the trigger element.\r\n */\r\nexport class FuiCloseScrollStrategy implements FuiScrollStrategy {\r\n private _overlayRef?: FuiOverlayRef;\r\n private _scrollListener?: () => void;\r\n private _isEnabled = false;\r\n\r\n constructor(private _threshold = 0) {}\r\n\r\n enable(): void {\r\n if (this._isEnabled || !this._overlayRef) {\r\n return;\r\n }\r\n\r\n this._isEnabled = true;\r\n this._scrollListener = (): void => {\r\n if (this._overlayRef) {\r\n this._overlayRef.dispose();\r\n }\r\n };\r\n\r\n window.addEventListener('scroll', this._scrollListener, true);\r\n }\r\n\r\n disable(): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n\r\n this._isEnabled = false;\r\n this._removeScrollListener();\r\n }\r\n\r\n attach(overlayRef: FuiOverlayRef): void {\r\n this._overlayRef = overlayRef;\r\n }\r\n\r\n detach(): void {\r\n this.disable();\r\n this._overlayRef = undefined;\r\n }\r\n\r\n private _removeScrollListener(): void {\r\n if (this._scrollListener) {\r\n window.removeEventListener('scroll', this._scrollListener, true);\r\n this._scrollListener = undefined;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * # FuiRepositionScrollStrategy\r\n *\r\n * A scroll strategy that repositions the overlay when the user scrolls.\r\n * This is useful for overlays that should follow their trigger element\r\n * as it moves due to scrolling.\r\n */\r\nexport class FuiRepositionScrollStrategy implements FuiScrollStrategy {\r\n private _overlayRef?: FuiOverlayRef;\r\n private _scrollListener?: () => void;\r\n private _isEnabled = false;\r\n\r\n constructor(\r\n private _scrollThrottle = 20,\r\n private _autoClose = false,\r\n ) {}\r\n\r\n enable(): void {\r\n if (this._isEnabled || !this._overlayRef) {\r\n return;\r\n }\r\n\r\n this._isEnabled = true;\r\n let timeoutId: number | null = null;\r\n\r\n this._scrollListener = (): void => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n\r\n timeoutId = window.setTimeout((): void => {\r\n if (this._overlayRef) {\r\n if (this._autoClose && this._isScrolledOutOfView()) {\r\n this._overlayRef.dispose();\r\n } else {\r\n this._overlayRef.updatePosition();\r\n }\r\n }\r\n }, this._scrollThrottle);\r\n };\r\n\r\n window.addEventListener('scroll', this._scrollListener, true);\r\n }\r\n\r\n disable(): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n\r\n this._isEnabled = false;\r\n this._removeScrollListener();\r\n }\r\n\r\n attach(overlayRef: FuiOverlayRef): void {\r\n this._overlayRef = overlayRef;\r\n }\r\n\r\n detach(): void {\r\n this.disable();\r\n this._overlayRef = undefined;\r\n }\r\n\r\n private _removeScrollListener(): void {\r\n if (this._scrollListener) {\r\n window.removeEventListener('scroll', this._scrollListener, true);\r\n this._scrollListener = undefined;\r\n }\r\n }\r\n\r\n private _isScrolledOutOfView(): boolean {\r\n // This is a simplified implementation\r\n // In a real implementation, you would check if the origin element\r\n // is still visible in the viewport\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * # FuiBlockScrollStrategy\r\n *\r\n * A scroll strategy that prevents scrolling while the overlay is open.\r\n * This is useful for modal dialogs and other overlays that should\r\n * prevent interaction with the underlying content.\r\n */\r\nexport class FuiBlockScrollStrategy implements FuiScrollStrategy {\r\n private _previousHTMLStyles: Record<string, string> = {};\r\n private _previousBodyStyles: Record<string, string> = {};\r\n private _isEnabled = false;\r\n\r\n constructor(private _document?: Document) {}\r\n\r\n enable(): void {\r\n if (this._isEnabled) {\r\n return;\r\n }\r\n\r\n this._isEnabled = true;\r\n\r\n const doc = this._document ?? document;\r\n const html = doc.documentElement;\r\n const body = doc.body;\r\n\r\n if (!html || !body) {\r\n return;\r\n }\r\n\r\n // Store previous styles\r\n this._previousHTMLStyles = {\r\n overflow: html.style.overflow || '',\r\n };\r\n\r\n this._previousBodyStyles = {\r\n overflow: body.style.overflow || '',\r\n };\r\n\r\n // Apply blocking styles\r\n html.style.overflow = 'hidden';\r\n body.style.overflow = 'hidden';\r\n }\r\n\r\n disable(): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n\r\n this._isEnabled = false;\r\n\r\n const doc = this._document ?? document;\r\n const html = doc.documentElement;\r\n const body = doc.body;\r\n\r\n if (!html || !body) {\r\n return;\r\n }\r\n\r\n // Restore previous styles\r\n html.style.overflow = this._previousHTMLStyles['overflow'];\r\n body.style.overflow = this._previousBodyStyles['overflow'];\r\n\r\n // Clear stored styles\r\n this._previousHTMLStyles = {};\r\n this._previousBodyStyles = {};\r\n }\r\n\r\n attach(_overlayRef: FuiOverlayRef): void {\r\n // Block scroll strategy doesn't need the overlay reference\r\n }\r\n\r\n detach(): void {\r\n this.disable();\r\n }\r\n\r\n}\r\n\r\n/**\r\n * Factory functions for creating scroll strategies\r\n */\r\nexport const FUI_SCROLL_STRATEGIES = {\r\n /**\r\n * Creates a noop scroll strategy\r\n */\r\n noop: (): FuiNoopScrollStrategy => new FuiNoopScrollStrategy(),\r\n\r\n /**\r\n * Creates a close scroll strategy\r\n */\r\n close: (threshold = 0): FuiCloseScrollStrategy => new FuiCloseScrollStrategy(threshold),\r\n\r\n /**\r\n * Creates a reposition scroll strategy\r\n */\r\n reposition: (scrollThrottle = 20, autoClose = false): FuiRepositionScrollStrategy =>\r\n new FuiRepositionScrollStrategy(scrollThrottle, autoClose),\r\n\r\n /**\r\n * Creates a block scroll strategy\r\n * @param doc Optional Document reference for SSR compatibility\r\n */\r\n block: (doc?: Document): FuiBlockScrollStrategy => new FuiBlockScrollStrategy(doc),\r\n};\r\n","import {\r\n Injectable,\r\n Renderer2,\r\n RendererFactory2,\r\n inject,\r\n ComponentRef,\r\n createComponent,\r\n EnvironmentInjector,\r\n ElementRef,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport {\r\n FuiOverlayConfig,\r\n FuiOverlayRef,\r\n FuiConnectedPosition,\r\n FuiConnectedPositionStrategyOptions,\r\n FuiGlobalPositionStrategyOptions,\r\n} from './overlay.types';\r\nimport { FuiOverlayRefImpl } from './overlay-ref';\r\nimport { FuiOverlayContainerComponent } from './overlay-container.component';\r\nimport { FuiGlobalPositionStrategy } from './position/global-position-strategy';\r\nimport { FuiConnectedPositionStrategy } from './position/connected-position-strategy';\r\nimport { FUI_SCROLL_STRATEGIES } from './scroll/scroll-strategies';\r\n\r\n/**\r\n * # FuiOverlayService\r\n *\r\n * Core service for creating and managing overlays. This service provides a\r\n * comprehensive overlay system similar to Angular Material's overlay service,\r\n * with support for positioning strategies, scroll strategies, backdrop handling,\r\n * and focus management.\r\n *\r\n * ## Features\r\n * - Create overlays with flexible positioning strategies\r\n * - Global and connected positioning support\r\n * - Multiple scroll strategies (reposition, close, block, noop)\r\n * - Backdrop support with click detection\r\n * - Z-index management for stacking overlays\r\n * - Focus management and restoration\r\n * - Keyboard event handling\r\n * - Responsive positioning with collision detection\r\n *\r\n * ## Usage\r\n *\r\n * ### Basic Overlay\r\n * ```typescript\r\n * const overlayRef = this.overlay.create({\r\n * positionStrategy: this.overlay.position()\r\n * .global()\r\n * .centerHorizontally()\r\n * .centerVertically(),\r\n * hasBackdrop: true\r\n * });\r\n *\r\n * overlayRef.attach(myComponent);\r\n * ```\r\n *\r\n * ### Connected Overlay (Tooltip/Dropdown)\r\n * ```typescript\r\n * const overlayRef = this.overlay.create({\r\n * positionStrategy: this.overlay.position()\r\n * .connectedTo(this.triggerElement)\r\n * .withPositions([{\r\n * originX: 'center',\r\n * originY: 'bottom',\r\n * overlayX: 'center',\r\n * overlayY: 'top',\r\n * offsetY: 8\r\n * }]),\r\n * scrollStrategy: this.overlay.scrollStrategies.reposition()\r\n * });\r\n * ```\r\n */\r\n/** Base z-index for overlays */\r\nconst OVERLAY_BASE_Z_INDEX = 1000;\r\n/** Z-index increment for each new overlay */\r\nconst OVERLAY_Z_INDEX_INCREMENT = 10;\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FuiOverlayService {\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _rendererFactory = inject(RendererFactory2);\r\n private readonly _environmentInjector = inject(EnvironmentInjector);\r\n private readonly _renderer: Renderer2;\r\n\r\n private _overlayContainer?: ComponentRef<FuiOverlayContainerComponent>;\r\n private _nextUniqueId = 0;\r\n private _activeOverlays = new Set<FuiOverlayRef>();\r\n private _currentZIndex = OVERLAY_BASE_Z_INDEX;\r\n\r\n constructor() {\r\n this._renderer = this._rendererFactory.createRenderer(null, null);\r\n }\r\n\r\n /**\r\n * Creates a new overlay with the given configuration\r\n */\r\n create(config: FuiOverlayConfig = {}): FuiOverlayRef {\r\n const overlayElement = this._createOverlayElement();\r\n\r\n // Calculate z-index for this overlay (increments for each new overlay)\r\n const zIndex = this._getNextZIndex();\r\n\r\n const overlayRef = new FuiOverlayRefImpl(\r\n overlayElement,\r\n this._applyConfigDefaults(config),\r\n this._renderer,\r\n `fui-overlay-${this._nextUniqueId++}`,\r\n zIndex,\r\n );\r\n\r\n // Attach to container\r\n this._attachToContainer(overlayElement);\r\n\r\n // Track active overlay\r\n this._activeOverlays.add(overlayRef);\r\n\r\n // Set up disposal cleanup\r\n overlayRef.detachments.subscribe(() => {\r\n this._activeOverlays.delete(overlayRef);\r\n this._recalculateBaseZIndex();\r\n });\r\n\r\n return overlayRef;\r\n }\r\n\r\n /**\r\n * Gets the next available z-index for a new overlay\r\n */\r\n private _getNextZIndex(): number {\r\n this._currentZIndex += OVERLAY_Z_INDEX_INCREMENT;\r\n return this._currentZIndex;\r\n }\r\n\r\n /**\r\n * Recalculates the base z-index when overlays are disposed\r\n * Resets to base if no overlays are active\r\n */\r\n private _recalculateBaseZIndex(): void {\r\n if (this._activeOverlays.size === 0) {\r\n this._currentZIndex = OVERLAY_BASE_Z_INDEX;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the position builder for creating position strategies\r\n */\r\n position(): FuiOverlayPositionBuilder {\r\n return new FuiOverlayPositionBuilder(this._renderer);\r\n }\r\n\r\n /**\r\n * Gets the scroll strategies factory\r\n */\r\n get scrollStrategies(): typeof FUI_SCROLL_STRATEGIES {\r\n return FUI_SCROLL_STRATEGIES;\r\n }\r\n\r\n /**\r\n * Gets all currently active overlays\r\n */\r\n getActiveOverlays(): FuiOverlayRef[] {\r\n return Array.from(this._activeOverlays);\r\n }\r\n\r\n /**\r\n * Disposes all active overlays\r\n */\r\n disposeAll(): void {\r\n const overlays = Array.from(this._activeOverlays);\r\n overlays.forEach((overlay) => {\r\n overlay.dispose();\r\n });\r\n }\r\n\r\n private _createOverlayElement(): HTMLElement {\r\n const overlayElement = this._renderer.createElement('div');\r\n this._renderer.addClass(overlayElement, 'fui-overlay-pane');\r\n this._renderer.setStyle(overlayElement, 'pointer-events', 'auto');\r\n return overlayElement;\r\n }\r\n\r\n private _attachToContainer(overlayElement: HTMLElement): void {\r\n const container = this._getOverlayContainer();\r\n this._renderer.appendChild(container, overlayElement);\r\n }\r\n\r\n private _getOverlayContainer(): HTMLElement {\r\n if (!this._overlayContainer) {\r\n this._overlayContainer = createComponent(FuiOverlayContainerComponent, {\r\n environmentInjector: this._environmentInjector,\r\n });\r\n\r\n // Manually trigger ngOnInit to ensure container is attached to body\r\n this._overlayContainer.instance.ngOnInit();\r\n }\r\n\r\n return this._overlayContainer.instance.getContainerElement();\r\n }\r\n\r\n private _applyConfigDefaults(config: FuiOverlayConfig): FuiOverlayConfig {\r\n return {\r\n hasBackdrop: false,\r\n backdropClass: 'fui-overlay-backdrop',\r\n backdropClickBehavior: 'close',\r\n panelClass: '',\r\n scrollStrategy: this.scrollStrategies.noop(),\r\n direction: 'ltr',\r\n disposeOnNavigation: true,\r\n ...config,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * # FuiOverlayPositionBuilder\r\n *\r\n * Builder class for creating position strategies. Provides a fluent API\r\n * for configuring overlay positioning.\r\n */\r\nexport class FuiOverlayPositionBuilder {\r\n constructor(private _renderer: Renderer2) {}\r\n\r\n /**\r\n * Creates a global position strategy\r\n */\r\n global(options: FuiGlobalPositionStrategyOptions = {}): FuiGlobalPositionStrategy {\r\n return new FuiGlobalPositionStrategy(this._renderer, options);\r\n }\r\n\r\n /**\r\n * Creates a connected position strategy\r\n */\r\n connectedTo(\r\n origin: ElementRef<HTMLElement> | HTMLElement,\r\n positions?: FuiConnectedPosition[],\r\n ): FuiConnectedPositionStrategy {\r\n const defaultPositions: FuiConnectedPosition[] = [\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n },\r\n ];\r\n\r\n const options: FuiConnectedPositionStrategyOptions = {\r\n origin,\r\n positions: positions ?? defaultPositions,\r\n };\r\n\r\n return new FuiConnectedPositionStrategy(this._renderer, options);\r\n }\r\n\r\n /**\r\n * Creates a flexible connected position strategy with common tooltip positions\r\n */\r\n flexibleConnectedTo(\r\n origin: ElementRef<HTMLElement> | HTMLElement,\r\n preferredPosition: 'top' | 'bottom' | 'left' | 'right' = 'top',\r\n ): FuiConnectedPositionStrategy {\r\n const positions = this._getFlexiblePositions(preferredPosition);\r\n\r\n const options: FuiConnectedPositionStrategyOptions = {\r\n origin,\r\n positions,\r\n withPush: true,\r\n withFlexibleDimensions: true,\r\n viewportMargin: 8,\r\n };\r\n\r\n return new FuiConnectedPositionStrategy(this._renderer, options);\r\n }\r\n\r\n private _getFlexiblePositions(preferredPosition: string): FuiConnectedPosition[] {\r\n const positions: FuiConnectedPosition[] = [];\r\n\r\n switch (preferredPosition) {\r\n case 'top':\r\n positions.push(\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8 },\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8 },\r\n );\r\n break;\r\n case 'bottom':\r\n positions.push(\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8 },\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8 },\r\n );\r\n break;\r\n case 'left':\r\n positions.push(\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8 },\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8 },\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\r\n );\r\n break;\r\n case 'right':\r\n positions.push(\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8 },\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8 },\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\r\n );\r\n break;\r\n }\r\n\r\n return positions;\r\n }\r\n}\r\n","import { DOCUMENT, inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\r\n\r\n/**\r\n * Portal attachment result containing the attached element and cleanup function\r\n */\r\nexport interface PortalAttachment {\r\n /** The element that was attached to the portal outlet */\r\n element: HTMLElement;\r\n /** Function to detach the element and clean up */\r\n detach: () => void;\r\n}\r\n\r\n/**\r\n * # Portal Service\r\n *\r\n * A service for dynamically moving DOM elements to different locations in the DOM tree,\r\n * particularly useful for moving elements to the document body to avoid clipping issues\r\n * with parent containers that have overflow: hidden.\r\n *\r\n * ## Features\r\n * - Move elements to document body or any other container\r\n * - Maintain element references and event listeners\r\n * - Proper cleanup when detaching\r\n * - Support for multiple portal outlets\r\n *\r\n * ## Usage\r\n *\r\n * ```typescript\r\n * constructor(private portalService: PortalService) {}\r\n *\r\n * openMenu() {\r\n * const menuElement = this.menuElementRef.nativeElement;\r\n * this.portalAttachment = this.portalService.attachToBody(menuElement);\r\n * }\r\n *\r\n * closeMenu() {\r\n * if (this.portalAttachment) {\r\n * this.portalAttachment.detach();\r\n * this.portalAttachment = null;\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class PortalService {\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _renderer: Renderer2;\r\n private readonly _rendererFactory = inject(RendererFactory2);\r\n\r\n constructor() {\r\n this._renderer = this._rendererFactory.createRenderer(null, null);\r\n }\r\n\r\n /**\r\n * Attaches an element to the document body\r\n * @param element The element to attach\r\n * @returns PortalAttachment with detach function\r\n */\r\n attachToBody(element: HTMLElement): PortalAttachment {\r\n return this.attachToContainer(element, this._document.body);\r\n }\r\n\r\n /**\r\n * Attaches an element to a specific container\r\n * @param element The element to attach\r\n * @param container The container to attach to\r\n * @returns PortalAttachment with detach function\r\n */\r\n attachToContainer(element: HTMLElement, container: HTMLElement): PortalAttachment {\r\n // Store the original parent and next sibling for restoration\r\n const originalParent = element.parentElement;\r\n const originalNextSibling = element.nextSibling;\r\n\r\n // Move the element to the container\r\n this._renderer.appendChild(container, element);\r\n\r\n // Return attachment object with detach function\r\n return {\r\n element,\r\n detach: (): void => {\r\n // Restore the element to its original position\r\n if (originalParent) {\r\n if (originalNextSibling) {\r\n this._renderer.insertBefore(originalParent, element, originalNextSibling);\r\n } else {\r\n this._renderer.appendChild(originalParent, element);\r\n }\r\n }\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Creates a portal outlet element and attaches it to the document body\r\n * @param className Optional CSS class for the outlet\r\n * @returns The created outlet element\r\n */\r\n createBodyOutlet(className?: string): HTMLElement {\r\n const outlet = this._renderer.createElement('div');\r\n\r\n if (className) {\r\n this._renderer.addClass(outlet, className);\r\n }\r\n\r\n // Add some default styles to ensure proper positioning\r\n this._renderer.setStyle(outlet, 'position', 'absolute');\r\n this._renderer.setStyle(outlet, 'top', '0');\r\n this._renderer.setStyle(outlet, 'left', '0');\r\n this._renderer.setStyle(outlet, 'pointer-events', 'none');\r\n this._renderer.setStyle(outlet, 'z-index', '1000');\r\n\r\n this._renderer.appendChild(this._document.body, outlet);\r\n\r\n return outlet;\r\n }\r\n\r\n /**\r\n * Removes a portal outlet from the document\r\n * @param outlet The outlet element to remove\r\n */\r\n removeOutlet(outlet: HTMLElement): void {\r\n if (outlet.parentElement) {\r\n this._renderer.removeChild(outlet.parentElement, outlet);\r\n }\r\n }\r\n\r\n /**\r\n * Checks if an element is currently attached to a portal\r\n * @param element The element to check\r\n * @returns True if the element is attached to the body or not in its original position\r\n */\r\n isAttachedToPortal(element: HTMLElement): boolean {\r\n // Simple check: if the element's parent is the body, it's likely in a portal\r\n // This is a heuristic and might need refinement based on specific use cases\r\n return element.parentElement === this._document.body;\r\n }\r\n}\r\n","// Core overlay exports\r\nexport * from './overlay.types';\r\nexport * from './overlay.service';\r\nexport * from './overlay-ref';\r\nexport * from './overlay-container.component';\r\n\r\n// Position strategies\r\nexport * from './position/global-position-strategy';\r\nexport * from './position/connected-position-strategy';\r\n\r\n// Scroll strategies\r\nexport * from './scroll/scroll-strategies';\r\n\r\n// Portal service\r\nexport * from './portal.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DOCUMENT"],"mappings":";;;;;AAGA;;AAEG;MACU,qBAAqB,GAAG,IAAI,cAAc,CAAc,uBAAuB;AAE5F;;AAEG;MACU,2BAA2B,GAAG,IAAI,cAAc,CAA0B,6BAA6B;;ACPpH;;;;;;;;;;;;;AAaG;MACU,iBAAiB,CAAA;AACX,IAAA,GAAG;AACH,IAAA,eAAe;AACf,IAAA,SAAS;AACT,IAAA,OAAO;IAChB,gBAAgB,GAAuB,IAAI;IAC3C,gBAAgB,GAA4D,IAAI;AAChF,IAAA,OAAO;IACP,YAAY,GAAG,KAAK;;AAGX,IAAA,cAAc,GAAG,IAAI,OAAO,EAAc;AAC1C,IAAA,cAAc,GAAG,IAAI,OAAO,EAAiB;AAC7C,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAClC,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;;AAG3C,IAAA,sBAAsB;AACtB,IAAA,gBAAgB;IAExB,WAAA,CAAY,cAA2B,EAAE,MAAwB,EAAE,QAAmB,EAAE,EAAW,EAAE,MAAM,GAAG,IAAI,EAAA;QAChH,IAAI,CAAC,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,cAAc;AACrC,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,MAAM,EAAE;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;;;;;QAMrB,IAAI,CAAC,oBAAoB,EAAE;;;;QAK3B,qBAAqB,CAAC,MAAK;YACzB,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,oBAAoB,EAAE;AAC7B,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG;IACjB;;AAGA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe;IAC7B;;AAGA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB;IAC9B;;AAGA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IAC3C;;AAGA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IAC3C;;AAGA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;IACzC;;AAGA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;IACzC;;AAGA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA;;AAEG;IACH,MAAM,CACJ,OAA6D,EAC7D,QAAmB,EAAA;AAEnB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;QACzD;;AAGA,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,GAAG,CAAC;QAE7D,IAAI,eAAe,GAAsD,IAAI;AAE7E,QAAA,IAAI,OAAO,YAAY,YAAY,EAAE;;YAEnC,eAAe,GAAG,OAAO;YACzB,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;QAClE;AAAO,aAAA,IAAI,OAAO,YAAY,WAAW,EAAE;;YAEzC,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC;YACxD,eAAe,GAAG,OAAO;YACzB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACjC,gBAAA,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC;AACxC,YAAA,CAAC,CAAC;QACJ;AAAO,aAAA,IAAI,OAAO,YAAY,WAAW,EAAE;;AAEzC,YAAA,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC;QAC3C;AAAO,aAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;;AAEtC,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,EAAE,OAAO,CAAC;QAC1E;AAEA,QAAA,IAAI,CAAC,gBAAgB,GAAG,eAAe;AACvC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;;AAIxB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;YACjC,qBAAqB,CAAC,MAAK;gBACzB,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,YAAY,EAAE;AACtD,oBAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;;AAErC,oBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,GAAG,CAAC;gBAC/D;AACF,YAAA,CAAC,CAAC;QACJ;aAAO;;AAEL,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,GAAG,CAAC;QAC/D;;AAGA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE;QACtC;AAEA,QAAA,OAAO,eAAkC;IAC3C;AAEA;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB;QACF;;AAGA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE;QACvC;;AAGA,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,gBAAgB,YAAY,YAAY,EAAE;AACjD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;YACjC;AAAO,iBAAA,IAAI,IAAI,CAAC,gBAAgB,YAAY,eAAe,EAAE;AAC3D,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;YACjC;AACA,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC9B;;AAGA,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;YACtC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;QACnE;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAEA;;AAEG;IACH,OAAO,GAAA;;QAEL,IAAI,CAAC,MAAM,EAAE;;AAGb,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE;QACzC;;AAGA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE;QACtC;;QAGA,IAAI,CAAC,qBAAqB,EAAE;;AAG5B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE;YACxC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACxE;;AAGA,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;YACtC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC;QACtE;;AAGA,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC9B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IAC9B;AAEA;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;QACvC;IACF;AAEA;;AAEG;AACH,IAAA,UAAU,CACR,MAAyG,EAAA;QAEzG,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACrC;QAEA,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,OAA0B,EAAA;AACtC,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC;AAC/D,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;YAC/B,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC;YAC1D;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,OAA0B,EAAA;AACzC,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC;AAC/D,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;YAC/B,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC;YAC7D;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;IAC5B;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,MAAiC,EAAA;QAC5C,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;;AAGnC,QAAA,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW,EAAE;AACpF,YAAA,IAAI,MAAM,CAAC,WAAW,EAAE;gBACtB,IAAI,CAAC,eAAe,EAAE;YACxB;iBAAO;gBACL,IAAI,CAAC,eAAe,EAAE;YACxB;QACF;;AAGA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB;AACtC,QAAA,IAAI,MAAM,CAAC,aAAa,IAAI,QAAQ,EAAE;;AAEpC,YAAA,IAAI,SAAS,CAAC,aAAa,EAAE;gBAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC,aAAa,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC;AAC/G,gBAAA,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;oBAC/B,IAAI,SAAS,EAAE;wBACb,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC;oBACjD;AACF,gBAAA,CAAC,CAAC;YACJ;;YAGA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;AACtG,YAAA,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;gBAC/B,IAAI,SAAS,EAAE;oBACb,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAC9C;AACF,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,IAAI,MAAM,CAAC,UAAU,EAAE;;AAErB,YAAA,IAAI,SAAS,CAAC,UAAU,EAAE;AACxB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC;YAC7C;;AAGA,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC;QACvC;;QAGA,IAAI,CAAC,gBAAgB,EAAE;;AAGvB,QAAA,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS,CAAC,gBAAgB,EAAE;AACrF,YAAA,IAAI,SAAS,CAAC,gBAAgB,EAAE;AAC9B,gBAAA,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE;YACtC;YACA,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC;QACjE;;AAGA,QAAA,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,CAAC,cAAc,EAAE;AAC/E,YAAA,IAAI,SAAS,CAAC,cAAc,EAAE;AAC5B,gBAAA,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE;YACnC;AACA,YAAA,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC;QACpC;IACF;IAEQ,oBAAoB,GAAA;;QAE1B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,kBAAkB,CAAC;;AAGjE,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC7C;;AAGA,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;QAG9E,IAAI,CAAC,gBAAgB,EAAE;;AAGvB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QAClF;;AAGA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;YACjC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC;QACvE;IACF;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YAC5B,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB;QACF;QACA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;;QAGtE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;;AAGnF,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB;QACxC,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,UAAU,EAAE;YAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;AACtD,kBAAE,IAAI,CAAC,OAAO,CAAC;kBACb,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;AAChC,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;gBAC5B,IAAI,SAAS,EAAE;oBACb,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;gBAChD;AACF,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa;QACjD,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC;QAClF;;AAGA,QAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC,KAAiB,KAAU;YACxD,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,gBAAgB,EAAE;AAC1C,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;YACjC;AACF,QAAA,CAAC;AAED,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC;QAC9E;IACF;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;gBAC/B,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC;AAC/E,gBAAA,IAAI,CAAC,sBAAsB,GAAG,SAAS;YACzC;AAEA,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE;gBACvC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACxE;AAEA,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC9B;IACF;IAEQ,oBAAoB,GAAA;;AAE1B,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,KAAoB,KAAU;AACrD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,QAAA,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC;IACzE;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC1E,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;QACnC;QAEA,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACxD,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC;AAC/E,YAAA,IAAI,CAAC,sBAAsB,GAAG,SAAS;QACzC;IACF;IAEQ,gBAAgB,GAAA;AACtB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;AAE3B,QAAA,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjG;AAEA,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;YAC/B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnG;AAEA,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;YACjC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxG;AAEA,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;YAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1G;AAEA,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;YACjC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxG;AAEA,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;YAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1G;IACF;AAEQ,IAAA,oBAAoB,CAAC,KAAsB,EAAA;AACjD,QAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,GAAG,KAAK;IACzD;IAEQ,WAAW,GAAA;AACjB,QAAA,OAAO,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IACjE;AACD;;AC9eD;;;;;;;;;;;;;;;;AAgBG;MAwBU,4BAA4B,CAAA;AACtB,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,IAAA,WAAW,GAAG,MAAM,EAAC,UAAuB,EAAC;IAE9D,QAAQ,GAAA;;AAEN,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACxE,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QACjE;IACF;IAEA,WAAW,GAAA;;AAET,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;AAC9C,QAAA,IAAI,OAAO,CAAC,aAAa,EAAE;AACzB,YAAA,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC;QAC5C;IACF;AAEA;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa;IACvC;uGAxBW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,oNApB7B,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8GAAA,CAAA,EAAA,CAAA;;2FAoBD,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAvBxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,QAAA,EACN,EAAE,EAAA,IAAA,EACN;AACJ,wBAAA,KAAK,EAAE,uBAAuB;AAC9B,wBAAA,kBAAkB,EAAE,UAAU;AAC9B,wBAAA,oBAAoB,EAAE,QAAQ;AAC/B,qBAAA,EAAA,MAAA,EAAA,CAAA,8GAAA,CAAA,EAAA;;;ACpBH;;;;;;;;;;;;;AAaG;MACU,yBAAyB,CAAA;AAM1B,IAAA,SAAA;AACA,IAAA,QAAA;AANF,IAAA,eAAe;AACN,IAAA,gBAAgB,GAAG,IAAI,OAAO,EAAqC;IAC5E,WAAW,GAAG,KAAK;IAE3B,WAAA,CACU,SAAoB,EACpB,QAAA,GAA6C,EAAE,EAAA;QAD/C,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACf;;AAGH,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;IAC7C;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,OAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO;IAChC;AAEA;;AAEG;IACH,KAAK,GAAA;QACH,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,EAAE;YAC7C;QACF;;AAGA,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC;;QAGlE,IAAI,CAAC,cAAc,EAAE;;QAGrB,IAAI,CAAC,eAAe,EAAE;;QAGtB,IAAI,CAAC,qBAAqB,EAAE;IAC9B;AAEA;;AAEG;IACH,GAAG,CAAC,QAAyB,GAAG,EAAA;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;AAChC,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,MAAM,CAAC,QAAyB,GAAG,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,SAAS;AAC7B,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,IAAI,CAAC,QAAyB,GAAG,EAAA;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,SAAS;AAC/B,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,KAAK,CAAC,QAAyB,GAAG,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS;AAC9B,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,IAAI;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,SAAS;AAC/B,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,IAAI;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,SAAS;AAC7B,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;AAChC,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,KAAK,CAAC,KAAsB,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK;AAC3B,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,MAAM,CAAC,KAAsB,EAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK;AAC5B,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAsB,EAAA;AAC7B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,KAAK;AAC9B,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,KAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK;AAC/B,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAsB,EAAA;AAC7B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,KAAK;AAC9B,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,KAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK;AAC/B,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB;QACF;AAEA,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;IAClC;AAEA;;AAEG;IACH,MAAM,GAAA;;IAEN;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;;AAG7B,QAAA,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5F,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;QAC5D;AAAO,aAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;YACvC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC;QACzD;;AAGA,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9F,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;QAC3D;AAAO,aAAA,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;YACtC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAChG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;QAC1D;IACF;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;AAE7B,QAAA,IAAI,OAAO,CAAC,kBAAkB,EAAE;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC;AAC5D,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,kBAAkB,CAAC;YAC9E,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;QAC3D;AAEA,QAAA,IAAI,OAAO,CAAC,gBAAgB,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC;YAE3D,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS;AAC9D,YAAA,IAAI,iBAAiB,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE;AAC7C,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,uBAAuB,CAAC;YACrF;iBAAO;AACL,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,kBAAkB,CAAC;YAChF;YAEA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;QAC5D;IACF;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;AAE7B,QAAA,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;YAC/B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAClG;AAEA,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;YAChC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpG;AAEA,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE;YAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzG;AAEA,QAAA,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE;YACnC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3G;AAEA,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE;YAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzG;AAEA,QAAA,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE;YACnC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3G;IACF;AAEQ,IAAA,oBAAoB,CAAC,KAAsB,EAAA;AACjD,QAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,GAAG,KAAK;IACzD;AACD;;AC1QD;;;;;;;;;;;;;;AAcG;MACU,4BAA4B,CAAA;AAsB7B,IAAA,SAAA;AArBF,IAAA,eAAe;AACf,IAAA,cAAc;AACd,IAAA,UAAU;AACV,IAAA,gBAAgB;IAChB,WAAW,GAAG,KAAK;AACnB,IAAA,mBAAmB;AACnB,IAAA,mBAAmB;AAEV,IAAA,gBAAgB,GAAG,IAAI,OAAO,EAAqC;;IAG5E,SAAS,GAAG,IAAI;IAChB,kBAAkB,GAAG,KAAK;IAC1B,mBAAmB,GAAG,KAAK;IAC3B,eAAe,GAAG,CAAC;IACnB,eAAe,GAAG,CAAC;AACnB,IAAA,uBAAuB;IACvB,eAAe,GAAG,CAAC;IACnB,uBAAuB,GAAG,KAAK;IAEvC,WAAA,CACU,SAAoB,EAC5B,OAA4C,EAAA;QADpC,IAAA,CAAA,SAAS,GAAT,SAAS;QAGjB,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,YAAY,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM;QAC1G,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;;AAGxC,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE;AAClC,YAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ;QACnC;AACA,QAAA,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,EAAE;AAC3C,YAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,iBAAiB;QACrD;AACA,QAAA,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,EAAE;AAC5C,YAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,kBAAkB;QACvD;AACA,QAAA,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,EAAE;AAC5C,YAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,kBAAkB;QACnD;AACA,QAAA,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,EAAE;AAC5C,YAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,kBAAkB;QACnD;AACA,QAAA,IAAI,OAAO,CAAC,qBAAqB,EAAE;AACjC,YAAA,IAAI,CAAC,uBAAuB;gBAC1B,OAAO,CAAC,qBAAqB,YAAY;AACvC,sBAAE,OAAO,CAAC,qBAAqB,CAAC;AAChC,sBAAE,OAAO,CAAC,qBAAqB;QACrC;AACA,QAAA,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE;AACxC,YAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc;QAC/C;AACA,QAAA,IAAI,OAAO,CAAC,sBAAsB,KAAK,SAAS,EAAE;AAChD,YAAA,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,sBAAsB;QAC/D;IACF;;AAGA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;IAC7C;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,OAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO;IAChC;AAEA;;AAEG;IACH,KAAK,GAAA;QACH,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,EAAE;YAC7C;QACF;;AAGA,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC;;;AAIlE,QAAA,KAAK,IAAI,CAAC,eAAe,CAAC,YAAY;;AAGtC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAE5C,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;AACjC,YAAA,IAAI,CAAC,gBAAgB,GAAG,YAAY;;YAGpC,IAAI,CAAC,oBAAoB,EAAE;;AAG3B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACzB,gBAAA,cAAc,EAAE,YAAY;AAC5B,gBAAA,wBAAwB,EAAE,IAAI,CAAC,4BAA4B,EAAE;AAC9D,aAAA,CAAC;QACJ;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,SAAiC,EAAA;AAC7C,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC;AAChC,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,QAAQ,CAAC,OAAO,GAAG,IAAI,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO;AACxB,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,iBAAiB,CAAC,OAAO,GAAG,IAAI,EAAA;AAC9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO;AACjC,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,kBAAkB,CAAC,OAAO,GAAG,IAAI,EAAA;AAC/B,QAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO;AAClC,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAAC,MAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM;AAC7B,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAAC,MAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM;AAC7B,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,OAA8C,EAAA;AAClE,QAAA,IAAI,CAAC,uBAAuB,GAAG,OAAO,YAAY,UAAU,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO;AAC9F,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAAC,MAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM;AAC7B,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,sBAAsB,CAAC,OAAO,GAAG,IAAI,EAAA;AACnC,QAAA,IAAI,CAAC,uBAAuB,GAAG,OAAO;AACtC,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB;QACF;AAEA,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,qBAAqB,EAAE;AAC5B,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;IAClC;AAEA;;AAEG;IACH,MAAM,GAAA;QACJ,IAAI,CAAC,qBAAqB,EAAE;IAC9B;IAEQ,gBAAgB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACjD,YAAA,OAAO,IAAI;QACb;;QAGA,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACrD,OAAO,IAAI,CAAC,gBAAgB;QAC9B;;;AAIA,QAAA,KAAK,IAAI,CAAC,eAAe,CAAC,YAAY;AACtC,QAAA,KAAK,IAAI,CAAC,eAAe,CAAC,WAAW;QAErC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;AAChE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAE5C,IAAI,YAAY,GAAgC,IAAI;AACpD,QAAA,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC;YACvF,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,cAAc,EAAE,YAAY,CAAC;AAExE,YAAA,IAAI,KAAK,GAAG,SAAS,EAAE;gBACrB,SAAS,GAAG,KAAK;gBACjB,YAAY,GAAG,QAAQ;YACzB;;AAGA,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf;YACF;QACF;AAEA,QAAA,OAAO,YAAY;IACrB;AAEQ,IAAA,cAAc,CAAC,QAA8B,EAAA;QACnD,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACjD;QACF;;AAGA,QAAA,KAAK,IAAI,CAAC,eAAe,CAAC,YAAY;AACtC,QAAA,KAAK,IAAI,CAAC,eAAe,CAAC,WAAW;QAErC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;AAChE,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC;AAEvF,QAAA,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,cAAc;;AAG7B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;AAC/G,YAAA,CAAC,GAAG,cAAc,CAAC,CAAC;AACpB,YAAA,CAAC,GAAG,cAAc,CAAC,CAAC;QACtB;;AAGA,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,CAAC;AAC/D,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,CAAC;;AAG9D,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QACpC;;AAGA,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAChC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;QACzG;IACF;AAEQ,IAAA,wBAAwB,CAC9B,QAA8B,EAC9B,UAAmB,EACnB,WAAoB,EAAA;AAEpB,QAAA,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe;AAC9D,QAAA,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe;AAE9D,QAAA,IAAI,CAAS;AACb,QAAA,IAAI,CAAS;;AAGb,QAAA,QAAQ,QAAQ,CAAC,OAAO;AACtB,YAAA,KAAK,OAAO;AACV,gBAAA,CAAC,GAAG,UAAU,CAAC,IAAI;gBACnB;AACF,YAAA,KAAK,QAAQ;gBACX,CAAC,GAAG,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC;gBAC1C;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,CAAC,GAAG,UAAU,CAAC,KAAK;gBACpB;;AAGJ,QAAA,QAAQ,QAAQ,CAAC,QAAQ;AACvB,YAAA,KAAK,OAAO;;gBAEV;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,CAAC,IAAI,WAAW,CAAC,KAAK,GAAG,CAAC;gBAC1B;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,CAAC,IAAI,WAAW,CAAC,KAAK;gBACtB;;;AAIJ,QAAA,QAAQ,QAAQ,CAAC,OAAO;AACtB,YAAA,KAAK,KAAK;AACR,gBAAA,CAAC,GAAG,UAAU,CAAC,GAAG;gBAClB;AACF,YAAA,KAAK,QAAQ;gBACX,CAAC,GAAG,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC1C;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,CAAC,GAAG,UAAU,CAAC,MAAM;gBACrB;;AAGJ,QAAA,QAAQ,QAAQ,CAAC,QAAQ;AACvB,YAAA,KAAK,KAAK;;gBAER;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;gBAC3B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,CAAC,IAAI,WAAW,CAAC,MAAM;gBACvB;;QAGJ,OAAO;YACL,CAAC,EAAE,CAAC,GAAG,OAAO;YACd,CAAC,EAAE,CAAC,GAAG,OAAO;YACd,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,MAAM,EAAE,WAAW,CAAC,MAAM;SAC3B;IACH;IAEQ,uBAAuB,CAC7B,IAA6D,EAC7D,YAA+C,EAAA;AAE/C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe;AACnC,QAAA,MAAM,WAAW,GACf,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAClG,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAEtG,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AAC1C,QAAA,OAAO,SAAS,GAAG,CAAC,GAAG,WAAW,GAAG,SAAS,GAAG,CAAC;IACpD;AAEQ,IAAA,mBAAmB,CAAC,IAA6D,EAAA;AACvF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC5C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe;AAEnC,QAAA,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI;;AAGnB,QAAA,IAAI,CAAC,GAAG,MAAM,EAAE;YACd,CAAC,GAAG,MAAM;QACZ;AAAO,aAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,GAAG,MAAM,EAAE;YACvD,CAAC,GAAG,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM;QAC9C;;AAGA,QAAA,IAAI,CAAC,GAAG,MAAM,EAAE;YACd,CAAC,GAAG,MAAM;QACZ;AAAO,aAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,MAAM,EAAE;YACzD,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM;QAChD;AAEA,QAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE;IACjB;AAEQ,IAAA,mBAAmB,CAAC,QAA8B,EAAA;QACxD,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YAC1D;QACF;QAEA,IAAI,eAAe,GAAG,EAAE;;AAGxB,QAAA,QAAQ,QAAQ,CAAC,QAAQ;AACvB,YAAA,KAAK,OAAO;gBACV,eAAe,IAAI,MAAM;gBACzB;AACF,YAAA,KAAK,QAAQ;gBACX,eAAe,IAAI,QAAQ;gBAC3B;AACF,YAAA,KAAK,KAAK;gBACR,eAAe,IAAI,OAAO;gBAC1B;;QAGJ,eAAe,IAAI,GAAG;;AAGtB,QAAA,QAAQ,QAAQ,CAAC,QAAQ;AACvB,YAAA,KAAK,KAAK;gBACR,eAAe,IAAI,KAAK;gBACxB;AACF,YAAA,KAAK,QAAQ;gBACX,eAAe,IAAI,QAAQ;gBAC3B;AACF,YAAA,KAAK,QAAQ;gBACX,eAAe,IAAI,QAAQ;gBAC3B;;AAGJ,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,eAAe,CAAC;IAC5F;IAEQ,wBAAwB,CAC9B,QAA8B,EAC9B,IAA6D,EAAA;AAE7D,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC5C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe;;QAGnC,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM;QAC3D,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM;;AAG7D,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,cAAc,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,CAAA,EAAG,cAAc,CAAA,EAAA,CAAI,CAAC;QACnF;;AAGA,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE;AACjC,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,EAAE,CAAA,EAAG,eAAe,CAAA,EAAA,CAAI,CAAC;QACrF;IACF;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB;QACF;;QAGA,IAAI,CAAC,qBAAqB,EAAE;;AAG5B,QAAA,IAAI,CAAC,mBAAmB,GAAG,MAAW;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACrB,IAAI,CAAC,KAAK,EAAE;YACd;AACF,QAAA,CAAC;QACD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC;;AAG3D,QAAA,IAAI,CAAC,mBAAmB,GAAG,MAAW;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACrB,IAAI,CAAC,KAAK,EAAE;YACd;AACF,QAAA,CAAC;QACD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC;IACnE;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC;AAC9D,YAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;QACtC;AAEA,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC;AACpE,YAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;QACtC;IACF;IAEQ,gBAAgB,GAAA;QACtB,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,UAAU;YACxB,MAAM,EAAE,MAAM,CAAC,WAAW;SAC3B;IACH;IAEQ,4BAA4B,GAAA;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAC5C,OAAO;AACL,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,cAAc,EAAE;gBACd,GAAG,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS;gBAC7D,IAAI,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,UAAU;AAChE,aAAA;SACF;IACH;AACD;;ACtgBD;;;;;;AAMG;MACU,qBAAqB,CAAA;IAChC,MAAM,GAAA;;IAEN;IAEA,OAAO,GAAA;;IAEP;AAEA,IAAA,MAAM,CAAC,WAA0B,EAAA;;IAEjC;IAEA,MAAM,GAAA;;IAEN;AACD;AAED;;;;;;AAMG;MACU,sBAAsB,CAAA;AAKb,IAAA,UAAA;AAJZ,IAAA,WAAW;AACX,IAAA,eAAe;IACf,UAAU,GAAG,KAAK;AAE1B,IAAA,WAAA,CAAoB,aAAa,CAAC,EAAA;QAAd,IAAA,CAAA,UAAU,GAAV,UAAU;IAAO;IAErC,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACxC;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,MAAW;AAChC,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;YAC5B;AACF,QAAA,CAAC;QAED,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC;IAC/D;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACvB,IAAI,CAAC,qBAAqB,EAAE;IAC9B;AAEA,IAAA,MAAM,CAAC,UAAyB,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;IAC/B;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;IAC9B;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC;AAChE,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS;QAClC;IACF;AACD;AAED;;;;;;AAMG;MACU,2BAA2B,CAAA;AAM5B,IAAA,eAAA;AACA,IAAA,UAAA;AANF,IAAA,WAAW;AACX,IAAA,eAAe;IACf,UAAU,GAAG,KAAK;AAE1B,IAAA,WAAA,CACU,eAAA,GAAkB,EAAE,EACpB,UAAA,GAAa,KAAK,EAAA;QADlB,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,UAAU,GAAV,UAAU;IACjB;IAEH,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACxC;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,IAAI,SAAS,GAAkB,IAAI;AAEnC,QAAA,IAAI,CAAC,eAAe,GAAG,MAAW;YAChC,IAAI,SAAS,EAAE;gBACb,YAAY,CAAC,SAAS,CAAC;YACzB;AAEA,YAAA,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,MAAW;AACvC,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE;oBACpB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;AAClD,wBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;oBAC5B;yBAAO;AACL,wBAAA,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;oBACnC;gBACF;AACF,YAAA,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;AAC1B,QAAA,CAAC;QAED,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC;IAC/D;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACvB,IAAI,CAAC,qBAAqB,EAAE;IAC9B;AAEA,IAAA,MAAM,CAAC,UAAyB,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;IAC/B;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;IAC9B;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC;AAChE,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS;QAClC;IACF;IAEQ,oBAAoB,GAAA;;;;AAI1B,QAAA,OAAO,KAAK;IACd;AACD;AAED;;;;;;AAMG;MACU,sBAAsB,CAAA;AAKb,IAAA,SAAA;IAJZ,mBAAmB,GAA2B,EAAE;IAChD,mBAAmB,GAA2B,EAAE;IAChD,UAAU,GAAG,KAAK;AAE1B,IAAA,WAAA,CAAoB,SAAoB,EAAA;QAApB,IAAA,CAAA,SAAS,GAAT,SAAS;IAAc;IAE3C,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAEtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,QAAQ;AACtC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,eAAe;AAChC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI;AAErB,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YAClB;QACF;;QAGA,IAAI,CAAC,mBAAmB,GAAG;AACzB,YAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE;SACpC;QAED,IAAI,CAAC,mBAAmB,GAAG;AACzB,YAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE;SACpC;;AAGD,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;IAChC;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AAEvB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,QAAQ;AACtC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,eAAe;AAChC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI;AAErB,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YAClB;QACF;;QAGA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;;AAG1D,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;IAC/B;AAEA,IAAA,MAAM,CAAC,WAA0B,EAAA;;IAEjC;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,OAAO,EAAE;IAChB;AAED;AAED;;AAEG;AACI,MAAM,qBAAqB,GAAG;AACnC;;AAEG;AACH,IAAA,IAAI,EAAE,MAA6B,IAAI,qBAAqB,EAAE;AAE9D;;AAEG;AACH,IAAA,KAAK,EAAE,CAAC,SAAS,GAAG,CAAC,KAA6B,IAAI,sBAAsB,CAAC,SAAS,CAAC;AAEvF;;AAEG;AACH,IAAA,UAAU,EAAE,CAAC,cAAc,GAAG,EAAE,EAAE,SAAS,GAAG,KAAK,KACjD,IAAI,2BAA2B,CAAC,cAAc,EAAE,SAAS,CAAC;AAE5D;;;AAGG;IACH,KAAK,EAAE,CAAC,GAAc,KAA6B,IAAI,sBAAsB,CAAC,GAAG,CAAC;;;AC5OpF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDG;AACH;AACA,MAAM,oBAAoB,GAAG,IAAI;AACjC;AACA,MAAM,yBAAyB,GAAG,EAAE;MAKvB,iBAAiB,CAAA;AACX,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAClD,IAAA,SAAS;AAElB,IAAA,iBAAiB;IACjB,aAAa,GAAG,CAAC;AACjB,IAAA,eAAe,GAAG,IAAI,GAAG,EAAiB;IAC1C,cAAc,GAAG,oBAAoB;AAE7C,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;IACnE;AAEA;;AAEG;IACH,MAAM,CAAC,SAA2B,EAAE,EAAA;AAClC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,EAAE;;AAGnD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;QAEpC,MAAM,UAAU,GAAG,IAAI,iBAAiB,CACtC,cAAc,EACd,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EACjC,IAAI,CAAC,SAAS,EACd,CAAA,YAAA,EAAe,IAAI,CAAC,aAAa,EAAE,CAAA,CAAE,EACrC,MAAM,CACP;;AAGD,QAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC;;AAGvC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;;AAGpC,QAAA,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AACpC,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC;YACvC,IAAI,CAAC,sBAAsB,EAAE;AAC/B,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,UAAU;IACnB;AAEA;;AAEG;IACK,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,cAAc,IAAI,yBAAyB;QAChD,OAAO,IAAI,CAAC,cAAc;IAC5B;AAEA;;;AAGG;IACK,sBAAsB,GAAA;QAC5B,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,cAAc,GAAG,oBAAoB;QAC5C;IACF;AAEA;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC;IACtD;AAEA;;AAEG;AACH,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,qBAAqB;IAC9B;AAEA;;AAEG;IACH,iBAAiB,GAAA;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;IACzC;AAEA;;AAEG;IACH,UAAU,GAAA;QACR,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AACjD,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YAC3B,OAAO,CAAC,OAAO,EAAE;AACnB,QAAA,CAAC,CAAC;IACJ;IAEQ,qBAAqB,GAAA;QAC3B,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;QAC1D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,kBAAkB,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,gBAAgB,EAAE,MAAM,CAAC;AACjE,QAAA,OAAO,cAAc;IACvB;AAEQ,IAAA,kBAAkB,CAAC,cAA2B,EAAA;AACpD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,EAAE;QAC7C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,cAAc,CAAC;IACvD;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,IAAI,CAAC,iBAAiB,GAAG,eAAe,CAAC,4BAA4B,EAAE;gBACrE,mBAAmB,EAAE,IAAI,CAAC,oBAAoB;AAC/C,aAAA,CAAC;;AAGF,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,EAAE;QAC5C;QAEA,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,mBAAmB,EAAE;IAC9D;AAEQ,IAAA,oBAAoB,CAAC,MAAwB,EAAA;QACnD,OAAO;AACL,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,aAAa,EAAE,sBAAsB;AACrC,YAAA,qBAAqB,EAAE,OAAO;AAC9B,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAC5C,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,GAAG,MAAM;SACV;IACH;uGApIW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA;;2FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;AAwID;;;;;AAKG;MACU,yBAAyB,CAAA;AAChB,IAAA,SAAA;AAApB,IAAA,WAAA,CAAoB,SAAoB,EAAA;QAApB,IAAA,CAAA,SAAS,GAAT,SAAS;IAAc;AAE3C;;AAEG;IACH,MAAM,CAAC,UAA4C,EAAE,EAAA;QACnD,OAAO,IAAI,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;IAC/D;AAEA;;AAEG;IACH,WAAW,CACT,MAA6C,EAC7C,SAAkC,EAAA;AAElC,QAAA,MAAM,gBAAgB,GAA2B;AAC/C,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,KAAK;AAChB,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA;SACF;AAED,QAAA,MAAM,OAAO,GAAwC;YACnD,MAAM;YACN,SAAS,EAAE,SAAS,IAAI,gBAAgB;SACzC;QAED,OAAO,IAAI,4BAA4B,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;IAClE;AAEA;;AAEG;AACH,IAAA,mBAAmB,CACjB,MAA6C,EAC7C,iBAAA,GAAyD,KAAK,EAAA;QAE9D,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC;AAE/D,QAAA,MAAM,OAAO,GAAwC;YACnD,MAAM;YACN,SAAS;AACT,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,sBAAsB,EAAE,IAAI;AAC5B,YAAA,cAAc,EAAE,CAAC;SAClB;QAED,OAAO,IAAI,4BAA4B,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;IAClE;AAEQ,IAAA,qBAAqB,CAAC,iBAAyB,EAAA;QACrD,MAAM,SAAS,GAA2B,EAAE;QAE5C,QAAQ,iBAAiB;AACvB,YAAA,KAAK,KAAK;gBACR,SAAS,CAAC,IAAI,CACZ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAC1F,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EACzF,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,EACxF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAC1F;gBACD;AACF,YAAA,KAAK,QAAQ;gBACX,SAAS,CAAC,IAAI,CACZ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EACzF,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAC1F,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,EACxF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAC1F;gBACD;AACF,YAAA,KAAK,MAAM;gBACT,SAAS,CAAC,IAAI,CACZ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EACzF,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,EACxF,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAC1F,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAC1F;gBACD;AACF,YAAA,KAAK,OAAO;gBACV,SAAS,CAAC,IAAI,CACZ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,EACxF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EACzF,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAC1F,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAC1F;gBACD;;AAGJ,QAAA,OAAO,SAAS;IAClB;AACD;;ACtTD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;MAIU,aAAa,CAAA;AACP,IAAA,SAAS,GAAG,MAAM,CAACA,UAAQ,CAAC;AAC5B,IAAA,SAAS;AACT,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5D,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;IACnE;AAEA;;;;AAIG;AACH,IAAA,YAAY,CAAC,OAAoB,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7D;AAEA;;;;;AAKG;IACH,iBAAiB,CAAC,OAAoB,EAAE,SAAsB,EAAA;;AAE5D,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,aAAa;AAC5C,QAAA,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW;;QAG/C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC;;QAG9C,OAAO;YACL,OAAO;YACP,MAAM,EAAE,MAAW;;gBAEjB,IAAI,cAAc,EAAE;oBAClB,IAAI,mBAAmB,EAAE;wBACvB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,EAAE,mBAAmB,CAAC;oBAC3E;yBAAO;wBACL,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC;oBACrD;gBACF;YACF,CAAC;SACF;IACH;AAEA;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,SAAkB,EAAA;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;QAElD,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;QAC5C;;QAGA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC;QACvD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;QAC5C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;AAElD,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;AAEvD,QAAA,OAAO,MAAM;IACf;AAEA;;;AAGG;AACH,IAAA,YAAY,CAAC,MAAmB,EAAA;AAC9B,QAAA,IAAI,MAAM,CAAC,aAAa,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC;QAC1D;IACF;AAEA;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,OAAoB,EAAA;;;QAGrC,OAAO,OAAO,CAAC,aAAa,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI;IACtD;uGA3FW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;AC7CD;;ACAA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"raintonic-formaui-cdk-overlay.mjs","sources":["../../../lib/cdk/overlay/overlay.types.ts","../../../lib/cdk/overlay/overlay-ref.ts","../../../lib/cdk/overlay/overlay-container.component.ts","../../../lib/cdk/overlay/position/global-position-strategy.ts","../../../lib/cdk/overlay/position/connected-position-strategy.ts","../../../lib/cdk/overlay/scroll/scroll-strategies.ts","../../../lib/cdk/overlay/overlay.service.ts","../../../lib/cdk/overlay/portal.service.ts","../../../lib/cdk/overlay/index.ts","../../../lib/cdk/overlay/raintonic-formaui-cdk-overlay.ts"],"sourcesContent":["import { ComponentRef, ElementRef, InjectionToken, Injector, TemplateRef } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * Injection token for the overlay container element\r\n */\r\nexport const FUI_OVERLAY_CONTAINER = new InjectionToken<HTMLElement>('FUI_OVERLAY_CONTAINER');\r\n\r\n/**\r\n * Injection token for the overlay scroll strategy\r\n */\r\nexport const FUI_OVERLAY_SCROLL_STRATEGY = new InjectionToken<() => FuiScrollStrategy>('FUI_OVERLAY_SCROLL_STRATEGY');\r\n\r\n/**\r\n * Available overlay positions for connected positioning\r\n */\r\nexport interface FuiConnectedPosition {\r\n /** Horizontal alignment of the overlay relative to the origin */\r\n originX: 'start' | 'center' | 'end';\r\n /** Vertical alignment of the overlay relative to the origin */\r\n originY: 'top' | 'center' | 'bottom';\r\n /** Horizontal alignment of the overlay panel */\r\n overlayX: 'start' | 'center' | 'end';\r\n /** Vertical alignment of the overlay panel */\r\n overlayY: 'top' | 'center' | 'bottom';\r\n /** Offset in pixels along the x-axis */\r\n offsetX?: number;\r\n /** Offset in pixels along the y-axis */\r\n offsetY?: number;\r\n /** Weight for this position when multiple positions are provided */\r\n weight?: number;\r\n}\r\n\r\n/**\r\n * Global position configuration\r\n */\r\nexport interface FuiGlobalPosition {\r\n /** Top position in pixels or CSS value */\r\n top?: string | number;\r\n /** Bottom position in pixels or CSS value */\r\n bottom?: string | number;\r\n /** Left position in pixels or CSS value */\r\n left?: string | number;\r\n /** Right position in pixels or CSS value */\r\n right?: string | number;\r\n /** Width in pixels or CSS value */\r\n width?: string | number;\r\n /** Height in pixels or CSS value */\r\n height?: string | number;\r\n /** Min width in pixels or CSS value */\r\n minWidth?: string | number;\r\n /** Min height in pixels or CSS value */\r\n minHeight?: string | number;\r\n /** Max width in pixels or CSS value */\r\n maxWidth?: string | number;\r\n /** Max height in pixels or CSS value */\r\n maxHeight?: string | number;\r\n}\r\n\r\n/**\r\n * Scroll strategy types\r\n */\r\nexport type FuiScrollStrategyType = 'reposition' | 'close' | 'block' | 'noop';\r\n\r\n/**\r\n * Backdrop click behavior\r\n */\r\nexport type FuiBackdropClickBehavior = 'close' | 'ignore';\r\n\r\n/**\r\n * Configuration for creating an overlay\r\n */\r\nexport interface FuiOverlayConfig {\r\n /** Position strategy for the overlay */\r\n positionStrategy?: FuiPositionStrategy;\r\n /** Scroll strategy for the overlay */\r\n scrollStrategy?: FuiScrollStrategy;\r\n /** Whether to show a backdrop */\r\n hasBackdrop?: boolean;\r\n /** CSS class(es) to apply to the backdrop */\r\n backdropClass?: string | string[];\r\n /** Behavior when backdrop is clicked */\r\n backdropClickBehavior?: FuiBackdropClickBehavior;\r\n /** CSS class(es) to apply to the overlay pane */\r\n panelClass?: string | string[];\r\n /** Width of the overlay */\r\n width?: string | number;\r\n /** Height of the overlay */\r\n height?: string | number;\r\n /** Min width of the overlay */\r\n minWidth?: string | number;\r\n /** Min height of the overlay */\r\n minHeight?: string | number;\r\n /** Max width of the overlay */\r\n maxWidth?: string | number;\r\n /** Max height of the overlay */\r\n maxHeight?: string | number;\r\n /** Direction of the overlay content */\r\n direction?: 'ltr' | 'rtl';\r\n /** Whether to dispose the overlay when the backdrop is clicked */\r\n disposeOnNavigation?: boolean;\r\n /** Custom injector for the overlay content */\r\n injector?: Injector;\r\n}\r\n\r\n/**\r\n * Reference to an overlay instance\r\n */\r\nexport interface FuiOverlayRef {\r\n /** Unique identifier for this overlay */\r\n readonly id: string;\r\n /** The overlay pane element */\r\n readonly overlayElement: HTMLElement;\r\n /** The backdrop element (if any) */\r\n readonly backdropElement: HTMLElement | null;\r\n /** Observable that emits when the backdrop is clicked */\r\n readonly backdropClick: Observable<MouseEvent>;\r\n /** Observable that emits when a key is pressed while the overlay has focus */\r\n readonly keydownEvents: Observable<KeyboardEvent>;\r\n /** Observable that emits when the overlay is attached to the DOM */\r\n readonly attachments: Observable<void>;\r\n /** Observable that emits when the overlay is detached from the DOM */\r\n readonly detachments: Observable<void>;\r\n /** Whether the overlay is currently attached */\r\n readonly hasAttached: boolean;\r\n\r\n /**\r\n * Attaches content to the overlay\r\n * @param content The content to attach (component, template, or DOM element)\r\n * @param injector Optional injector for component content\r\n */\r\n attach<T = unknown>(\r\n content: ComponentRef<T> | TemplateRef<unknown> | HTMLElement,\r\n injector?: Injector,\r\n ): ComponentRef<T> | undefined;\r\n\r\n /**\r\n * Detaches the content from the overlay\r\n */\r\n detach(): void;\r\n\r\n /**\r\n * Disposes the overlay and cleans up resources\r\n */\r\n dispose(): void;\r\n\r\n /**\r\n * Updates the position of the overlay\r\n */\r\n updatePosition(): void;\r\n\r\n /**\r\n * Updates the size of the overlay\r\n */\r\n updateSize(\r\n config?: Pick<FuiOverlayConfig, 'width' | 'height' | 'minWidth' | 'minHeight' | 'maxWidth' | 'maxHeight'>,\r\n ): void;\r\n\r\n /**\r\n * Adds CSS classes to the overlay pane\r\n */\r\n addPanelClass(classes: string | string[]): void;\r\n\r\n /**\r\n * Removes CSS classes from the overlay pane\r\n */\r\n removePanelClass(classes: string | string[]): void;\r\n\r\n /**\r\n * Gets the current configuration of the overlay\r\n */\r\n getConfig(): FuiOverlayConfig;\r\n\r\n /**\r\n * Updates the configuration of the overlay\r\n */\r\n updateConfig(config: Partial<FuiOverlayConfig>): void;\r\n}\r\n\r\n/**\r\n * Strategy for positioning overlays\r\n */\r\nexport interface FuiPositionStrategy {\r\n /** Applies the positioning strategy */\r\n apply(): void;\r\n /** Disposes the strategy and cleans up resources */\r\n dispose(): void;\r\n /** Detaches the strategy from the overlay */\r\n detach(): void;\r\n /** Sets the overlay element reference */\r\n setOverlayElement(element: HTMLElement): void;\r\n /** Observable that emits when the position changes */\r\n readonly positionChanges: Observable<FuiConnectedOverlayPositionChange>;\r\n}\r\n\r\n/**\r\n * Strategy for handling scroll events\r\n */\r\nexport interface FuiScrollStrategy {\r\n /** Enables the scroll strategy */\r\n enable(): void;\r\n /** Disables the scroll strategy */\r\n disable(): void;\r\n /** Attaches the strategy to an overlay reference */\r\n attach(overlayRef: FuiOverlayRef): void;\r\n /** Detaches the strategy from the overlay reference */\r\n detach(): void;\r\n}\r\n\r\n/**\r\n * Position change event for connected overlays\r\n */\r\nexport interface FuiConnectedOverlayPositionChange {\r\n /** The position that was applied */\r\n connectionPair: FuiConnectedPosition;\r\n /** The scroll position that triggered the change */\r\n scrollableViewProperties: FuiScrollableViewProperties;\r\n}\r\n\r\n/**\r\n * Properties of a scrollable view\r\n */\r\nexport interface FuiScrollableViewProperties {\r\n /** The size of the scrollable view */\r\n size: { width: number; height: number };\r\n /** The scroll position of the view */\r\n scrollPosition: { top: number; left: number };\r\n}\r\n\r\n/**\r\n * Content that can be attached to an overlay\r\n */\r\nexport type FuiOverlayContent<T = unknown> = ComponentRef<T> | TemplateRef<unknown> | HTMLElement | string;\r\n\r\n/**\r\n * Factory function for creating scroll strategies\r\n */\r\nexport type FuiScrollStrategyFactory = () => FuiScrollStrategy;\r\n\r\n/**\r\n * Options for creating a connected position strategy\r\n */\r\nexport interface FuiConnectedPositionStrategyOptions {\r\n /** The element to position relative to */\r\n origin: ElementRef<HTMLElement> | HTMLElement;\r\n /** Array of preferred positions */\r\n positions: FuiConnectedPosition[];\r\n /** Whether to push the overlay on-screen if it would otherwise be clipped */\r\n withPush?: boolean;\r\n /** Whether to grow the overlay after it reaches the edge of the viewport */\r\n withGrowAfterOpen?: boolean;\r\n /** Whether to lock the position after the first time it is positioned */\r\n withLockedPosition?: boolean;\r\n /** Whether to apply the default offset */\r\n withDefaultOffsetX?: number;\r\n /** Whether to apply the default offset */\r\n withDefaultOffsetY?: number;\r\n /** Whether to transform the origin element */\r\n withTransformOriginOn?: ElementRef<HTMLElement> | HTMLElement;\r\n /** Margin between the overlay and the viewport edge */\r\n viewportMargin?: number;\r\n /** Whether to use flexible dimensions */\r\n withFlexibleDimensions?: boolean;\r\n}\r\n\r\n/**\r\n * Options for creating a global position strategy\r\n */\r\nexport interface FuiGlobalPositionStrategyOptions extends FuiGlobalPosition {\r\n /** Whether to center the overlay horizontally */\r\n centerHorizontally?: boolean;\r\n /** Whether to center the overlay vertically */\r\n centerVertically?: boolean;\r\n}\r\n\r\n/**\r\n * Overlay size configuration\r\n */\r\nexport interface FuiOverlaySizeConfig {\r\n width?: string | number;\r\n height?: string | number;\r\n minWidth?: string | number;\r\n minHeight?: string | number;\r\n maxWidth?: string | number;\r\n maxHeight?: string | number;\r\n}\r\n\r\n/**\r\n * Overlay state information\r\n */\r\nexport interface FuiOverlayState {\r\n /** Whether the overlay is attached */\r\n isAttached: boolean;\r\n /** Whether the overlay has a backdrop */\r\n hasBackdrop: boolean;\r\n /** The current size configuration */\r\n size: FuiOverlaySizeConfig;\r\n /** The current position strategy */\r\n positionStrategy: FuiPositionStrategy | null;\r\n /** The current scroll strategy */\r\n scrollStrategy: FuiScrollStrategy | null;\r\n}\r\n","import { ComponentRef, EmbeddedViewRef, Injector, Renderer2, TemplateRef } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { FuiOverlayConfig, FuiOverlayRef } from './overlay.types';\r\n\r\n/**\r\n * # FuiOverlayRefImpl\r\n *\r\n * Implementation of the FuiOverlayRef interface. This class manages the lifecycle\r\n * of an individual overlay instance, including content attachment, positioning,\r\n * and cleanup.\r\n *\r\n * ## Features\r\n * - Content attachment and detachment\r\n * - Event handling (backdrop clicks, keyboard events)\r\n * - Position and size updates\r\n * - CSS class management\r\n * - Proper cleanup and disposal\r\n */\r\nexport class FuiOverlayRefImpl implements FuiOverlayRef {\r\n private readonly _id: string;\r\n private readonly _overlayElement: HTMLElement;\r\n private readonly _renderer: Renderer2;\r\n private readonly _zIndex: number;\r\n private _backdropElement: HTMLElement | null = null;\r\n private _attachedContent: ComponentRef<unknown> | EmbeddedViewRef<unknown> | null = null;\r\n private _config: FuiOverlayConfig;\r\n private _hasAttached = false;\r\n\r\n // Constructor RAF lifecycle tracking — see dispose() for cancellation logic.\r\n // `_isDisposed` is a write-once guard: once true, no new resources may be allocated.\r\n private _initRafId: number | null = null;\r\n private _isDisposed = false;\r\n\r\n // Event subjects\r\n private readonly _backdropClick = new Subject<MouseEvent>();\r\n private readonly _keydownEvents = new Subject<KeyboardEvent>();\r\n private readonly _attachments = new Subject<void>();\r\n private readonly _detachments = new Subject<void>();\r\n\r\n // Event listeners\r\n private _backdropClickListener?: (event: MouseEvent) => void;\r\n private _keydownListener?: (event: KeyboardEvent) => void;\r\n\r\n constructor(overlayElement: HTMLElement, config: FuiOverlayConfig, renderer: Renderer2, id?: string, zIndex = 1000) {\r\n this._id = id ?? this._generateId();\r\n this._overlayElement = overlayElement;\r\n this._config = { ...config };\r\n this._renderer = renderer;\r\n this._zIndex = zIndex;\r\n\r\n // Apply styles/classes that must be present BEFORE the element is rendered or\r\n // before consumers call attach(). Doing this synchronously prevents a one-frame\r\n // race where the element renders without its inline z-index (causing nested\r\n // overlays opened from inside a dialog to slip behind the dialog).\r\n this._setupOverlayElement();\r\n\r\n // Defer DOM-side-effect work that benefits from the element being in the\r\n // document (backdrop insertion uses overlayElement.parentElement; listeners\r\n // are independent but grouped here to avoid extra microtasks).\r\n // Track the RAF id so dispose() can cancel it. The `_isDisposed` guard inside\r\n // the callback is defense-in-depth: if cancellation races with the fire (or\r\n // fails for any reason), the guard prevents allocating new resources after\r\n // dispose has run.\r\n this._initRafId = requestAnimationFrame(() => {\r\n this._initRafId = null;\r\n if (this._isDisposed) return;\r\n this._setupBackdrop();\r\n this._setupEventListeners();\r\n });\r\n }\r\n\r\n /** Unique identifier for this overlay */\r\n get id(): string {\r\n return this._id;\r\n }\r\n\r\n /** The overlay pane element */\r\n get overlayElement(): HTMLElement {\r\n return this._overlayElement;\r\n }\r\n\r\n /** The backdrop element (if any) */\r\n get backdropElement(): HTMLElement | null {\r\n return this._backdropElement;\r\n }\r\n\r\n /** Observable that emits when the backdrop is clicked */\r\n get backdropClick(): Observable<MouseEvent> {\r\n return this._backdropClick.asObservable();\r\n }\r\n\r\n /** Observable that emits when a key is pressed while the overlay has focus */\r\n get keydownEvents(): Observable<KeyboardEvent> {\r\n return this._keydownEvents.asObservable();\r\n }\r\n\r\n /** Observable that emits when the overlay is attached to the DOM */\r\n get attachments(): Observable<void> {\r\n return this._attachments.asObservable();\r\n }\r\n\r\n /** Observable that emits when the overlay is detached from the DOM */\r\n get detachments(): Observable<void> {\r\n return this._detachments.asObservable();\r\n }\r\n\r\n /** Whether the overlay is currently attached */\r\n get hasAttached(): boolean {\r\n return this._hasAttached;\r\n }\r\n\r\n /**\r\n * Attaches content to the overlay\r\n */\r\n attach<T = unknown>(\r\n content: ComponentRef<T> | TemplateRef<unknown> | HTMLElement,\r\n injector?: Injector,\r\n ): ComponentRef<T> | undefined {\r\n if (this._hasAttached) {\r\n throw new Error('Overlay already has content attached');\r\n }\r\n\r\n // Hide overlay initially to prevent flash at (0,0) before positioning\r\n this._renderer.setStyle(this._overlayElement, 'opacity', '0');\r\n\r\n let attachedContent: ComponentRef<T> | EmbeddedViewRef<unknown> | null = null;\r\n\r\n if (content instanceof ComponentRef) {\r\n // Component content\r\n attachedContent = content;\r\n this._overlayElement.appendChild(content.location.nativeElement);\r\n } else if (content instanceof TemplateRef) {\r\n // Template content\r\n const viewRef = content.createEmbeddedView({}, injector);\r\n attachedContent = viewRef;\r\n viewRef.rootNodes.forEach((node) => {\r\n this._overlayElement.appendChild(node);\r\n });\r\n } else if (content instanceof HTMLElement) {\r\n // DOM element content\r\n this._overlayElement.appendChild(content);\r\n } else if (typeof content === 'string') {\r\n // String content\r\n this._renderer.setProperty(this._overlayElement, 'textContent', content);\r\n }\r\n\r\n this._attachedContent = attachedContent;\r\n this._hasAttached = true;\r\n this._attachments.next();\r\n\r\n // Apply position strategy after DOM has settled\r\n // Use single RAF to ensure layout is complete, then make visible\r\n if (this._config.positionStrategy) {\r\n requestAnimationFrame(() => {\r\n if (this._config.positionStrategy && this._hasAttached) {\r\n this._config.positionStrategy.apply();\r\n // Make overlay visible after positioning\r\n this._renderer.setStyle(this._overlayElement, 'opacity', '1');\r\n }\r\n });\r\n } else {\r\n // No position strategy, make visible immediately\r\n this._renderer.setStyle(this._overlayElement, 'opacity', '1');\r\n }\r\n\r\n // Enable scroll strategy if available\r\n if (this._config.scrollStrategy) {\r\n this._config.scrollStrategy.enable();\r\n }\r\n\r\n return attachedContent as ComponentRef<T>;\r\n }\r\n\r\n /**\r\n * Detaches the content from the overlay\r\n */\r\n detach(): void {\r\n if (!this._hasAttached) {\r\n return;\r\n }\r\n\r\n // Disable scroll strategy\r\n if (this._config.scrollStrategy) {\r\n this._config.scrollStrategy.disable();\r\n }\r\n\r\n // Clean up attached content\r\n if (this._attachedContent) {\r\n if (this._attachedContent instanceof ComponentRef) {\r\n this._attachedContent.destroy();\r\n } else if (this._attachedContent instanceof EmbeddedViewRef) {\r\n this._attachedContent.destroy();\r\n }\r\n this._attachedContent = null;\r\n }\r\n\r\n // Clear overlay element content\r\n while (this._overlayElement.firstChild) {\r\n this._overlayElement.removeChild(this._overlayElement.firstChild);\r\n }\r\n\r\n this._hasAttached = false;\r\n this._detachments.next();\r\n }\r\n\r\n /**\r\n * Disposes the overlay and cleans up resources\r\n */\r\n dispose(): void {\r\n // Mark disposed first — the constructor RAF callback checks this flag as\r\n // defense-in-depth in case cancellation races with the fire.\r\n this._isDisposed = true;\r\n if (this._initRafId !== null) {\r\n cancelAnimationFrame(this._initRafId);\r\n this._initRafId = null;\r\n }\r\n\r\n // Detach content first\r\n this.detach();\r\n\r\n // Dispose position strategy\r\n if (this._config.positionStrategy) {\r\n this._config.positionStrategy.dispose();\r\n }\r\n\r\n // Dispose scroll strategy\r\n if (this._config.scrollStrategy) {\r\n this._config.scrollStrategy.detach();\r\n }\r\n\r\n // Remove event listeners\r\n this._removeEventListeners();\r\n\r\n // Remove backdrop\r\n if (this._backdropElement?.parentElement) {\r\n this._backdropElement.parentElement.removeChild(this._backdropElement);\r\n }\r\n\r\n // Remove overlay element\r\n if (this._overlayElement.parentElement) {\r\n this._overlayElement.parentElement.removeChild(this._overlayElement);\r\n }\r\n\r\n // Complete subjects\r\n this._backdropClick.complete();\r\n this._keydownEvents.complete();\r\n this._attachments.complete();\r\n this._detachments.complete();\r\n }\r\n\r\n /**\r\n * Updates the position of the overlay\r\n */\r\n updatePosition(): void {\r\n if (this._config.positionStrategy) {\r\n this._config.positionStrategy.apply();\r\n }\r\n }\r\n\r\n /**\r\n * Updates the size of the overlay\r\n */\r\n updateSize(\r\n config?: Pick<FuiOverlayConfig, 'width' | 'height' | 'minWidth' | 'minHeight' | 'maxWidth' | 'maxHeight'>,\r\n ): void {\r\n if (config) {\r\n Object.assign(this._config, config);\r\n }\r\n\r\n this._applySizeConfig();\r\n }\r\n\r\n /**\r\n * Adds CSS classes to the overlay pane\r\n */\r\n addPanelClass(classes: string | string[]): void {\r\n const classArray = Array.isArray(classes) ? classes : [classes];\r\n classArray.forEach((className) => {\r\n if (className) {\r\n this._renderer.addClass(this._overlayElement, className);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Removes CSS classes from the overlay pane\r\n */\r\n removePanelClass(classes: string | string[]): void {\r\n const classArray = Array.isArray(classes) ? classes : [classes];\r\n classArray.forEach((className) => {\r\n if (className) {\r\n this._renderer.removeClass(this._overlayElement, className);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Gets the current configuration of the overlay\r\n */\r\n getConfig(): FuiOverlayConfig {\r\n return { ...this._config };\r\n }\r\n\r\n /**\r\n * Updates the configuration of the overlay\r\n */\r\n updateConfig(config: Partial<FuiOverlayConfig>): void {\r\n const oldConfig = { ...this._config };\r\n Object.assign(this._config, config);\r\n\r\n // Update backdrop if needed\r\n if (config.hasBackdrop !== undefined && config.hasBackdrop !== oldConfig.hasBackdrop) {\r\n if (config.hasBackdrop) {\r\n this._createBackdrop();\r\n } else {\r\n this._removeBackdrop();\r\n }\r\n }\r\n\r\n // Update backdrop classes\r\n const backdrop = this._backdropElement;\r\n if (config.backdropClass && backdrop) {\r\n // Remove old classes\r\n if (oldConfig.backdropClass) {\r\n const oldClasses = Array.isArray(oldConfig.backdropClass) ? oldConfig.backdropClass : [oldConfig.backdropClass];\r\n oldClasses.forEach((className) => {\r\n if (className) {\r\n this._renderer.removeClass(backdrop, className);\r\n }\r\n });\r\n }\r\n\r\n // Add new classes\r\n const newClasses = Array.isArray(config.backdropClass) ? config.backdropClass : [config.backdropClass];\r\n newClasses.forEach((className) => {\r\n if (className) {\r\n this._renderer.addClass(backdrop, className);\r\n }\r\n });\r\n }\r\n\r\n // Update panel classes\r\n if (config.panelClass) {\r\n // Remove old classes\r\n if (oldConfig.panelClass) {\r\n this.removePanelClass(oldConfig.panelClass);\r\n }\r\n\r\n // Add new classes\r\n this.addPanelClass(config.panelClass);\r\n }\r\n\r\n // Update size\r\n this._applySizeConfig();\r\n\r\n // Update position strategy\r\n if (config.positionStrategy && config.positionStrategy !== oldConfig.positionStrategy) {\r\n if (oldConfig.positionStrategy) {\r\n oldConfig.positionStrategy.dispose();\r\n }\r\n config.positionStrategy.setOverlayElement(this._overlayElement);\r\n }\r\n\r\n // Update scroll strategy\r\n if (config.scrollStrategy && config.scrollStrategy !== oldConfig.scrollStrategy) {\r\n if (oldConfig.scrollStrategy) {\r\n oldConfig.scrollStrategy.detach();\r\n }\r\n config.scrollStrategy.attach(this);\r\n }\r\n }\r\n\r\n private _setupOverlayElement(): void {\r\n // Add base classes\r\n this._renderer.addClass(this._overlayElement, 'fui-overlay-pane');\r\n\r\n // Add custom panel classes\r\n if (this._config.panelClass) {\r\n this.addPanelClass(this._config.panelClass);\r\n }\r\n\r\n // Apply z-index for proper stacking of nested overlays\r\n this._renderer.setStyle(this._overlayElement, 'z-index', String(this._zIndex));\r\n\r\n // Apply size configuration\r\n this._applySizeConfig();\r\n\r\n // Set direction\r\n if (this._config.direction) {\r\n this._renderer.setAttribute(this._overlayElement, 'dir', this._config.direction);\r\n }\r\n\r\n // Set position strategy\r\n if (this._config.positionStrategy) {\r\n this._config.positionStrategy.setOverlayElement(this._overlayElement);\r\n }\r\n }\r\n\r\n private _setupBackdrop(): void {\r\n if (this._config.hasBackdrop) {\r\n this._createBackdrop();\r\n }\r\n }\r\n\r\n private _createBackdrop(): void {\r\n if (this._backdropElement) {\r\n return;\r\n }\r\n this._backdropElement = this._renderer.createElement('div');\r\n this._renderer.addClass(this._backdropElement, 'fui-overlay-backdrop');\r\n\r\n // Apply z-index for backdrop (slightly below the overlay panel)\r\n this._renderer.setStyle(this._backdropElement, 'z-index', String(this._zIndex - 1));\r\n\r\n // Add custom backdrop classes\r\n const backdropEl = this._backdropElement;\r\n if (this._config.backdropClass && backdropEl) {\r\n const classes = Array.isArray(this._config.backdropClass)\r\n ? this._config.backdropClass\r\n : [this._config.backdropClass];\r\n classes.forEach((className) => {\r\n if (className) {\r\n this._renderer.addClass(backdropEl, className);\r\n }\r\n });\r\n }\r\n\r\n // Insert backdrop before overlay element\r\n const parent = this._overlayElement.parentElement;\r\n if (parent) {\r\n this._renderer.insertBefore(parent, this._backdropElement, this._overlayElement);\r\n }\r\n\r\n // Setup backdrop click listener\r\n this._backdropClickListener = (event: MouseEvent): void => {\r\n if (event.target === this._backdropElement) {\r\n this._backdropClick.next(event);\r\n }\r\n };\r\n\r\n if (this._backdropElement) {\r\n this._backdropElement.addEventListener('click', this._backdropClickListener);\r\n }\r\n }\r\n\r\n private _removeBackdrop(): void {\r\n if (this._backdropElement) {\r\n if (this._backdropClickListener) {\r\n this._backdropElement.removeEventListener('click', this._backdropClickListener);\r\n this._backdropClickListener = undefined;\r\n }\r\n\r\n if (this._backdropElement.parentElement) {\r\n this._backdropElement.parentElement.removeChild(this._backdropElement);\r\n }\r\n\r\n this._backdropElement = null;\r\n }\r\n }\r\n\r\n private _setupEventListeners(): void {\r\n // Keydown events\r\n this._keydownListener = (event: KeyboardEvent): void => {\r\n this._keydownEvents.next(event);\r\n };\r\n\r\n this._overlayElement.addEventListener('keydown', this._keydownListener);\r\n }\r\n\r\n private _removeEventListeners(): void {\r\n if (this._keydownListener) {\r\n this._overlayElement.removeEventListener('keydown', this._keydownListener);\r\n this._keydownListener = undefined;\r\n }\r\n\r\n if (this._backdropClickListener && this._backdropElement) {\r\n this._backdropElement.removeEventListener('click', this._backdropClickListener);\r\n this._backdropClickListener = undefined;\r\n }\r\n }\r\n\r\n private _applySizeConfig(): void {\r\n const config = this._config;\r\n\r\n if (config.width !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'width', this._coerceCssPixelValue(config.width));\r\n }\r\n\r\n if (config.height !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'height', this._coerceCssPixelValue(config.height));\r\n }\r\n\r\n if (config.minWidth !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'min-width', this._coerceCssPixelValue(config.minWidth));\r\n }\r\n\r\n if (config.minHeight !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'min-height', this._coerceCssPixelValue(config.minHeight));\r\n }\r\n\r\n if (config.maxWidth !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'max-width', this._coerceCssPixelValue(config.maxWidth));\r\n }\r\n\r\n if (config.maxHeight !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'max-height', this._coerceCssPixelValue(config.maxHeight));\r\n }\r\n }\r\n\r\n private _coerceCssPixelValue(value: string | number): string {\r\n return typeof value === 'number' ? `${value}px` : value;\r\n }\r\n\r\n private _generateId(): string {\r\n return `fui-overlay-${Math.random().toString(36).substr(2, 9)}`;\r\n }\r\n}\r\n","import { Component, ElementRef, inject, OnDestroy, OnInit } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n/**\r\n * # FuiOverlayContainer Component\r\n *\r\n * Container component that holds all overlay content. This component is automatically\r\n * created and attached to the document body when the overlay service is first used.\r\n *\r\n * ## Features\r\n * - Provides a dedicated container for all overlay content\r\n * - Manages z-index stacking for multiple overlays\r\n * - Handles cleanup when destroyed\r\n * - Applies proper CSS classes for styling\r\n *\r\n * ## Usage\r\n *\r\n * This component is used internally by the overlay service and should not be\r\n * instantiated directly by application code.\r\n */\r\n@Component({\r\n selector: 'fui-overlay-container',\r\n standalone: true,\r\n template: '',\r\n host: {\r\n class: 'fui-overlay-container',\r\n '[attr.aria-live]': '\"polite\"',\r\n '[attr.aria-atomic]': '\"true\"',\r\n },\r\n styles: [\r\n `\r\n :host {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n pointer-events: none;\r\n z-index: var(--fui-z-popover);\r\n }\r\n `,\r\n ],\r\n})\r\nexport class FuiOverlayContainerComponent implements OnInit, OnDestroy {\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _elementRef = inject(ElementRef<HTMLElement>);\r\n\r\n ngOnInit(): void {\r\n // Ensure the container is attached to the document body\r\n if (this._elementRef.nativeElement.parentElement !== this._document.body) {\r\n this._document.body.appendChild(this._elementRef.nativeElement);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Clean up the container element\r\n const element = this._elementRef.nativeElement;\r\n if (element.parentElement) {\r\n element.parentElement.removeChild(element);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the container element\r\n */\r\n getContainerElement(): HTMLElement {\r\n return this._elementRef.nativeElement;\r\n }\r\n}\r\n","import { Renderer2 } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport {\r\n FuiPositionStrategy,\r\n FuiConnectedOverlayPositionChange,\r\n FuiGlobalPositionStrategyOptions,\r\n} from '../overlay.types';\r\n\r\n/**\r\n * # FuiGlobalPositionStrategy\r\n *\r\n * A position strategy that positions the overlay at a fixed position on the screen.\r\n * This strategy is useful for modals, dialogs, and other overlays that should be\r\n * positioned relative to the viewport rather than a specific element.\r\n *\r\n * ## Features\r\n * - Fixed positioning relative to the viewport\r\n * - Support for all CSS position properties (top, bottom, left, right)\r\n * - Centering options (horizontal and vertical)\r\n * - Responsive positioning\r\n * - Size constraints (width, height, min/max dimensions)\r\n */\r\nexport class FuiGlobalPositionStrategy implements FuiPositionStrategy {\r\n private _overlayElement?: HTMLElement;\r\n private readonly _positionChanges = new Subject<FuiConnectedOverlayPositionChange>();\r\n private _isDisposed = false;\r\n\r\n constructor(\r\n private _renderer: Renderer2,\r\n private _options: FuiGlobalPositionStrategyOptions = {},\r\n ) {}\r\n\r\n /** Observable that emits when the position changes */\r\n get positionChanges(): Observable<FuiConnectedOverlayPositionChange> {\r\n return this._positionChanges.asObservable();\r\n }\r\n\r\n /**\r\n * Sets the overlay element reference\r\n */\r\n setOverlayElement(element: HTMLElement): void {\r\n this._overlayElement = element;\r\n }\r\n\r\n /**\r\n * Applies the positioning strategy\r\n */\r\n apply(): void {\r\n if (!this._overlayElement || this._isDisposed) {\r\n return;\r\n }\r\n\r\n // Set position to fixed for global positioning\r\n this._renderer.setStyle(this._overlayElement, 'position', 'fixed');\r\n\r\n // Apply positioning\r\n this._applyPosition();\r\n\r\n // Apply centering if requested\r\n this._applyCentering();\r\n\r\n // Apply size constraints\r\n this._applySizeConstraints();\r\n }\r\n\r\n /**\r\n * Sets the top position\r\n */\r\n top(value: string | number = '0'): this {\r\n this._options.top = value;\r\n this._options.bottom = undefined;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the bottom position\r\n */\r\n bottom(value: string | number = '0'): this {\r\n this._options.bottom = value;\r\n this._options.top = undefined;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the left position\r\n */\r\n left(value: string | number = '0'): this {\r\n this._options.left = value;\r\n this._options.right = undefined;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the right position\r\n */\r\n right(value: string | number = '0'): this {\r\n this._options.right = value;\r\n this._options.left = undefined;\r\n return this;\r\n }\r\n\r\n /**\r\n * Centers the overlay horizontally\r\n */\r\n centerHorizontally(): this {\r\n this._options.centerHorizontally = true;\r\n this._options.left = undefined;\r\n this._options.right = undefined;\r\n return this;\r\n }\r\n\r\n /**\r\n * Centers the overlay vertically\r\n */\r\n centerVertically(): this {\r\n this._options.centerVertically = true;\r\n this._options.top = undefined;\r\n this._options.bottom = undefined;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the width of the overlay\r\n */\r\n width(value: string | number): this {\r\n this._options.width = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the height of the overlay\r\n */\r\n height(value: string | number): this {\r\n this._options.height = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the minimum width of the overlay\r\n */\r\n minWidth(value: string | number): this {\r\n this._options.minWidth = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the minimum height of the overlay\r\n */\r\n minHeight(value: string | number): this {\r\n this._options.minHeight = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the maximum width of the overlay\r\n */\r\n maxWidth(value: string | number): this {\r\n this._options.maxWidth = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the maximum height of the overlay\r\n */\r\n maxHeight(value: string | number): this {\r\n this._options.maxHeight = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Disposes the strategy and cleans up resources\r\n */\r\n dispose(): void {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n\r\n this._isDisposed = true;\r\n this._positionChanges.complete();\r\n }\r\n\r\n /**\r\n * Detaches the strategy from the overlay\r\n */\r\n detach(): void {\r\n // Global position strategy doesn't need special detach logic\r\n }\r\n\r\n private _applyPosition(): void {\r\n if (!this._overlayElement) {\r\n return;\r\n }\r\n\r\n const options = this._options;\r\n\r\n // Apply top/bottom positioning\r\n if (options.top !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'top', this._coerceCssPixelValue(options.top));\r\n this._renderer.removeStyle(this._overlayElement, 'bottom');\r\n } else if (options.bottom !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'bottom', this._coerceCssPixelValue(options.bottom));\r\n this._renderer.removeStyle(this._overlayElement, 'top');\r\n }\r\n\r\n // Apply left/right positioning\r\n if (options.left !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'left', this._coerceCssPixelValue(options.left));\r\n this._renderer.removeStyle(this._overlayElement, 'right');\r\n } else if (options.right !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'right', this._coerceCssPixelValue(options.right));\r\n this._renderer.removeStyle(this._overlayElement, 'left');\r\n }\r\n }\r\n\r\n private _applyCentering(): void {\r\n if (!this._overlayElement) {\r\n return;\r\n }\r\n\r\n const options = this._options;\r\n\r\n if (options.centerHorizontally) {\r\n this._renderer.setStyle(this._overlayElement, 'left', '50%');\r\n this._renderer.setStyle(this._overlayElement, 'transform', 'translateX(-50%)');\r\n this._renderer.removeStyle(this._overlayElement, 'right');\r\n }\r\n\r\n if (options.centerVertically) {\r\n this._renderer.setStyle(this._overlayElement, 'top', '50%');\r\n\r\n const existingTransform = this._overlayElement.style.transform;\r\n if (existingTransform?.includes('translateX')) {\r\n this._renderer.setStyle(this._overlayElement, 'transform', 'translate(-50%, -50%)');\r\n } else {\r\n this._renderer.setStyle(this._overlayElement, 'transform', 'translateY(-50%)');\r\n }\r\n\r\n this._renderer.removeStyle(this._overlayElement, 'bottom');\r\n }\r\n }\r\n\r\n private _applySizeConstraints(): void {\r\n if (!this._overlayElement) {\r\n return;\r\n }\r\n\r\n const options = this._options;\r\n\r\n if (options.width !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'width', this._coerceCssPixelValue(options.width));\r\n }\r\n\r\n if (options.height !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'height', this._coerceCssPixelValue(options.height));\r\n }\r\n\r\n if (options.minWidth !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'min-width', this._coerceCssPixelValue(options.minWidth));\r\n }\r\n\r\n if (options.minHeight !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'min-height', this._coerceCssPixelValue(options.minHeight));\r\n }\r\n\r\n if (options.maxWidth !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'max-width', this._coerceCssPixelValue(options.maxWidth));\r\n }\r\n\r\n if (options.maxHeight !== undefined) {\r\n this._renderer.setStyle(this._overlayElement, 'max-height', this._coerceCssPixelValue(options.maxHeight));\r\n }\r\n }\r\n\r\n private _coerceCssPixelValue(value: string | number): string {\r\n return typeof value === 'number' ? `${value}px` : value;\r\n }\r\n}\r\n","import { ElementRef, Renderer2 } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport {\r\n FuiPositionStrategy,\r\n FuiConnectedPosition,\r\n FuiConnectedOverlayPositionChange,\r\n FuiConnectedPositionStrategyOptions,\r\n FuiScrollableViewProperties,\r\n} from '../overlay.types';\r\n\r\n/**\r\n * # FuiConnectedPositionStrategy\r\n *\r\n * A position strategy that positions the overlay relative to a connected element.\r\n * This strategy is ideal for tooltips, dropdowns, menus, and other overlays that\r\n * should be positioned relative to a trigger element.\r\n *\r\n * ## Features\r\n * - Positions overlay relative to an origin element\r\n * - Multiple fallback positions with automatic selection\r\n * - Collision detection and viewport boundary handling\r\n * - Push and grow behaviors for constrained spaces\r\n * - Scroll and resize event handling\r\n * - Transform origin support for animations\r\n */\r\nexport class FuiConnectedPositionStrategy implements FuiPositionStrategy {\r\n private _overlayElement?: HTMLElement;\r\n private _originElement: HTMLElement;\r\n private _positions: FuiConnectedPosition[];\r\n private _appliedPosition?: FuiConnectedPosition;\r\n private _isDisposed = false;\r\n private _resizeSubscription?: () => void;\r\n private _scrollSubscription?: () => void;\r\n\r\n private readonly _positionChanges = new Subject<FuiConnectedOverlayPositionChange>();\r\n\r\n // Configuration options\r\n private _withPush = true;\r\n private _withGrowAfterOpen = false;\r\n private _withLockedPosition = false;\r\n private _defaultOffsetX = 0;\r\n private _defaultOffsetY = 0;\r\n private _transformOriginElement?: HTMLElement;\r\n private _viewportMargin = 0;\r\n private _withFlexibleDimensions = false;\r\n\r\n constructor(\r\n private _renderer: Renderer2,\r\n options: FuiConnectedPositionStrategyOptions,\r\n ) {\r\n this._originElement = options.origin instanceof ElementRef ? options.origin.nativeElement : options.origin;\r\n this._positions = [...options.positions];\r\n\r\n // Apply configuration options\r\n if (options.withPush !== undefined) {\r\n this._withPush = options.withPush;\r\n }\r\n if (options.withGrowAfterOpen !== undefined) {\r\n this._withGrowAfterOpen = options.withGrowAfterOpen;\r\n }\r\n if (options.withLockedPosition !== undefined) {\r\n this._withLockedPosition = options.withLockedPosition;\r\n }\r\n if (options.withDefaultOffsetX !== undefined) {\r\n this._defaultOffsetX = options.withDefaultOffsetX;\r\n }\r\n if (options.withDefaultOffsetY !== undefined) {\r\n this._defaultOffsetY = options.withDefaultOffsetY;\r\n }\r\n if (options.withTransformOriginOn) {\r\n this._transformOriginElement =\r\n options.withTransformOriginOn instanceof ElementRef\r\n ? options.withTransformOriginOn.nativeElement\r\n : options.withTransformOriginOn;\r\n }\r\n if (options.viewportMargin !== undefined) {\r\n this._viewportMargin = options.viewportMargin;\r\n }\r\n if (options.withFlexibleDimensions !== undefined) {\r\n this._withFlexibleDimensions = options.withFlexibleDimensions;\r\n }\r\n }\r\n\r\n /** Observable that emits when the position changes */\r\n get positionChanges(): Observable<FuiConnectedOverlayPositionChange> {\r\n return this._positionChanges.asObservable();\r\n }\r\n\r\n /**\r\n * Sets the overlay element reference\r\n */\r\n setOverlayElement(element: HTMLElement): void {\r\n this._overlayElement = element;\r\n }\r\n\r\n /**\r\n * Applies the positioning strategy\r\n */\r\n apply(): void {\r\n if (!this._overlayElement || this._isDisposed) {\r\n return;\r\n }\r\n\r\n // Set position to fixed for precise positioning\r\n this._renderer.setStyle(this._overlayElement, 'position', 'fixed');\r\n\r\n // Force a layout recalculation to ensure accurate dimensions\r\n // This is necessary to get the correct bounding rect\r\n void this._overlayElement.offsetHeight;\r\n\r\n // Find the best position\r\n const bestPosition = this._getBestPosition();\r\n\r\n if (bestPosition) {\r\n this._applyPosition(bestPosition);\r\n this._appliedPosition = bestPosition;\r\n\r\n // Set up event listeners for repositioning\r\n this._setupEventListeners();\r\n\r\n // Emit position change\r\n this._positionChanges.next({\r\n connectionPair: bestPosition,\r\n scrollableViewProperties: this._getScrollableViewProperties(),\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Updates the positions array\r\n */\r\n withPositions(positions: FuiConnectedPosition[]): this {\r\n this._positions = [...positions];\r\n return this;\r\n }\r\n\r\n /**\r\n * Enables pushing the overlay on-screen if it would otherwise be clipped\r\n */\r\n withPush(enabled = true): this {\r\n this._withPush = enabled;\r\n return this;\r\n }\r\n\r\n /**\r\n * Enables growing the overlay after it reaches the edge of the viewport\r\n */\r\n withGrowAfterOpen(enabled = true): this {\r\n this._withGrowAfterOpen = enabled;\r\n return this;\r\n }\r\n\r\n /**\r\n * Locks the position after the first time it is positioned\r\n */\r\n withLockedPosition(enabled = true): this {\r\n this._withLockedPosition = enabled;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the default offset for the x-axis\r\n */\r\n withDefaultOffsetX(offset: number): this {\r\n this._defaultOffsetX = offset;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the default offset for the y-axis\r\n */\r\n withDefaultOffsetY(offset: number): this {\r\n this._defaultOffsetY = offset;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the element to use for transform origin\r\n */\r\n withTransformOriginOn(element: ElementRef<HTMLElement> | HTMLElement): this {\r\n this._transformOriginElement = element instanceof ElementRef ? element.nativeElement : element;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the margin between the overlay and the viewport edge\r\n */\r\n withViewportMargin(margin: number): this {\r\n this._viewportMargin = margin;\r\n return this;\r\n }\r\n\r\n /**\r\n * Enables flexible dimensions\r\n */\r\n withFlexibleDimensions(enabled = true): this {\r\n this._withFlexibleDimensions = enabled;\r\n return this;\r\n }\r\n\r\n /**\r\n * Disposes the strategy and cleans up resources\r\n */\r\n dispose(): void {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n\r\n this._isDisposed = true;\r\n this._removeEventListeners();\r\n this._positionChanges.complete();\r\n }\r\n\r\n /**\r\n * Detaches the strategy from the overlay\r\n */\r\n detach(): void {\r\n this._removeEventListeners();\r\n }\r\n\r\n private _getBestPosition(): FuiConnectedPosition | null {\r\n if (!this._overlayElement || !this._originElement) {\r\n return null;\r\n }\r\n\r\n // If position is locked and we have an applied position, use it\r\n if (this._withLockedPosition && this._appliedPosition) {\r\n return this._appliedPosition;\r\n }\r\n\r\n // Force layout recalculation to ensure overlay has correct dimensions\r\n // This is critical for center-aligned positions (right, left, top, bottom)\r\n void this._overlayElement.offsetHeight;\r\n void this._overlayElement.offsetWidth;\r\n\r\n const originRect = this._originElement.getBoundingClientRect();\r\n const overlayRect = this._overlayElement.getBoundingClientRect();\r\n const viewportSize = this._getViewportSize();\r\n\r\n let bestPosition: FuiConnectedPosition | null = null;\r\n let bestScore = -1;\r\n\r\n for (const position of this._positions) {\r\n const positionedRect = this._calculatePositionedRect(position, originRect, overlayRect);\r\n const score = this._calculatePositionScore(positionedRect, viewportSize);\r\n\r\n if (score > bestScore) {\r\n bestScore = score;\r\n bestPosition = position;\r\n }\r\n\r\n // If we found a perfect position (fully visible), use it\r\n if (score === 1) {\r\n break;\r\n }\r\n }\r\n\r\n return bestPosition;\r\n }\r\n\r\n private _applyPosition(position: FuiConnectedPosition): void {\r\n if (!this._overlayElement || !this._originElement) {\r\n return;\r\n }\r\n\r\n // Force layout recalculation again to ensure dimensions are current\r\n void this._overlayElement.offsetHeight;\r\n void this._overlayElement.offsetWidth;\r\n\r\n const originRect = this._originElement.getBoundingClientRect();\r\n const overlayRect = this._overlayElement.getBoundingClientRect();\r\n const positionedRect = this._calculatePositionedRect(position, originRect, overlayRect);\r\n\r\n let { x, y } = positionedRect;\r\n\r\n // Apply push behavior if enabled\r\n if (this._withPush) {\r\n const pushedPosition = this._pushWithinViewport({ x, y, width: overlayRect.width, height: overlayRect.height });\r\n x = pushedPosition.x;\r\n y = pushedPosition.y;\r\n }\r\n\r\n // Apply the position\r\n this._renderer.setStyle(this._overlayElement, 'left', `${x}px`);\r\n this._renderer.setStyle(this._overlayElement, 'top', `${y}px`);\r\n\r\n // Apply transform origin if specified\r\n if (this._transformOriginElement) {\r\n this._setTransformOrigin(position);\r\n }\r\n\r\n // Apply flexible dimensions if enabled\r\n if (this._withFlexibleDimensions) {\r\n this._applyFlexibleDimensions(position, { x, y, width: overlayRect.width, height: overlayRect.height });\r\n }\r\n }\r\n\r\n private _calculatePositionedRect(\r\n position: FuiConnectedPosition,\r\n originRect: DOMRect,\r\n overlayRect: DOMRect,\r\n ): { x: number; y: number; width: number; height: number } {\r\n const offsetX = (position.offsetX ?? 0) + this._defaultOffsetX;\r\n const offsetY = (position.offsetY ?? 0) + this._defaultOffsetY;\r\n\r\n let x: number;\r\n let y: number;\r\n\r\n // Calculate x position\r\n switch (position.originX) {\r\n case 'start':\r\n x = originRect.left;\r\n break;\r\n case 'center':\r\n x = originRect.left + originRect.width / 2;\r\n break;\r\n case 'end':\r\n x = originRect.right;\r\n break;\r\n }\r\n\r\n switch (position.overlayX) {\r\n case 'start':\r\n // x remains as is\r\n break;\r\n case 'center':\r\n x -= overlayRect.width / 2;\r\n break;\r\n case 'end':\r\n x -= overlayRect.width;\r\n break;\r\n }\r\n\r\n // Calculate y position\r\n switch (position.originY) {\r\n case 'top':\r\n y = originRect.top;\r\n break;\r\n case 'center':\r\n y = originRect.top + originRect.height / 2;\r\n break;\r\n case 'bottom':\r\n y = originRect.bottom;\r\n break;\r\n }\r\n\r\n switch (position.overlayY) {\r\n case 'top':\r\n // y remains as is\r\n break;\r\n case 'center':\r\n y -= overlayRect.height / 2;\r\n break;\r\n case 'bottom':\r\n y -= overlayRect.height;\r\n break;\r\n }\r\n\r\n return {\r\n x: x + offsetX,\r\n y: y + offsetY,\r\n width: overlayRect.width,\r\n height: overlayRect.height,\r\n };\r\n }\r\n\r\n private _calculatePositionScore(\r\n rect: { x: number; y: number; width: number; height: number },\r\n viewportSize: { width: number; height: number },\r\n ): number {\r\n const margin = this._viewportMargin;\r\n const visibleArea =\r\n Math.max(0, Math.min(rect.x + rect.width, viewportSize.width - margin) - Math.max(rect.x, margin)) *\r\n Math.max(0, Math.min(rect.y + rect.height, viewportSize.height - margin) - Math.max(rect.y, margin));\r\n\r\n const totalArea = rect.width * rect.height;\r\n return totalArea > 0 ? visibleArea / totalArea : 0;\r\n }\r\n\r\n private _pushWithinViewport(rect: { x: number; y: number; width: number; height: number }): { x: number; y: number } {\r\n const viewportSize = this._getViewportSize();\r\n const margin = this._viewportMargin;\r\n\r\n let { x, y } = rect;\r\n\r\n // Push horizontally\r\n if (x < margin) {\r\n x = margin;\r\n } else if (x + rect.width > viewportSize.width - margin) {\r\n x = viewportSize.width - rect.width - margin;\r\n }\r\n\r\n // Push vertically\r\n if (y < margin) {\r\n y = margin;\r\n } else if (y + rect.height > viewportSize.height - margin) {\r\n y = viewportSize.height - rect.height - margin;\r\n }\r\n\r\n return { x, y };\r\n }\r\n\r\n private _setTransformOrigin(position: FuiConnectedPosition): void {\r\n if (!this._transformOriginElement || !this._overlayElement) {\r\n return;\r\n }\r\n\r\n let transformOrigin = '';\r\n\r\n // Set horizontal transform origin\r\n switch (position.overlayX) {\r\n case 'start':\r\n transformOrigin += 'left';\r\n break;\r\n case 'center':\r\n transformOrigin += 'center';\r\n break;\r\n case 'end':\r\n transformOrigin += 'right';\r\n break;\r\n }\r\n\r\n transformOrigin += ' ';\r\n\r\n // Set vertical transform origin\r\n switch (position.overlayY) {\r\n case 'top':\r\n transformOrigin += 'top';\r\n break;\r\n case 'center':\r\n transformOrigin += 'center';\r\n break;\r\n case 'bottom':\r\n transformOrigin += 'bottom';\r\n break;\r\n }\r\n\r\n this._renderer.setStyle(this._transformOriginElement, 'transform-origin', transformOrigin);\r\n }\r\n\r\n private _applyFlexibleDimensions(\r\n position: FuiConnectedPosition,\r\n rect: { x: number; y: number; width: number; height: number },\r\n ): void {\r\n if (!this._overlayElement) {\r\n return;\r\n }\r\n\r\n const viewportSize = this._getViewportSize();\r\n const margin = this._viewportMargin;\r\n\r\n // Calculate available space\r\n const availableWidth = viewportSize.width - rect.x - margin;\r\n const availableHeight = viewportSize.height - rect.y - margin;\r\n\r\n // Apply flexible width if needed\r\n if (rect.width > availableWidth) {\r\n this._renderer.setStyle(this._overlayElement, 'max-width', `${availableWidth}px`);\r\n }\r\n\r\n // Apply flexible height if needed\r\n if (rect.height > availableHeight) {\r\n this._renderer.setStyle(this._overlayElement, 'max-height', `${availableHeight}px`);\r\n }\r\n }\r\n\r\n private _setupEventListeners(): void {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n\r\n // Remove existing listeners\r\n this._removeEventListeners();\r\n\r\n // Set up resize listener\r\n this._resizeSubscription = (): void => {\r\n if (!this._isDisposed) {\r\n this.apply();\r\n }\r\n };\r\n window.addEventListener('resize', this._resizeSubscription);\r\n\r\n // Set up scroll listener\r\n this._scrollSubscription = (): void => {\r\n if (!this._isDisposed) {\r\n this.apply();\r\n }\r\n };\r\n window.addEventListener('scroll', this._scrollSubscription, true);\r\n }\r\n\r\n private _removeEventListeners(): void {\r\n if (this._resizeSubscription) {\r\n window.removeEventListener('resize', this._resizeSubscription);\r\n this._resizeSubscription = undefined;\r\n }\r\n\r\n if (this._scrollSubscription) {\r\n window.removeEventListener('scroll', this._scrollSubscription, true);\r\n this._scrollSubscription = undefined;\r\n }\r\n }\r\n\r\n private _getViewportSize(): { width: number; height: number } {\r\n return {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n };\r\n }\r\n\r\n private _getScrollableViewProperties(): FuiScrollableViewProperties {\r\n const viewportSize = this._getViewportSize();\r\n return {\r\n size: viewportSize,\r\n scrollPosition: {\r\n top: window.pageYOffset || document.documentElement.scrollTop,\r\n left: window.pageXOffset || document.documentElement.scrollLeft,\r\n },\r\n };\r\n }\r\n}\r\n","import { FuiScrollStrategy, FuiOverlayRef } from '../overlay.types';\r\n\r\n/**\r\n * # FuiNoopScrollStrategy\r\n *\r\n * A scroll strategy that does nothing when the user scrolls.\r\n * This is useful for overlays that should remain in their position\r\n * regardless of scrolling.\r\n */\r\nexport class FuiNoopScrollStrategy implements FuiScrollStrategy {\r\n enable(): void {\r\n // Intentionally empty\r\n }\r\n\r\n disable(): void {\r\n // Intentionally empty\r\n }\r\n\r\n attach(_overlayRef: FuiOverlayRef): void {\r\n // Intentionally empty\r\n }\r\n\r\n detach(): void {\r\n // Intentionally empty\r\n }\r\n}\r\n\r\n/**\r\n * # FuiCloseScrollStrategy\r\n *\r\n * A scroll strategy that closes the overlay when the user scrolls.\r\n * This is useful for overlays like tooltips or dropdowns that should\r\n * disappear when the user scrolls away from the trigger element.\r\n */\r\nexport class FuiCloseScrollStrategy implements FuiScrollStrategy {\r\n private _overlayRef?: FuiOverlayRef;\r\n private _scrollListener?: () => void;\r\n private _isEnabled = false;\r\n\r\n constructor(private _threshold = 0) {}\r\n\r\n enable(): void {\r\n if (this._isEnabled || !this._overlayRef) {\r\n return;\r\n }\r\n\r\n this._isEnabled = true;\r\n this._scrollListener = (): void => {\r\n if (this._overlayRef) {\r\n this._overlayRef.dispose();\r\n }\r\n };\r\n\r\n window.addEventListener('scroll', this._scrollListener, true);\r\n }\r\n\r\n disable(): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n\r\n this._isEnabled = false;\r\n this._removeScrollListener();\r\n }\r\n\r\n attach(overlayRef: FuiOverlayRef): void {\r\n this._overlayRef = overlayRef;\r\n }\r\n\r\n detach(): void {\r\n this.disable();\r\n this._overlayRef = undefined;\r\n }\r\n\r\n private _removeScrollListener(): void {\r\n if (this._scrollListener) {\r\n window.removeEventListener('scroll', this._scrollListener, true);\r\n this._scrollListener = undefined;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * # FuiRepositionScrollStrategy\r\n *\r\n * A scroll strategy that repositions the overlay when the user scrolls.\r\n * This is useful for overlays that should follow their trigger element\r\n * as it moves due to scrolling.\r\n */\r\nexport class FuiRepositionScrollStrategy implements FuiScrollStrategy {\r\n private _overlayRef?: FuiOverlayRef;\r\n private _scrollListener?: () => void;\r\n private _isEnabled = false;\r\n\r\n constructor(\r\n private _scrollThrottle = 20,\r\n private _autoClose = false,\r\n ) {}\r\n\r\n enable(): void {\r\n if (this._isEnabled || !this._overlayRef) {\r\n return;\r\n }\r\n\r\n this._isEnabled = true;\r\n let timeoutId: number | null = null;\r\n\r\n this._scrollListener = (): void => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n\r\n timeoutId = window.setTimeout((): void => {\r\n if (this._overlayRef) {\r\n if (this._autoClose && this._isScrolledOutOfView()) {\r\n this._overlayRef.dispose();\r\n } else {\r\n this._overlayRef.updatePosition();\r\n }\r\n }\r\n }, this._scrollThrottle);\r\n };\r\n\r\n window.addEventListener('scroll', this._scrollListener, true);\r\n }\r\n\r\n disable(): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n\r\n this._isEnabled = false;\r\n this._removeScrollListener();\r\n }\r\n\r\n attach(overlayRef: FuiOverlayRef): void {\r\n this._overlayRef = overlayRef;\r\n }\r\n\r\n detach(): void {\r\n this.disable();\r\n this._overlayRef = undefined;\r\n }\r\n\r\n private _removeScrollListener(): void {\r\n if (this._scrollListener) {\r\n window.removeEventListener('scroll', this._scrollListener, true);\r\n this._scrollListener = undefined;\r\n }\r\n }\r\n\r\n private _isScrolledOutOfView(): boolean {\r\n // This is a simplified implementation\r\n // In a real implementation, you would check if the origin element\r\n // is still visible in the viewport\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * # FuiBlockScrollStrategy\r\n *\r\n * A scroll strategy that prevents scrolling while the overlay is open.\r\n * This is useful for modal dialogs and other overlays that should\r\n * prevent interaction with the underlying content.\r\n */\r\nexport class FuiBlockScrollStrategy implements FuiScrollStrategy {\r\n private _previousHTMLStyles: Record<string, string> = {};\r\n private _previousBodyStyles: Record<string, string> = {};\r\n private _isEnabled = false;\r\n\r\n constructor(private _document?: Document) {}\r\n\r\n enable(): void {\r\n if (this._isEnabled) {\r\n return;\r\n }\r\n\r\n this._isEnabled = true;\r\n\r\n const doc = this._document ?? document;\r\n const html = doc.documentElement;\r\n const body = doc.body;\r\n\r\n if (!html || !body) {\r\n return;\r\n }\r\n\r\n // Store previous styles\r\n this._previousHTMLStyles = {\r\n overflow: html.style.overflow || '',\r\n };\r\n\r\n this._previousBodyStyles = {\r\n overflow: body.style.overflow || '',\r\n };\r\n\r\n // Apply blocking styles\r\n html.style.overflow = 'hidden';\r\n body.style.overflow = 'hidden';\r\n }\r\n\r\n disable(): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n\r\n this._isEnabled = false;\r\n\r\n const doc = this._document ?? document;\r\n const html = doc.documentElement;\r\n const body = doc.body;\r\n\r\n if (!html || !body) {\r\n return;\r\n }\r\n\r\n // Restore previous styles\r\n html.style.overflow = this._previousHTMLStyles['overflow'];\r\n body.style.overflow = this._previousBodyStyles['overflow'];\r\n\r\n // Clear stored styles\r\n this._previousHTMLStyles = {};\r\n this._previousBodyStyles = {};\r\n }\r\n\r\n attach(_overlayRef: FuiOverlayRef): void {\r\n // Block scroll strategy doesn't need the overlay reference\r\n }\r\n\r\n detach(): void {\r\n this.disable();\r\n }\r\n\r\n}\r\n\r\n/**\r\n * Factory functions for creating scroll strategies\r\n */\r\nexport const FUI_SCROLL_STRATEGIES = {\r\n /**\r\n * Creates a noop scroll strategy\r\n */\r\n noop: (): FuiNoopScrollStrategy => new FuiNoopScrollStrategy(),\r\n\r\n /**\r\n * Creates a close scroll strategy\r\n */\r\n close: (threshold = 0): FuiCloseScrollStrategy => new FuiCloseScrollStrategy(threshold),\r\n\r\n /**\r\n * Creates a reposition scroll strategy\r\n */\r\n reposition: (scrollThrottle = 20, autoClose = false): FuiRepositionScrollStrategy =>\r\n new FuiRepositionScrollStrategy(scrollThrottle, autoClose),\r\n\r\n /**\r\n * Creates a block scroll strategy\r\n * @param doc Optional Document reference for SSR compatibility\r\n */\r\n block: (doc?: Document): FuiBlockScrollStrategy => new FuiBlockScrollStrategy(doc),\r\n};\r\n","import {\r\n Injectable,\r\n Renderer2,\r\n RendererFactory2,\r\n inject,\r\n ComponentRef,\r\n createComponent,\r\n EnvironmentInjector,\r\n ElementRef,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport {\r\n FuiOverlayConfig,\r\n FuiOverlayRef,\r\n FuiConnectedPosition,\r\n FuiConnectedPositionStrategyOptions,\r\n FuiGlobalPositionStrategyOptions,\r\n} from './overlay.types';\r\nimport { FuiOverlayRefImpl } from './overlay-ref';\r\nimport { FuiOverlayContainerComponent } from './overlay-container.component';\r\nimport { FuiGlobalPositionStrategy } from './position/global-position-strategy';\r\nimport { FuiConnectedPositionStrategy } from './position/connected-position-strategy';\r\nimport { FUI_SCROLL_STRATEGIES } from './scroll/scroll-strategies';\r\n\r\n/**\r\n * # FuiOverlayService\r\n *\r\n * Core service for creating and managing overlays. This service provides a\r\n * comprehensive overlay system similar to Angular Material's overlay service,\r\n * with support for positioning strategies, scroll strategies, backdrop handling,\r\n * and focus management.\r\n *\r\n * ## Features\r\n * - Create overlays with flexible positioning strategies\r\n * - Global and connected positioning support\r\n * - Multiple scroll strategies (reposition, close, block, noop)\r\n * - Backdrop support with click detection\r\n * - Z-index management for stacking overlays\r\n * - Focus management and restoration\r\n * - Keyboard event handling\r\n * - Responsive positioning with collision detection\r\n *\r\n * ## Usage\r\n *\r\n * ### Basic Overlay\r\n * ```typescript\r\n * const overlayRef = this.overlay.create({\r\n * positionStrategy: this.overlay.position()\r\n * .global()\r\n * .centerHorizontally()\r\n * .centerVertically(),\r\n * hasBackdrop: true\r\n * });\r\n *\r\n * overlayRef.attach(myComponent);\r\n * ```\r\n *\r\n * ### Connected Overlay (Tooltip/Dropdown)\r\n * ```typescript\r\n * const overlayRef = this.overlay.create({\r\n * positionStrategy: this.overlay.position()\r\n * .connectedTo(this.triggerElement)\r\n * .withPositions([{\r\n * originX: 'center',\r\n * originY: 'bottom',\r\n * overlayX: 'center',\r\n * overlayY: 'top',\r\n * offsetY: 8\r\n * }]),\r\n * scrollStrategy: this.overlay.scrollStrategies.reposition()\r\n * });\r\n * ```\r\n */\r\n/** Base z-index for overlays */\r\nconst OVERLAY_BASE_Z_INDEX = 1000;\r\n/** Z-index increment for each new overlay */\r\nconst OVERLAY_Z_INDEX_INCREMENT = 10;\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FuiOverlayService {\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _rendererFactory = inject(RendererFactory2);\r\n private readonly _environmentInjector = inject(EnvironmentInjector);\r\n private readonly _renderer: Renderer2;\r\n\r\n private _overlayContainer?: ComponentRef<FuiOverlayContainerComponent>;\r\n private _nextUniqueId = 0;\r\n private _activeOverlays = new Set<FuiOverlayRef>();\r\n private _currentZIndex = OVERLAY_BASE_Z_INDEX;\r\n\r\n constructor() {\r\n this._renderer = this._rendererFactory.createRenderer(null, null);\r\n }\r\n\r\n /**\r\n * Creates a new overlay with the given configuration\r\n */\r\n create(config: FuiOverlayConfig = {}): FuiOverlayRef {\r\n const overlayElement = this._createOverlayElement();\r\n\r\n // Calculate z-index for this overlay (increments for each new overlay)\r\n const zIndex = this._getNextZIndex();\r\n\r\n const overlayRef = new FuiOverlayRefImpl(\r\n overlayElement,\r\n this._applyConfigDefaults(config),\r\n this._renderer,\r\n `fui-overlay-${this._nextUniqueId++}`,\r\n zIndex,\r\n );\r\n\r\n // Attach to container\r\n this._attachToContainer(overlayElement);\r\n\r\n // Track active overlay\r\n this._activeOverlays.add(overlayRef);\r\n\r\n // Set up disposal cleanup\r\n overlayRef.detachments.subscribe(() => {\r\n this._activeOverlays.delete(overlayRef);\r\n this._recalculateBaseZIndex();\r\n });\r\n\r\n return overlayRef;\r\n }\r\n\r\n /**\r\n * Gets the next available z-index for a new overlay\r\n */\r\n private _getNextZIndex(): number {\r\n this._currentZIndex += OVERLAY_Z_INDEX_INCREMENT;\r\n return this._currentZIndex;\r\n }\r\n\r\n /**\r\n * Recalculates the base z-index when overlays are disposed\r\n * Resets to base if no overlays are active\r\n */\r\n private _recalculateBaseZIndex(): void {\r\n if (this._activeOverlays.size === 0) {\r\n this._currentZIndex = OVERLAY_BASE_Z_INDEX;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the position builder for creating position strategies\r\n */\r\n position(): FuiOverlayPositionBuilder {\r\n return new FuiOverlayPositionBuilder(this._renderer);\r\n }\r\n\r\n /**\r\n * Gets the scroll strategies factory\r\n */\r\n get scrollStrategies(): typeof FUI_SCROLL_STRATEGIES {\r\n return FUI_SCROLL_STRATEGIES;\r\n }\r\n\r\n /**\r\n * Gets all currently active overlays\r\n */\r\n getActiveOverlays(): FuiOverlayRef[] {\r\n return Array.from(this._activeOverlays);\r\n }\r\n\r\n /**\r\n * Disposes all active overlays\r\n */\r\n disposeAll(): void {\r\n const overlays = Array.from(this._activeOverlays);\r\n overlays.forEach((overlay) => {\r\n overlay.dispose();\r\n });\r\n }\r\n\r\n private _createOverlayElement(): HTMLElement {\r\n const overlayElement = this._renderer.createElement('div');\r\n this._renderer.addClass(overlayElement, 'fui-overlay-pane');\r\n this._renderer.setStyle(overlayElement, 'pointer-events', 'auto');\r\n return overlayElement;\r\n }\r\n\r\n private _attachToContainer(overlayElement: HTMLElement): void {\r\n const container = this._getOverlayContainer();\r\n this._renderer.appendChild(container, overlayElement);\r\n }\r\n\r\n private _getOverlayContainer(): HTMLElement {\r\n if (!this._overlayContainer) {\r\n this._overlayContainer = createComponent(FuiOverlayContainerComponent, {\r\n environmentInjector: this._environmentInjector,\r\n });\r\n\r\n // Manually trigger ngOnInit to ensure container is attached to body\r\n this._overlayContainer.instance.ngOnInit();\r\n }\r\n\r\n return this._overlayContainer.instance.getContainerElement();\r\n }\r\n\r\n private _applyConfigDefaults(config: FuiOverlayConfig): FuiOverlayConfig {\r\n return {\r\n hasBackdrop: false,\r\n backdropClass: 'fui-overlay-backdrop',\r\n backdropClickBehavior: 'close',\r\n panelClass: '',\r\n scrollStrategy: this.scrollStrategies.noop(),\r\n direction: 'ltr',\r\n disposeOnNavigation: true,\r\n ...config,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * # FuiOverlayPositionBuilder\r\n *\r\n * Builder class for creating position strategies. Provides a fluent API\r\n * for configuring overlay positioning.\r\n */\r\nexport class FuiOverlayPositionBuilder {\r\n constructor(private _renderer: Renderer2) {}\r\n\r\n /**\r\n * Creates a global position strategy\r\n */\r\n global(options: FuiGlobalPositionStrategyOptions = {}): FuiGlobalPositionStrategy {\r\n return new FuiGlobalPositionStrategy(this._renderer, options);\r\n }\r\n\r\n /**\r\n * Creates a connected position strategy\r\n */\r\n connectedTo(\r\n origin: ElementRef<HTMLElement> | HTMLElement,\r\n positions?: FuiConnectedPosition[],\r\n ): FuiConnectedPositionStrategy {\r\n const defaultPositions: FuiConnectedPosition[] = [\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n },\r\n ];\r\n\r\n const options: FuiConnectedPositionStrategyOptions = {\r\n origin,\r\n positions: positions ?? defaultPositions,\r\n };\r\n\r\n return new FuiConnectedPositionStrategy(this._renderer, options);\r\n }\r\n\r\n /**\r\n * Creates a flexible connected position strategy with common tooltip positions\r\n */\r\n flexibleConnectedTo(\r\n origin: ElementRef<HTMLElement> | HTMLElement,\r\n preferredPosition: 'top' | 'bottom' | 'left' | 'right' = 'top',\r\n ): FuiConnectedPositionStrategy {\r\n const positions = this._getFlexiblePositions(preferredPosition);\r\n\r\n const options: FuiConnectedPositionStrategyOptions = {\r\n origin,\r\n positions,\r\n withPush: true,\r\n withFlexibleDimensions: true,\r\n viewportMargin: 8,\r\n };\r\n\r\n return new FuiConnectedPositionStrategy(this._renderer, options);\r\n }\r\n\r\n private _getFlexiblePositions(preferredPosition: string): FuiConnectedPosition[] {\r\n const positions: FuiConnectedPosition[] = [];\r\n\r\n switch (preferredPosition) {\r\n case 'top':\r\n positions.push(\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8 },\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8 },\r\n );\r\n break;\r\n case 'bottom':\r\n positions.push(\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8 },\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8 },\r\n );\r\n break;\r\n case 'left':\r\n positions.push(\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8 },\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8 },\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\r\n );\r\n break;\r\n case 'right':\r\n positions.push(\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8 },\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8 },\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\r\n );\r\n break;\r\n }\r\n\r\n return positions;\r\n }\r\n}\r\n","import { DOCUMENT, inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\r\n\r\n/**\r\n * Portal attachment result containing the attached element and cleanup function\r\n */\r\nexport interface PortalAttachment {\r\n /** The element that was attached to the portal outlet */\r\n element: HTMLElement;\r\n /** Function to detach the element and clean up */\r\n detach: () => void;\r\n}\r\n\r\n/**\r\n * # Portal Service\r\n *\r\n * A service for dynamically moving DOM elements to different locations in the DOM tree,\r\n * particularly useful for moving elements to the document body to avoid clipping issues\r\n * with parent containers that have overflow: hidden.\r\n *\r\n * ## Features\r\n * - Move elements to document body or any other container\r\n * - Maintain element references and event listeners\r\n * - Proper cleanup when detaching\r\n * - Support for multiple portal outlets\r\n *\r\n * ## Usage\r\n *\r\n * ```typescript\r\n * constructor(private portalService: PortalService) {}\r\n *\r\n * openMenu() {\r\n * const menuElement = this.menuElementRef.nativeElement;\r\n * this.portalAttachment = this.portalService.attachToBody(menuElement);\r\n * }\r\n *\r\n * closeMenu() {\r\n * if (this.portalAttachment) {\r\n * this.portalAttachment.detach();\r\n * this.portalAttachment = null;\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class PortalService {\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _renderer: Renderer2;\r\n private readonly _rendererFactory = inject(RendererFactory2);\r\n\r\n constructor() {\r\n this._renderer = this._rendererFactory.createRenderer(null, null);\r\n }\r\n\r\n /**\r\n * Attaches an element to the document body\r\n * @param element The element to attach\r\n * @returns PortalAttachment with detach function\r\n */\r\n attachToBody(element: HTMLElement): PortalAttachment {\r\n return this.attachToContainer(element, this._document.body);\r\n }\r\n\r\n /**\r\n * Attaches an element to a specific container\r\n * @param element The element to attach\r\n * @param container The container to attach to\r\n * @returns PortalAttachment with detach function\r\n */\r\n attachToContainer(element: HTMLElement, container: HTMLElement): PortalAttachment {\r\n // Store the original parent and next sibling for restoration\r\n const originalParent = element.parentElement;\r\n const originalNextSibling = element.nextSibling;\r\n\r\n // Move the element to the container\r\n this._renderer.appendChild(container, element);\r\n\r\n // Return attachment object with detach function\r\n return {\r\n element,\r\n detach: (): void => {\r\n // Restore the element to its original position\r\n if (originalParent) {\r\n if (originalNextSibling) {\r\n this._renderer.insertBefore(originalParent, element, originalNextSibling);\r\n } else {\r\n this._renderer.appendChild(originalParent, element);\r\n }\r\n }\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Creates a portal outlet element and attaches it to the document body\r\n * @param className Optional CSS class for the outlet\r\n * @returns The created outlet element\r\n */\r\n createBodyOutlet(className?: string): HTMLElement {\r\n const outlet = this._renderer.createElement('div');\r\n\r\n if (className) {\r\n this._renderer.addClass(outlet, className);\r\n }\r\n\r\n // Add some default styles to ensure proper positioning\r\n this._renderer.setStyle(outlet, 'position', 'absolute');\r\n this._renderer.setStyle(outlet, 'top', '0');\r\n this._renderer.setStyle(outlet, 'left', '0');\r\n this._renderer.setStyle(outlet, 'pointer-events', 'none');\r\n this._renderer.setStyle(outlet, 'z-index', '1000');\r\n\r\n this._renderer.appendChild(this._document.body, outlet);\r\n\r\n return outlet;\r\n }\r\n\r\n /**\r\n * Removes a portal outlet from the document\r\n * @param outlet The outlet element to remove\r\n */\r\n removeOutlet(outlet: HTMLElement): void {\r\n if (outlet.parentElement) {\r\n this._renderer.removeChild(outlet.parentElement, outlet);\r\n }\r\n }\r\n\r\n /**\r\n * Checks if an element is currently attached to a portal\r\n * @param element The element to check\r\n * @returns True if the element is attached to the body or not in its original position\r\n */\r\n isAttachedToPortal(element: HTMLElement): boolean {\r\n // Simple check: if the element's parent is the body, it's likely in a portal\r\n // This is a heuristic and might need refinement based on specific use cases\r\n return element.parentElement === this._document.body;\r\n }\r\n}\r\n","// Core overlay exports\r\nexport * from './overlay.types';\r\nexport * from './overlay.service';\r\nexport * from './overlay-ref';\r\nexport * from './overlay-container.component';\r\n\r\n// Position strategies\r\nexport * from './position/global-position-strategy';\r\nexport * from './position/connected-position-strategy';\r\n\r\n// Scroll strategies\r\nexport * from './scroll/scroll-strategies';\r\n\r\n// Portal service\r\nexport * from './portal.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DOCUMENT"],"mappings":"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"}
|