@mono-lit/helper 0.0.0-stage → 0.0.1
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/LICENSE.md +55 -0
- package/README.md +34 -2
- package/dist/breakpoints-CAbhDUht.js +84 -0
- package/dist/checkbox-Cqpie9Ap.js +4 -0
- package/dist/chip-DBUUa2eB.js +4 -0
- package/dist/chip-limits-BMoO31JM.js +213 -0
- package/dist/chip-strip-Cw3gyz0q.js +213 -0
- package/dist/color-DHYrfXsX.js +253 -0
- package/dist/css-class-BRKRzHx-.js +60 -0
- package/dist/css-size-DhHSVZJK.js +37 -0
- package/dist/data/theme/presets.json.d.ts +140 -0
- package/dist/data-search-Bwo5bg8K.js +573 -0
- package/dist/data-source-controller-C50Qyfzh.js +178 -0
- package/dist/data-source-options-BTpfrOZ_.js +535 -0
- package/dist/data-source-options-CQSTZHPE.js +537 -0
- package/dist/data-source-read-CUX-lgrQ.js +216 -0
- package/dist/data-source-read-DL88aH8t.js +217 -0
- package/dist/decorate-DEXtNagw.js +141 -0
- package/dist/element-props-CLB6yvbm.js +114 -0
- package/dist/esm-Ptok4SQZ.js +2026 -0
- package/dist/excel-CY6zGkcx.js +608 -0
- package/dist/excel-DopRbEMK.js +608 -0
- package/dist/export-BvlBx_GZ.js +2302 -0
- package/dist/export.d.ts +1 -0
- package/dist/export.js +2302 -0
- package/dist/field-icons-BoOG6KrL.js +51 -0
- package/dist/field-path-C92eGLg3.js +251 -0
- package/dist/filter-builder-Bke3qOgJ.js +205 -0
- package/dist/filter-builder-CE4zE0V5.js +205 -0
- package/dist/filter-eval-DIfU2EAn.js +173 -0
- package/dist/filter-odata-C1vSGZaY.js +591 -0
- package/dist/form-control-core-B8d7k6vk.js +223 -0
- package/dist/form-control-core-eeRr0zLU.js +223 -0
- package/dist/hydration-flush-RB5Tz5nl.js +1001 -0
- package/dist/icon-CJkTlmTb.js +55 -0
- package/dist/icon-dVhYJUIH.js +17 -0
- package/dist/import-BgJdkwBI.js +606 -0
- package/dist/import.d.ts +1 -0
- package/dist/import.js +606 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +16 -0
- package/dist/index.node-DjvYOL-J.js +395 -0
- package/dist/index.node.d.ts +1 -0
- package/dist/index.node.js +16 -0
- package/dist/input-zGOULADt.js +4 -0
- package/dist/layout-var-CZnzMC0s.js +73 -0
- package/dist/light-slots-BVJwyg_2.js +244 -0
- package/dist/light-slots-DW1WgfgT.js +254 -0
- package/dist/markdown-DfqrfOJN.js +20146 -0
- package/dist/mono-button-CoVnBLav.js +873 -0
- package/dist/mono-button.shadow-FfP_hMH4.js +784 -0
- package/dist/mono-data-chart-ChU4Ii3p.js +738 -0
- package/dist/mono-data-dropdown-BAUl58kW.js +357 -0
- package/dist/mono-data-grid-CLBK8clE.js +4140 -0
- package/dist/mono-data-grid-Db80FzdZ.js +4142 -0
- package/dist/mono-element-B0kP_96P.js +232 -0
- package/dist/mono-event-Bi1qP9uN.js +129 -0
- package/dist/mono-form-controller-5PfsU4qa.js +409 -0
- package/dist/mono-modal-controller-BMO3n3rP.js +223 -0
- package/dist/mono-ui-CPV7rrdo.js +358 -0
- package/dist/notifier-CE4yxMUQ.js +88 -0
- package/dist/nuxt.d.ts +1 -0
- package/dist/nuxt.js +130 -0
- package/dist/popup-portal-BziRX1yG.js +465 -0
- package/dist/popup-stack-CEEMib__.js +189 -0
- package/dist/rate-limit-BBa2PO79.js +521 -0
- package/dist/reactive-BHsqVjRh.js +789 -0
- package/dist/reactive-D3EERqgO.js +47 -0
- package/dist/search.d.ts +1 -0
- package/dist/search.js +97 -0
- package/dist/src/components/accordion/accordion-core.d.ts +62 -0
- package/dist/src/components/accordion/accordion-types.d.ts +62 -0
- package/dist/src/components/accordion/index.d.ts +3 -0
- package/dist/src/components/accordion/index.shadow.d.ts +5 -0
- package/dist/src/components/accordion/mono-accordion.d.ts +55 -0
- package/dist/src/components/accordion/mono-accordion.shadow.d.ts +56 -0
- package/dist/src/components/alert/alert-core.d.ts +46 -0
- package/dist/src/components/alert/alert-types.d.ts +44 -0
- package/dist/src/components/alert/index.d.ts +3 -0
- package/dist/src/components/alert/index.shadow.d.ts +5 -0
- package/dist/src/components/alert/mono-alert.d.ts +44 -0
- package/dist/src/components/alert/mono-alert.shadow.d.ts +34 -0
- package/dist/src/components/breadcrumb/breadcrumb-core.d.ts +61 -0
- package/dist/src/components/breadcrumb/breadcrumb-list-core.d.ts +49 -0
- package/dist/src/components/breadcrumb/breadcrumb-render.d.ts +31 -0
- package/dist/src/components/breadcrumb/breadcrumb-types.d.ts +117 -0
- package/dist/src/components/breadcrumb/breadcrumb-utils.d.ts +43 -0
- package/dist/src/components/breadcrumb/index.d.ts +6 -0
- package/dist/src/components/breadcrumb/index.shadow.d.ts +8 -0
- package/dist/src/components/breadcrumb/mono-breadcrumb-list.d.ts +29 -0
- package/dist/src/components/breadcrumb/mono-breadcrumb-list.shadow.d.ts +48 -0
- package/dist/src/components/breadcrumb/mono-breadcrumb.d.ts +38 -0
- package/dist/src/components/breadcrumb/mono-breadcrumb.shadow.d.ts +73 -0
- package/dist/src/components/button/button-core.d.ts +90 -0
- package/dist/src/components/button/button-dropdown-core.d.ts +57 -0
- package/dist/src/components/button/button-dropdown-types.d.ts +129 -0
- package/dist/src/components/button/button-types.d.ts +219 -0
- package/dist/src/components/button/button-utils.d.ts +18 -0
- package/dist/src/components/button/index.button-dropdown.d.ts +4 -0
- package/dist/src/components/button/index.button-dropdown.shadow.d.ts +4 -0
- package/dist/src/components/button/index.d.ts +8 -0
- package/dist/src/components/button/index.shadow.d.ts +5 -0
- package/dist/src/components/button/mono-button-dropdown.d.ts +35 -0
- package/dist/src/components/button/mono-button-dropdown.shadow.d.ts +45 -0
- package/dist/src/components/button/mono-button.d.ts +123 -0
- package/dist/src/components/button/mono-button.shadow.d.ts +56 -0
- package/dist/src/components/card/card-core.d.ts +74 -0
- package/dist/src/components/card/card-types.d.ts +137 -0
- package/dist/src/components/card/card-utils.d.ts +23 -0
- package/dist/src/components/card/index.d.ts +4 -0
- package/dist/src/components/card/index.shadow.d.ts +6 -0
- package/dist/src/components/card/mono-card.d.ts +56 -0
- package/dist/src/components/card/mono-card.shadow.d.ts +52 -0
- package/dist/src/components/chart/chart-core.d.ts +43 -0
- package/dist/src/components/chart/chart-odata.d.ts +52 -0
- package/dist/src/components/chart/chart-types.d.ts +337 -0
- package/dist/src/components/chart/index.d.ts +8 -0
- package/dist/src/components/chart/index.shadow.d.ts +7 -0
- package/dist/src/components/chart/mono-chart-presets.d.ts +43 -0
- package/dist/src/components/chart/mono-chart-presets.shadow.d.ts +43 -0
- package/dist/src/components/chart/mono-chart.d.ts +30 -0
- package/dist/src/components/chart/mono-chart.shadow.d.ts +22 -0
- package/dist/src/components/chart/mono-data-chart.d.ts +27 -0
- package/dist/src/components/checkbox/checkbox-core.d.ts +53 -0
- package/dist/src/components/checkbox/checkbox-types.d.ts +69 -0
- package/dist/src/components/checkbox/checkbox-utils.d.ts +35 -0
- package/dist/src/components/checkbox/index.d.ts +4 -0
- package/dist/src/components/checkbox/index.shadow.d.ts +5 -0
- package/dist/src/components/checkbox/mono-checkbox.d.ts +34 -0
- package/dist/src/components/checkbox/mono-checkbox.shadow.d.ts +45 -0
- package/dist/src/components/chip/chip-core.d.ts +58 -0
- package/dist/src/components/chip/chip-types.d.ts +142 -0
- package/dist/src/components/chip/chip-utils.d.ts +24 -0
- package/dist/src/components/chip/index.d.ts +8 -0
- package/dist/src/components/chip/index.shadow.d.ts +6 -0
- package/dist/src/components/chip/mono-chip.d.ts +48 -0
- package/dist/src/components/chip/mono-chip.shadow.d.ts +33 -0
- package/dist/src/components/chip/mono-status-dot.d.ts +34 -0
- package/dist/src/components/date/date-core.d.ts +80 -0
- package/dist/src/components/date/date-types.d.ts +163 -0
- package/dist/src/components/date/index.d.ts +3 -0
- package/dist/src/components/date/index.shadow.d.ts +4 -0
- package/dist/src/components/date/mono-date.d.ts +22 -0
- package/dist/src/components/date/mono-date.shadow.d.ts +31 -0
- package/dist/src/components/drawer/drawer-core.d.ts +99 -0
- package/dist/src/components/drawer/drawer-types.d.ts +153 -0
- package/dist/src/components/drawer/index.d.ts +3 -0
- package/dist/src/components/drawer/index.shadow.d.ts +4 -0
- package/dist/src/components/drawer/mono-drawer.d.ts +45 -0
- package/dist/src/components/drawer/mono-drawer.shadow.d.ts +46 -0
- package/dist/src/components/dropdown/dropdown-core.d.ts +33 -0
- package/dist/src/components/dropdown/dropdown-types.d.ts +88 -0
- package/dist/src/components/dropdown/index.d.ts +3 -0
- package/dist/src/components/dropdown/index.shadow.d.ts +4 -0
- package/dist/src/components/dropdown/mono-dropdown.d.ts +34 -0
- package/dist/src/components/dropdown/mono-dropdown.shadow.d.ts +28 -0
- package/dist/src/components/dropdown-table/dropdown-table-core.d.ts +65 -0
- package/dist/src/components/dropdown-table/dropdown-table-types.d.ts +278 -0
- package/dist/src/components/dropdown-table/index.d.ts +5 -0
- package/dist/src/components/dropdown-table/index.shadow.d.ts +6 -0
- package/dist/src/components/dropdown-table/mono-data-dropdown.d.ts +152 -0
- package/dist/src/components/dropdown-table/mono-dropdown-table.d.ts +46 -0
- package/dist/src/components/dropdown-table/mono-dropdown-table.shadow.d.ts +22 -0
- package/dist/src/components/file-upload/file-upload-core.d.ts +60 -0
- package/dist/src/components/file-upload/file-upload-types.d.ts +145 -0
- package/dist/src/components/file-upload/file-upload-utils.d.ts +16 -0
- package/dist/src/components/file-upload/index.d.ts +4 -0
- package/dist/src/components/file-upload/index.shadow.d.ts +5 -0
- package/dist/src/components/file-upload/mono-file-upload.d.ts +33 -0
- package/dist/src/components/file-upload/mono-file-upload.shadow.d.ts +50 -0
- package/dist/src/components/filter/filter-builder-core.d.ts +36 -0
- package/dist/src/components/filter/filter-builder.d.ts +23 -0
- package/dist/src/components/filter/filter-odata.d.ts +27 -0
- package/dist/src/components/filter/filter-operators.d.ts +13 -0
- package/dist/src/components/filter/filter-types.d.ts +253 -0
- package/dist/src/components/filter/index.d.ts +6 -0
- package/dist/src/components/filter/index.shadow.d.ts +7 -0
- package/dist/src/components/filter/mono-filter-builder.d.ts +21 -0
- package/dist/src/components/filter/mono-filter-builder.shadow.d.ts +17 -0
- package/dist/src/components/form/form-control-core.d.ts +37 -0
- package/dist/src/components/form/form-rules.d.ts +25 -0
- package/dist/src/components/form/form-types.d.ts +307 -0
- package/dist/src/components/form/index.d.ts +6 -0
- package/dist/src/components/form/mono-form-controller.d.ts +16 -0
- package/dist/src/components/input/index.d.ts +6 -0
- package/dist/src/components/input/index.shadow.d.ts +8 -0
- package/dist/src/components/input/input-core.d.ts +91 -0
- package/dist/src/components/input/input-format.d.ts +118 -0
- package/dist/src/components/input/input-types.d.ts +179 -0
- package/dist/src/components/input/input-utils.d.ts +10 -0
- package/dist/src/components/input/mono-input.d.ts +46 -0
- package/dist/src/components/input/mono-input.shadow.d.ts +34 -0
- package/dist/src/components/menu/index.d.ts +6 -0
- package/dist/src/components/menu/index.shadow.d.ts +7 -0
- package/dist/src/components/menu/menu-core.d.ts +65 -0
- package/dist/src/components/menu/menu-render.d.ts +55 -0
- package/dist/src/components/menu/menu-types.d.ts +195 -0
- package/dist/src/components/menu/menu-utils.d.ts +53 -0
- package/dist/src/components/menu/mono-menu-list.d.ts +118 -0
- package/dist/src/components/menu/mono-menu.d.ts +39 -0
- package/dist/src/components/menu/mono-menu.shadow.d.ts +40 -0
- package/dist/src/components/modal/index.d.ts +4 -0
- package/dist/src/components/modal/index.shadow.d.ts +5 -0
- package/dist/src/components/modal/modal-core.d.ts +110 -0
- package/dist/src/components/modal/modal-types.d.ts +304 -0
- package/dist/src/components/modal/mono-modal-controller.d.ts +4 -0
- package/dist/src/components/modal/mono-modal.d.ts +45 -0
- package/dist/src/components/modal/mono-modal.shadow.d.ts +50 -0
- package/dist/src/components/nav/index.d.ts +4 -0
- package/dist/src/components/nav/index.shadow.d.ts +6 -0
- package/dist/src/components/nav/mono-nav.d.ts +41 -0
- package/dist/src/components/nav/mono-nav.shadow.d.ts +21 -0
- package/dist/src/components/nav/nav-core.d.ts +34 -0
- package/dist/src/components/nav/nav-types.d.ts +48 -0
- package/dist/src/components/nav/nav-utils.d.ts +12 -0
- package/dist/src/components/radio/index.d.ts +4 -0
- package/dist/src/components/radio/index.shadow.d.ts +5 -0
- package/dist/src/components/radio/mono-radio.d.ts +31 -0
- package/dist/src/components/radio/mono-radio.shadow.d.ts +35 -0
- package/dist/src/components/radio/radio-core.d.ts +45 -0
- package/dist/src/components/radio/radio-types.d.ts +58 -0
- package/dist/src/components/radio/radio-utils.d.ts +12 -0
- package/dist/src/components/rich-text-editor/index.d.ts +5 -0
- package/dist/src/components/rich-text-editor/index.shadow.d.ts +6 -0
- package/dist/src/components/rich-text-editor/mono-rich-text-editor.d.ts +31 -0
- package/dist/src/components/rich-text-editor/mono-rich-text-editor.shadow.d.ts +34 -0
- package/dist/src/components/rich-text-editor/rich-text-editor-core.d.ts +100 -0
- package/dist/src/components/rich-text-editor/rich-text-editor-loader.d.ts +17 -0
- package/dist/src/components/rich-text-editor/rich-text-editor-toolbar.d.ts +65 -0
- package/dist/src/components/rich-text-editor/rich-text-editor-types.d.ts +231 -0
- package/dist/src/components/select/index.d.ts +4 -0
- package/dist/src/components/select/index.shadow.d.ts +5 -0
- package/dist/src/components/select/mono-select.d.ts +69 -0
- package/dist/src/components/select/mono-select.shadow.d.ts +48 -0
- package/dist/src/components/select/select-core.d.ts +98 -0
- package/dist/src/components/select/select-types.d.ts +258 -0
- package/dist/src/components/select/select-utils.d.ts +7 -0
- package/dist/src/components/sidebar/index.d.ts +4 -0
- package/dist/src/components/sidebar/index.shadow.d.ts +6 -0
- package/dist/src/components/sidebar/mono-sidebar.d.ts +34 -0
- package/dist/src/components/sidebar/mono-sidebar.shadow.d.ts +27 -0
- package/dist/src/components/sidebar/sidebar-core.d.ts +51 -0
- package/dist/src/components/sidebar/sidebar-types.d.ts +119 -0
- package/dist/src/components/sidebar/sidebar-utils.d.ts +55 -0
- package/dist/src/components/switch/index.d.ts +4 -0
- package/dist/src/components/switch/index.shadow.d.ts +5 -0
- package/dist/src/components/switch/mono-switch.d.ts +31 -0
- package/dist/src/components/switch/mono-switch.shadow.d.ts +36 -0
- package/dist/src/components/switch/switch-core.d.ts +49 -0
- package/dist/src/components/switch/switch-types.d.ts +64 -0
- package/dist/src/components/switch/switch-utils.d.ts +12 -0
- package/dist/src/components/table/array-source.d.ts +44 -0
- package/dist/src/components/table/date-filter-tree.d.ts +93 -0
- package/dist/src/components/table/grouping.d.ts +55 -0
- package/dist/src/components/table/index.d.ts +33 -0
- package/dist/src/components/table/index.shadow.d.ts +47 -0
- package/dist/src/components/table/mono-data-grid.d.ts +1756 -0
- package/dist/src/components/table/mono-table-checkbox-core.d.ts +76 -0
- package/dist/src/components/table/mono-table-checkbox.d.ts +34 -0
- package/dist/src/components/table/mono-table-checkbox.shadow.d.ts +26 -0
- package/dist/src/components/table/mono-table-detail-core.d.ts +87 -0
- package/dist/src/components/table/mono-table-detail.d.ts +32 -0
- package/dist/src/components/table/mono-table-detail.shadow.d.ts +31 -0
- package/dist/src/components/table/mono-table-empty-core.d.ts +60 -0
- package/dist/src/components/table/mono-table-empty.d.ts +35 -0
- package/dist/src/components/table/mono-table-empty.shadow.d.ts +40 -0
- package/dist/src/components/table/mono-table-error-core.d.ts +84 -0
- package/dist/src/components/table/mono-table-error.d.ts +28 -0
- package/dist/src/components/table/mono-table-error.shadow.d.ts +21 -0
- package/dist/src/components/table/mono-table-info-core.d.ts +13 -0
- package/dist/src/components/table/mono-table-info.d.ts +19 -0
- package/dist/src/components/table/mono-table-info.shadow.d.ts +14 -0
- package/dist/src/components/table/mono-table-loading-core.d.ts +41 -0
- package/dist/src/components/table/mono-table-loading.d.ts +50 -0
- package/dist/src/components/table/mono-table-loading.shadow.d.ts +14 -0
- package/dist/src/components/table/mono-table-page-size-core.d.ts +14 -0
- package/dist/src/components/table/mono-table-page-size.d.ts +16 -0
- package/dist/src/components/table/mono-table-page-size.shadow.d.ts +11 -0
- package/dist/src/components/table/mono-table-paging-core.d.ts +22 -0
- package/dist/src/components/table/mono-table-paging-group-core.d.ts +18 -0
- package/dist/src/components/table/mono-table-paging-group.d.ts +20 -0
- package/dist/src/components/table/mono-table-paging-group.shadow.d.ts +13 -0
- package/dist/src/components/table/mono-table-paging.d.ts +16 -0
- package/dist/src/components/table/mono-table-paging.shadow.d.ts +11 -0
- package/dist/src/components/table/mono-table-search-core.d.ts +74 -0
- package/dist/src/components/table/mono-table-search.d.ts +34 -0
- package/dist/src/components/table/mono-table-search.shadow.d.ts +21 -0
- package/dist/src/components/table/mono-table-sort-core.d.ts +35 -0
- package/dist/src/components/table/mono-table-sort.d.ts +38 -0
- package/dist/src/components/table/mono-table-sort.shadow.d.ts +20 -0
- package/dist/src/components/table/mono-table-summary-core.d.ts +26 -0
- package/dist/src/components/table/mono-table-summary.d.ts +24 -0
- package/dist/src/components/table/mono-table-summary.shadow.d.ts +14 -0
- package/dist/src/components/table/mono-table-th-core.d.ts +56 -0
- package/dist/src/components/table/mono-table-th.d.ts +41 -0
- package/dist/src/components/table/mono-table-th.shadow.d.ts +19 -0
- package/dist/src/components/table/store-group-source.d.ts +24 -0
- package/dist/src/components/table/table-controller-core.d.ts +40 -0
- package/dist/src/components/table/table-filter-icons.d.ts +3 -0
- package/dist/src/components/table/table-menu-core.d.ts +65 -0
- package/dist/src/components/table/table-overlay.d.ts +165 -0
- package/dist/src/components/table/table-sort-icons.d.ts +4 -0
- package/dist/src/components/table/table-sort-utils.d.ts +20 -0
- package/dist/src/components/table/table-types.d.ts +475 -0
- package/dist/src/components/tabs/index.d.ts +3 -0
- package/dist/src/components/tabs/index.shadow.d.ts +4 -0
- package/dist/src/components/tabs/mono-tabs.d.ts +33 -0
- package/dist/src/components/tabs/mono-tabs.shadow.d.ts +37 -0
- package/dist/src/components/tabs/tabs-core.d.ts +57 -0
- package/dist/src/components/tabs/tabs-types.d.ts +65 -0
- package/dist/src/components/tag-input/index.d.ts +4 -0
- package/dist/src/components/tag-input/index.shadow.d.ts +5 -0
- package/dist/src/components/tag-input/mono-tag-input.d.ts +66 -0
- package/dist/src/components/tag-input/mono-tag-input.shadow.d.ts +40 -0
- package/dist/src/components/tag-input/tag-input-core.d.ts +108 -0
- package/dist/src/components/tag-input/tag-input-types.d.ts +394 -0
- package/dist/src/components/tag-input/tag-input-utils.d.ts +8 -0
- package/dist/src/components/textarea/index.d.ts +4 -0
- package/dist/src/components/textarea/index.shadow.d.ts +5 -0
- package/dist/src/components/textarea/mono-textarea.d.ts +29 -0
- package/dist/src/components/textarea/mono-textarea.shadow.d.ts +31 -0
- package/dist/src/components/textarea/textarea-core.d.ts +60 -0
- package/dist/src/components/textarea/textarea-types.d.ts +131 -0
- package/dist/src/components/textarea/textarea-utils.d.ts +7 -0
- package/dist/src/components/tooltip/control-tooltip.d.ts +36 -0
- package/dist/src/components/tooltip/index.d.ts +6 -0
- package/dist/src/components/tooltip/tooltip-config.d.ts +27 -0
- package/dist/src/components/tooltip/tooltip-declarative.d.ts +41 -0
- package/dist/src/components/tooltip/tooltip-loader.d.ts +1 -0
- package/dist/src/components/tooltip/tooltip-types.d.ts +110 -0
- package/dist/src/composables/breakpoints.d.ts +59 -0
- package/dist/src/composables/chip-limits.d.ts +48 -0
- package/dist/src/composables/chip-strip.d.ts +93 -0
- package/dist/src/composables/color.d.ts +103 -0
- package/dist/src/composables/css-class.d.ts +27 -0
- package/dist/src/composables/css-size.d.ts +40 -0
- package/dist/src/composables/data-source-controller.d.ts +84 -0
- package/dist/src/composables/element-props.d.ts +46 -0
- package/dist/src/composables/field-icons.d.ts +7 -0
- package/dist/src/composables/hybird-prop.d.ts +79 -0
- package/dist/src/composables/hydration-flush.d.ts +34 -0
- package/dist/src/composables/icon.d.ts +17 -0
- package/dist/src/composables/layout-var.d.ts +34 -0
- package/dist/src/composables/light-slots.d.ts +133 -0
- package/dist/src/composables/mdi-glyphs.d.ts +4 -0
- package/dist/src/composables/mono-element.d.ts +9 -0
- package/dist/src/composables/mono-event.d.ts +55 -0
- package/dist/src/composables/mono-pending.d.ts +8 -0
- package/dist/src/composables/mono-skeleton.d.ts +193 -0
- package/dist/src/composables/mono-ui.d.ts +58 -0
- package/dist/src/composables/notifier.d.ts +46 -0
- package/dist/src/composables/popup-portal.d.ts +226 -0
- package/dist/src/composables/popup-stack.d.ts +70 -0
- package/dist/src/composables/rate-limit.d.ts +108 -0
- package/dist/src/composables/reactive.d.ts +53 -0
- package/dist/src/composables/shadow-css.d.ts +42 -0
- package/dist/src/composables/visibility.d.ts +36 -0
- package/dist/src/data/theme/index.d.ts +30 -0
- package/dist/src/data/theme/presets.d.ts +94 -0
- package/dist/src/entries/index.d.ts +2 -0
- package/dist/src/entries/index.node.d.ts +42 -0
- package/dist/src/entries/search.d.ts +3 -0
- package/dist/src/export/detail.d.ts +29 -0
- package/dist/src/export/download.d.ts +9 -0
- package/dist/src/export/excel/index.d.ts +27 -0
- package/dist/src/export/excel/nodes.d.ts +123 -0
- package/dist/src/export/expression.d.ts +36 -0
- package/dist/src/export/helpers.d.ts +6 -0
- package/dist/src/export/index.d.ts +13 -0
- package/dist/src/export/markdown.d.ts +52 -0
- package/dist/src/export/resolve-data.d.ts +31 -0
- package/dist/src/export/sentinel.d.ts +97 -0
- package/dist/src/export/sheet-name.d.ts +45 -0
- package/dist/src/export/styles.d.ts +33 -0
- package/dist/src/export/template.d.ts +10 -0
- package/dist/src/export/types.d.ts +259 -0
- package/dist/src/import/coerce.d.ts +38 -0
- package/dist/src/import/index.d.ts +16 -0
- package/dist/src/import/match.d.ts +54 -0
- package/dist/src/import/parse.d.ts +15 -0
- package/dist/src/import/types.d.ts +153 -0
- package/dist/src/nuxt/index.d.ts +94 -0
- package/dist/src/search/data-search.d.ts +207 -0
- package/dist/src/search/field-path.d.ts +107 -0
- package/dist/src/search/filter-eval.d.ts +30 -0
- package/dist/src/search/index.d.ts +22 -0
- package/dist/src/search/odata-search.d.ts +18 -0
- package/dist/src/search/search-expr.d.ts +160 -0
- package/dist/src/utils/data-source-apply.d.ts +97 -0
- package/dist/src/utils/data-source-options.d.ts +116 -0
- package/dist/src/utils/data-source-read.d.ts +85 -0
- package/dist/src/utils/data-source-summary.d.ts +55 -0
- package/dist/src/utils/normalize-error.d.ts +60 -0
- package/dist/src/vite/index.d.ts +48 -0
- package/dist/src/vite/mono-client-only.d.ts +35 -0
- package/dist/src/vite/mono-ssr-stub.d.ts +20 -0
- package/dist/src/vite/shadow-manifest.d.ts +8 -0
- package/dist/styles-BIJ31TM4.js +20146 -0
- package/dist/tooltip-CysgRgBi.js +760 -0
- package/dist/tooltip.d.ts +1 -0
- package/dist/tooltip.js +2 -0
- package/dist/ui/accordion.d.ts +1 -0
- package/dist/ui/accordion.js +466 -0
- package/dist/ui/alert.d.ts +1 -0
- package/dist/ui/alert.js +221 -0
- package/dist/ui/breadcrumb.d.ts +1 -0
- package/dist/ui/breadcrumb.js +902 -0
- package/dist/ui/button-dropdown.d.ts +1 -0
- package/dist/ui/button-dropdown.js +679 -0
- package/dist/ui/button.d.ts +1 -0
- package/dist/ui/button.js +63 -0
- package/dist/ui/card.d.ts +1 -0
- package/dist/ui/card.js +511 -0
- package/dist/ui/chart.d.ts +1 -0
- package/dist/ui/chart.js +808 -0
- package/dist/ui/checkbox.d.ts +1 -0
- package/dist/ui/checkbox.js +413 -0
- package/dist/ui/chip.d.ts +1 -0
- package/dist/ui/chip.js +558 -0
- package/dist/ui/date.d.ts +1 -0
- package/dist/ui/date.js +686 -0
- package/dist/ui/drawer.d.ts +1 -0
- package/dist/ui/drawer.js +901 -0
- package/dist/ui/dropdown-table.d.ts +1 -0
- package/dist/ui/dropdown-table.js +1291 -0
- package/dist/ui/dropdown.d.ts +1 -0
- package/dist/ui/dropdown.js +586 -0
- package/dist/ui/file-upload.d.ts +1 -0
- package/dist/ui/file-upload.js +688 -0
- package/dist/ui/filter.d.ts +1 -0
- package/dist/ui/filter.js +400 -0
- package/dist/ui/font/files/geist-47c091c9.woff2 +0 -0
- package/dist/ui/font/files/geist-8dd77544.woff2 +0 -0
- package/dist/ui/font/files/geist-b9248b1e.woff2 +0 -0
- package/dist/ui/font/files/geist-d40d74b4.woff2 +0 -0
- package/dist/ui/font/files/geist-f493429a.woff2 +0 -0
- package/dist/ui/font/files/geistmono-03737868.woff2 +0 -0
- package/dist/ui/font/files/geistmono-421a7e38.woff2 +0 -0
- package/dist/ui/font/files/geistmono-48ef518d.woff2 +0 -0
- package/dist/ui/font/files/geistmono-5df35d39.woff2 +0 -0
- package/dist/ui/font/files/geistmono-7de289a4.woff2 +0 -0
- package/dist/ui/font/files/geistmono-e976128f.woff2 +0 -0
- package/dist/ui/font/files/inter-05cf802c.woff2 +0 -0
- package/dist/ui/font/files/inter-2b2f25a4.woff2 +0 -0
- package/dist/ui/font/files/inter-467acc7a.woff2 +0 -0
- package/dist/ui/font/files/inter-6e85163c.woff2 +0 -0
- package/dist/ui/font/files/inter-7048add3.woff2 +0 -0
- package/dist/ui/font/files/inter-9be0371e.woff2 +0 -0
- package/dist/ui/font/files/inter-a28b7e31.woff2 +0 -0
- package/dist/ui/font/files/poppins-054df55a.woff2 +0 -0
- package/dist/ui/font/files/poppins-0ee5dc9a.woff2 +0 -0
- package/dist/ui/font/files/poppins-0f44cb18.woff2 +0 -0
- package/dist/ui/font/files/poppins-0ff0d30c.woff2 +0 -0
- package/dist/ui/font/files/poppins-13045147.woff2 +0 -0
- package/dist/ui/font/files/poppins-1db57cd9.woff2 +0 -0
- package/dist/ui/font/files/poppins-2cf2a902.woff2 +0 -0
- package/dist/ui/font/files/poppins-39e7f079.woff2 +0 -0
- package/dist/ui/font/files/poppins-9607042d.woff2 +0 -0
- package/dist/ui/font/files/poppins-9a88fc1f.woff2 +0 -0
- package/dist/ui/font/files/poppins-b8f4f752.woff2 +0 -0
- package/dist/ui/font/files/poppins-f5e57db4.woff2 +0 -0
- package/dist/ui/font/geist-mono.css +104 -0
- package/dist/ui/font/geist.css +168 -0
- package/dist/ui/font/inter.css +232 -0
- package/dist/ui/font/poppins.css +104 -0
- package/dist/ui/form.d.ts +1 -0
- package/dist/ui/form.js +3 -0
- package/dist/ui/index.css +21826 -0
- package/dist/ui/input.d.ts +1 -0
- package/dist/ui/input.js +1176 -0
- package/dist/ui/menu.d.ts +1 -0
- package/dist/ui/menu.js +1289 -0
- package/dist/ui/modal.d.ts +1 -0
- package/dist/ui/modal.js +995 -0
- package/dist/ui/nav.d.ts +1 -0
- package/dist/ui/nav.js +295 -0
- package/dist/ui/radio.d.ts +1 -0
- package/dist/ui/radio.js +379 -0
- package/dist/ui/rich-text-editor.d.ts +1 -0
- package/dist/ui/rich-text-editor.js +1338 -0
- package/dist/ui/select.d.ts +1 -0
- package/dist/ui/select.js +2066 -0
- package/dist/ui/shadow/accordion.js +442 -0
- package/dist/ui/shadow/alert.js +218 -0
- package/dist/ui/shadow/breadcrumb.js +919 -0
- package/dist/ui/shadow/button-dropdown.js +696 -0
- package/dist/ui/shadow/button.js +63 -0
- package/dist/ui/shadow/card.js +524 -0
- package/dist/ui/shadow/chart.js +1569 -0
- package/dist/ui/shadow/checkbox.js +457 -0
- package/dist/ui/shadow/chip.js +559 -0
- package/dist/ui/shadow/date.js +712 -0
- package/dist/ui/shadow/drawer.js +869 -0
- package/dist/ui/shadow/dropdown-table.js +1620 -0
- package/dist/ui/shadow/dropdown.js +547 -0
- package/dist/ui/shadow/file-upload.js +731 -0
- package/dist/ui/shadow/filter.js +402 -0
- package/dist/ui/shadow/input.js +1150 -0
- package/dist/ui/shadow/menu.js +899 -0
- package/dist/ui/shadow/modal.js +1193 -0
- package/dist/ui/shadow/nav.js +240 -0
- package/dist/ui/shadow/radio.js +408 -0
- package/dist/ui/shadow/rich-text-editor.js +1344 -0
- package/dist/ui/shadow/select.js +2033 -0
- package/dist/ui/shadow/sidebar.js +606 -0
- package/dist/ui/shadow/switch.js +428 -0
- package/dist/ui/shadow/table.js +4755 -0
- package/dist/ui/shadow/tabs.js +372 -0
- package/dist/ui/shadow/tag-input.js +2846 -0
- package/dist/ui/shadow/textarea.js +816 -0
- package/dist/ui/sidebar.d.ts +1 -0
- package/dist/ui/sidebar.js +659 -0
- package/dist/ui/switch.d.ts +1 -0
- package/dist/ui/switch.js +398 -0
- package/dist/ui/table.d.ts +1 -0
- package/dist/ui/table.js +4654 -0
- package/dist/ui/tabs.d.ts +1 -0
- package/dist/ui/tabs.js +379 -0
- package/dist/ui/tag-input.d.ts +1 -0
- package/dist/ui/tag-input.js +2819 -0
- package/dist/ui/textarea.d.ts +1 -0
- package/dist/ui/textarea.js +819 -0
- package/dist/ui/theme/legacy.css +293 -0
- package/dist/ui/theme/luma.css +743 -0
- package/dist/ui/theme/lyra.css +754 -0
- package/dist/ui/theme/maia.css +673 -0
- package/dist/ui/theme/mira.css +802 -0
- package/dist/ui/theme/nova.css +662 -0
- package/dist/ui/theme/one.css +699 -0
- package/dist/ui/theme/rhea.css +742 -0
- package/dist/ui/theme/sera.css +845 -0
- package/dist/ui/theme/tokens.css +261 -0
- package/dist/ui/theme/vega.css +467 -0
- package/dist/vite-C5iUK7so.js +329 -0
- package/dist/vite.d.ts +1 -0
- package/dist/vite.js +2 -0
- package/dist/vue.d.ts +282 -0
- package/package.json +411 -3
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
import { a as unregisterPopupLayer, r as registerPopupLayer } from "./popup-stack-CEEMib__.js";
|
|
2
|
+
import { isServer } from "lit";
|
|
3
|
+
//#region src/composables/popup-portal.ts
|
|
4
|
+
/** Smallest height we will ever constrain a panel to — below this it's unusable. */
|
|
5
|
+
var MIN_CONSTRAINED = 96;
|
|
6
|
+
/** Composed-tree parent — crosses shadow boundaries. */
|
|
7
|
+
function flatTreeParent(node) {
|
|
8
|
+
const slot = node.assignedSlot;
|
|
9
|
+
if (slot) return slot;
|
|
10
|
+
const parent = node.parentNode;
|
|
11
|
+
if (parent instanceof ShadowRoot) return parent.host;
|
|
12
|
+
return parent;
|
|
13
|
+
}
|
|
14
|
+
/** Composed-tree containment — `root.contains(node)` that crosses shadow roots and slots. */
|
|
15
|
+
function flatTreeContains(root, node) {
|
|
16
|
+
for (let n = node; n; n = flatTreeParent(n)) if (n === root) return true;
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Which element OPENED a body-level portal.
|
|
21
|
+
*
|
|
22
|
+
* Every portal is a direct child of `<body>`, so the DOM says nothing about
|
|
23
|
+
* where its popup came from — and a popup opened from inside another popup's
|
|
24
|
+
* panel (a header filter inside a dropdown-table, a select inside a modal) is
|
|
25
|
+
* then "outside" to that panel's own dismiss test, which closes it under the
|
|
26
|
+
* user's hands. This map is the missing link, kept off the DOM (no attribute,
|
|
27
|
+
* nothing to serialise) and weak so a torn-down portal is not held.
|
|
28
|
+
*/
|
|
29
|
+
var portalOwner = /* @__PURE__ */ new WeakMap();
|
|
30
|
+
/** The portal `node` currently lives in (composed tree), or `null` when it is not inside one. */
|
|
31
|
+
function flatTreeClosestPortal(node) {
|
|
32
|
+
for (let n = flatTreeParent(node); n; n = flatTreeParent(n)) if (n instanceof Element && n.hasAttribute("data-mono-popup-portal")) return n;
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* True when an event's composed path passes through any of `roots` — directly,
|
|
37
|
+
* or through a body-level popup portal whose OWNER lives inside one of them (at
|
|
38
|
+
* any depth: a select inside a header filter inside a dropdown-table resolves
|
|
39
|
+
* all the way up).
|
|
40
|
+
*
|
|
41
|
+
* The one "is this click inside me?" test the library uses. Popups ask it
|
|
42
|
+
* through `PopupPortalController.containsInPath`; `mono-modal` / `mono-drawer`
|
|
43
|
+
* — which portal themselves, not through this controller — ask it directly with
|
|
44
|
+
* their host + render root, so a click in a select's option list opened from
|
|
45
|
+
* inside a no-overlay dialog counts as inside the dialog.
|
|
46
|
+
*/
|
|
47
|
+
function pathOwnedBy(path, roots) {
|
|
48
|
+
if (path.some((node) => node instanceof Element && roots.includes(node))) return true;
|
|
49
|
+
return nestedPortalInPath(path, roots);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The portal half of `pathOwnedBy`: true when the path passes through a
|
|
53
|
+
* `[data-mono-popup-portal]` whose owner chain lands in one of `roots` — the
|
|
54
|
+
* roots themselves being in the path does NOT count. That distinction is what
|
|
55
|
+
* `ownsNestedInPath` is built on: an Escape with focus on a dropdown's own
|
|
56
|
+
* trigger is the dropdown's to close, not a nested popup's.
|
|
57
|
+
*/
|
|
58
|
+
function nestedPortalInPath(path, roots) {
|
|
59
|
+
for (const node of path) {
|
|
60
|
+
if (!(node instanceof Element) || !node.hasAttribute("data-mono-popup-portal")) continue;
|
|
61
|
+
let owner = portalOwner.get(node);
|
|
62
|
+
const seen = /* @__PURE__ */ new Set();
|
|
63
|
+
while (owner && !seen.has(owner)) {
|
|
64
|
+
seen.add(owner);
|
|
65
|
+
if (roots.some((root) => root === owner || flatTreeContains(root, owner))) return true;
|
|
66
|
+
const outer = flatTreeClosestPortal(owner);
|
|
67
|
+
owner = outer ? portalOwner.get(outer) : void 0;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Nearest ancestor of the panel that establishes a containing block for
|
|
74
|
+
* `position: fixed` descendants. A body-portaled panel has none (the portal is
|
|
75
|
+
* a direct child of `<body>`), but a shadow-root panel usually sits under app
|
|
76
|
+
* chrome that does.
|
|
77
|
+
*/
|
|
78
|
+
function findFixedContainingBlock(panel) {
|
|
79
|
+
let node = flatTreeParent(panel);
|
|
80
|
+
while (node && node !== document.body && node !== document.documentElement) {
|
|
81
|
+
if (node instanceof HTMLElement) {
|
|
82
|
+
const cs = getComputedStyle(node);
|
|
83
|
+
if (cs.transform && cs.transform !== "none") return node;
|
|
84
|
+
if (cs.perspective && cs.perspective !== "none") return node;
|
|
85
|
+
if (cs.filter && cs.filter !== "none") return node;
|
|
86
|
+
const backdrop = cs.backdropFilter || cs.webkitBackdropFilter;
|
|
87
|
+
if (backdrop && backdrop !== "none") return node;
|
|
88
|
+
const willChange = cs.willChange || "";
|
|
89
|
+
if (willChange.includes("transform") || willChange.includes("perspective") || willChange.includes("filter")) return node;
|
|
90
|
+
const contain = cs.contain || "";
|
|
91
|
+
if (contain.includes("paint") || contain.includes("layout") || contain.includes("strict") || contain.includes("content")) return node;
|
|
92
|
+
}
|
|
93
|
+
node = flatTreeParent(node);
|
|
94
|
+
}
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Resolve where `panel` should sit relative to `anchor`, in viewport
|
|
99
|
+
* coordinates (i.e. what `position: fixed` wants, before any containing-block
|
|
100
|
+
* compensation — that's {@link applyPopupPlacement}'s job).
|
|
101
|
+
*
|
|
102
|
+
* IMPORTANT — the panel is measured at its NATURAL size: any previously
|
|
103
|
+
* published `--mono-popup-avail-*` constraint is cleared first. A constrained
|
|
104
|
+
* panel is exactly as tall as the room we gave it, so measuring it that way
|
|
105
|
+
* would make the flip test (`spaceBelow < panelH`) always report "it fits" and
|
|
106
|
+
* the panel would oscillate between sides on every scroll tick.
|
|
107
|
+
*/
|
|
108
|
+
function computePopupPlacement(anchor, panel, o = {}) {
|
|
109
|
+
panel.style.removeProperty("--mono-popup-avail-h");
|
|
110
|
+
panel.style.removeProperty("--mono-popup-avail-w");
|
|
111
|
+
const triggerRect = anchor.getBoundingClientRect();
|
|
112
|
+
const panelRect = panel.getBoundingClientRect();
|
|
113
|
+
const vw = window.innerWidth;
|
|
114
|
+
const vh = window.innerHeight;
|
|
115
|
+
const margin = o.margin ?? 4;
|
|
116
|
+
const cs = getComputedStyle(panel);
|
|
117
|
+
const borderX = (parseFloat(cs.borderLeftWidth) || 0) + (parseFloat(cs.borderRightWidth) || 0);
|
|
118
|
+
const borderY = (parseFloat(cs.borderTopWidth) || 0) + (parseFloat(cs.borderBottomWidth) || 0);
|
|
119
|
+
const boxW = panelRect.width || panel.offsetWidth;
|
|
120
|
+
const boxH = panelRect.height || panel.offsetHeight;
|
|
121
|
+
const panelW = cs.overflowX === "visible" ? Math.max(boxW, panel.scrollWidth + borderX) : boxW;
|
|
122
|
+
const panelH = cs.overflowY === "visible" ? Math.max(boxH, panel.scrollHeight + borderY) : boxH;
|
|
123
|
+
let side = o.side ?? "bottom";
|
|
124
|
+
let align = o.align ?? "start";
|
|
125
|
+
const offset = o.offset ?? 6;
|
|
126
|
+
const flip = o.flip ?? false;
|
|
127
|
+
const shift = o.shift ?? false;
|
|
128
|
+
const constrain = o.constrain ?? false;
|
|
129
|
+
/** Extent the panel will actually occupy along the main axis once clamped. */
|
|
130
|
+
const clamped = (natural, available) => constrain ? Math.min(natural, Math.max(MIN_CONSTRAINED, available)) : natural;
|
|
131
|
+
if (flip) {
|
|
132
|
+
if (side === "bottom") {
|
|
133
|
+
const below = vh - triggerRect.bottom - offset;
|
|
134
|
+
const above = triggerRect.top - offset;
|
|
135
|
+
if (below < panelH && above > below) side = "top";
|
|
136
|
+
} else if (side === "top") {
|
|
137
|
+
const above = triggerRect.top - offset;
|
|
138
|
+
const below = vh - triggerRect.bottom - offset;
|
|
139
|
+
if (above < panelH && below > above) side = "bottom";
|
|
140
|
+
} else if (side === "right") {
|
|
141
|
+
const right = vw - triggerRect.right - offset;
|
|
142
|
+
const left = triggerRect.left - offset;
|
|
143
|
+
if (right < panelW && left > right) side = "left";
|
|
144
|
+
} else if (side === "left") {
|
|
145
|
+
const left = triggerRect.left - offset;
|
|
146
|
+
const right = vw - triggerRect.right - offset;
|
|
147
|
+
if (left < panelW && right > left) side = "right";
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (flip && align !== "center") {
|
|
151
|
+
const fitsStart = side === "bottom" || side === "top" ? triggerRect.left + panelW + margin <= vw : triggerRect.top + panelH + margin <= vh;
|
|
152
|
+
const fitsEnd = side === "bottom" || side === "top" ? triggerRect.right - panelW - margin >= 0 : triggerRect.bottom - panelH - margin >= 0;
|
|
153
|
+
if (align === "start" && !fitsStart && fitsEnd) align = "end";
|
|
154
|
+
else if (align === "end" && !fitsEnd && fitsStart) align = "start";
|
|
155
|
+
}
|
|
156
|
+
let top = 0;
|
|
157
|
+
let left = 0;
|
|
158
|
+
let availableMain = 0;
|
|
159
|
+
if (side === "bottom" || side === "top") {
|
|
160
|
+
if (align === "start") left = triggerRect.left;
|
|
161
|
+
else if (align === "end") left = triggerRect.right - panelW;
|
|
162
|
+
else left = triggerRect.left + triggerRect.width / 2 - panelW / 2;
|
|
163
|
+
if (shift) {
|
|
164
|
+
const minLeft = margin;
|
|
165
|
+
const maxLeft = vw - panelW - margin;
|
|
166
|
+
if (maxLeft >= minLeft) {
|
|
167
|
+
if (left < minLeft) left = minLeft;
|
|
168
|
+
if (left > maxLeft) left = maxLeft;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
availableMain = side === "bottom" ? vh - triggerRect.bottom - offset - margin : triggerRect.top - offset - margin;
|
|
172
|
+
top = side === "bottom" ? triggerRect.bottom + offset : triggerRect.top - clamped(panelH, availableMain) - offset;
|
|
173
|
+
} else {
|
|
174
|
+
if (align === "start") top = triggerRect.top;
|
|
175
|
+
else if (align === "end") top = triggerRect.bottom - panelH;
|
|
176
|
+
else top = triggerRect.top + triggerRect.height / 2 - panelH / 2;
|
|
177
|
+
if (shift) {
|
|
178
|
+
const minTop = margin;
|
|
179
|
+
const maxTop = vh - panelH - margin;
|
|
180
|
+
if (maxTop >= minTop) {
|
|
181
|
+
if (top < minTop) top = minTop;
|
|
182
|
+
if (top > maxTop) top = maxTop;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
availableMain = side === "right" ? vw - triggerRect.right - offset - margin : triggerRect.left - offset - margin;
|
|
186
|
+
left = side === "right" ? triggerRect.right + offset : triggerRect.left - clamped(panelW, availableMain) - offset;
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
top,
|
|
190
|
+
left,
|
|
191
|
+
side,
|
|
192
|
+
availableMain
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Commit a {@link computePopupPlacement} result to the panel. Compensates for a
|
|
197
|
+
* transformed / contained ancestor that has become the fixed panel's containing
|
|
198
|
+
* block (a no-op for a body-portaled panel), and — when `constrain` is set —
|
|
199
|
+
* publishes the available room so the panel's own CSS can clamp itself.
|
|
200
|
+
*/
|
|
201
|
+
function applyPopupPlacement(panel, placement, constrain = false) {
|
|
202
|
+
let { top, left } = placement;
|
|
203
|
+
const cb = findFixedContainingBlock(panel);
|
|
204
|
+
if (cb) {
|
|
205
|
+
const cbRect = cb.getBoundingClientRect();
|
|
206
|
+
top -= cbRect.top;
|
|
207
|
+
left -= cbRect.left;
|
|
208
|
+
}
|
|
209
|
+
panel.style.position = "fixed";
|
|
210
|
+
const grid = typeof window !== "undefined" && window.devicePixelRatio > 0 ? window.devicePixelRatio : 1;
|
|
211
|
+
const snap = (v) => Math.round(v * grid) / grid;
|
|
212
|
+
panel.style.top = `${snap(top)}px`;
|
|
213
|
+
panel.style.left = `${snap(left)}px`;
|
|
214
|
+
panel.style.right = "auto";
|
|
215
|
+
panel.style.bottom = "auto";
|
|
216
|
+
panel.style.transform = "none";
|
|
217
|
+
if (constrain) {
|
|
218
|
+
const avail = `${Math.round(Math.max(MIN_CONSTRAINED, placement.availableMain))}px`;
|
|
219
|
+
const vertical = placement.side === "bottom" || placement.side === "top";
|
|
220
|
+
panel.style.setProperty(vertical ? "--mono-popup-avail-h" : "--mono-popup-avail-w", avail);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
var PopupPortalController = class {
|
|
224
|
+
constructor(host, opts) {
|
|
225
|
+
this.host = host;
|
|
226
|
+
this.opts = opts;
|
|
227
|
+
this._portal = null;
|
|
228
|
+
this._panel = null;
|
|
229
|
+
this._adopted = false;
|
|
230
|
+
this._registered = false;
|
|
231
|
+
this._resolvedSide = "bottom";
|
|
232
|
+
this._classObserver = null;
|
|
233
|
+
this._viewportBound = false;
|
|
234
|
+
this._viewportFrame = 0;
|
|
235
|
+
this._onViewport = () => {
|
|
236
|
+
if (!this.opts.isOpen() || this._viewportFrame) return;
|
|
237
|
+
this._viewportFrame = requestAnimationFrame(() => {
|
|
238
|
+
this._viewportFrame = 0;
|
|
239
|
+
if (this.opts.isOpen()) this.reposition();
|
|
240
|
+
});
|
|
241
|
+
};
|
|
242
|
+
host.addController(this);
|
|
243
|
+
}
|
|
244
|
+
hostConnected() {
|
|
245
|
+
if (isServer) return;
|
|
246
|
+
if (this.opts.isOpen()) {
|
|
247
|
+
this._adopt();
|
|
248
|
+
this._enterStack();
|
|
249
|
+
this._syncPortalClass();
|
|
250
|
+
this.reposition();
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
hostDisconnected() {
|
|
254
|
+
this._unbindViewport();
|
|
255
|
+
this._leaveStack();
|
|
256
|
+
this._classObserver?.disconnect();
|
|
257
|
+
this._classObserver = null;
|
|
258
|
+
if (this._portal?.parentNode) this._portal.parentNode.removeChild(this._portal);
|
|
259
|
+
this._portal = null;
|
|
260
|
+
this._adopted = false;
|
|
261
|
+
}
|
|
262
|
+
hostUpdated() {
|
|
263
|
+
if (isServer) return;
|
|
264
|
+
if (this.opts.isOpen()) {
|
|
265
|
+
this._adopt();
|
|
266
|
+
this._enterStack();
|
|
267
|
+
this._syncPortalClass();
|
|
268
|
+
this.reposition();
|
|
269
|
+
} else {
|
|
270
|
+
this._leaveStack();
|
|
271
|
+
this._syncPortalClass();
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Only relocate to `<body>` when the host renders into light DOM
|
|
276
|
+
* (`renderRoot === host`). Shadow hosts keep the panel in their shadow root.
|
|
277
|
+
*/
|
|
278
|
+
get _canPortal() {
|
|
279
|
+
return !isServer && this.host.renderRoot === this.host;
|
|
280
|
+
}
|
|
281
|
+
_ensurePortal() {
|
|
282
|
+
if (this._portal) return this._portal;
|
|
283
|
+
if (typeof document === "undefined") return null;
|
|
284
|
+
const portal = document.createElement("div");
|
|
285
|
+
portal.setAttribute("data-mono-popup-portal", "");
|
|
286
|
+
portal.style.display = "contents";
|
|
287
|
+
document.body.appendChild(portal);
|
|
288
|
+
portalOwner.set(portal, this.host);
|
|
289
|
+
this._portal = portal;
|
|
290
|
+
return portal;
|
|
291
|
+
}
|
|
292
|
+
/** Move the panel into the body portal on first open; keep it there after. */
|
|
293
|
+
_adopt() {
|
|
294
|
+
if (this._adopted) return;
|
|
295
|
+
if (!this._canPortal) {
|
|
296
|
+
this._panel = this.opts.getPanel();
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const panel = this.opts.getPanel() ?? this._panel;
|
|
300
|
+
if (!panel) return;
|
|
301
|
+
const portal = this._ensurePortal();
|
|
302
|
+
if (!portal) return;
|
|
303
|
+
this._syncPortalClass();
|
|
304
|
+
this._observeStyleScope();
|
|
305
|
+
portal.appendChild(panel);
|
|
306
|
+
this._panel = panel;
|
|
307
|
+
this._adopted = true;
|
|
308
|
+
}
|
|
309
|
+
/** Mirror the style-scope element's classes and `mono-*` attributes onto the portal. */
|
|
310
|
+
_syncPortalClass() {
|
|
311
|
+
if (!this._portal) return;
|
|
312
|
+
const scope = this.opts.getStyleScope();
|
|
313
|
+
const cls = scope?.getAttribute("class") ?? "";
|
|
314
|
+
if (this._portal.getAttribute("class") !== cls) this._portal.setAttribute("class", cls);
|
|
315
|
+
const mirrored = (name) => name.startsWith("mono-") && !name.startsWith("mono-tooltip-");
|
|
316
|
+
const wanted = /* @__PURE__ */ new Map();
|
|
317
|
+
if (scope) {
|
|
318
|
+
for (const a of Array.from(scope.attributes)) if (mirrored(a.name)) wanted.set(a.name, a.value);
|
|
319
|
+
}
|
|
320
|
+
for (const a of Array.from(this._portal.attributes)) if (mirrored(a.name) && !wanted.has(a.name)) this._portal.removeAttribute(a.name);
|
|
321
|
+
for (const [name, value] of wanted) if (this._portal.getAttribute(name) !== value) this._portal.setAttribute(name, value);
|
|
322
|
+
this._syncPortalVars(scope);
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Carry the component's public custom properties across the portal (see
|
|
326
|
+
* `styleVars`). Only values that DIFFER from the portal's own resolution are
|
|
327
|
+
* written, so a theme-level token stays inherited and only a real override
|
|
328
|
+
* (an ancestor of the host, or an inline style on it) is copied.
|
|
329
|
+
*/
|
|
330
|
+
_syncPortalVars(scope) {
|
|
331
|
+
const names = this.opts.styleVars?.();
|
|
332
|
+
if (!this._portal || !scope || !names?.length) return;
|
|
333
|
+
const from = getComputedStyle(scope);
|
|
334
|
+
const here = getComputedStyle(this._portal);
|
|
335
|
+
for (const name of names) {
|
|
336
|
+
const value = from.getPropertyValue(name);
|
|
337
|
+
if (!value) {
|
|
338
|
+
if (this._portal.style.getPropertyValue(name)) this._portal.style.removeProperty(name);
|
|
339
|
+
continue;
|
|
340
|
+
}
|
|
341
|
+
if ((this._portal.style.getPropertyValue(name) || here.getPropertyValue(name)) !== value) this._portal.style.setProperty(name, value);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Watch the style-scope's `class` attribute so the portal stays in sync even
|
|
346
|
+
* when the host toggles state classes (e.g. `open`) imperatively in
|
|
347
|
+
* `updated()`, which runs after the controller's `hostUpdated`.
|
|
348
|
+
*/
|
|
349
|
+
_observeStyleScope() {
|
|
350
|
+
if (this._classObserver || typeof MutationObserver === "undefined") return;
|
|
351
|
+
const scope = this.opts.getStyleScope();
|
|
352
|
+
if (!scope) return;
|
|
353
|
+
this._classObserver = new MutationObserver((records) => {
|
|
354
|
+
if (records.some((r) => r.attributeName === "class" || r.attributeName?.startsWith("mono-"))) this._syncPortalClass();
|
|
355
|
+
});
|
|
356
|
+
this._classObserver.observe(scope, { attributes: true });
|
|
357
|
+
}
|
|
358
|
+
_enterStack() {
|
|
359
|
+
this._bindViewport();
|
|
360
|
+
if (this._registered) return;
|
|
361
|
+
registerPopupLayer(this);
|
|
362
|
+
this._registered = true;
|
|
363
|
+
}
|
|
364
|
+
_leaveStack() {
|
|
365
|
+
this._unbindViewport();
|
|
366
|
+
if (!this._registered) return;
|
|
367
|
+
unregisterPopupLayer(this);
|
|
368
|
+
this._registered = false;
|
|
369
|
+
}
|
|
370
|
+
/** PopupLayer hook — write the chained z onto the portal (root context). */
|
|
371
|
+
setStackZ(z) {
|
|
372
|
+
(this._portal ?? this.host).style.setProperty("--mono-popup-z", String(z));
|
|
373
|
+
}
|
|
374
|
+
/** Where panel-internal elements live now (portal while adopted, else host). */
|
|
375
|
+
get panelRoot() {
|
|
376
|
+
return this._adopted && this._portal ? this._portal : this.host.renderRoot;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* True when an event's composed path passes through this popup — its own
|
|
380
|
+
* portaled panel, OR any popup that was opened from inside it.
|
|
381
|
+
*
|
|
382
|
+
* The second half is what keeps a nested popup from dismissing its parent:
|
|
383
|
+
* a header filter opened from a `<mono-table-th>` in a dropdown-table's
|
|
384
|
+
* panel, a select's option list inside a modal — each lives in a portal of
|
|
385
|
+
* its own on `<body>`, so a click in it is nowhere near the parent in the
|
|
386
|
+
* DOM. It IS inside by ownership, and that is what every outside-click test
|
|
387
|
+
* in the library asks this method.
|
|
388
|
+
*/
|
|
389
|
+
containsInPath(path) {
|
|
390
|
+
if (this._portal && path.includes(this._portal)) return true;
|
|
391
|
+
return this.ownsNestedInPath(path);
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* True when the path passes through a popup opened from INSIDE this one
|
|
395
|
+
* (at any depth) — not this popup's own panel.
|
|
396
|
+
*
|
|
397
|
+
* Walks each portal in the path back to its owner and asks whether that
|
|
398
|
+
* owner lives in this host or this panel; an owner that is itself inside
|
|
399
|
+
* another popup climbs to that popup's owner, so a select inside a filter
|
|
400
|
+
* inside a dropdown-table resolves all the way up. Composed-tree
|
|
401
|
+
* containment throughout: the owner may sit behind a slot or a shadow root.
|
|
402
|
+
*/
|
|
403
|
+
ownsNestedInPath(path) {
|
|
404
|
+
const roots = this._portal ? [this.host, this._portal] : [this.host];
|
|
405
|
+
return nestedPortalInPath(path.filter((n) => n !== this._portal), roots);
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Listen for viewport movement — but ONLY while this popup is open.
|
|
409
|
+
*
|
|
410
|
+
* These used to be bound in `hostConnected`, which meant one capture-phase
|
|
411
|
+
* `scroll` listener on `window` per popup-capable element on the page, open or
|
|
412
|
+
* not: every select, every table header filter, every search box — and one per
|
|
413
|
+
* ROW on a grid that puts a `mono-button-dropdown` in each. `_onViewport` bails
|
|
414
|
+
* when closed, so the handler was free; the *dispatch* was not, and a
|
|
415
|
+
* non-passive capture listener on `window` also disqualifies the whole page's
|
|
416
|
+
* scrolling from running off the compositor thread.
|
|
417
|
+
*
|
|
418
|
+
* `passive` because nothing here calls `preventDefault`.
|
|
419
|
+
*/
|
|
420
|
+
_bindViewport() {
|
|
421
|
+
if (isServer || this._viewportBound) return;
|
|
422
|
+
window.addEventListener("scroll", this._onViewport, {
|
|
423
|
+
capture: true,
|
|
424
|
+
passive: true
|
|
425
|
+
});
|
|
426
|
+
window.addEventListener("resize", this._onViewport, { passive: true });
|
|
427
|
+
this._viewportBound = true;
|
|
428
|
+
}
|
|
429
|
+
_unbindViewport() {
|
|
430
|
+
if (isServer) return;
|
|
431
|
+
if (this._viewportFrame) {
|
|
432
|
+
cancelAnimationFrame(this._viewportFrame);
|
|
433
|
+
this._viewportFrame = 0;
|
|
434
|
+
}
|
|
435
|
+
if (!this._viewportBound) return;
|
|
436
|
+
window.removeEventListener("scroll", this._onViewport, true);
|
|
437
|
+
window.removeEventListener("resize", this._onViewport);
|
|
438
|
+
this._viewportBound = false;
|
|
439
|
+
}
|
|
440
|
+
reposition() {
|
|
441
|
+
if (isServer) return;
|
|
442
|
+
if (!this._canPortal) return;
|
|
443
|
+
const panel = this._panel ?? this.opts.getPanel();
|
|
444
|
+
if (!panel) return;
|
|
445
|
+
const anchor = this.opts.getAnchor();
|
|
446
|
+
if (!anchor || !anchor.isConnected) return;
|
|
447
|
+
if (typeof this.opts.matchWidth === "function" ? this.opts.matchWidth() : this.opts.matchWidth) panel.style.width = `${anchor.getBoundingClientRect().width}px`;
|
|
448
|
+
const constrain = this.opts.constrainSize?.() ?? false;
|
|
449
|
+
const placement = computePopupPlacement(anchor, panel, {
|
|
450
|
+
side: this.opts.side?.(),
|
|
451
|
+
align: this.opts.align?.(),
|
|
452
|
+
offset: this.opts.offset?.(),
|
|
453
|
+
flip: this.opts.flip?.(),
|
|
454
|
+
shift: this.opts.shift?.(),
|
|
455
|
+
constrain
|
|
456
|
+
});
|
|
457
|
+
applyPopupPlacement(panel, placement, constrain);
|
|
458
|
+
if (this._resolvedSide !== placement.side) {
|
|
459
|
+
this._resolvedSide = placement.side;
|
|
460
|
+
this.opts.onSideResolved?.(placement.side);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
//#endregion
|
|
465
|
+
export { pathOwnedBy as i, applyPopupPlacement as n, computePopupPlacement as r, PopupPortalController as t };
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
//#region src/composables/popup-stack.ts
|
|
2
|
+
/** First layer's z-index. Each subsequent open layer sits one STEP higher. */
|
|
3
|
+
var POPUP_Z_BASE = 1e3;
|
|
4
|
+
/** Open layers in open order; the last entry is the topmost. */
|
|
5
|
+
var stack = [];
|
|
6
|
+
/**
|
|
7
|
+
* Inline styles captured once when the stack first locks scroll, restored when the
|
|
8
|
+
* last locking owner leaves. `null` doubles as the "not currently locked" sentinel.
|
|
9
|
+
*/
|
|
10
|
+
var savedRootOverflow = null;
|
|
11
|
+
var savedRootPriority = "";
|
|
12
|
+
var savedBodyOverflow = null;
|
|
13
|
+
var savedBodyPriority = "";
|
|
14
|
+
var savedBodyPadRight = null;
|
|
15
|
+
/**
|
|
16
|
+
* Lock holders that are NOT stack layers — `mono-sidebar`, which owns its own
|
|
17
|
+
* z-index and Escape handling and so has no business in the stack, but must share
|
|
18
|
+
* the lock. Without one shared owner set the two save/restore pairs interleave and
|
|
19
|
+
* a sidebar closing under an open modal restores an overflow the modal still needs
|
|
20
|
+
* — leaving the page locked for good once the modal closes.
|
|
21
|
+
*/
|
|
22
|
+
var externalLockOwners = /* @__PURE__ */ new Set();
|
|
23
|
+
/** Whether the shared Escape listener is currently attached. */
|
|
24
|
+
var escBound = false;
|
|
25
|
+
/**
|
|
26
|
+
* Reassign every open layer's z-index.
|
|
27
|
+
*
|
|
28
|
+
* A running cursor rather than `BASE + i * STEP`, so a PINNED layer (see
|
|
29
|
+
* `PopupLayer.pinnedZ`) lifts the levels of everything opened above it. With no
|
|
30
|
+
* pinned layer in the stack the cursor produces exactly the old sequence —
|
|
31
|
+
* 1000, 1010, 1020 … — so nothing that worked before moves.
|
|
32
|
+
*/
|
|
33
|
+
function applyStackOrder() {
|
|
34
|
+
let z = POPUP_Z_BASE;
|
|
35
|
+
stack.forEach((layer, i) => {
|
|
36
|
+
const pinned = Number(layer.pinnedZ);
|
|
37
|
+
if (Number.isFinite(pinned) && pinned > z) z = pinned;
|
|
38
|
+
const hasBackdropAbove = stack.slice(i + 1).some((above) => above.hasBackdrop);
|
|
39
|
+
layer.setStackZ(z, !hasBackdropAbove);
|
|
40
|
+
z += 10;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Hold / release the page scroll for every owner that wants it.
|
|
45
|
+
*
|
|
46
|
+
* ── Why the ROOT and not just the body ──
|
|
47
|
+
*
|
|
48
|
+
* The body's `overflow` only reaches the viewport while the ROOT element's computed
|
|
49
|
+
* overflow is `visible` (CSS Overflow §3.5, "viewport propagation"). Any reset that
|
|
50
|
+
* gives `html` an explicit overflow cancels that — Vuetify's ships
|
|
51
|
+
* `html { overflow-y: scroll }`, and ress / sanitize.css do the same — and from then on
|
|
52
|
+
* `body { overflow: hidden }` clips nothing: the body is `height: auto`, already tall
|
|
53
|
+
* enough for its own content, so it never becomes a scrollport. The page kept scrolling
|
|
54
|
+
* behind every modal, and no static style check caught it, because the body attribute
|
|
55
|
+
* this used to set was there all along.
|
|
56
|
+
*
|
|
57
|
+
* The body is still locked as well. It costs nothing, it is what the e2e check asserts,
|
|
58
|
+
* and in a quirks-mode document the body IS the scroller.
|
|
59
|
+
*
|
|
60
|
+
* ── Why the declaration is `!important` ──
|
|
61
|
+
*
|
|
62
|
+
* Because a plain inline style LOSES to a consumer stylesheet that claims the root's overflow
|
|
63
|
+
* with `!important`, and doing so is common — Vuetify writes its own scroll block that way
|
|
64
|
+
* (`.v-overlay-scroll-blocked:not(html) { overflow-y: hidden !important }`), and an app that
|
|
65
|
+
* drives `<html class>` from its layout (`.overflow-auto { overflow: auto !important }`) pins
|
|
66
|
+
* it permanently. The symptom is silent and deeply confusing: `documentElement.style.overflow`
|
|
67
|
+
* reads `"hidden"`, every style assertion passes, and the page scrolls anyway, because the
|
|
68
|
+
* COMPUTED value is still `auto`. An important declaration in the style attribute outranks an
|
|
69
|
+
* important one from a selector, so this is the one write that cannot be out-cascaded.
|
|
70
|
+
*
|
|
71
|
+
* ── Why the gutter is measured, and paid for with padding ──
|
|
72
|
+
*
|
|
73
|
+
* With `overflow-y: scroll` the scrollbar is rendered even on a short page, so locking
|
|
74
|
+
* takes it away and everything shifts sideways by its width. The width is measured before
|
|
75
|
+
* the lock and handed back to the body as `padding-right`, so nothing moves.
|
|
76
|
+
*
|
|
77
|
+
* NOT `scrollbar-gutter: stable` on the root, which reserves the same space in one
|
|
78
|
+
* declaration and would hold `position: fixed` chrome still too: Chrome paints the empty
|
|
79
|
+
* scrollbar TRACK in a stable gutter, so the page still looks like it has a scrollbar —
|
|
80
|
+
* which is the thing being complained about. Padding leaves no track.
|
|
81
|
+
*
|
|
82
|
+
* Measured rather than assumed, because on a system with overlay scrollbars there is no
|
|
83
|
+
* gutter at all and compensating would itself be the shift.
|
|
84
|
+
*/
|
|
85
|
+
function syncScrollLock() {
|
|
86
|
+
if (typeof document === "undefined") return;
|
|
87
|
+
const body = document.body;
|
|
88
|
+
if (!body) return;
|
|
89
|
+
const root = document.documentElement;
|
|
90
|
+
const wantLock = externalLockOwners.size > 0 || stack.some((l) => l.lockBodyScroll);
|
|
91
|
+
if (wantLock && savedRootOverflow === null) {
|
|
92
|
+
const gutter = Math.max(0, window.innerWidth - root.clientWidth);
|
|
93
|
+
savedRootOverflow = root.style.getPropertyValue("overflow");
|
|
94
|
+
savedRootPriority = root.style.getPropertyPriority("overflow");
|
|
95
|
+
savedBodyOverflow = body.style.getPropertyValue("overflow");
|
|
96
|
+
savedBodyPriority = body.style.getPropertyPriority("overflow");
|
|
97
|
+
root.style.setProperty("overflow", "hidden", "important");
|
|
98
|
+
body.style.setProperty("overflow", "hidden", "important");
|
|
99
|
+
if (gutter > 0) {
|
|
100
|
+
savedBodyPadRight = body.style.paddingRight;
|
|
101
|
+
body.style.paddingRight = `${gutter}px`;
|
|
102
|
+
}
|
|
103
|
+
} else if (!wantLock && savedRootOverflow !== null) {
|
|
104
|
+
restoreOverflow(root, savedRootOverflow, savedRootPriority);
|
|
105
|
+
restoreOverflow(body, savedBodyOverflow, savedBodyPriority);
|
|
106
|
+
if (savedBodyPadRight !== null) body.style.paddingRight = savedBodyPadRight;
|
|
107
|
+
savedRootOverflow = null;
|
|
108
|
+
savedRootPriority = "";
|
|
109
|
+
savedBodyOverflow = null;
|
|
110
|
+
savedBodyPriority = "";
|
|
111
|
+
savedBodyPadRight = null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** Put an element's inline `overflow` back exactly as it was — value, priority, or absent. */
|
|
115
|
+
function restoreOverflow(el, value, priority) {
|
|
116
|
+
if (value) el.style.setProperty("overflow", value, priority);
|
|
117
|
+
else el.style.removeProperty("overflow");
|
|
118
|
+
}
|
|
119
|
+
function onStackKeydown(event) {
|
|
120
|
+
if (event.key !== "Escape") return;
|
|
121
|
+
stack[stack.length - 1]?.onStackEscape?.(event);
|
|
122
|
+
}
|
|
123
|
+
function ensureEscapeListener() {
|
|
124
|
+
if (typeof document === "undefined") return;
|
|
125
|
+
if (stack.length > 0 && !escBound) {
|
|
126
|
+
document.addEventListener("keydown", onStackKeydown);
|
|
127
|
+
escBound = true;
|
|
128
|
+
} else if (stack.length === 0 && escBound) {
|
|
129
|
+
document.removeEventListener("keydown", onStackKeydown);
|
|
130
|
+
escBound = false;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/** Add a layer to the top of the stack (call on open). */
|
|
134
|
+
function registerPopupLayer(layer) {
|
|
135
|
+
if (typeof document === "undefined") return;
|
|
136
|
+
if (stack.includes(layer)) return;
|
|
137
|
+
stack.push(layer);
|
|
138
|
+
applyStackOrder();
|
|
139
|
+
syncScrollLock();
|
|
140
|
+
ensureEscapeListener();
|
|
141
|
+
}
|
|
142
|
+
/** Remove a layer from the stack (call on close / disconnect). */
|
|
143
|
+
function unregisterPopupLayer(layer) {
|
|
144
|
+
const idx = stack.indexOf(layer);
|
|
145
|
+
if (idx === -1) return;
|
|
146
|
+
stack.splice(idx, 1);
|
|
147
|
+
applyStackOrder();
|
|
148
|
+
syncScrollLock();
|
|
149
|
+
ensureEscapeListener();
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Recompute every open layer's level without touching the membership.
|
|
153
|
+
*
|
|
154
|
+
* For a layer whose `pinnedZ` changed while it was open — a bound `:z-index` on a
|
|
155
|
+
* modal that is already showing. The dialog's own level is republished by its
|
|
156
|
+
* `updated()` either way; this is what moves the layers stacked ABOVE it.
|
|
157
|
+
*
|
|
158
|
+
* Re-runs the scroll lock as well, because `lockScroll` can flip on an overlay that is
|
|
159
|
+
* ALREADY open: membership has not changed, so neither register nor unregister fires,
|
|
160
|
+
* and without this the page stays locked until the overlay closes.
|
|
161
|
+
*/
|
|
162
|
+
function refreshPopupStack() {
|
|
163
|
+
if (typeof document === "undefined") return;
|
|
164
|
+
applyStackOrder();
|
|
165
|
+
syncScrollLock();
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Take or release a share of the page-scroll lock from OUTSIDE the stack.
|
|
169
|
+
*
|
|
170
|
+
* For an overlay that manages its own z-index and Escape handling and so does not belong
|
|
171
|
+
* in the stack, but must still share the one lock — `mono-sidebar`. Idempotent per owner;
|
|
172
|
+
* the lock lifts only when the last owner (stack layer or otherwise) lets go.
|
|
173
|
+
*/
|
|
174
|
+
function setExternalScrollLock(owner, wanted) {
|
|
175
|
+
if (typeof document === "undefined") return;
|
|
176
|
+
if (wanted) externalLockOwners.add(owner);
|
|
177
|
+
else externalLockOwners.delete(owner);
|
|
178
|
+
syncScrollLock();
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Currently-open layers in open order (topmost last). Used by exclusive
|
|
182
|
+
* (non-stackable) modal/drawer logic that must close *other* instances of its
|
|
183
|
+
* own type — filter the returned list by `instanceof`.
|
|
184
|
+
*/
|
|
185
|
+
function getOpenPopupLayers() {
|
|
186
|
+
return stack;
|
|
187
|
+
}
|
|
188
|
+
//#endregion
|
|
189
|
+
export { unregisterPopupLayer as a, setExternalScrollLock as i, refreshPopupStack as n, registerPopupLayer as r, getOpenPopupLayers as t };
|