@aquera/nile-elements 1.2.4-beta-1.1 → 1.2.5-beta-1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/demo/index.html +13 -19
- package/dist/{fixture-d1470b58.cjs.js → fixture-5b79f853.cjs.js} +2 -2
- package/dist/{fixture-dff65c89.cjs.js.map → fixture-5b79f853.cjs.js.map} +1 -1
- package/dist/{fixture-dff65c89.cjs.js → fixture-73855806.cjs.js} +2 -2
- package/dist/{fixture-d1470b58.cjs.js.map → fixture-73855806.cjs.js.map} +1 -1
- package/dist/fixture-90b199c4.esm.js +569 -0
- package/dist/{fixture-985bba12.esm.js → fixture-9871e8a9.esm.js} +1 -1
- package/dist/fixture-c1d78368.cjs.js +395 -0
- package/dist/fixture-c1d78368.cjs.js.map +1 -0
- package/dist/fixture-cf7bfcf5.esm.js +569 -0
- package/dist/fixture-dbd66009.cjs.js +395 -0
- package/dist/fixture-dbd66009.cjs.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/nile-accordion/nile-accordian.test.cjs.js +1 -1
- package/dist/nile-accordion/nile-accordian.test.esm.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.test.esm.js +1 -1
- package/dist/nile-avatar/nile-avatar.test.cjs.js +1 -1
- package/dist/nile-avatar/nile-avatar.test.esm.js +1 -1
- package/dist/nile-badge/nile-badge.test.cjs.js +1 -1
- package/dist/nile-badge/nile-badge.test.esm.js +1 -1
- package/dist/nile-button/nile-button.test.cjs.js +1 -1
- package/dist/nile-button/nile-button.test.esm.js +1 -1
- package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js +1 -1
- package/dist/nile-button-toggle-group/nile-button-toggle-group.test.esm.js +1 -1
- package/dist/nile-calendar/nile-calendar.test.cjs.js +1 -1
- package/dist/nile-calendar/nile-calendar.test.esm.js +1 -1
- package/dist/nile-card/nile-card.test.cjs.js +1 -1
- package/dist/nile-card/nile-card.test.esm.js +1 -1
- package/dist/nile-checkbox/nile-checkbox.test.cjs.js +1 -1
- package/dist/nile-checkbox/nile-checkbox.test.esm.js +1 -1
- package/dist/nile-chip/nile-chip.test.cjs.js +1 -1
- package/dist/nile-chip/nile-chip.test.esm.js +1 -1
- package/dist/nile-code-editor/backup_nile-code-editor copy.cjs.js +2 -0
- package/dist/nile-code-editor/backup_nile-code-editor copy.cjs.js.map +1 -0
- package/dist/nile-code-editor/backup_nile-code-editor copy.esm.js +1 -0
- package/dist/nile-dialog/nile-dialog.test.cjs.js +1 -1
- package/dist/nile-dialog/nile-dialog.test.esm.js +1 -1
- package/dist/nile-drawer/nile-drawer.test.cjs.js +1 -1
- package/dist/nile-drawer/nile-drawer.test.esm.js +1 -1
- package/dist/nile-dropdown/nile-dropdown.test.cjs.js +1 -1
- package/dist/nile-dropdown/nile-dropdown.test.esm.js +1 -1
- package/dist/nile-empty-state/nile-empty-state.test.cjs.js +1 -1
- package/dist/nile-empty-state/nile-empty-state.test.esm.js +1 -1
- package/dist/nile-error-message/nile-error-message.test.cjs.js +1 -1
- package/dist/nile-error-message/nile-error-message.test.esm.js +1 -1
- package/dist/nile-file-preview/nile-file-preview.test.cjs.js +1 -1
- package/dist/nile-file-preview/nile-file-preview.test.esm.js +1 -1
- package/dist/nile-file-upload/nile-file-upload.test.cjs.js +1 -1
- package/dist/nile-file-upload/nile-file-upload.test.esm.js +1 -1
- package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js +1 -1
- package/dist/nile-filter-chip/nile-filter-chip.test.esm.js +1 -1
- package/dist/nile-form-group/nile-form-group.test.cjs.js +1 -1
- package/dist/nile-form-group/nile-form-group.test.esm.js +1 -1
- package/dist/nile-form-help-text/nile-form-help-text.test.cjs.js +1 -1
- package/dist/nile-form-help-text/nile-form-help-text.test.esm.js +1 -1
- package/dist/nile-hero/nile-hero.test.cjs.js +1 -1
- package/dist/nile-hero/nile-hero.test.esm.js +1 -1
- package/dist/nile-icon/nile-icon.test.cjs.js +1 -1
- package/dist/nile-icon/nile-icon.test.esm.js +1 -1
- package/dist/nile-input/nile-input.test.cjs.js +1 -1
- package/dist/nile-input/nile-input.test.esm.js +1 -1
- package/dist/nile-link/nile-link.test.cjs.js +1 -1
- package/dist/nile-link/nile-link.test.esm.js +1 -1
- package/dist/nile-loader/nile-loader.test.cjs.js +1 -1
- package/dist/nile-loader/nile-loader.test.esm.js +1 -1
- package/dist/nile-popover/nile-popover.test.cjs.js +1 -1
- package/dist/nile-popover/nile-popover.test.esm.js +1 -1
- package/dist/nile-popup/nile-popup.test.cjs.js +1 -1
- package/dist/nile-popup/nile-popup.test.esm.js +1 -1
- package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js +1 -1
- package/dist/nile-progress-bar/nile-progress-bar.test.esm.js +1 -1
- package/dist/nile-radio/nile-radio.test.cjs.js +1 -1
- package/dist/nile-radio/nile-radio.test.esm.js +1 -1
- package/dist/nile-radio-group/nile-radio-group.test.cjs.js +1 -1
- package/dist/nile-radio-group/nile-radio-group.test.esm.js +1 -1
- package/dist/nile-select/nile-select.test.cjs.js +1 -1
- package/dist/nile-select/nile-select.test.esm.js +1 -1
- package/dist/nile-sidebar/index.cjs.js +2 -0
- package/dist/nile-sidebar/index.cjs.js.map +1 -0
- package/dist/nile-sidebar/index.esm.js +75 -0
- package/dist/nile-sidebar-menu/index.cjs.js +2 -0
- package/dist/nile-sidebar-menu/index.cjs.js.map +1 -0
- package/dist/nile-sidebar-menu/index.esm.js +1 -0
- package/dist/nile-sidebar-menu/nile-sidebar-menu.cjs.js +2 -0
- package/dist/nile-sidebar-menu/nile-sidebar-menu.cjs.js.map +1 -0
- package/dist/nile-sidebar-menu/nile-sidebar-menu.css.cjs.js +2 -0
- package/dist/nile-sidebar-menu/nile-sidebar-menu.css.cjs.js.map +1 -0
- package/dist/nile-sidebar-menu/nile-sidebar-menu.css.esm.js +38 -0
- package/dist/nile-sidebar-menu/nile-sidebar-menu.esm.js +10 -0
- package/dist/nile-sidebar-menu-items/index.cjs.js +2 -0
- package/dist/nile-sidebar-menu-items/index.cjs.js.map +1 -0
- package/dist/nile-sidebar-menu-items/index.esm.js +1 -0
- package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.cjs.js +2 -0
- package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.cjs.js.map +1 -0
- package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.css.cjs.js +2 -0
- package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.css.cjs.js.map +1 -0
- package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.css.esm.js +36 -0
- package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.esm.js +15 -0
- package/dist/nile-sidebar-wrapper/index.cjs.js +2 -0
- package/dist/nile-sidebar-wrapper/index.cjs.js.map +1 -0
- package/dist/nile-sidebar-wrapper/index.esm.js +1 -0
- package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.cjs.js +2 -0
- package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.cjs.js.map +1 -0
- package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.css.cjs.js +2 -0
- package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.css.cjs.js.map +1 -0
- package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.css.esm.js +105 -0
- package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.esm.js +16 -0
- package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js +1 -1
- package/dist/nile-slide-toggle/nile-slide-toggle.test.esm.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.test.cjs.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.test.esm.js +1 -1
- package/dist/nile-textarea/nile-textarea.test.cjs.js +1 -1
- package/dist/nile-textarea/nile-textarea.test.esm.js +1 -1
- package/dist/nile-virtual-select/group-manager.cjs.js +2 -0
- package/dist/nile-virtual-select/group-manager.cjs.js.map +1 -0
- package/dist/nile-virtual-select/group-manager.esm.js +1 -0
- package/dist/nile-virtual-select/nile-virtual-select.cjs.js +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.cjs.js.map +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.esm.js +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.test.cjs.js +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.test.esm.js +1 -1
- package/dist/nile-virtual-select/temp_nile-virtual-select copy.cjs.js +2 -0
- package/dist/nile-virtual-select/temp_nile-virtual-select copy.cjs.js.map +1 -0
- package/dist/nile-virtual-select/temp_nile-virtual-select copy.esm.js +231 -0
- package/dist/scopedElementsWrapper-4c29be11.esm.js +7 -0
- package/dist/scopedElementsWrapper-a112fc73.cjs.js +6 -0
- package/dist/scopedElementsWrapper-a112fc73.cjs.js.map +1 -0
- package/dist/src/internal/portal-manager.d.ts +53 -0
- package/dist/src/internal/portal-manager.js +196 -0
- package/dist/src/internal/portal-manager.js.map +1 -0
- package/dist/src/internal/portal.d.ts +60 -0
- package/dist/src/internal/portal.js +199 -0
- package/dist/src/internal/portal.js.map +1 -0
- package/dist/src/internal/resizable-helper.d.ts +59 -0
- package/dist/src/internal/resizable-helper.js +115 -0
- package/dist/src/internal/resizable-helper.js.map +1 -0
- package/dist/src/internal/resizable-styles.d.ts +16 -0
- package/dist/src/internal/resizable-styles.js +144 -0
- package/dist/src/internal/resizable-styles.js.map +1 -0
- package/dist/src/internal/virtualizer-error-handler.d.ts +30 -0
- package/dist/src/internal/virtualizer-error-handler.js +82 -0
- package/dist/src/internal/virtualizer-error-handler.js.map +1 -0
- package/dist/src/lib/index.d.ts +7 -0
- package/dist/src/lib/index.js +8 -0
- package/dist/src/lib/index.js.map +1 -0
- package/dist/src/lib/virtualize.d.ts +32 -0
- package/dist/src/lib/virtualize.js +105 -0
- package/dist/src/lib/virtualize.js.map +1 -0
- package/dist/src/lib/virtualize.test.d.ts +7 -0
- package/dist/src/lib/virtualize.test.js +57 -0
- package/dist/src/lib/virtualize.test.js.map +1 -0
- package/dist/src/nile-badge/__snapshots__/nile-badge.test.snap.js +17 -0
- package/dist/src/nile-calendar/__snapshots__/nile-calendar.test.snap.js +310 -0
- package/dist/src/nile-card/__snapshots__/nile-card.test.snap.js +34 -0
- package/dist/src/nile-checkbox/__snapshots__/nile-checkbox.test.snap.js +31 -0
- package/dist/src/nile-code-editor/Old_theme copy.d.ts +191 -0
- package/dist/src/nile-code-editor/Old_theme copy.js +193 -0
- package/dist/src/nile-code-editor/Old_theme copy.js.map +1 -0
- package/dist/src/nile-code-editor/backup_nile-code-editor copy.d.ts +0 -0
- package/dist/src/nile-code-editor/backup_nile-code-editor copy.js +675 -0
- package/dist/src/nile-code-editor/backup_nile-code-editor copy.js.map +1 -0
- package/dist/src/nile-code-editor/theme copy.d.ts +191 -0
- package/dist/src/nile-code-editor/theme copy.js +193 -0
- package/dist/src/nile-code-editor/theme copy.js.map +1 -0
- package/dist/src/nile-grid/data-processor.d.ts +37 -0
- package/dist/src/nile-grid/data-processor.js +122 -0
- package/dist/src/nile-grid/data-processor.js.map +1 -0
- package/dist/src/nile-grid/event-handlers.d.ts +35 -0
- package/dist/src/nile-grid/event-handlers.js +158 -0
- package/dist/src/nile-grid/event-handlers.js.map +1 -0
- package/dist/src/nile-grid/renderer.d.ts +8 -0
- package/dist/src/nile-grid/renderer.js +78 -0
- package/dist/src/nile-grid/renderer.js.map +1 -0
- package/dist/src/nile-grid/resize-handler.d.ts +4 -0
- package/dist/src/nile-grid/resize-handler.js +36 -0
- package/dist/src/nile-grid/resize-handler.js.map +1 -0
- package/dist/src/nile-grid/types.d.ts +32 -0
- package/dist/src/nile-grid/types.js +2 -0
- package/dist/src/nile-grid/types.js.map +1 -0
- package/dist/src/nile-grid/utils.d.ts +4 -0
- package/dist/src/nile-grid/utils.js +32 -0
- package/dist/src/nile-grid/utils.js.map +1 -0
- package/dist/src/nile-hero/__snapshots__/nile-hero.test.snap.js +47 -0
- package/dist/src/nile-icon/__snapshots__/nile-icon.test.snap.js +16 -0
- package/dist/src/nile-input/__snapshots__/nile-input.test.snap.js +75 -0
- package/dist/src/nile-popover/__snapshots__/nile-popover.test.snap.js +22 -0
- package/dist/src/nile-popover/popover-portal-handler.d.ts +21 -0
- package/dist/src/nile-popover/popover-portal-handler.js +106 -0
- package/dist/src/nile-popover/popover-portal-handler.js.map +1 -0
- package/dist/src/nile-popover/portal-manager.d.ts +51 -0
- package/dist/src/nile-popover/portal-manager.js +421 -0
- package/dist/src/nile-popover/portal-manager.js.map +1 -0
- package/dist/src/nile-popover/portal-utils.d.ts +55 -0
- package/dist/src/nile-popover/portal-utils.js +322 -0
- package/dist/src/nile-popover/portal-utils.js.map +1 -0
- package/dist/src/nile-portal-wrapper/index.d.ts +1 -0
- package/dist/src/nile-portal-wrapper/index.js +2 -0
- package/dist/src/nile-portal-wrapper/index.js.map +1 -0
- package/dist/src/nile-portal-wrapper/nile-portal-wrapper.d.ts +47 -0
- package/dist/src/nile-portal-wrapper/nile-portal-wrapper.js +451 -0
- package/dist/src/nile-portal-wrapper/nile-portal-wrapper.js.map +1 -0
- package/dist/src/nile-rich-text-editor/utils.d.ts +13 -0
- package/dist/src/nile-rich-text-editor/utils.js +537 -1
- package/dist/src/nile-rich-text-editor/utils.js.map +1 -1
- package/dist/src/nile-select/body-append-manager.d.ts +90 -0
- package/dist/src/nile-select/body-append-manager.js +298 -0
- package/dist/src/nile-select/body-append-manager.js.map +1 -0
- package/dist/src/nile-table-body/virtual-scroll-helper.d.ts +9 -0
- package/dist/src/nile-table-body/virtual-scroll-helper.js +24 -0
- package/dist/src/nile-table-body/virtual-scroll-helper.js.map +1 -0
- package/dist/src/nile-virtual-select/body-append-helper.d.ts +16 -0
- package/dist/src/nile-virtual-select/body-append-helper.js +95 -0
- package/dist/src/nile-virtual-select/body-append-helper.js.map +1 -0
- package/dist/src/nile-virtual-select/group-manager.d.ts +32 -0
- package/dist/src/nile-virtual-select/group-manager.js +134 -0
- package/dist/src/nile-virtual-select/group-manager.js.map +1 -0
- package/dist/src/nile-virtual-select/nile-virtual-select.d.ts +0 -1
- package/dist/src/nile-virtual-select/nile-virtual-select.js +5 -11
- package/dist/src/nile-virtual-select/nile-virtual-select.js.map +1 -1
- package/dist/src/nile-virtual-select/portal-utils.d.ts +65 -0
- package/dist/src/nile-virtual-select/portal-utils.js +376 -0
- package/dist/src/nile-virtual-select/portal-utils.js.map +1 -0
- package/dist/src/nile-virtual-select/temp_nile-virtual-select copy.d.ts +273 -0
- package/dist/src/nile-virtual-select/temp_nile-virtual-select copy.js +1305 -0
- package/dist/src/nile-virtual-select/temp_nile-virtual-select copy.js.map +1 -0
- package/dist/src/nile-virtual-select/virtualizer-error-handler.d.ts +21 -0
- package/dist/src/nile-virtual-select/virtualizer-error-handler.js +56 -0
- package/dist/src/nile-virtual-select/virtualizer-error-handler.js.map +1 -0
- package/dist/src/nile-virtual-select-disabled/index.d.ts +1 -0
- package/dist/src/nile-virtual-select-disabled/index.js +2 -0
- package/dist/src/nile-virtual-select-disabled/index.js.map +1 -0
- package/dist/src/nile-virtual-select-disabled/nile-virtual-select.css.d.ts +12 -0
- package/dist/src/nile-virtual-select-disabled/nile-virtual-select.css.js +538 -0
- package/dist/src/nile-virtual-select-disabled/nile-virtual-select.css.js.map +1 -0
- package/dist/src/nile-virtual-select-disabled/nile-virtual-select.d.ts +299 -0
- package/dist/src/nile-virtual-select-disabled/nile-virtual-select.js +1441 -0
- package/dist/src/nile-virtual-select-disabled/nile-virtual-select.js.map +1 -0
- package/dist/src/nile-virtual-select-disabled/nile-virtual-select.test.d.ts +7 -0
- package/dist/src/nile-virtual-select-disabled/nile-virtual-select.test.js +631 -0
- package/dist/src/nile-virtual-select-disabled/nile-virtual-select.test.js.map +1 -0
- package/dist/src/nile-virtual-select-disabled/portal-manager.d.ts +45 -0
- package/dist/src/nile-virtual-select-disabled/portal-manager.js +333 -0
- package/dist/src/nile-virtual-select-disabled/portal-manager.js.map +1 -0
- package/dist/src/nile-virtual-select-disabled/renderer.d.ts +16 -0
- package/dist/src/nile-virtual-select-disabled/renderer.js +79 -0
- package/dist/src/nile-virtual-select-disabled/renderer.js.map +1 -0
- package/dist/src/nile-virtual-select-disabled/search-manager.d.ts +12 -0
- package/dist/src/nile-virtual-select-disabled/search-manager.js +40 -0
- package/dist/src/nile-virtual-select-disabled/search-manager.js.map +1 -0
- package/dist/src/nile-virtual-select-disabled/selection-manager.d.ts +12 -0
- package/dist/src/nile-virtual-select-disabled/selection-manager.js +64 -0
- package/dist/src/nile-virtual-select-disabled/selection-manager.js.map +1 -0
- package/dist/src/nile-virtual-select-disabled/types.d.ts +50 -0
- package/dist/src/nile-virtual-select-disabled/types.js +8 -0
- package/dist/src/nile-virtual-select-disabled/types.js.map +1 -0
- package/dist/src/nile-virtual-table-body/index.d.ts +2 -0
- package/dist/src/nile-virtual-table-body/index.js +3 -0
- package/dist/src/nile-virtual-table-body/index.js.map +1 -0
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.d.ts +1 -0
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.js +44 -0
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.js.map +1 -0
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.d.ts +50 -0
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.js +135 -0
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.js.map +1 -0
- package/dist/src/nile-virtual-table-body/renderer.d.ts +16 -0
- package/dist/src/nile-virtual-table-body/renderer.js +49 -0
- package/dist/src/nile-virtual-table-body/renderer.js.map +1 -0
- package/dist/src/utilities/stepper-utils.d.ts +71 -0
- package/dist/src/utilities/stepper-utils.js +108 -0
- package/dist/src/utilities/stepper-utils.js.map +1 -0
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/nile-virtual-select/nile-virtual-select.ts +5 -13
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
import { autoUpdate, computePosition, flip, offset, shift, platform } from '@floating-ui/dom';
|
|
2
|
+
import { PortalUtils, PortalContentUtils, PortalEventUtils } from './portal-utils';
|
|
3
|
+
export class PopoverPortalManager {
|
|
4
|
+
constructor(component) {
|
|
5
|
+
this.portalContainer = null;
|
|
6
|
+
this.originalPopoverParent = null;
|
|
7
|
+
this.measuredPopoverHeight = null;
|
|
8
|
+
this.clonedPopover = null;
|
|
9
|
+
this.cleanupAutoUpdate = null;
|
|
10
|
+
this.currentPlacement = 'top';
|
|
11
|
+
this.currentMiddlewareData = null;
|
|
12
|
+
this.component = component;
|
|
13
|
+
}
|
|
14
|
+
createPortalAppendContainer() {
|
|
15
|
+
const container = document.createElement('div');
|
|
16
|
+
container.style.position = 'absolute';
|
|
17
|
+
container.style.zIndex = '9999';
|
|
18
|
+
container.style.pointerEvents = 'none';
|
|
19
|
+
container.style.width = 'auto';
|
|
20
|
+
container.style.maxWidth = 'none';
|
|
21
|
+
container.style.minWidth = '200px';
|
|
22
|
+
container.className = 'nile-popover-portal-append';
|
|
23
|
+
return container;
|
|
24
|
+
}
|
|
25
|
+
positionPortalAppend() {
|
|
26
|
+
if (!this.portalContainer || !this.component.isShow)
|
|
27
|
+
return;
|
|
28
|
+
this.measurePopoverHeight();
|
|
29
|
+
this.computeFloatingUIPosition();
|
|
30
|
+
}
|
|
31
|
+
measurePopoverHeight() {
|
|
32
|
+
if (this.measuredPopoverHeight || !this.portalContainer)
|
|
33
|
+
return;
|
|
34
|
+
this.portalContainer.style.position = 'absolute';
|
|
35
|
+
this.portalContainer.style.visibility = 'hidden';
|
|
36
|
+
this.portalContainer.style.top = '0px';
|
|
37
|
+
this.portalContainer.style.left = '0px';
|
|
38
|
+
this.portalContainer.offsetHeight;
|
|
39
|
+
this.measuredPopoverHeight = this.portalContainer.offsetHeight;
|
|
40
|
+
this.portalContainer.style.visibility = '';
|
|
41
|
+
}
|
|
42
|
+
async computeFloatingUIPosition() {
|
|
43
|
+
if (!this.portalContainer)
|
|
44
|
+
return;
|
|
45
|
+
const referenceElement = this.component.querySelector('[slot="anchor"]') || this.component;
|
|
46
|
+
const floatingElement = this.portalContainer;
|
|
47
|
+
try {
|
|
48
|
+
const { x, y, placement, middlewareData } = await this.calculateFloatingUIPosition(referenceElement, floatingElement);
|
|
49
|
+
this.applyFloatingUIPosition(floatingElement, referenceElement, x, y, placement, middlewareData);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
console.warn('Floating UI positioning failed, falling back to simple positioning:', error);
|
|
53
|
+
this.fallbackPositioning();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async calculateFloatingUIPosition(referenceElement, floatingElement) {
|
|
57
|
+
const boundary = PortalUtils.findBoundaryElements(referenceElement);
|
|
58
|
+
const initialPlacement = this.getInitialPlacement();
|
|
59
|
+
const middleware = this.createFloatingUIMiddleware(boundary);
|
|
60
|
+
return await computePosition(referenceElement, floatingElement, {
|
|
61
|
+
placement: initialPlacement,
|
|
62
|
+
strategy: 'fixed',
|
|
63
|
+
middleware,
|
|
64
|
+
platform: this.createCustomPlatform()
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
getInitialPlacement() {
|
|
68
|
+
return this.component.placement || 'top';
|
|
69
|
+
}
|
|
70
|
+
createFloatingUIMiddleware(boundary) {
|
|
71
|
+
return [
|
|
72
|
+
offset(this.component.distance || 18),
|
|
73
|
+
flip({
|
|
74
|
+
fallbackPlacements: this.getFallbackPlacements(),
|
|
75
|
+
fallbackStrategy: 'bestFit',
|
|
76
|
+
padding: 10,
|
|
77
|
+
boundary: boundary
|
|
78
|
+
}),
|
|
79
|
+
shift({
|
|
80
|
+
padding: 10,
|
|
81
|
+
crossAxis: true,
|
|
82
|
+
boundary: boundary
|
|
83
|
+
})
|
|
84
|
+
];
|
|
85
|
+
}
|
|
86
|
+
getFallbackPlacements() {
|
|
87
|
+
const basePlacement = this.component.placement || 'top';
|
|
88
|
+
const placements = [];
|
|
89
|
+
// Generate fallback placements based on the base placement
|
|
90
|
+
if (basePlacement.startsWith('top')) {
|
|
91
|
+
placements.push('bottom', 'right', 'left', 'top-start', 'top-end', 'bottom-start', 'bottom-end');
|
|
92
|
+
}
|
|
93
|
+
else if (basePlacement.startsWith('bottom')) {
|
|
94
|
+
placements.push('top', 'right', 'left', 'bottom-start', 'bottom-end', 'top-start', 'top-end');
|
|
95
|
+
}
|
|
96
|
+
else if (basePlacement.startsWith('left')) {
|
|
97
|
+
placements.push('right', 'top', 'bottom', 'left-start', 'left-end', 'right-start', 'right-end');
|
|
98
|
+
}
|
|
99
|
+
else if (basePlacement.startsWith('right')) {
|
|
100
|
+
placements.push('left', 'top', 'bottom', 'right-start', 'right-end', 'left-start', 'left-end');
|
|
101
|
+
}
|
|
102
|
+
return placements;
|
|
103
|
+
}
|
|
104
|
+
createCustomPlatform() {
|
|
105
|
+
return platform;
|
|
106
|
+
}
|
|
107
|
+
positionArrow(floatingElement, referenceElement, placement) {
|
|
108
|
+
if (!this.component.arrow)
|
|
109
|
+
return;
|
|
110
|
+
const arrowElement = floatingElement.querySelector('.popup__arrow');
|
|
111
|
+
if (!arrowElement)
|
|
112
|
+
return;
|
|
113
|
+
const referenceRect = referenceElement.getBoundingClientRect();
|
|
114
|
+
const floatingRect = floatingElement.getBoundingClientRect();
|
|
115
|
+
// Calculate arrow position based on placement
|
|
116
|
+
const arrowSize = 18; // Default arrow size
|
|
117
|
+
const arrowPadding = 8; // Padding from edge
|
|
118
|
+
let top = '';
|
|
119
|
+
let right = '';
|
|
120
|
+
let bottom = '';
|
|
121
|
+
let left = '';
|
|
122
|
+
const basePlacement = placement.split('-')[0];
|
|
123
|
+
switch (basePlacement) {
|
|
124
|
+
case 'top':
|
|
125
|
+
bottom = `calc(var(--arrow-size-diagonal) * -1)`;
|
|
126
|
+
left = this.calculateArrowXPosition(referenceRect, floatingRect, placement, arrowSize);
|
|
127
|
+
break;
|
|
128
|
+
case 'bottom':
|
|
129
|
+
top = `calc(var(--arrow-size-diagonal) * -1)`;
|
|
130
|
+
left = this.calculateArrowXPosition(referenceRect, floatingRect, placement, arrowSize);
|
|
131
|
+
break;
|
|
132
|
+
case 'left':
|
|
133
|
+
right = `calc(var(--arrow-size-diagonal) * -1)`;
|
|
134
|
+
top = this.calculateArrowYPosition(referenceRect, floatingRect, placement, arrowSize);
|
|
135
|
+
break;
|
|
136
|
+
case 'right':
|
|
137
|
+
left = `calc(var(--arrow-size-diagonal) * -1)`;
|
|
138
|
+
top = this.calculateArrowYPosition(referenceRect, floatingRect, placement, arrowSize);
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
Object.assign(arrowElement.style, {
|
|
142
|
+
top,
|
|
143
|
+
right,
|
|
144
|
+
bottom,
|
|
145
|
+
left
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
calculateArrowXPosition(referenceRect, floatingRect, placement, arrowSize) {
|
|
149
|
+
const referenceCenter = referenceRect.left + referenceRect.width / 2;
|
|
150
|
+
const floatingLeft = floatingRect.left;
|
|
151
|
+
const arrowOffset = referenceCenter - floatingLeft - arrowSize;
|
|
152
|
+
if (placement.includes('start')) {
|
|
153
|
+
return `${arrowSize}px`;
|
|
154
|
+
}
|
|
155
|
+
else if (placement.includes('end')) {
|
|
156
|
+
return `calc(100% - ${arrowSize * 2}px)`;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
return `${Math.max(arrowSize, Math.min(arrowOffset, floatingRect.width - arrowSize * 2))}px`;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
calculateArrowYPosition(referenceRect, floatingRect, placement, arrowSize) {
|
|
163
|
+
const referenceCenter = referenceRect.top + referenceRect.height / 2;
|
|
164
|
+
const floatingTop = floatingRect.top;
|
|
165
|
+
const arrowOffset = referenceCenter - floatingTop - arrowSize;
|
|
166
|
+
if (placement.includes('start')) {
|
|
167
|
+
return `${arrowSize}px`;
|
|
168
|
+
}
|
|
169
|
+
else if (placement.includes('end')) {
|
|
170
|
+
return `calc(100% - ${arrowSize * 2}px)`;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
return `${Math.max(arrowSize, Math.min(arrowOffset, floatingRect.height - arrowSize * 2))}px`;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
applyFloatingUIPosition(floatingElement, referenceElement, x, y, placement, middlewareData) {
|
|
177
|
+
Object.assign(floatingElement.style, {
|
|
178
|
+
left: `${x}px`,
|
|
179
|
+
top: `${y}px`,
|
|
180
|
+
position: 'fixed',
|
|
181
|
+
pointerEvents: 'auto',
|
|
182
|
+
width: 'auto',
|
|
183
|
+
maxWidth: 'none',
|
|
184
|
+
minWidth: '200px'
|
|
185
|
+
});
|
|
186
|
+
this.currentPlacement = placement;
|
|
187
|
+
this.currentMiddlewareData = middlewareData;
|
|
188
|
+
PortalUtils.applyCollisionData(floatingElement, middlewareData, placement);
|
|
189
|
+
const placementClass = placement.split('-')[0];
|
|
190
|
+
floatingElement.className = `nile-popover-portal-append`;
|
|
191
|
+
// Set minimum width based on reference element, but allow natural expansion
|
|
192
|
+
const referenceRect = referenceElement.getBoundingClientRect();
|
|
193
|
+
floatingElement.style.minWidth = `${Math.max(referenceRect.width, 200)}px`;
|
|
194
|
+
// Position the arrow if it exists
|
|
195
|
+
this.positionArrow(floatingElement, referenceElement, placement);
|
|
196
|
+
}
|
|
197
|
+
fallbackPositioning() {
|
|
198
|
+
if (!this.portalContainer)
|
|
199
|
+
return;
|
|
200
|
+
const referenceElement = this.component.querySelector('[slot="anchor"]') || this.component;
|
|
201
|
+
const rect = referenceElement.getBoundingClientRect();
|
|
202
|
+
const viewportHeight = window.innerHeight;
|
|
203
|
+
const viewportWidth = window.innerWidth;
|
|
204
|
+
const popoverHeight = this.measuredPopoverHeight || 200;
|
|
205
|
+
const spaceBelow = viewportHeight - rect.bottom;
|
|
206
|
+
const spaceAbove = rect.top;
|
|
207
|
+
const spaceRight = viewportWidth - rect.right;
|
|
208
|
+
const spaceLeft = rect.left;
|
|
209
|
+
let topPosition;
|
|
210
|
+
let leftPosition = rect.left;
|
|
211
|
+
let placementClass;
|
|
212
|
+
let maxHeight;
|
|
213
|
+
// Determine optimal placement based on available space
|
|
214
|
+
if (spaceBelow > spaceAbove && spaceBelow > 200) {
|
|
215
|
+
maxHeight = Math.max(spaceBelow - 20, 100);
|
|
216
|
+
topPosition = rect.bottom + (this.component.distance || 18);
|
|
217
|
+
placementClass = 'bottom';
|
|
218
|
+
}
|
|
219
|
+
else if (spaceAbove > spaceBelow && spaceAbove > 200) {
|
|
220
|
+
maxHeight = Math.max(spaceAbove - 20, 100);
|
|
221
|
+
topPosition = Math.max(rect.top - maxHeight - (this.component.distance || 18), 10);
|
|
222
|
+
placementClass = 'top';
|
|
223
|
+
}
|
|
224
|
+
else if (spaceRight > spaceLeft && spaceRight > 200) {
|
|
225
|
+
maxHeight = Math.max(Math.min(spaceRight, spaceBelow, spaceAbove) - 20, 100);
|
|
226
|
+
topPosition = rect.top;
|
|
227
|
+
leftPosition = rect.right + (this.component.distance || 18);
|
|
228
|
+
placementClass = 'right';
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
maxHeight = Math.max(Math.min(spaceLeft, spaceBelow, spaceAbove) - 20, 100);
|
|
232
|
+
topPosition = rect.top;
|
|
233
|
+
leftPosition = Math.max(rect.left - 200 - (this.component.distance || 18), 10);
|
|
234
|
+
placementClass = 'left';
|
|
235
|
+
}
|
|
236
|
+
if (placementClass === 'left' || placementClass === 'right') {
|
|
237
|
+
this.portalContainer.style.left = `${leftPosition}px`;
|
|
238
|
+
this.portalContainer.style.top = `${topPosition}px`;
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
this.portalContainer.style.left = `${rect.left}px`;
|
|
242
|
+
this.portalContainer.style.top = `${topPosition}px`;
|
|
243
|
+
}
|
|
244
|
+
this.portalContainer.style.maxHeight = `${maxHeight}px`;
|
|
245
|
+
this.portalContainer.style.pointerEvents = 'auto';
|
|
246
|
+
this.portalContainer.style.width = 'auto';
|
|
247
|
+
this.portalContainer.style.maxWidth = 'none';
|
|
248
|
+
this.portalContainer.style.minWidth = '200px';
|
|
249
|
+
this.portalContainer.className = `nile-popover-portal-append popover__box popover__box--${placementClass}`;
|
|
250
|
+
this.calculateAndSetAutoSizeProperties(rect, topPosition, placementClass);
|
|
251
|
+
// Position the arrow if it exists
|
|
252
|
+
this.positionArrow(this.portalContainer, referenceElement, placementClass);
|
|
253
|
+
}
|
|
254
|
+
calculateAndSetAutoSizeProperties(rect, topPosition, placementClass) {
|
|
255
|
+
if (!this.portalContainer)
|
|
256
|
+
return;
|
|
257
|
+
const viewportHeight = window.innerHeight;
|
|
258
|
+
const viewportWidth = window.innerWidth;
|
|
259
|
+
let availableHeight;
|
|
260
|
+
let availableWidth = viewportWidth - rect.left - 10;
|
|
261
|
+
if (placementClass === 'top') {
|
|
262
|
+
availableHeight = rect.top - 10;
|
|
263
|
+
}
|
|
264
|
+
else if (placementClass === 'bottom') {
|
|
265
|
+
availableHeight = viewportHeight - rect.bottom - 10;
|
|
266
|
+
}
|
|
267
|
+
else if (placementClass === 'left') {
|
|
268
|
+
availableHeight = Math.min(viewportHeight - rect.top, rect.bottom);
|
|
269
|
+
availableWidth = rect.left - 10;
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
availableHeight = Math.min(viewportHeight - rect.top, rect.bottom);
|
|
273
|
+
availableWidth = viewportWidth - rect.right - 10;
|
|
274
|
+
}
|
|
275
|
+
this.portalContainer.style.setProperty('--auto-size-available-height', `${Math.max(availableHeight, 100)}px`);
|
|
276
|
+
this.portalContainer.style.setProperty('--auto-size-available-width', `${Math.max(availableWidth, 200)}px`);
|
|
277
|
+
}
|
|
278
|
+
updatePortalAppendPosition() {
|
|
279
|
+
if (this.component.portal && this.portalContainer) {
|
|
280
|
+
this.positionPortalAppend();
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
handleWindowResize() {
|
|
284
|
+
if (this.component.portal && this.portalContainer) {
|
|
285
|
+
this.positionPortalAppend();
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
setupAutoUpdatePositioning() {
|
|
289
|
+
if (!this.portalContainer || !this.component)
|
|
290
|
+
return;
|
|
291
|
+
this.cleanupAutoUpdatePositioning();
|
|
292
|
+
this.cleanupAutoUpdate = autoUpdate(this.component, this.portalContainer, () => {
|
|
293
|
+
this.computeFloatingUIPosition();
|
|
294
|
+
}, {
|
|
295
|
+
ancestorScroll: true,
|
|
296
|
+
ancestorResize: true,
|
|
297
|
+
elementResize: true,
|
|
298
|
+
layoutShift: true,
|
|
299
|
+
animationFrame: true
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
cleanupAutoUpdatePositioning() {
|
|
303
|
+
if (this.cleanupAutoUpdate) {
|
|
304
|
+
this.cleanupAutoUpdate();
|
|
305
|
+
this.cleanupAutoUpdate = null;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
injectStylesToDocument() {
|
|
309
|
+
if (!this.portalContainer)
|
|
310
|
+
return;
|
|
311
|
+
const styleId = PortalUtils.generateStyleId();
|
|
312
|
+
if (document.getElementById(styleId))
|
|
313
|
+
return;
|
|
314
|
+
const componentStyles = this.component.constructor.styles;
|
|
315
|
+
if (!componentStyles)
|
|
316
|
+
return;
|
|
317
|
+
const styleElement = document.createElement('style');
|
|
318
|
+
styleElement.id = styleId;
|
|
319
|
+
styleElement.textContent = PortalUtils.extractStylesAsCSS(componentStyles);
|
|
320
|
+
document.head.appendChild(styleElement);
|
|
321
|
+
this.portalContainer.__injectedStyleId = styleId;
|
|
322
|
+
}
|
|
323
|
+
adoptStylesToPortalAppend() {
|
|
324
|
+
if (!this.portalContainer)
|
|
325
|
+
return;
|
|
326
|
+
this.injectStylesToDocument();
|
|
327
|
+
}
|
|
328
|
+
setupPortalAppend() {
|
|
329
|
+
if (!this.component.portal)
|
|
330
|
+
return;
|
|
331
|
+
this.component.updateComplete.then(() => {
|
|
332
|
+
setTimeout(() => {
|
|
333
|
+
if (this.component.isShow) {
|
|
334
|
+
// Create the portal popover directly from component slots
|
|
335
|
+
this.clonedPopover = this.createPortalPopover();
|
|
336
|
+
this.portalContainer = this.createPortalAppendContainer();
|
|
337
|
+
this.portalContainer.appendChild(this.clonedPopover);
|
|
338
|
+
document.body.appendChild(this.portalContainer);
|
|
339
|
+
this.adoptStylesToPortalAppend();
|
|
340
|
+
this.clonedPopover.style.display = '';
|
|
341
|
+
this.positionPortalAppend();
|
|
342
|
+
this.setupPortalEventListeners();
|
|
343
|
+
this.setupAutoUpdatePositioning();
|
|
344
|
+
window.addEventListener('resize', this.handleWindowResize.bind(this));
|
|
345
|
+
}
|
|
346
|
+
}, 10);
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
createPortalPopover() {
|
|
350
|
+
return PortalContentUtils.createPortalPopover(this.component);
|
|
351
|
+
}
|
|
352
|
+
setupPortalEventListeners() {
|
|
353
|
+
PortalEventUtils.setupPortalEventListeners(this.clonedPopover, this.component);
|
|
354
|
+
}
|
|
355
|
+
cleanupPortalAppend() {
|
|
356
|
+
this.cleanupAutoUpdatePositioning();
|
|
357
|
+
if (this.portalContainer && this.portalContainer.parentNode) {
|
|
358
|
+
const injectedStyleId = this.portalContainer.__injectedStyleId;
|
|
359
|
+
if (injectedStyleId) {
|
|
360
|
+
const styleElement = document.getElementById(injectedStyleId);
|
|
361
|
+
if (styleElement) {
|
|
362
|
+
styleElement.remove();
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
this.portalContainer.parentNode.removeChild(this.portalContainer);
|
|
366
|
+
}
|
|
367
|
+
window.removeEventListener('resize', this.handleWindowResize.bind(this));
|
|
368
|
+
this.portalContainer = null;
|
|
369
|
+
this.originalPopoverParent = null;
|
|
370
|
+
this.clonedPopover = null;
|
|
371
|
+
this.measuredPopoverHeight = null;
|
|
372
|
+
this.currentPlacement = 'top';
|
|
373
|
+
this.currentMiddlewareData = null;
|
|
374
|
+
}
|
|
375
|
+
get portalContainerElement() {
|
|
376
|
+
return this.portalContainer;
|
|
377
|
+
}
|
|
378
|
+
resetMeasuredHeight() {
|
|
379
|
+
this.measuredPopoverHeight = null;
|
|
380
|
+
}
|
|
381
|
+
forceReposition() {
|
|
382
|
+
if (this.portalContainer) {
|
|
383
|
+
this.computeFloatingUIPosition();
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
getCurrentPlacement() {
|
|
387
|
+
return this.currentPlacement;
|
|
388
|
+
}
|
|
389
|
+
getCurrentMiddlewareData() {
|
|
390
|
+
return this.currentMiddlewareData;
|
|
391
|
+
}
|
|
392
|
+
isUsingFloatingUI() {
|
|
393
|
+
return this.cleanupAutoUpdate !== null;
|
|
394
|
+
}
|
|
395
|
+
updatePositioningConfig(config) {
|
|
396
|
+
this.forceReposition();
|
|
397
|
+
}
|
|
398
|
+
handleViewportChange() {
|
|
399
|
+
if (this.portalContainer) {
|
|
400
|
+
this.resetMeasuredHeight();
|
|
401
|
+
this.forceReposition();
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
isPositioningOptimal() {
|
|
405
|
+
if (!this.portalContainer || !this.currentMiddlewareData)
|
|
406
|
+
return true;
|
|
407
|
+
const referenceElement = this.component.querySelector('[slot="anchor"]') || this.component;
|
|
408
|
+
const rect = referenceElement.getBoundingClientRect();
|
|
409
|
+
const viewportHeight = window.innerHeight;
|
|
410
|
+
const spaceBelow = viewportHeight - rect.bottom;
|
|
411
|
+
const spaceAbove = rect.top;
|
|
412
|
+
const isAbove = this.currentPlacement.startsWith('top');
|
|
413
|
+
const isBelow = this.currentPlacement.startsWith('bottom');
|
|
414
|
+
if (isAbove && spaceBelow > spaceAbove)
|
|
415
|
+
return false;
|
|
416
|
+
if (isBelow && spaceAbove > spaceBelow)
|
|
417
|
+
return false;
|
|
418
|
+
return true;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
//# sourceMappingURL=portal-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portal-manager.js","sourceRoot":"","sources":["../../../src/nile-popover/portal-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { \n autoUpdate, \n computePosition, \n flip, \n offset, \n shift, \n size, \n platform,\n type Placement,\n type MiddlewareData,\n type ComputePositionConfig,\n type Boundary\n} from '@floating-ui/dom';\nimport { PortalUtils, PortalContentUtils, PortalEventUtils } from './portal-utils';\n\nexport class PopoverPortalManager {\n private portalContainer: HTMLElement | null = null;\n private originalPopoverParent: HTMLElement | null = null;\n private measuredPopoverHeight: number | null = null;\n private component: any;\n private clonedPopover: HTMLElement | null = null;\n private cleanupAutoUpdate: (() => void) | null = null;\n private currentPlacement: Placement = 'top';\n private currentMiddlewareData: MiddlewareData | null = null;\n\n constructor(component: any) {\n this.component = component;\n }\n\n private createPortalAppendContainer(): HTMLElement {\n const container = document.createElement('div');\n container.style.position = 'absolute';\n container.style.zIndex = '9999';\n container.style.pointerEvents = 'none';\n container.style.width = 'auto';\n container.style.maxWidth = 'none';\n container.style.minWidth = '200px';\n container.className = 'nile-popover-portal-append';\n return container;\n }\n\n positionPortalAppend(): void {\n if (!this.portalContainer || !this.component.isShow) return;\n\n this.measurePopoverHeight();\n this.computeFloatingUIPosition();\n }\n\n private measurePopoverHeight(): void {\n if (this.measuredPopoverHeight || !this.portalContainer) return;\n\n this.portalContainer.style.position = 'absolute';\n this.portalContainer.style.visibility = 'hidden';\n this.portalContainer.style.top = '0px';\n this.portalContainer.style.left = '0px';\n \n this.portalContainer.offsetHeight;\n \n this.measuredPopoverHeight = this.portalContainer.offsetHeight;\n \n this.portalContainer.style.visibility = '';\n }\n\n private async computeFloatingUIPosition(): Promise<void> {\n if (!this.portalContainer) return;\n\n const referenceElement = this.component.querySelector('[slot=\"anchor\"]') || this.component;\n const floatingElement = this.portalContainer;\n\n try {\n const { x, y, placement, middlewareData } = await this.calculateFloatingUIPosition(\n referenceElement,\n floatingElement\n );\n\n this.applyFloatingUIPosition(floatingElement, referenceElement, x, y, placement, middlewareData);\n\n } catch (error) {\n console.warn('Floating UI positioning failed, falling back to simple positioning:', error);\n this.fallbackPositioning();\n }\n }\n\n private async calculateFloatingUIPosition(\n referenceElement: HTMLElement,\n floatingElement: HTMLElement\n ): Promise<{ x: number; y: number; placement: Placement; middlewareData: MiddlewareData }> {\n const boundary = PortalUtils.findBoundaryElements(referenceElement);\n const initialPlacement = this.getInitialPlacement();\n const middleware = this.createFloatingUIMiddleware(boundary);\n\n return await computePosition(referenceElement, floatingElement, {\n placement: initialPlacement,\n strategy: 'fixed',\n middleware,\n platform: this.createCustomPlatform()\n });\n }\n\n private getInitialPlacement(): Placement {\n return this.component.placement || 'top';\n }\n\n private createFloatingUIMiddleware(boundary: Element[] | undefined): ComputePositionConfig['middleware'] {\n return [\n offset(this.component.distance || 18),\n flip({\n fallbackPlacements: this.getFallbackPlacements(),\n fallbackStrategy: 'bestFit',\n padding: 10,\n boundary: boundary\n }),\n shift({\n padding: 10,\n crossAxis: true,\n boundary: boundary\n })\n ];\n }\n\n private getFallbackPlacements(): Placement[] {\n const basePlacement = this.component.placement || 'top';\n const placements: Placement[] = [];\n \n // Generate fallback placements based on the base placement\n if (basePlacement.startsWith('top')) {\n placements.push('bottom', 'right', 'left', 'top-start', 'top-end', 'bottom-start', 'bottom-end');\n } else if (basePlacement.startsWith('bottom')) {\n placements.push('top', 'right', 'left', 'bottom-start', 'bottom-end', 'top-start', 'top-end');\n } else if (basePlacement.startsWith('left')) {\n placements.push('right', 'top', 'bottom', 'left-start', 'left-end', 'right-start', 'right-end');\n } else if (basePlacement.startsWith('right')) {\n placements.push('left', 'top', 'bottom', 'right-start', 'right-end', 'left-start', 'left-end');\n }\n \n return placements;\n }\n\n\n private createCustomPlatform() {\n return platform;\n }\n\n private positionArrow(floatingElement: HTMLElement, referenceElement: HTMLElement, placement: Placement): void {\n if (!this.component.arrow) return;\n \n const arrowElement = floatingElement.querySelector('.popup__arrow') as HTMLElement;\n if (!arrowElement) return;\n \n const referenceRect = referenceElement.getBoundingClientRect();\n const floatingRect = floatingElement.getBoundingClientRect();\n \n // Calculate arrow position based on placement\n const arrowSize = 18; // Default arrow size\n const arrowPadding = 8; // Padding from edge\n \n let top = '';\n let right = '';\n let bottom = '';\n let left = '';\n \n const basePlacement = placement.split('-')[0];\n \n switch (basePlacement) {\n case 'top':\n bottom = `calc(var(--arrow-size-diagonal) * -1)`;\n left = this.calculateArrowXPosition(referenceRect, floatingRect, placement, arrowSize);\n break;\n case 'bottom':\n top = `calc(var(--arrow-size-diagonal) * -1)`;\n left = this.calculateArrowXPosition(referenceRect, floatingRect, placement, arrowSize);\n break;\n case 'left':\n right = `calc(var(--arrow-size-diagonal) * -1)`;\n top = this.calculateArrowYPosition(referenceRect, floatingRect, placement, arrowSize);\n break;\n case 'right':\n left = `calc(var(--arrow-size-diagonal) * -1)`;\n top = this.calculateArrowYPosition(referenceRect, floatingRect, placement, arrowSize);\n break;\n }\n \n Object.assign(arrowElement.style, {\n top,\n right,\n bottom,\n left\n });\n }\n\n private calculateArrowXPosition(referenceRect: DOMRect, floatingRect: DOMRect, placement: Placement, arrowSize: number): string {\n const referenceCenter = referenceRect.left + referenceRect.width / 2;\n const floatingLeft = floatingRect.left;\n const arrowOffset = referenceCenter - floatingLeft - arrowSize;\n \n if (placement.includes('start')) {\n return `${arrowSize}px`;\n } else if (placement.includes('end')) {\n return `calc(100% - ${arrowSize * 2}px)`;\n } else {\n return `${Math.max(arrowSize, Math.min(arrowOffset, floatingRect.width - arrowSize * 2))}px`;\n }\n }\n\n private calculateArrowYPosition(referenceRect: DOMRect, floatingRect: DOMRect, placement: Placement, arrowSize: number): string {\n const referenceCenter = referenceRect.top + referenceRect.height / 2;\n const floatingTop = floatingRect.top;\n const arrowOffset = referenceCenter - floatingTop - arrowSize;\n \n if (placement.includes('start')) {\n return `${arrowSize}px`;\n } else if (placement.includes('end')) {\n return `calc(100% - ${arrowSize * 2}px)`;\n } else {\n return `${Math.max(arrowSize, Math.min(arrowOffset, floatingRect.height - arrowSize * 2))}px`;\n }\n }\n\n private applyFloatingUIPosition(\n floatingElement: HTMLElement,\n referenceElement: HTMLElement,\n x: number,\n y: number,\n placement: Placement,\n middlewareData: MiddlewareData\n ): void {\n Object.assign(floatingElement.style, {\n left: `${x}px`,\n top: `${y}px`,\n position: 'fixed',\n pointerEvents: 'auto',\n width: 'auto',\n maxWidth: 'none',\n minWidth: '200px'\n });\n\n this.currentPlacement = placement;\n this.currentMiddlewareData = middlewareData;\n \n PortalUtils.applyCollisionData(floatingElement, middlewareData, placement);\n \n const placementClass = placement.split('-')[0];\n floatingElement.className = `nile-popover-portal-append`;\n\n // Set minimum width based on reference element, but allow natural expansion\n const referenceRect = (referenceElement as HTMLElement).getBoundingClientRect();\n floatingElement.style.minWidth = `${Math.max(referenceRect.width, 200)}px`;\n \n // Position the arrow if it exists\n this.positionArrow(floatingElement, referenceElement, placement);\n }\n\n private fallbackPositioning(): void {\n if (!this.portalContainer) return;\n\n const referenceElement = this.component.querySelector('[slot=\"anchor\"]') || this.component;\n const rect = referenceElement.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n const popoverHeight = this.measuredPopoverHeight || 200;\n \n const spaceBelow = viewportHeight - rect.bottom;\n const spaceAbove = rect.top;\n const spaceRight = viewportWidth - rect.right;\n const spaceLeft = rect.left;\n \n let topPosition: number;\n let leftPosition: number = rect.left;\n let placementClass: string;\n let maxHeight: number;\n \n // Determine optimal placement based on available space\n if (spaceBelow > spaceAbove && spaceBelow > 200) {\n maxHeight = Math.max(spaceBelow - 20, 100);\n topPosition = rect.bottom + (this.component.distance || 18);\n placementClass = 'bottom';\n } else if (spaceAbove > spaceBelow && spaceAbove > 200) {\n maxHeight = Math.max(spaceAbove - 20, 100);\n topPosition = Math.max(rect.top - maxHeight - (this.component.distance || 18), 10);\n placementClass = 'top';\n } else if (spaceRight > spaceLeft && spaceRight > 200) {\n maxHeight = Math.max(Math.min(spaceRight, spaceBelow, spaceAbove) - 20, 100);\n topPosition = rect.top;\n leftPosition = rect.right + (this.component.distance || 18);\n placementClass = 'right';\n } else {\n maxHeight = Math.max(Math.min(spaceLeft, spaceBelow, spaceAbove) - 20, 100);\n topPosition = rect.top;\n leftPosition = Math.max(rect.left - 200 - (this.component.distance || 18), 10);\n placementClass = 'left';\n }\n\n if (placementClass === 'left' || placementClass === 'right') {\n this.portalContainer.style.left = `${leftPosition}px`;\n this.portalContainer.style.top = `${topPosition}px`;\n } else {\n this.portalContainer.style.left = `${rect.left}px`;\n this.portalContainer.style.top = `${topPosition}px`;\n }\n \n this.portalContainer.style.maxHeight = `${maxHeight}px`;\n this.portalContainer.style.pointerEvents = 'auto';\n this.portalContainer.style.width = 'auto';\n this.portalContainer.style.maxWidth = 'none';\n this.portalContainer.style.minWidth = '200px';\n this.portalContainer.className = `nile-popover-portal-append popover__box popover__box--${placementClass}`;\n \n this.calculateAndSetAutoSizeProperties(rect, topPosition, placementClass);\n \n // Position the arrow if it exists\n this.positionArrow(this.portalContainer, referenceElement, placementClass as Placement);\n }\n\n private calculateAndSetAutoSizeProperties(rect: DOMRect, topPosition: number, placementClass: string): void {\n if (!this.portalContainer) return;\n\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n \n let availableHeight: number;\n let availableWidth: number = viewportWidth - rect.left - 10;\n \n if (placementClass === 'top') {\n availableHeight = rect.top - 10;\n } else if (placementClass === 'bottom') {\n availableHeight = viewportHeight - rect.bottom - 10;\n } else if (placementClass === 'left') {\n availableHeight = Math.min(viewportHeight - rect.top, rect.bottom);\n availableWidth = rect.left - 10;\n } else {\n availableHeight = Math.min(viewportHeight - rect.top, rect.bottom);\n availableWidth = viewportWidth - rect.right - 10;\n }\n \n this.portalContainer.style.setProperty('--auto-size-available-height', `${Math.max(availableHeight, 100)}px`);\n this.portalContainer.style.setProperty('--auto-size-available-width', `${Math.max(availableWidth, 200)}px`);\n }\n\n updatePortalAppendPosition(): void {\n if (this.component.portal && this.portalContainer) {\n this.positionPortalAppend();\n }\n }\n\n handleWindowResize(): void {\n if (this.component.portal && this.portalContainer) {\n this.positionPortalAppend();\n }\n }\n\n private setupAutoUpdatePositioning(): void {\n if (!this.portalContainer || !this.component) return;\n\n this.cleanupAutoUpdatePositioning();\n\n this.cleanupAutoUpdate = autoUpdate(\n this.component,\n this.portalContainer,\n () => {\n this.computeFloatingUIPosition();\n },\n {\n ancestorScroll: true,\n ancestorResize: true,\n elementResize: true,\n layoutShift: true,\n animationFrame: true\n }\n );\n }\n\n private cleanupAutoUpdatePositioning(): void {\n if (this.cleanupAutoUpdate) {\n this.cleanupAutoUpdate();\n this.cleanupAutoUpdate = null;\n }\n }\n\n private injectStylesToDocument(): void {\n if (!this.portalContainer) return;\n\n const styleId = PortalUtils.generateStyleId();\n \n if (document.getElementById(styleId)) return;\n\n const componentStyles = (this.component.constructor as any).styles;\n if (!componentStyles) return;\n\n const styleElement = document.createElement('style');\n styleElement.id = styleId;\n styleElement.textContent = PortalUtils.extractStylesAsCSS(componentStyles);\n \n document.head.appendChild(styleElement);\n \n (this.portalContainer as any).__injectedStyleId = styleId;\n }\n\n private adoptStylesToPortalAppend(): void {\n if (!this.portalContainer) return;\n this.injectStylesToDocument();\n }\n\n setupPortalAppend(): void {\n if (!this.component.portal) return;\n\n this.component.updateComplete.then(() => {\n setTimeout(() => {\n if (this.component.isShow) {\n // Create the portal popover directly from component slots\n this.clonedPopover = this.createPortalPopover();\n \n this.portalContainer = this.createPortalAppendContainer();\n this.portalContainer.appendChild(this.clonedPopover);\n document.body.appendChild(this.portalContainer);\n \n this.adoptStylesToPortalAppend();\n \n this.clonedPopover.style.display = '';\n this.positionPortalAppend();\n \n this.setupPortalEventListeners();\n \n this.setupAutoUpdatePositioning();\n \n window.addEventListener('resize', this.handleWindowResize.bind(this));\n \n }\n }, 10);\n });\n }\n\n private createPortalPopover(): HTMLElement {\n return PortalContentUtils.createPortalPopover(this.component);\n }\n\n private setupPortalEventListeners(): void {\n PortalEventUtils.setupPortalEventListeners(this.clonedPopover!, this.component);\n }\n\n cleanupPortalAppend(): void {\n this.cleanupAutoUpdatePositioning();\n \n if (this.portalContainer && this.portalContainer.parentNode) {\n const injectedStyleId = (this.portalContainer as any).__injectedStyleId;\n if (injectedStyleId) {\n const styleElement = document.getElementById(injectedStyleId);\n if (styleElement) {\n styleElement.remove();\n }\n }\n \n this.portalContainer.parentNode.removeChild(this.portalContainer);\n }\n \n window.removeEventListener('resize', this.handleWindowResize.bind(this));\n \n this.portalContainer = null;\n this.originalPopoverParent = null;\n this.clonedPopover = null;\n this.measuredPopoverHeight = null;\n this.currentPlacement = 'top';\n this.currentMiddlewareData = null;\n }\n\n get portalContainerElement(): HTMLElement | null {\n return this.portalContainer;\n }\n\n resetMeasuredHeight(): void {\n this.measuredPopoverHeight = null;\n }\n\n forceReposition(): void {\n if (this.portalContainer) {\n this.computeFloatingUIPosition();\n }\n }\n\n getCurrentPlacement(): Placement {\n return this.currentPlacement;\n }\n\n getCurrentMiddlewareData(): MiddlewareData | null {\n return this.currentMiddlewareData;\n }\n\n isUsingFloatingUI(): boolean {\n return this.cleanupAutoUpdate !== null;\n }\n\n updatePositioningConfig(config: {\n offset?: number;\n padding?: number;\n boundary?: Element[] | 'viewport';\n fallbackPlacements?: Placement[];\n }): void {\n this.forceReposition();\n }\n\n handleViewportChange(): void {\n if (this.portalContainer) {\n this.resetMeasuredHeight();\n this.forceReposition();\n }\n }\n\n isPositioningOptimal(): boolean {\n if (!this.portalContainer || !this.currentMiddlewareData) return true;\n\n const referenceElement = this.component.querySelector('[slot=\"anchor\"]') || this.component;\n const rect = referenceElement.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - rect.bottom;\n const spaceAbove = rect.top;\n \n const isAbove = this.currentPlacement.startsWith('top');\n const isBelow = this.currentPlacement.startsWith('bottom');\n \n if (isAbove && spaceBelow > spaceAbove) return false;\n if (isBelow && spaceAbove > spaceBelow) return false;\n \n return true;\n }\n}\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type Placement, type MiddlewareData, type ComputePositionConfig, type Boundary } from '@floating-ui/dom';
|
|
2
|
+
export declare class PortalUtils {
|
|
3
|
+
static calculateAvailableSpace(referenceElement: HTMLElement): {
|
|
4
|
+
spaceAbove: number;
|
|
5
|
+
spaceBelow: number;
|
|
6
|
+
spaceLeft: number;
|
|
7
|
+
spaceRight: number;
|
|
8
|
+
viewportHeight: number;
|
|
9
|
+
viewportWidth: number;
|
|
10
|
+
};
|
|
11
|
+
static getOptimalPlacement(referenceElement: HTMLElement): Placement;
|
|
12
|
+
static findBoundaryElements(component: HTMLElement): Element[] | undefined;
|
|
13
|
+
static calculateOptimalHeight(referenceRect: {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
width: number;
|
|
17
|
+
height: number;
|
|
18
|
+
}, viewportHeight: number, placement: Placement): number;
|
|
19
|
+
static extractStylesAsCSS(styles: any): string;
|
|
20
|
+
static generateStyleId(): string;
|
|
21
|
+
static isPositioningOptimal(placement: Placement, referenceElement: HTMLElement): boolean;
|
|
22
|
+
static applyCollisionData(element: HTMLElement, middlewareData: MiddlewareData, placement: Placement): void;
|
|
23
|
+
static createFloatingUIMiddleware(boundary: Boundary, onSizeApply: (params: {
|
|
24
|
+
availableWidth: number;
|
|
25
|
+
availableHeight: number;
|
|
26
|
+
elements: {
|
|
27
|
+
floating: HTMLElement;
|
|
28
|
+
};
|
|
29
|
+
rects: {
|
|
30
|
+
reference: {
|
|
31
|
+
x: number;
|
|
32
|
+
y: number;
|
|
33
|
+
width: number;
|
|
34
|
+
height: number;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
}) => void): ComputePositionConfig['middleware'];
|
|
38
|
+
}
|
|
39
|
+
export declare class PortalContentUtils {
|
|
40
|
+
static createBasePopover(component: any): HTMLElement;
|
|
41
|
+
static addTitleSection(popoverBox: HTMLElement, component: any): void;
|
|
42
|
+
static addContentSection(popoverBox: HTMLElement, component: any): void;
|
|
43
|
+
static cloneContent(originalContent: HTMLElement, targetContent: HTMLElement): void;
|
|
44
|
+
static addActionSection(popoverBox: HTMLElement, component: any): void;
|
|
45
|
+
static addArrowElement(popoverBox: HTMLElement, component: any): void;
|
|
46
|
+
static createPortalPopover(component: any): HTMLElement;
|
|
47
|
+
static updatePortalContent(clonedPopover: HTMLElement, component: any): void;
|
|
48
|
+
}
|
|
49
|
+
export declare class PortalEventUtils {
|
|
50
|
+
static setupPortalEventListeners(clonedPopover: HTMLElement, component: any): void;
|
|
51
|
+
static setupClickListeners(clonedPopover: HTMLElement, component: any): void;
|
|
52
|
+
static setupContentListeners(clonedPopover: HTMLElement, component: any): void;
|
|
53
|
+
static setupActionListeners(clonedPopover: HTMLElement, component: any): void;
|
|
54
|
+
static forwardEventToOriginal(event: Event, component: any, eventType: string): void;
|
|
55
|
+
}
|