balala-revogrid 1.0.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/LICENSE +21 -0
- package/dist/cjs/app-globals-D67EXhgK.js +16 -0
- package/dist/cjs/app-globals-D67EXhgK.js.map +1 -0
- package/dist/cjs/cell-renderer-B87qecTb.js +57 -0
- package/dist/cjs/cell-renderer-B87qecTb.js.map +1 -0
- package/dist/cjs/debounce-CcpHiH2p.js +498 -0
- package/dist/cjs/debounce-CcpHiH2p.js.map +1 -0
- package/dist/cjs/dimension.helpers-DA9-xqPT.js +3606 -0
- package/dist/cjs/dimension.helpers-DA9-xqPT.js.map +1 -0
- package/dist/cjs/edit.utils-CKsIiHlD.js +113 -0
- package/dist/cjs/edit.utils-CKsIiHlD.js.map +1 -0
- package/dist/cjs/events-DeLDyZlb.js +46 -0
- package/dist/cjs/events-DeLDyZlb.js.map +1 -0
- package/dist/cjs/filter.button-DSsWNs23.js +49 -0
- package/dist/cjs/filter.button-DSsWNs23.js.map +1 -0
- package/dist/cjs/grouping.row.renderer-BqR0ytMi.js +64 -0
- package/dist/cjs/grouping.row.renderer-BqR0ytMi.js.map +1 -0
- package/dist/cjs/header-cell-renderer-D-RjAVfe.js +1766 -0
- package/dist/cjs/header-cell-renderer-D-RjAVfe.js.map +1 -0
- package/dist/cjs/index-BF1c1pO3.js +2549 -0
- package/dist/cjs/index-BF1c1pO3.js.map +1 -0
- package/dist/cjs/index.cjs.js +6426 -0
- package/dist/cjs/index.cjs.js.map +1 -0
- package/dist/cjs/loader.cjs.js +19 -0
- package/dist/cjs/loader.cjs.js.map +1 -0
- package/dist/cjs/revo-grid.cjs.entry.js +3215 -0
- package/dist/cjs/revo-grid.cjs.entry.js.map +1 -0
- package/dist/cjs/revo-grid.cjs.js +31 -0
- package/dist/cjs/revo-grid.cjs.js.map +1 -0
- package/dist/cjs/revo-grid.entry.cjs.js.map +1 -0
- package/dist/cjs/revogr-attribution.revogr-extra.revogr-focus.revogr-grouping-overlay.revogr-header-unified.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.cjs.js.map +1 -0
- package/dist/cjs/revogr-attribution_9.cjs.entry.js +2629 -0
- package/dist/cjs/revogr-attribution_9.cjs.entry.js.map +1 -0
- package/dist/cjs/revogr-clipboard.revogr-edit.revogr-order-editor.entry.cjs.js.map +1 -0
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js +471 -0
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -0
- package/dist/cjs/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.cjs.js.map +1 -0
- package/dist/cjs/revogr-data_4.cjs.entry.js +1420 -0
- package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -0
- package/dist/cjs/revogr-filter-panel.cjs.entry.js +382 -0
- package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -0
- package/dist/cjs/revogr-filter-panel.entry.cjs.js.map +1 -0
- package/dist/cjs/row-renderer-BTE7VKD9.js +49 -0
- package/dist/cjs/row-renderer-BTE7VKD9.js.map +1 -0
- package/dist/cjs/text-editor-BdhmcrkS.js +81 -0
- package/dist/cjs/text-editor-BdhmcrkS.js.map +1 -0
- package/dist/cjs/throttle-2ZxfGjEI.js +533 -0
- package/dist/cjs/throttle-2ZxfGjEI.js.map +1 -0
- package/dist/cjs/tree-data.plugin-BRjwZtxI.js +5350 -0
- package/dist/cjs/tree-data.plugin-BRjwZtxI.js.map +1 -0
- package/dist/cjs/viewport.helpers-BAovztDd.js +61 -0
- package/dist/cjs/viewport.helpers-BAovztDd.js.map +1 -0
- package/dist/cjs/viewport.store-BTbPlyF-.js +525 -0
- package/dist/cjs/viewport.store-BTbPlyF-.js.map +1 -0
- package/dist/collection/collection-manifest.json +30 -0
- package/dist/collection/components/attribution/revogr-attribution.js +20 -0
- package/dist/collection/components/attribution/revogr-attribution.js.map +1 -0
- package/dist/collection/components/clipboard/revogr-clipboard.js +411 -0
- package/dist/collection/components/clipboard/revogr-clipboard.js.map +1 -0
- package/dist/collection/components/data/cell-renderer.js +44 -0
- package/dist/collection/components/data/cell-renderer.js.map +1 -0
- package/dist/collection/components/data/column.service.js +333 -0
- package/dist/collection/components/data/column.service.js.map +1 -0
- package/dist/collection/components/data/revogr-data-style.css +95 -0
- package/dist/collection/components/data/revogr-data.js +939 -0
- package/dist/collection/components/data/revogr-data.js.map +1 -0
- package/dist/collection/components/data/row-highlight.plugin.js +51 -0
- package/dist/collection/components/data/row-highlight.plugin.js.map +1 -0
- package/dist/collection/components/data/row-renderer.js +37 -0
- package/dist/collection/components/data/row-renderer.js.map +1 -0
- package/dist/collection/components/editors/edit.utils.js +13 -0
- package/dist/collection/components/editors/edit.utils.js.map +1 -0
- package/dist/collection/components/editors/revogr-edit-style.css +16 -0
- package/dist/collection/components/editors/revogr-edit.js +346 -0
- package/dist/collection/components/editors/revogr-edit.js.map +1 -0
- package/dist/collection/components/editors/text-editor.js +74 -0
- package/dist/collection/components/editors/text-editor.js.map +1 -0
- package/dist/collection/components/extra/revogr-extra.js +125 -0
- package/dist/collection/components/extra/revogr-extra.js.map +1 -0
- package/dist/collection/components/grouping-overlay/revogr-grouping-overlay.css +62 -0
- package/dist/collection/components/grouping-overlay/revogr-grouping-overlay.js +644 -0
- package/dist/collection/components/grouping-overlay/revogr-grouping-overlay.js.map +1 -0
- package/dist/collection/components/header/header-cell-renderer.js +49 -0
- package/dist/collection/components/header/header-cell-renderer.js.map +1 -0
- package/dist/collection/components/header/header-group-renderer.js +29 -0
- package/dist/collection/components/header/header-group-renderer.js.map +1 -0
- package/dist/collection/components/header/header-renderer.js +100 -0
- package/dist/collection/components/header/header-renderer.js.map +1 -0
- package/dist/collection/components/header/resizable.directive.js +274 -0
- package/dist/collection/components/header/resizable.directive.js.map +1 -0
- package/dist/collection/components/header/resizable.element.js +36 -0
- package/dist/collection/components/header/resizable.element.js.map +1 -0
- package/dist/collection/components/header/revogr-header-style.css +164 -0
- package/dist/collection/components/header/revogr-header-unified-style.css +205 -0
- package/dist/collection/components/header/revogr-header-unified.js +1013 -0
- package/dist/collection/components/header/revogr-header-unified.js.map +1 -0
- package/dist/collection/components/header/revogr-header.js +852 -0
- package/dist/collection/components/header/revogr-header.js.map +1 -0
- package/dist/collection/components/order/order-renderer.js +50 -0
- package/dist/collection/components/order/order-renderer.js.map +1 -0
- package/dist/collection/components/order/order-row.service.js +72 -0
- package/dist/collection/components/order/order-row.service.js.map +1 -0
- package/dist/collection/components/order/revogr-order-editor.js +461 -0
- package/dist/collection/components/order/revogr-order-editor.js.map +1 -0
- package/dist/collection/components/overlay/autofill.service.js +221 -0
- package/dist/collection/components/overlay/autofill.service.js.map +1 -0
- package/dist/collection/components/overlay/keyboard.service.js +178 -0
- package/dist/collection/components/overlay/keyboard.service.js.map +1 -0
- package/dist/collection/components/overlay/revogr-overlay-selection.js +1606 -0
- package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -0
- package/dist/collection/components/overlay/revogr-overlay-style.css +95 -0
- package/dist/collection/components/overlay/selection.utils.js +136 -0
- package/dist/collection/components/overlay/selection.utils.js.map +1 -0
- package/dist/collection/components/revoGrid/grid.helpers.js +33 -0
- package/dist/collection/components/revoGrid/grid.helpers.js.map +1 -0
- package/dist/collection/components/revoGrid/plugin.service.js +81 -0
- package/dist/collection/components/revoGrid/plugin.service.js.map +1 -0
- package/dist/collection/components/revoGrid/revo-grid-style.css +897 -0
- package/dist/collection/components/revoGrid/revo-grid.js +4717 -0
- package/dist/collection/components/revoGrid/revo-grid.js.map +1 -0
- package/dist/collection/components/revoGrid/viewport.helpers.js +51 -0
- package/dist/collection/components/revoGrid/viewport.helpers.js.map +1 -0
- package/dist/collection/components/revoGrid/viewport.resize.service.js +55 -0
- package/dist/collection/components/revoGrid/viewport.resize.service.js.map +1 -0
- package/dist/collection/components/revoGrid/viewport.scrolling.service.js +139 -0
- package/dist/collection/components/revoGrid/viewport.scrolling.service.js.map +1 -0
- package/dist/collection/components/revoGrid/viewport.service.js +253 -0
- package/dist/collection/components/revoGrid/viewport.service.js.map +1 -0
- package/dist/collection/components/rowHeaders/revogr-row-headers.js +291 -0
- package/dist/collection/components/rowHeaders/revogr-row-headers.js.map +1 -0
- package/dist/collection/components/rowHeaders/row-header-render.js +5 -0
- package/dist/collection/components/rowHeaders/row-header-render.js.map +1 -0
- package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +70 -0
- package/dist/collection/components/scroll/revogr-viewport-scroll.js +938 -0
- package/dist/collection/components/scroll/revogr-viewport-scroll.js.map +1 -0
- package/dist/collection/components/scrollable/autohide-scroll.plugin.js +44 -0
- package/dist/collection/components/scrollable/autohide-scroll.plugin.js.map +1 -0
- package/dist/collection/components/scrollable/revogr-scroll-style.css +34 -0
- package/dist/collection/components/scrollable/revogr-scroll-virtual.js +346 -0
- package/dist/collection/components/scrollable/revogr-scroll-virtual.js.map +1 -0
- package/dist/collection/components/selectionFocus/revogr-focus-style.css +7 -0
- package/dist/collection/components/selectionFocus/revogr-focus.js +429 -0
- package/dist/collection/components/selectionFocus/revogr-focus.js.map +1 -0
- package/dist/collection/components/selectionTempRange/revogr-temp-range-style.css +28 -0
- package/dist/collection/components/selectionTempRange/revogr-temp-range.js +171 -0
- package/dist/collection/components/selectionTempRange/revogr-temp-range.js.map +1 -0
- package/dist/collection/components/vnode/vnode-converter.js +84 -0
- package/dist/collection/components/vnode/vnode-converter.js.map +1 -0
- package/dist/collection/components/vnode/vnode.utils.js +18 -0
- package/dist/collection/components/vnode/vnode.utils.js.map +1 -0
- package/dist/collection/global/global.js +19 -0
- package/dist/collection/global/global.js.map +1 -0
- package/dist/collection/index.js +13 -0
- package/dist/collection/index.js.map +1 -0
- package/dist/collection/plugins/add-rows-on-paste.plugin.js +40 -0
- package/dist/collection/plugins/add-rows-on-paste.plugin.js.map +1 -0
- package/dist/collection/plugins/base.plugin.js +90 -0
- package/dist/collection/plugins/base.plugin.js.map +1 -0
- package/dist/collection/plugins/column-hide.plugin.js +532 -0
- package/dist/collection/plugins/column-hide.plugin.js.map +1 -0
- package/dist/collection/plugins/column-manage.plugin.js +1218 -0
- package/dist/collection/plugins/column-manage.plugin.js.map +1 -0
- package/dist/collection/plugins/column-stretch.plugin.js +921 -0
- package/dist/collection/plugins/column-stretch.plugin.js.map +1 -0
- package/dist/collection/plugins/column.auto-size.plugin.js +308 -0
- package/dist/collection/plugins/column.auto-size.plugin.js.map +1 -0
- package/dist/collection/plugins/column.stretch.plugin.js +96 -0
- package/dist/collection/plugins/column.stretch.plugin.js.map +1 -0
- package/dist/collection/plugins/customColumnDrag/column-move.helper.js +361 -0
- package/dist/collection/plugins/customColumnDrag/column-move.helper.js.map +1 -0
- package/dist/collection/plugins/customColumnDrag/custom-column-drag.plugin.js +145 -0
- package/dist/collection/plugins/customColumnDrag/custom-column-drag.plugin.js.map +1 -0
- package/dist/collection/plugins/customColumnDrag/drag.handler.js +726 -0
- package/dist/collection/plugins/customColumnDrag/drag.handler.js.map +1 -0
- package/dist/collection/plugins/customColumnDrag/example.js +282 -0
- package/dist/collection/plugins/customColumnDrag/example.js.map +1 -0
- package/dist/collection/plugins/customColumnDrag/index.js +8 -0
- package/dist/collection/plugins/customColumnDrag/index.js.map +1 -0
- package/dist/collection/plugins/customColumnDrag/types.js +2 -0
- package/dist/collection/plugins/customColumnDrag/types.js.map +1 -0
- package/dist/collection/plugins/dispatcher.js +40 -0
- package/dist/collection/plugins/dispatcher.js.map +1 -0
- package/dist/collection/plugins/enhanced-scrollbar.plugin.js +493 -0
- package/dist/collection/plugins/enhanced-scrollbar.plugin.js.map +1 -0
- package/dist/collection/plugins/export/csv.js +72 -0
- package/dist/collection/plugins/export/csv.js.map +1 -0
- package/dist/collection/plugins/export/export.plugin.js +157 -0
- package/dist/collection/plugins/export/export.plugin.js.map +1 -0
- package/dist/collection/plugins/export/types.js +2 -0
- package/dist/collection/plugins/export/types.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/equal.js +21 -0
- package/dist/collection/plugins/filter/conditions/equal.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/number/greaterThan.js +14 -0
- package/dist/collection/plugins/filter/conditions/number/greaterThan.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/number/greaterThanOrEqual.js +11 -0
- package/dist/collection/plugins/filter/conditions/number/greaterThanOrEqual.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/number/lessThan.js +16 -0
- package/dist/collection/plugins/filter/conditions/number/lessThan.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/number/lessThanOrEqual.js +11 -0
- package/dist/collection/plugins/filter/conditions/number/lessThanOrEqual.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/set.js +7 -0
- package/dist/collection/plugins/filter/conditions/set.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/string/beginswith.js +21 -0
- package/dist/collection/plugins/filter/conditions/string/beginswith.js.map +1 -0
- package/dist/collection/plugins/filter/conditions/string/contains.js +25 -0
- package/dist/collection/plugins/filter/conditions/string/contains.js.map +1 -0
- package/dist/collection/plugins/filter/filter.button.js +28 -0
- package/dist/collection/plugins/filter/filter.button.js.map +1 -0
- package/dist/collection/plugins/filter/filter.indexed.js +49 -0
- package/dist/collection/plugins/filter/filter.indexed.js.map +1 -0
- package/dist/collection/plugins/filter/filter.panel.js +610 -0
- package/dist/collection/plugins/filter/filter.panel.js.map +1 -0
- package/dist/collection/plugins/filter/filter.plugin.js +388 -0
- package/dist/collection/plugins/filter/filter.plugin.js.map +1 -0
- package/dist/collection/plugins/filter/filter.style.css +165 -0
- package/dist/collection/plugins/filter/filter.types.js +9 -0
- package/dist/collection/plugins/filter/filter.types.js.map +1 -0
- package/dist/collection/plugins/grid-setup.js +131 -0
- package/dist/collection/plugins/grid-setup.js.map +1 -0
- package/dist/collection/plugins/groupingRow/grouping.const.js +18 -0
- package/dist/collection/plugins/groupingRow/grouping.const.js.map +1 -0
- package/dist/collection/plugins/groupingRow/grouping.row.expand.service.js +122 -0
- package/dist/collection/plugins/groupingRow/grouping.row.expand.service.js.map +1 -0
- package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +252 -0
- package/dist/collection/plugins/groupingRow/grouping.row.plugin.js.map +1 -0
- package/dist/collection/plugins/groupingRow/grouping.row.renderer.js +49 -0
- package/dist/collection/plugins/groupingRow/grouping.row.renderer.js.map +1 -0
- package/dist/collection/plugins/groupingRow/grouping.row.types.js +2 -0
- package/dist/collection/plugins/groupingRow/grouping.row.types.js.map +1 -0
- package/dist/collection/plugins/groupingRow/grouping.service.js +215 -0
- package/dist/collection/plugins/groupingRow/grouping.service.js.map +1 -0
- package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js +61 -0
- package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js.map +1 -0
- package/dist/collection/plugins/index.js +26 -0
- package/dist/collection/plugins/index.js.map +1 -0
- package/dist/collection/plugins/manual-focus.plugin.js +353 -0
- package/dist/collection/plugins/manual-focus.plugin.js.map +1 -0
- package/dist/collection/plugins/moveColumn/column.drag.plugin.js +171 -0
- package/dist/collection/plugins/moveColumn/column.drag.plugin.js.map +1 -0
- package/dist/collection/plugins/moveColumn/order-column.handler.js +69 -0
- package/dist/collection/plugins/moveColumn/order-column.handler.js.map +1 -0
- package/dist/collection/plugins/pin-shadow.plugin.js +487 -0
- package/dist/collection/plugins/pin-shadow.plugin.js.map +1 -0
- package/dist/collection/plugins/resize-indicator.plugin.js +430 -0
- package/dist/collection/plugins/resize-indicator.plugin.js.map +1 -0
- package/dist/collection/plugins/row-select-plugin-2026228.js +1803 -0
- package/dist/collection/plugins/row-select-plugin-2026228.js.map +1 -0
- package/dist/collection/plugins/row-select.plugin.js +2096 -0
- package/dist/collection/plugins/row-select.plugin.js.map +1 -0
- package/dist/collection/plugins/rtl/rtl.plugin.js +110 -0
- package/dist/collection/plugins/rtl/rtl.plugin.js.map +1 -0
- package/dist/collection/plugins/sorting/sorting.func.js +82 -0
- package/dist/collection/plugins/sorting/sorting.func.js.map +1 -0
- package/dist/collection/plugins/sorting/sorting.plugin.js +224 -0
- package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -0
- package/dist/collection/plugins/sorting/sorting.sign.js +9 -0
- package/dist/collection/plugins/sorting/sorting.sign.js.map +1 -0
- package/dist/collection/plugins/sorting/sorting.types.js +2 -0
- package/dist/collection/plugins/sorting/sorting.types.js.map +1 -0
- package/dist/collection/plugins/tree-data.plugin.js +447 -0
- package/dist/collection/plugins/tree-data.plugin.js.map +1 -0
- package/dist/collection/plugins/wcag/index.js +84 -0
- package/dist/collection/plugins/wcag/index.js.map +1 -0
- package/dist/collection/serve/controller.js +344 -0
- package/dist/collection/serve/data.js +201 -0
- package/dist/collection/serve/realData.js +4148 -0
- package/dist/collection/services/cell.helpers.js +12 -0
- package/dist/collection/services/cell.helpers.js.map +1 -0
- package/dist/collection/services/column.data.provider.js +122 -0
- package/dist/collection/services/column.data.provider.js.map +1 -0
- package/dist/collection/services/data.provider.js +89 -0
- package/dist/collection/services/data.provider.js.map +1 -0
- package/dist/collection/services/dimension.provider.js +257 -0
- package/dist/collection/services/dimension.provider.js.map +1 -0
- package/dist/collection/services/local.scroll.service.js +136 -0
- package/dist/collection/services/local.scroll.service.js.map +1 -0
- package/dist/collection/services/local.scroll.timer.js +84 -0
- package/dist/collection/services/local.scroll.timer.js.map +1 -0
- package/dist/collection/services/selection.store.connector.js +274 -0
- package/dist/collection/services/selection.store.connector.js.map +1 -0
- package/dist/collection/services/viewport.provider.js +17 -0
- package/dist/collection/services/viewport.provider.js.map +1 -0
- package/dist/collection/store/dataSource/data.proxy.js +45 -0
- package/dist/collection/store/dataSource/data.proxy.js.map +1 -0
- package/dist/collection/store/dataSource/data.store.js +146 -0
- package/dist/collection/store/dataSource/data.store.js.map +1 -0
- package/dist/collection/store/dataSource/index.js +7 -0
- package/dist/collection/store/dataSource/index.js.map +1 -0
- package/dist/collection/store/dataSource/trimmed.plugin.js +34 -0
- package/dist/collection/store/dataSource/trimmed.plugin.js.map +1 -0
- package/dist/collection/store/dimension/dimension.helpers.js +101 -0
- package/dist/collection/store/dimension/dimension.helpers.js.map +1 -0
- package/dist/collection/store/dimension/dimension.recalculate.plugin.js +29 -0
- package/dist/collection/store/dimension/dimension.recalculate.plugin.js.map +1 -0
- package/dist/collection/store/dimension/dimension.store.js +124 -0
- package/dist/collection/store/dimension/dimension.store.js.map +1 -0
- package/dist/collection/store/dimension/dimension.trim.plugin.js +61 -0
- package/dist/collection/store/dimension/dimension.trim.plugin.js.map +1 -0
- package/dist/collection/store/dimension/index.js +6 -0
- package/dist/collection/store/dimension/index.js.map +1 -0
- package/dist/collection/store/index.js +17 -0
- package/dist/collection/store/index.js.map +1 -0
- package/dist/collection/store/selection/index.js +6 -0
- package/dist/collection/store/selection/index.js.map +1 -0
- package/dist/collection/store/selection/selection.helpers.js +49 -0
- package/dist/collection/store/selection/selection.helpers.js.map +1 -0
- package/dist/collection/store/selection/selection.store.js +85 -0
- package/dist/collection/store/selection/selection.store.js.map +1 -0
- package/dist/collection/store/vp/index.js +6 -0
- package/dist/collection/store/vp/index.js.map +1 -0
- package/dist/collection/store/vp/viewport.helpers.js +251 -0
- package/dist/collection/store/vp/viewport.helpers.js.map +1 -0
- package/dist/collection/store/vp/viewport.store.js +256 -0
- package/dist/collection/store/vp/viewport.store.js.map +1 -0
- package/dist/collection/themeManager/theme.compact.js +9 -0
- package/dist/collection/themeManager/theme.compact.js.map +1 -0
- package/dist/collection/themeManager/theme.default.js +9 -0
- package/dist/collection/themeManager/theme.default.js.map +1 -0
- package/dist/collection/themeManager/theme.material.js +9 -0
- package/dist/collection/themeManager/theme.material.js.map +1 -0
- package/dist/collection/themeManager/theme.service.js +53 -0
- package/dist/collection/themeManager/theme.service.js.map +1 -0
- package/dist/collection/types/dimension.js +2 -0
- package/dist/collection/types/dimension.js.map +1 -0
- package/dist/collection/types/events.js +124 -0
- package/dist/collection/types/events.js.map +1 -0
- package/dist/collection/types/index.js +12 -0
- package/dist/collection/types/index.js.map +1 -0
- package/dist/collection/types/interfaces.js +6 -0
- package/dist/collection/types/interfaces.js.map +1 -0
- package/dist/collection/types/plugin.js +2 -0
- package/dist/collection/types/plugin.js.map +1 -0
- package/dist/collection/types/plugin.types.js +2 -0
- package/dist/collection/types/plugin.types.js.map +1 -0
- package/dist/collection/types/selection.js +2 -0
- package/dist/collection/types/selection.js.map +1 -0
- package/dist/collection/types/theme.js +2 -0
- package/dist/collection/types/theme.js.map +1 -0
- package/dist/collection/types/viewport.interfaces.js +2 -0
- package/dist/collection/types/viewport.interfaces.js.map +1 -0
- package/dist/collection/utils/batchGroupCollapse.js +190 -0
- package/dist/collection/utils/batchGroupCollapse.js.map +1 -0
- package/dist/collection/utils/browser.js +7 -0
- package/dist/collection/utils/browser.js.map +1 -0
- package/dist/collection/utils/cell-template-helper.js +181 -0
- package/dist/collection/utils/cell-template-helper.js.map +1 -0
- package/dist/collection/utils/closest.polifill.js +22 -0
- package/dist/collection/utils/closest.polifill.js.map +1 -0
- package/dist/collection/utils/column.utils.js +448 -0
- package/dist/collection/utils/column.utils.js.map +1 -0
- package/dist/collection/utils/consts.js +26 -0
- package/dist/collection/utils/consts.js.map +1 -0
- package/dist/collection/utils/events.js +39 -0
- package/dist/collection/utils/events.js.map +1 -0
- package/dist/collection/utils/header.utils.js +24 -0
- package/dist/collection/utils/header.utils.js.map +1 -0
- package/dist/collection/utils/index.js +133 -0
- package/dist/collection/utils/index.js.map +1 -0
- package/dist/collection/utils/key.codes.js +80 -0
- package/dist/collection/utils/key.codes.js.map +1 -0
- package/dist/collection/utils/key.utils.js +86 -0
- package/dist/collection/utils/key.utils.js.map +1 -0
- package/dist/collection/utils/mobile.js +7 -0
- package/dist/collection/utils/mobile.js.map +1 -0
- package/dist/collection/utils/platform.js +9 -0
- package/dist/collection/utils/platform.js.map +1 -0
- package/dist/collection/utils/row-header-utils.js +9 -0
- package/dist/collection/utils/row-header-utils.js.map +1 -0
- package/dist/collection/utils/store.types.js +2 -0
- package/dist/collection/utils/store.types.js.map +1 -0
- package/dist/collection/utils/store.utils.js +15 -0
- package/dist/collection/utils/store.utils.js.map +1 -0
- package/dist/esm/app-globals-C3ZHKjnB.js +14 -0
- package/dist/esm/app-globals-C3ZHKjnB.js.map +1 -0
- package/dist/esm/cell-renderer-C2Td6LKY.js +54 -0
- package/dist/esm/cell-renderer-C2Td6LKY.js.map +1 -0
- package/dist/esm/debounce-BfO9dz9v.js +488 -0
- package/dist/esm/debounce-BfO9dz9v.js.map +1 -0
- package/dist/esm/dimension.helpers-DDil7Dg0.js +3546 -0
- package/dist/esm/dimension.helpers-DDil7Dg0.js.map +1 -0
- package/dist/esm/edit.utils-ClxXX_x9.js +99 -0
- package/dist/esm/edit.utils-ClxXX_x9.js.map +1 -0
- package/dist/esm/events-BvSmBueA.js +43 -0
- package/dist/esm/events-BvSmBueA.js.map +1 -0
- package/dist/esm/filter.button-DmOE7VCJ.js +39 -0
- package/dist/esm/filter.button-DmOE7VCJ.js.map +1 -0
- package/dist/esm/grouping.row.renderer-6NYszUJA.js +60 -0
- package/dist/esm/grouping.row.renderer-6NYszUJA.js.map +1 -0
- package/dist/esm/header-cell-renderer-BVHTuFGE.js +1715 -0
- package/dist/esm/header-cell-renderer-BVHTuFGE.js.map +1 -0
- package/dist/esm/index-Dyptvvxf.js +2519 -0
- package/dist/esm/index-Dyptvvxf.js.map +1 -0
- package/dist/esm/index.js +6232 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/loader.js +17 -0
- package/dist/esm/loader.js.map +1 -0
- package/dist/esm/revo-grid.entry.js +3213 -0
- package/dist/esm/revo-grid.entry.js.map +1 -0
- package/dist/esm/revo-grid.js +27 -0
- package/dist/esm/revo-grid.js.map +1 -0
- package/dist/esm/revogr-attribution.revogr-extra.revogr-focus.revogr-grouping-overlay.revogr-header-unified.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.js.map +1 -0
- package/dist/esm/revogr-attribution_9.entry.js +2619 -0
- package/dist/esm/revogr-attribution_9.entry.js.map +1 -0
- package/dist/esm/revogr-clipboard.revogr-edit.revogr-order-editor.entry.js.map +1 -0
- package/dist/esm/revogr-clipboard_3.entry.js +467 -0
- package/dist/esm/revogr-clipboard_3.entry.js.map +1 -0
- package/dist/esm/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.js.map +1 -0
- package/dist/esm/revogr-data_4.entry.js +1415 -0
- package/dist/esm/revogr-data_4.entry.js.map +1 -0
- package/dist/esm/revogr-filter-panel.entry.js +380 -0
- package/dist/esm/revogr-filter-panel.entry.js.map +1 -0
- package/dist/esm/row-renderer-sb6QTqH-.js +46 -0
- package/dist/esm/row-renderer-sb6QTqH-.js.map +1 -0
- package/dist/esm/text-editor-CxXqoicM.js +79 -0
- package/dist/esm/text-editor-CxXqoicM.js.map +1 -0
- package/dist/esm/throttle-DXYrmEeb.js +525 -0
- package/dist/esm/throttle-DXYrmEeb.js.map +1 -0
- package/dist/esm/tree-data.plugin-C2eXkf9_.js +5319 -0
- package/dist/esm/tree-data.plugin-C2eXkf9_.js.map +1 -0
- package/dist/esm/viewport.helpers-VXhsJZtn.js +55 -0
- package/dist/esm/viewport.helpers-VXhsJZtn.js.map +1 -0
- package/dist/esm/viewport.store-C-GnV31k.js +512 -0
- package/dist/esm/viewport.store-C-GnV31k.js.map +1 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/revo-grid/app-globals-C3ZHKjnB.js +14 -0
- package/dist/revo-grid/app-globals-C3ZHKjnB.js.map +1 -0
- package/dist/revo-grid/cell-renderer-C2Td6LKY.js +54 -0
- package/dist/revo-grid/cell-renderer-C2Td6LKY.js.map +1 -0
- package/dist/revo-grid/debounce-BfO9dz9v.js +488 -0
- package/dist/revo-grid/debounce-BfO9dz9v.js.map +1 -0
- package/dist/revo-grid/dimension.helpers-DDil7Dg0.js +3546 -0
- package/dist/revo-grid/dimension.helpers-DDil7Dg0.js.map +1 -0
- package/dist/revo-grid/edit.utils-ClxXX_x9.js +99 -0
- package/dist/revo-grid/edit.utils-ClxXX_x9.js.map +1 -0
- package/dist/revo-grid/events-BvSmBueA.js +43 -0
- package/dist/revo-grid/events-BvSmBueA.js.map +1 -0
- package/dist/revo-grid/filter.button-DmOE7VCJ.js +39 -0
- package/dist/revo-grid/filter.button-DmOE7VCJ.js.map +1 -0
- package/dist/revo-grid/grouping.row.renderer-6NYszUJA.js +60 -0
- package/dist/revo-grid/grouping.row.renderer-6NYszUJA.js.map +1 -0
- package/dist/revo-grid/header-cell-renderer-BVHTuFGE.js +1715 -0
- package/dist/revo-grid/header-cell-renderer-BVHTuFGE.js.map +1 -0
- package/dist/revo-grid/index-Dyptvvxf.js +2490 -0
- package/dist/revo-grid/index-Dyptvvxf.js.map +1 -0
- package/dist/revo-grid/index.esm.js +6232 -0
- package/dist/revo-grid/index.esm.js.map +1 -0
- package/dist/revo-grid/loader.esm.js.map +1 -0
- package/dist/revo-grid/revo-grid.entry.esm.js.map +1 -0
- package/dist/revo-grid/revo-grid.entry.js +3213 -0
- package/dist/revo-grid/revo-grid.entry.js.map +1 -0
- package/dist/revo-grid/revo-grid.esm.js +27 -0
- package/dist/revo-grid/revo-grid.esm.js.map +1 -0
- package/dist/revo-grid/revogr-attribution.revogr-extra.revogr-focus.revogr-grouping-overlay.revogr-header-unified.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.esm.js.map +1 -0
- package/dist/revo-grid/revogr-attribution_9.entry.js +2619 -0
- package/dist/revo-grid/revogr-attribution_9.entry.js.map +1 -0
- package/dist/revo-grid/revogr-clipboard.revogr-edit.revogr-order-editor.entry.esm.js.map +1 -0
- package/dist/revo-grid/revogr-clipboard_3.entry.js +467 -0
- package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -0
- package/dist/revo-grid/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.esm.js.map +1 -0
- package/dist/revo-grid/revogr-data_4.entry.js +1415 -0
- package/dist/revo-grid/revogr-data_4.entry.js.map +1 -0
- package/dist/revo-grid/revogr-filter-panel.entry.esm.js.map +1 -0
- package/dist/revo-grid/revogr-filter-panel.entry.js +380 -0
- package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -0
- package/dist/revo-grid/row-renderer-sb6QTqH-.js +46 -0
- package/dist/revo-grid/row-renderer-sb6QTqH-.js.map +1 -0
- package/dist/revo-grid/text-editor-CxXqoicM.js +79 -0
- package/dist/revo-grid/text-editor-CxXqoicM.js.map +1 -0
- package/dist/revo-grid/throttle-DXYrmEeb.js +525 -0
- package/dist/revo-grid/throttle-DXYrmEeb.js.map +1 -0
- package/dist/revo-grid/tree-data.plugin-C2eXkf9_.js +5319 -0
- package/dist/revo-grid/tree-data.plugin-C2eXkf9_.js.map +1 -0
- package/dist/revo-grid/viewport.helpers-VXhsJZtn.js +55 -0
- package/dist/revo-grid/viewport.helpers-VXhsJZtn.js.map +1 -0
- package/dist/revo-grid/viewport.store-C-GnV31k.js +512 -0
- package/dist/revo-grid/viewport.store-C-GnV31k.js.map +1 -0
- package/dist/types/components/attribution/revogr-attribution.d.ts +12 -0
- package/dist/types/components/clipboard/revogr-clipboard.d.ts +89 -0
- package/dist/types/components/data/cell-renderer.d.ts +12 -0
- package/dist/types/components/data/column.service.d.ts +65 -0
- package/dist/types/components/data/revogr-data.d.ts +132 -0
- package/dist/types/components/data/row-highlight.plugin.d.ts +10 -0
- package/dist/types/components/data/row-renderer.d.ts +13 -0
- package/dist/types/components/editors/edit.utils.d.ts +3 -0
- package/dist/types/components/editors/revogr-edit.d.ts +63 -0
- package/dist/types/components/editors/text-editor.d.ts +43 -0
- package/dist/types/components/extra/revogr-extra.d.ts +38 -0
- package/dist/types/components/grouping-overlay/revogr-grouping-overlay.d.ts +71 -0
- package/dist/types/components/header/header-cell-renderer.d.ts +10 -0
- package/dist/types/components/header/header-group-renderer.d.ts +17 -0
- package/dist/types/components/header/header-renderer.d.ts +24 -0
- package/dist/types/components/header/resizable.directive.d.ts +60 -0
- package/dist/types/components/header/resizable.element.d.ts +5 -0
- package/dist/types/components/header/revogr-header-unified.d.ts +168 -0
- package/dist/types/components/header/revogr-header.d.ts +131 -0
- package/dist/types/components/order/order-renderer.d.ts +29 -0
- package/dist/types/components/order/order-row.service.d.ts +27 -0
- package/dist/types/components/order/revogr-order-editor.d.ts +56 -0
- package/dist/types/components/overlay/autofill.service.d.ts +80 -0
- package/dist/types/components/overlay/keyboard.service.d.ts +29 -0
- package/dist/types/components/overlay/revogr-overlay-selection.d.ts +295 -0
- package/dist/types/components/overlay/selection.utils.d.ts +47 -0
- package/dist/types/components/revoGrid/grid.helpers.d.ts +17 -0
- package/dist/types/components/revoGrid/plugin.service.d.ts +37 -0
- package/dist/types/components/revoGrid/revo-grid.d.ts +801 -0
- package/dist/types/components/revoGrid/viewport.helpers.d.ts +42 -0
- package/dist/types/components/revoGrid/viewport.resize.service.d.ts +17 -0
- package/dist/types/components/revoGrid/viewport.scrolling.service.d.ts +24 -0
- package/dist/types/components/revoGrid/viewport.service.d.ts +59 -0
- package/dist/types/components/rowHeaders/revogr-row-headers.d.ts +51 -0
- package/dist/types/components/rowHeaders/row-header-render.d.ts +9 -0
- package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +159 -0
- package/dist/types/components/scrollable/autohide-scroll.plugin.d.ts +22 -0
- package/dist/types/components/scrollable/revogr-scroll-virtual.d.ts +49 -0
- package/dist/types/components/selectionFocus/revogr-focus.d.ts +63 -0
- package/dist/types/components/selectionTempRange/revogr-temp-range.d.ts +28 -0
- package/dist/types/components/vnode/vnode-converter.d.ts +19 -0
- package/dist/types/components/vnode/vnode.utils.d.ts +9 -0
- package/dist/types/components.d.ts +2928 -0
- package/dist/types/global/global.d.ts +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/plugins/add-rows-on-paste.plugin.d.ts +14 -0
- package/dist/types/plugins/base.plugin.d.ts +51 -0
- package/dist/types/plugins/column-hide.plugin.d.ts +110 -0
- package/dist/types/plugins/column-manage.plugin.d.ts +225 -0
- package/dist/types/plugins/column-stretch.plugin.d.ts +159 -0
- package/dist/types/plugins/column.auto-size.plugin.d.ts +69 -0
- package/dist/types/plugins/column.stretch.plugin.d.ts +20 -0
- package/dist/types/plugins/customColumnDrag/column-move.helper.d.ts +71 -0
- package/dist/types/plugins/customColumnDrag/custom-column-drag.plugin.d.ts +35 -0
- package/dist/types/plugins/customColumnDrag/drag.handler.d.ts +112 -0
- package/dist/types/plugins/customColumnDrag/example.d.ts +31 -0
- package/dist/types/plugins/customColumnDrag/index.d.ts +5 -0
- package/dist/types/plugins/customColumnDrag/types.d.ts +46 -0
- package/dist/types/plugins/dispatcher.d.ts +20 -0
- package/dist/types/plugins/enhanced-scrollbar.plugin.d.ts +76 -0
- package/dist/types/plugins/export/csv.d.ts +9 -0
- package/dist/types/plugins/export/export.plugin.d.ts +24 -0
- package/dist/types/plugins/export/types.d.ts +23 -0
- package/dist/types/plugins/filter/conditions/equal.d.ts +4 -0
- package/dist/types/plugins/filter/conditions/number/greaterThan.d.ts +3 -0
- package/dist/types/plugins/filter/conditions/number/greaterThanOrEqual.d.ts +3 -0
- package/dist/types/plugins/filter/conditions/number/lessThan.d.ts +3 -0
- package/dist/types/plugins/filter/conditions/number/lessThanOrEqual.d.ts +3 -0
- package/dist/types/plugins/filter/conditions/set.d.ts +4 -0
- package/dist/types/plugins/filter/conditions/string/beginswith.d.ts +3 -0
- package/dist/types/plugins/filter/conditions/string/contains.d.ts +4 -0
- package/dist/types/plugins/filter/filter.button.d.ts +14 -0
- package/dist/types/plugins/filter/filter.indexed.d.ts +20 -0
- package/dist/types/plugins/filter/filter.panel.d.ts +53 -0
- package/dist/types/plugins/filter/filter.plugin.d.ts +73 -0
- package/dist/types/plugins/filter/filter.types.d.ts +129 -0
- package/dist/types/plugins/grid-setup.d.ts +65 -0
- package/dist/types/plugins/groupingRow/grouping.const.d.ts +14 -0
- package/dist/types/plugins/groupingRow/grouping.row.expand.service.d.ts +15 -0
- package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +39 -0
- package/dist/types/plugins/groupingRow/grouping.row.renderer.d.ts +6 -0
- package/dist/types/plugins/groupingRow/grouping.row.types.d.ts +144 -0
- package/dist/types/plugins/groupingRow/grouping.service.d.ts +36 -0
- package/dist/types/plugins/groupingRow/grouping.trimmed.service.d.ts +10 -0
- package/dist/types/plugins/index.d.ts +22 -0
- package/dist/types/plugins/manual-focus.plugin.d.ts +113 -0
- package/dist/types/plugins/moveColumn/column.drag.plugin.d.ts +50 -0
- package/dist/types/plugins/moveColumn/order-column.handler.d.ts +16 -0
- package/dist/types/plugins/pin-shadow.plugin.d.ts +73 -0
- package/dist/types/plugins/resize-indicator.plugin.d.ts +71 -0
- package/dist/types/plugins/row-select-plugin-2026228.d.ts +367 -0
- package/dist/types/plugins/row-select.plugin.d.ts +378 -0
- package/dist/types/plugins/rtl/rtl.plugin.d.ts +37 -0
- package/dist/types/plugins/sorting/sorting.func.d.ts +9 -0
- package/dist/types/plugins/sorting/sorting.plugin.d.ts +48 -0
- package/dist/types/plugins/sorting/sorting.sign.d.ts +6 -0
- package/dist/types/plugins/sorting/sorting.types.d.ts +14 -0
- package/dist/types/plugins/tree-data.plugin.d.ts +56 -0
- package/dist/types/plugins/wcag/index.d.ts +26 -0
- package/dist/types/services/cell.helpers.d.ts +2 -0
- package/dist/types/services/column.data.provider.d.ts +27 -0
- package/dist/types/services/data.provider.d.ts +36 -0
- package/dist/types/services/dimension.provider.d.ts +71 -0
- package/dist/types/services/local.scroll.service.d.ts +36 -0
- package/dist/types/services/local.scroll.timer.d.ts +32 -0
- package/dist/types/services/selection.store.connector.d.ts +74 -0
- package/dist/types/services/viewport.provider.d.ts +9 -0
- package/dist/types/stencil-public-runtime.d.ts +1709 -0
- package/dist/types/store/dataSource/data.proxy.d.ts +14 -0
- package/dist/types/store/dataSource/data.store.d.ts +77 -0
- package/dist/types/store/dataSource/index.d.ts +3 -0
- package/dist/types/store/dataSource/trimmed.plugin.d.ts +12 -0
- package/dist/types/store/dimension/dimension.helpers.d.ts +24 -0
- package/dist/types/store/dimension/dimension.recalculate.plugin.d.ts +15 -0
- package/dist/types/store/dimension/dimension.store.d.ts +34 -0
- package/dist/types/store/dimension/dimension.trim.plugin.d.ts +13 -0
- package/dist/types/store/dimension/index.d.ts +2 -0
- package/dist/types/store/index.d.ts +8 -0
- package/dist/types/store/selection/index.d.ts +2 -0
- package/dist/types/store/selection/selection.helpers.d.ts +5 -0
- package/dist/types/store/selection/selection.store.d.ts +22 -0
- package/dist/types/store/vp/index.d.ts +7 -0
- package/dist/types/store/vp/viewport.helpers.d.ts +54 -0
- package/dist/types/store/vp/viewport.store.d.ts +38 -0
- package/dist/types/themeManager/theme.compact.d.ts +4 -0
- package/dist/types/themeManager/theme.default.d.ts +4 -0
- package/dist/types/themeManager/theme.material.d.ts +4 -0
- package/dist/types/themeManager/theme.service.d.ts +13 -0
- package/dist/types/types/dimension.d.ts +8 -0
- package/dist/types/types/events.d.ts +2 -0
- package/dist/types/types/index.d.ts +8 -0
- package/dist/types/types/interfaces.d.ts +795 -0
- package/dist/types/types/plugin.d.ts +9 -0
- package/dist/types/types/plugin.types.d.ts +48 -0
- package/dist/types/types/selection.d.ts +178 -0
- package/dist/types/types/theme.d.ts +7 -0
- package/dist/types/types/viewport.interfaces.d.ts +45 -0
- package/dist/types/utils/batchGroupCollapse.d.ts +77 -0
- package/dist/types/utils/browser.d.ts +1 -0
- package/dist/types/utils/cell-template-helper.d.ts +74 -0
- package/dist/types/utils/closest.polifill.d.ts +0 -0
- package/dist/types/utils/column.utils.d.ts +110 -0
- package/dist/types/utils/consts.d.ts +22 -0
- package/dist/types/utils/events.d.ts +5 -0
- package/dist/types/utils/header.utils.d.ts +2 -0
- package/dist/types/utils/index.d.ts +32 -0
- package/dist/types/utils/key.codes.d.ts +73 -0
- package/dist/types/utils/key.utils.d.ts +12 -0
- package/dist/types/utils/mobile.d.ts +1 -0
- package/dist/types/utils/platform.d.ts +4 -0
- package/dist/types/utils/row-header-utils.d.ts +2 -0
- package/dist/types/utils/store.types.d.ts +97 -0
- package/dist/types/utils/store.utils.d.ts +10 -0
- package/hydrate/index.d.ts +273 -0
- package/hydrate/index.js +39851 -0
- package/hydrate/index.mjs +39843 -0
- package/hydrate/package.json +12 -0
- package/loader/cdn.js +4 -0
- package/loader/index.cjs.js +4 -0
- package/loader/index.d.ts +24 -0
- package/loader/index.es2017.js +4 -0
- package/loader/index.js +5 -0
- package/package.json +149 -0
- package/readme.md +303 -0
- package/standalone/column.service.js +1110 -0
- package/standalone/column.service.js.map +1 -0
- package/standalone/consts.js +30 -0
- package/standalone/consts.js.map +1 -0
- package/standalone/data.store.js +3101 -0
- package/standalone/data.store.js.map +1 -0
- package/standalone/debounce.js +215 -0
- package/standalone/debounce.js.map +1 -0
- package/standalone/dimension.helpers.js +229 -0
- package/standalone/dimension.helpers.js.map +1 -0
- package/standalone/filter.button.js +39 -0
- package/standalone/filter.button.js.map +1 -0
- package/standalone/grouping.service.js +234 -0
- package/standalone/grouping.service.js.map +1 -0
- package/standalone/header-group-renderer.js +634 -0
- package/standalone/header-group-renderer.js.map +1 -0
- package/standalone/index.d.ts +72 -0
- package/standalone/index.js +6272 -0
- package/standalone/index.js.map +1 -0
- package/standalone/index2.js +131 -0
- package/standalone/index2.js.map +1 -0
- package/standalone/local.scroll.timer.js +222 -0
- package/standalone/local.scroll.timer.js.map +1 -0
- package/standalone/platform.js +90 -0
- package/standalone/platform.js.map +1 -0
- package/standalone/revo-grid.d.ts +11 -0
- package/standalone/revo-grid.js +8734 -0
- package/standalone/revo-grid.js.map +1 -0
- package/standalone/revogr-attribution.d.ts +11 -0
- package/standalone/revogr-attribution.js +12 -0
- package/standalone/revogr-attribution.js.map +1 -0
- package/standalone/revogr-attribution2.js +32 -0
- package/standalone/revogr-attribution2.js.map +1 -0
- package/standalone/revogr-clipboard.d.ts +11 -0
- package/standalone/revogr-clipboard.js +12 -0
- package/standalone/revogr-clipboard.js.map +1 -0
- package/standalone/revogr-clipboard2.js +179 -0
- package/standalone/revogr-clipboard2.js.map +1 -0
- package/standalone/revogr-data.d.ts +11 -0
- package/standalone/revogr-data.js +12 -0
- package/standalone/revogr-data.js.map +1 -0
- package/standalone/revogr-data2.js +503 -0
- package/standalone/revogr-data2.js.map +1 -0
- package/standalone/revogr-edit.d.ts +11 -0
- package/standalone/revogr-edit.js +12 -0
- package/standalone/revogr-edit.js.map +1 -0
- package/standalone/revogr-edit2.js +330 -0
- package/standalone/revogr-edit2.js.map +1 -0
- package/standalone/revogr-extra.d.ts +11 -0
- package/standalone/revogr-extra.js +12 -0
- package/standalone/revogr-extra.js.map +1 -0
- package/standalone/revogr-extra2.js +73 -0
- package/standalone/revogr-extra2.js.map +1 -0
- package/standalone/revogr-filter-panel.d.ts +11 -0
- package/standalone/revogr-filter-panel.js +411 -0
- package/standalone/revogr-filter-panel.js.map +1 -0
- package/standalone/revogr-focus.d.ts +11 -0
- package/standalone/revogr-focus.js +12 -0
- package/standalone/revogr-focus.js.map +1 -0
- package/standalone/revogr-focus2.js +119 -0
- package/standalone/revogr-focus2.js.map +1 -0
- package/standalone/revogr-grouping-overlay.d.ts +11 -0
- package/standalone/revogr-grouping-overlay.js +12 -0
- package/standalone/revogr-grouping-overlay.js.map +1 -0
- package/standalone/revogr-grouping-overlay2.js +356 -0
- package/standalone/revogr-grouping-overlay2.js.map +1 -0
- package/standalone/revogr-header-unified.d.ts +11 -0
- package/standalone/revogr-header-unified.js +12 -0
- package/standalone/revogr-header-unified.js.map +1 -0
- package/standalone/revogr-header-unified2.js +781 -0
- package/standalone/revogr-header-unified2.js.map +1 -0
- package/standalone/revogr-header.d.ts +11 -0
- package/standalone/revogr-header.js +12 -0
- package/standalone/revogr-header.js.map +1 -0
- package/standalone/revogr-header2.js +343 -0
- package/standalone/revogr-header2.js.map +1 -0
- package/standalone/revogr-order-editor.d.ts +11 -0
- package/standalone/revogr-order-editor.js +12 -0
- package/standalone/revogr-order-editor.js.map +1 -0
- package/standalone/revogr-order-editor2.js +201 -0
- package/standalone/revogr-order-editor2.js.map +1 -0
- package/standalone/revogr-overlay-selection.d.ts +11 -0
- package/standalone/revogr-overlay-selection.js +12 -0
- package/standalone/revogr-overlay-selection.js.map +1 -0
- package/standalone/revogr-overlay-selection2.js +1068 -0
- package/standalone/revogr-overlay-selection2.js.map +1 -0
- package/standalone/revogr-row-headers.d.ts +11 -0
- package/standalone/revogr-row-headers.js +12 -0
- package/standalone/revogr-row-headers.js.map +1 -0
- package/standalone/revogr-row-headers2.js +625 -0
- package/standalone/revogr-row-headers2.js.map +1 -0
- package/standalone/revogr-scroll-virtual.d.ts +11 -0
- package/standalone/revogr-scroll-virtual.js +12 -0
- package/standalone/revogr-scroll-virtual.js.map +1 -0
- package/standalone/revogr-scroll-virtual2.js +235 -0
- package/standalone/revogr-scroll-virtual2.js.map +1 -0
- package/standalone/revogr-temp-range.d.ts +11 -0
- package/standalone/revogr-temp-range.js +12 -0
- package/standalone/revogr-temp-range.js.map +1 -0
- package/standalone/revogr-temp-range2.js +93 -0
- package/standalone/revogr-temp-range2.js.map +1 -0
- package/standalone/revogr-viewport-scroll.d.ts +11 -0
- package/standalone/revogr-viewport-scroll.js +12 -0
- package/standalone/revogr-viewport-scroll.js.map +1 -0
- package/standalone/revogr-viewport-scroll2.js +761 -0
- package/standalone/revogr-viewport-scroll2.js.map +1 -0
- package/standalone/row-renderer.js +41 -0
- package/standalone/row-renderer.js.map +1 -0
- package/standalone/selection.utils.js +179 -0
- package/standalone/selection.utils.js.map +1 -0
- package/standalone/throttle.js +75 -0
- package/standalone/throttle.js.map +1 -0
- package/standalone/toNumber.js +282 -0
- package/standalone/toNumber.js.map +1 -0
- package/standalone/vnode-converter.js +46 -0
- package/standalone/vnode-converter.js.map +1 -0
- package/standalone/vnode-html.d.ts +11 -0
- package/standalone/vnode-html.js +12 -0
- package/standalone/vnode-html.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["src/types/events.ts","src/utils/cell-template-helper.ts","src/utils/batchGroupCollapse.ts","src/plugins/resize-indicator.plugin.ts","src/plugins/add-rows-on-paste.plugin.ts","src/plugins/customColumnDrag/drag.handler.ts","src/plugins/customColumnDrag/column-move.helper.ts","src/plugins/customColumnDrag/custom-column-drag.plugin.ts","src/plugins/grid-setup.ts","src/plugins/column-hide.plugin.ts","src/plugins/row-select.plugin.ts","src/plugins/pin-shadow.plugin.ts","src/plugins/enhanced-scrollbar.plugin.ts","src/plugins/manual-focus.plugin.ts"],"sourcesContent":["\nexport type RevogridEvents = 'contentsizechanged'|\n 'beforeedit'|\n 'beforerangeedit'|\n 'afteredit'|\n 'beforeautofill'|\n 'beforerange'|\n 'afterfocus'|\n 'roworderchanged'|\n 'beforesorting'|\n 'beforesourcesortingapply'|\n 'beforesortingapply'|\n 'rowdragstart'|\n 'headerclick'|\n 'beforecellfocus'|\n 'cellclick'|\n 'beforefocuslost'|\n 'beforesourceset'|\n 'beforeanysource'|\n 'aftersourceset'|\n 'afteranysource'|\n 'beforecolumnsset'|\n 'beforecolumnapplied'|\n 'aftercolumnsset'|\n 'beforefilterapply'|\n 'beforefiltertrimmed'|\n 'beforetrimmed'|\n 'aftertrimmed'|\n 'viewportscroll'|\n 'beforeexport'|\n 'beforeeditstart'|\n 'aftercolumnresize'|\n 'beforerowdefinition'|\n 'filterconfigchanged'|\n 'sortingconfigchanged'|\n 'rowheaderschanged'|\n 'beforegridrender'|\n 'aftergridrender'|\n 'afterdatarendered'|\n 'aftergridinit'|\n 'additionaldatachanged'|\n 'afterthemechanged'|\n 'created'|\n 'beforepaste'|\n 'beforepasteapply'|\n 'pasteregion'|\n 'afterpasteapply'|\n 'beforecut'|\n 'clearregion'|\n 'beforecopy'|\n 'beforecopyapply'|\n 'copyregion'|\n 'beforerowrender'|\n 'afterrender'|\n 'beforecellrender'|\n 'beforedatarender'|\n 'dragstartcell'|\n 'celleditinit'|\n 'closeedit'|\n 'filterChange'|\n 'resetChange'|\n 'beforefocusrender'|\n 'beforescrollintoview'|\n 'afterfocus'|\n 'beforeheaderclick'|\n 'headerresize'|\n 'beforeheaderresize'|\n 'headerdblclick'|\n 'beforeheaderrender'|\n 'beforegroupheaderrender'|\n 'afterheaderrender'|\n 'beforeheaderclick'|\n 'headerresize'|\n 'beforeheaderresize'|\n 'headerdblclick'|\n 'beforeheaderrender'|\n 'beforegroupheaderrender'|\n 'afterheaderrender'|\n 'rowdragstartinit'|\n 'rowdragendinit'|\n 'rowdragmoveinit'|\n 'rowdragmousemove'|\n 'rowdropinit'|\n 'roworderchange'|\n 'beforecopyregion'|\n 'beforepasteregion'|\n 'celleditapply'|\n 'beforecellfocusinit'|\n 'cellclickinit'|\n 'beforenextvpfocus'|\n 'setedit'|\n 'beforeapplyrange'|\n 'beforesetrange'|\n 'setrange'|\n 'beforeeditrender'|\n 'selectall'|\n 'canceledit'|\n 'settemprange'|\n 'beforesettemprange'|\n 'applyfocus'|\n 'focuscell'|\n 'beforerangedataapply'|\n 'selectionchangeinit'|\n 'beforerangecopyapply'|\n 'rangeeditapply'|\n 'clipboardrangecopy'|\n 'clipboardrangepaste'|\n 'beforekeydown'|\n 'beforekeyup'|\n 'beforecellsave'|\n 'celledit'|\n 'scrollview'|\n 'ref'|\n 'scrollvirtual'|\n 'scrollviewport'|\n 'resizeviewport'|\n 'scrollchange'|\n 'scrollviewportsilent'|\n 'html'\nexport const REVOGRID_EVENTS = new Map<RevogridEvents, RevogridEvents>([\n ['contentsizechanged', 'contentsizechanged'],\n ['beforeedit', 'beforeedit'],\n ['beforerangeedit', 'beforerangeedit'],\n ['afteredit', 'afteredit'],\n ['beforeautofill', 'beforeautofill'],\n ['beforerange', 'beforerange'],\n ['afterfocus', 'afterfocus'],\n ['roworderchanged', 'roworderchanged'],\n ['beforesorting', 'beforesorting'],\n ['beforesourcesortingapply', 'beforesourcesortingapply'],\n ['beforesortingapply', 'beforesortingapply'],\n ['rowdragstart', 'rowdragstart'],\n ['headerclick', 'headerclick'],\n ['beforecellfocus', 'beforecellfocus'],\n ['cellclick', 'cellclick'],\n ['beforefocuslost', 'beforefocuslost'],\n ['beforesourceset', 'beforesourceset'],\n ['beforeanysource', 'beforeanysource'],\n ['aftersourceset', 'aftersourceset'],\n ['afteranysource', 'afteranysource'],\n ['beforecolumnsset', 'beforecolumnsset'],\n ['beforecolumnapplied', 'beforecolumnapplied'],\n ['aftercolumnsset', 'aftercolumnsset'],\n ['beforefilterapply', 'beforefilterapply'],\n ['beforefiltertrimmed', 'beforefiltertrimmed'],\n ['beforetrimmed', 'beforetrimmed'],\n ['aftertrimmed', 'aftertrimmed'],\n ['viewportscroll', 'viewportscroll'],\n ['beforeexport', 'beforeexport'],\n ['beforeeditstart', 'beforeeditstart'],\n ['aftercolumnresize', 'aftercolumnresize'],\n ['beforerowdefinition', 'beforerowdefinition'],\n ['filterconfigchanged', 'filterconfigchanged'],\n ['sortingconfigchanged', 'sortingconfigchanged'],\n ['rowheaderschanged', 'rowheaderschanged'],\n ['beforegridrender', 'beforegridrender'],\n ['aftergridrender', 'aftergridrender'],\n ['afterdatarendered', 'afterdatarendered'],\n ['aftergridinit', 'aftergridinit'],\n ['additionaldatachanged', 'additionaldatachanged'],\n ['afterthemechanged', 'afterthemechanged'],\n ['created', 'created'],\n ['beforepaste', 'beforepaste'],\n ['beforepasteapply', 'beforepasteapply'],\n ['pasteregion', 'pasteregion'],\n ['afterpasteapply', 'afterpasteapply'],\n ['beforecut', 'beforecut'],\n ['clearregion', 'clearregion'],\n ['beforecopy', 'beforecopy'],\n ['beforecopyapply', 'beforecopyapply'],\n ['copyregion', 'copyregion'],\n ['beforerowrender', 'beforerowrender'],\n ['afterrender', 'afterrender'],\n ['beforecellrender', 'beforecellrender'],\n ['beforedatarender', 'beforedatarender'],\n ['dragstartcell', 'dragstartcell'],\n ['celleditinit', 'celleditinit'],\n ['closeedit', 'closeedit'],\n ['filterChange', 'filterChange'],\n ['resetChange', 'resetChange'],\n ['beforefocusrender', 'beforefocusrender'],\n ['beforescrollintoview', 'beforescrollintoview'],\n ['afterfocus', 'afterfocus'],\n ['beforeheaderclick', 'beforeheaderclick'],\n ['headerresize', 'headerresize'],\n ['beforeheaderresize', 'beforeheaderresize'],\n ['headerdblclick', 'headerdblclick'],\n ['beforeheaderrender', 'beforeheaderrender'],\n ['beforegroupheaderrender', 'beforegroupheaderrender'],\n ['afterheaderrender', 'afterheaderrender'],\n ['beforeheaderclick', 'beforeheaderclick'],\n ['headerresize', 'headerresize'],\n ['beforeheaderresize', 'beforeheaderresize'],\n ['headerdblclick', 'headerdblclick'],\n ['beforeheaderrender', 'beforeheaderrender'],\n ['beforegroupheaderrender', 'beforegroupheaderrender'],\n ['afterheaderrender', 'afterheaderrender'],\n ['rowdragstartinit', 'rowdragstartinit'],\n ['rowdragendinit', 'rowdragendinit'],\n ['rowdragmoveinit', 'rowdragmoveinit'],\n ['rowdragmousemove', 'rowdragmousemove'],\n ['rowdropinit', 'rowdropinit'],\n ['roworderchange', 'roworderchange'],\n ['beforecopyregion', 'beforecopyregion'],\n ['beforepasteregion', 'beforepasteregion'],\n ['celleditapply', 'celleditapply'],\n ['beforecellfocusinit', 'beforecellfocusinit'],\n ['cellclickinit', 'cellclickinit'],\n ['beforenextvpfocus', 'beforenextvpfocus'],\n ['setedit', 'setedit'],\n ['beforeapplyrange', 'beforeapplyrange'],\n ['beforesetrange', 'beforesetrange'],\n ['setrange', 'setrange'],\n ['beforeeditrender', 'beforeeditrender'],\n ['selectall', 'selectall'],\n ['canceledit', 'canceledit'],\n ['settemprange', 'settemprange'],\n ['beforesettemprange', 'beforesettemprange'],\n ['applyfocus', 'applyfocus'],\n ['focuscell', 'focuscell'],\n ['beforerangedataapply', 'beforerangedataapply'],\n ['selectionchangeinit', 'selectionchangeinit'],\n ['beforerangecopyapply', 'beforerangecopyapply'],\n ['rangeeditapply', 'rangeeditapply'],\n ['clipboardrangecopy', 'clipboardrangecopy'],\n ['clipboardrangepaste', 'clipboardrangepaste'],\n ['beforekeydown', 'beforekeydown'],\n ['beforekeyup', 'beforekeyup'],\n ['beforecellsave', 'beforecellsave'],\n ['celledit', 'celledit'],\n ['scrollview', 'scrollview'],\n ['ref', 'ref'],\n ['scrollvirtual', 'scrollvirtual'],\n ['scrollviewport', 'scrollviewport'],\n ['resizeviewport', 'resizeviewport'],\n ['scrollchange', 'scrollchange'],\n ['scrollviewportsilent', 'scrollviewportsilent'],\n ['html', 'html']\n]);","/**\n * 高性能单元格模板辅助工具\n * \n * 当使用 Vue/React 等框架组件作为单元格渲染器时,滚动性能可能会下降。\n * 这是因为框架组件的创建/挂载开销较大。\n * \n * 本工具提供原生的高性能渲染方案,适用于对滚动性能要求较高的场景。\n */\n\nimport type { HyperFunc, ColumnDataSchemaModel } from '../types';\nimport type { VNode } from '@stencil/core';\n\n/**\n * 单元格渲染函数类型\n */\nexport type CellRenderFn = (\n h: HyperFunc<VNode>,\n props: ColumnDataSchemaModel,\n additionalData?: any\n) => VNode | VNode[] | string;\n\n/**\n * 创建高性能单元格模板\n * \n * @example\n * ```ts\n * const priorityTemplate = createCellTemplate((h, { value }) => {\n * const colors = { P0: '#f5222d', P1: '#fa541c', P2: '#faad14' };\n * return h('span', { \n * style: { color: colors[value] || '#999' } \n * }, value);\n * });\n * \n * const columns = [\n * { prop: 'priority', cellTemplate: priorityTemplate }\n * ];\n * ```\n */\nexport function createCellTemplate(renderFn: CellRenderFn) {\n return renderFn;\n}\n\n/**\n * 带缓存的单元格模板\n * 当单元格值没有变化时,返回缓存的结果\n * \n * @param renderFn 渲染函数\n * @param getCacheKey 获取缓存键的函数,默认使用 rowIndex-prop-value\n */\nexport function createCachedCellTemplate(\n renderFn: CellRenderFn,\n getCacheKey?: (props: ColumnDataSchemaModel) => string\n) {\n const cache = new Map<string, VNode | VNode[] | string>();\n \n return (h: HyperFunc<VNode>, props: ColumnDataSchemaModel, additionalData?: any) => {\n const key = getCacheKey \n ? getCacheKey(props) \n : `${props.rowIndex}-${props.prop}-${JSON.stringify(props.value)}`;\n \n if (cache.has(key)) {\n return cache.get(key)!;\n }\n \n const result = renderFn(h, props, additionalData);\n cache.set(key, result);\n \n // 限制缓存大小,避免内存泄漏\n if (cache.size > 1000) {\n const firstKey = cache.keys().next().value;\n if (firstKey) {\n cache.delete(firstKey);\n }\n }\n \n return result;\n };\n}\n\n/**\n * 常用的单元格渲染器\n */\nexport const CellRenderers = {\n /**\n * 带颜色标签的渲染器\n */\n colorTag: (colorMap: Record<string, string>) => {\n return createCellTemplate((h, { value }) => {\n const color = colorMap[value as string] || '#999';\n return h('span', {\n style: {\n display: 'inline-block',\n padding: '2px 8px',\n borderRadius: '4px',\n fontSize: '12px',\n background: color + '20',\n color: color\n }\n }, String(value ?? ''));\n });\n },\n\n /**\n * 进度条渲染器\n */\n progressBar: (options?: { height?: number; colors?: { low: string; mid: string; high: string } }) => {\n const { height = 6, colors = { low: '#f5222d', mid: '#faad14', high: '#52c41a' } } = options || {};\n \n return createCellTemplate((h, { value }) => {\n const progress = Number(value) || 0;\n const color = progress >= 70 ? colors.high : progress >= 30 ? colors.mid : colors.low;\n \n return h('div', {\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '0 8px'\n }\n }, [\n h('div', {\n style: {\n flex: '1',\n height: `${height}px`,\n background: '#e0e0e0',\n borderRadius: `${height / 2}px`,\n overflow: 'hidden'\n }\n }, [\n h('div', {\n style: {\n width: `${progress}%`,\n height: '100%',\n background: color,\n borderRadius: `${height / 2}px`\n }\n })\n ]),\n h('span', {\n style: { fontSize: '12px', color: '#666', minWidth: '36px' }\n }, `${progress}%`)\n ]);\n });\n },\n\n /**\n * 头像渲染器\n */\n avatar: (options?: { size?: number; colors?: string[] }) => {\n const { \n size = 28, \n colors = ['#f56a00', '#7265e6', '#ffbf00', '#00a2ae', '#eb2f96'] \n } = options || {};\n \n return createCellTemplate((h, { value, rowIndex }) => {\n const name = String(value ?? '');\n const color = colors[(name.charCodeAt(0) || rowIndex) % colors.length];\n \n return h('div', {\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '0 8px'\n }\n }, [\n h('div', {\n style: {\n width: `${size}px`,\n height: `${size}px`,\n borderRadius: '50%',\n background: color,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'white',\n fontWeight: '600',\n fontSize: `${size * 0.4}px`\n }\n }, name.charAt(0) || '?'),\n h('span', {}, name)\n ]);\n });\n },\n\n /**\n * 状态指示器渲染器\n */\n status: (statusConfig: Record<string, { color: string; icon?: string }>) => {\n return createCellTemplate((h, { value }) => {\n const status = String(value ?? '');\n const config = statusConfig[status] || { color: '#999' };\n \n return h('div', {\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '2px 8px',\n borderRadius: '4px',\n background: config.color + '15',\n color: config.color,\n fontSize: '12px'\n }\n }, [\n config.icon ? h('span', {}, config.icon) : null,\n h('span', {}, status)\n ].filter(Boolean));\n });\n }\n};\n","/**\n * 批量折叠分组工具\n * 一次性折叠多个指定分组,无动画闪烁,性能最优\n */\n\nconst GROUP_KEY_PROP = '__rvgr-value';\nconst GROUP_EXPANDED_PROP = '__rvgr-expanded';\n\n/**\n * 内部辅助函数:更新分组展开状态\n */\nasync function updateGroupExpandedState(\n grid: HTMLRevoGridElement,\n groupKeys: string[],\n expanded: boolean,\n preserveChildState = false\n): Promise<void> {\n if (!grid || !groupKeys.length) return;\n\n const source = await grid.getSource('rgRow');\n const currentExpandedState: Record<string, boolean> = {};\n \n source.forEach(row => {\n const key = row?.[GROUP_KEY_PROP];\n if (key) currentExpandedState[key] = !!row[GROUP_EXPANDED_PROP];\n });\n\n const currentGrouping = grid.grouping || {};\n const newExpandedState: Record<string, boolean> = {};\n \n // 将所有历史和当前分组默认设为展开\n Object.keys(currentGrouping.prevExpanded || {}).forEach(key => newExpandedState[key] = true);\n Object.keys(currentExpandedState).forEach(key => newExpandedState[key] = true);\n \n // 更新指定分组状态\n const keysSet = new Set(groupKeys);\n keysSet.forEach(key => {\n newExpandedState[key] = expanded;\n \n // 折叠时保持子分组展开\n if (preserveChildState && !expanded) {\n Object.keys(currentExpandedState).forEach(childKey => {\n if (childKey.startsWith(key + ',') && !keysSet.has(childKey)) {\n newExpandedState[childKey] = true;\n }\n });\n }\n });\n\n grid.grouping = {\n ...currentGrouping,\n expandedAll: false,\n prevExpanded: newExpandedState,\n };\n}\n\n/**\n * 批量折叠指定的分组(一次性完成,无视觉闪烁)\n * \n * 核心原理:\n * 1. 收集所有分组的当前展开状态\n * 2. 将要折叠的分组状态设为 false\n * 3. 保留子分组的展开状态(这样重新展开父分组时,子分组会保持原状态)\n * 4. 通过更新 grouping.prevExpanded 并触发重新分组来应用更改\n * \n * @param grid - RevoGrid 实例\n * @param groupKeysToCollapse - 要折叠的分组 key 数组,例如:['V1.0', 'V2.0,需求']\n * @returns Promise<void>\n * \n * @example\n * ```typescript\n * // 折叠多个指定分组\n * await batchCollapseGroups(grid.value, [\n * '技术部',\n * '技术部,电商平台',\n * '产品部,用户增长,P0'\n * ]);\n * ```\n */\nexport async function batchCollapseGroups(\n grid: HTMLRevoGridElement,\n groupKeysToCollapse: string[]\n): Promise<void> {\n await updateGroupExpandedState(grid, groupKeysToCollapse, false, true);\n}\n\n/**\n * 批量展开指定的分组\n * \n * @param grid - RevoGrid 实例\n * @param groupKeysToExpand - 要展开的分组 key 数组\n * @returns Promise<void>\n */\nexport async function batchExpandGroups(\n grid: HTMLRevoGridElement,\n groupKeysToExpand: string[]\n): Promise<void> {\n await updateGroupExpandedState(grid, groupKeysToExpand, true);\n}\n\n/**\n * 切换指定分组的展开/折叠状态\n * \n * @param grid - RevoGrid 实例\n * @param groupKeysToToggle - 要切换的分组 key 数组\n * @returns Promise<void>\n */\nexport async function batchToggleGroups(\n grid: HTMLRevoGridElement,\n groupKeysToToggle: string[]\n): Promise<void> {\n if (!grid || !groupKeysToToggle.length) return;\n\n const source = await grid.getSource('rgRow');\n const keysSet = new Set(groupKeysToToggle);\n const toCollapse: string[] = [];\n const toExpand: string[] = [];\n \n source.forEach(row => {\n const key = row?.[GROUP_KEY_PROP];\n if (key && keysSet.has(key)) {\n (row[GROUP_EXPANDED_PROP] ? toCollapse : toExpand).push(key);\n }\n });\n\n if (toCollapse.length) await batchCollapseGroups(grid, toCollapse);\n if (toExpand.length) await batchExpandGroups(grid, toExpand);\n}\n\n/**\n * 根据条件批量折叠分组\n * \n * @param grid - RevoGrid 实例\n * @param predicate - 判断函数,返回 true 的分组会被折叠\n * @returns Promise<void>\n * \n * @example\n * ```typescript\n * // 折叠所有包含 \"技术部\" 的分组\n * await batchCollapseGroupsByCondition(grid.value, (key) => key.includes('技术部'));\n * \n * // 折叠所有二级分组(包含一个逗号)\n * await batchCollapseGroupsByCondition(grid.value, (key) => key.split(',').length === 2);\n * ```\n */\nexport async function batchCollapseGroupsByCondition(\n grid: HTMLRevoGridElement,\n predicate: (key: string) => boolean\n): Promise<void> {\n if (!grid) {\n return;\n }\n\n const source = await grid.getSource('rgRow');\n const groupKeysToCollapse: string[] = [];\n \n source.forEach(row => {\n const key = row?.[GROUP_KEY_PROP];\n if (key && predicate(key)) {\n groupKeysToCollapse.push(key);\n }\n });\n\n if (groupKeysToCollapse.length === 0) {\n console.log('⚠️ 没有符合条件的分组需要折叠');\n return;\n }\n\n await batchCollapseGroups(grid, groupKeysToCollapse);\n}\n\n/**\n * 获取所有分组的 key 列表\n * \n * @param grid - RevoGrid 实例\n * @param level - 可选,指定层级(0=一级,1=二级,2=三级...)\n * @returns Promise<string[]>\n */\nexport async function getAllGroupKeys(\n grid: HTMLRevoGridElement,\n level?: number\n): Promise<string[]> {\n if (!grid) {\n return [];\n }\n\n const source = await grid.getSource('rgRow');\n const keys: string[] = [];\n \n source.forEach(row => {\n const key = row?.[GROUP_KEY_PROP];\n if (key) {\n // 如果指定了层级,只返回该层级的分组\n if (typeof level === 'number') {\n // 层级 = 逗号数量(一级分组没有逗号,二级有1个逗号,三级有2个逗号)\n const commaCount = (key.match(/,/g) || []).length;\n if (commaCount === level) {\n keys.push(key);\n }\n } else {\n keys.push(key);\n }\n }\n });\n\n return keys;\n}\n\n/**\n * 获取所有展开/折叠的分组 key\n * \n * @param grid - RevoGrid 实例\n * @param expanded - true=获取展开的,false=获取折叠的\n * @returns Promise<string[]>\n */\nexport async function getGroupKeysByState(\n grid: HTMLRevoGridElement,\n expanded: boolean\n): Promise<string[]> {\n if (!grid) {\n return [];\n }\n\n const source = await grid.getSource('rgRow');\n const keys: string[] = [];\n \n source.forEach(row => {\n const key = row?.[GROUP_KEY_PROP];\n if (key && !!row[GROUP_EXPANDED_PROP] === expanded) {\n keys.push(key);\n }\n });\n\n return keys;\n}\n","/**\n * 列宽拖拽指示线插件\n * 让拖拽列宽时的蓝色指示线延伸到整个表格高度\n */\nimport { BasePlugin } from './base.plugin';\nimport type { PluginProviders } from '@type';\n\nexport interface ResizeIndicatorConfig {\n /** 是否启用全高度指示线,默认 true */\n enabled?: boolean;\n /** 指示线颜色,默认 deepskyblue */\n color?: string;\n /** 指示线宽度,默认 2px */\n width?: number;\n /** 底部偏移量,指示线高度会减去这个值,默认 0 */\n bottomOffset?: number;\n}\n\nconst DEFAULT_CONFIG: Required<ResizeIndicatorConfig> = {\n enabled: true,\n color: 'var(--revo-grid-resize-indicator-color, #0f87ff)',\n width: 2,\n bottomOffset: 0,\n};\n\nconst DRAG_ACTIVE_CLASS = 'resize-indicator-active';\nconst GLOBAL_CURSOR_CLASS = 'resize-indicator-global-cursor';\nconst CAPTURE_EVENT = true;\n\nexport class ResizeIndicatorPlugin extends BasePlugin {\n private config: Required<ResizeIndicatorConfig>;\n private mouseDownHandler: ((e: MouseEvent) => void) | null = null;\n private hoveredResizableElement: HTMLElement | null = null;\n private lastPointerPosition: { x: number; y: number } | null = null;\n\n constructor(\n revogrid: HTMLRevoGridElement,\n providers: PluginProviders | null,\n config?: ResizeIndicatorConfig,\n ) {\n super(revogrid, providers as PluginProviders);\n this.config = { ...DEFAULT_CONFIG, ...config };\n\n if (this.config.enabled) {\n this.init();\n }\n }\n\n private init() {\n // 仅监听按下拖拽,不在普通移动时展示 hover 指示线\n this.mouseDownHandler = (e: MouseEvent) => this.handleMouseDown(e);\n this.revogrid.addEventListener('mousedown', this.mouseDownHandler, true);\n this.revogrid.addEventListener('mousemove', this.onGridMouseMove, true);\n this.revogrid.addEventListener('mouseleave', this.onGridMouseLeave, true);\n\n // 列宽变更链路已经完成时,强制清理指示线(Safari 丢 mouseup 兜底)\n this.addEventListener('headerresize', () => {\n if (this.resizeContext) {\n this.cleanupDragState();\n }\n });\n this.addEventListener('aftercolumnresize', () => {\n if (this.resizeContext) {\n this.cleanupDragState();\n }\n });\n // 冻结列覆盖场景下,Safari 可能在滚动后保留旧 hover 状态\n this.addEventListener('scrollchange', () => {\n if (!this.resizeContext) {\n this.setHoveredResizable(null);\n }\n });\n }\n\n private indicatorLine: HTMLDivElement | null = null;\n private currentResizableElement: HTMLElement | null = null; // 保存当前正在操作的 resizable 元素\n private resizeContext: {\n startX: number;\n cellWidth: number;\n minWidth: number;\n minLineLeft: number;\n gridMinLeft: number;\n gridMaxLeft: number;\n initialLineLeft: number;\n } | null = null;\n private dragListenersAttached = false;\n\n private readonly onMouseMove = (moveEvent: MouseEvent) => {\n this.lastPointerPosition = { x: moveEvent.clientX, y: moveEvent.clientY };\n // Safari 在某些场景会丢失 mouseup,按键已释放时主动兜底清理\n if (this.resizeContext && moveEvent.buttons === 0) {\n this.cleanupDragState();\n return;\n }\n this.updateIndicatorLine(moveEvent);\n };\n\n private readonly onMouseUp = () => {\n this.cleanupDragState();\n };\n\n private readonly onMouseLeave = () => {\n if (this.resizeContext) {\n this.cleanupDragState();\n }\n };\n\n private readonly onPointerUp = () => {\n this.cleanupDragState();\n };\n\n private readonly onPointerCancel = () => {\n this.cleanupDragState();\n };\n\n private readonly onWindowBlur = () => {\n if (this.resizeContext) {\n this.cleanupDragState();\n }\n };\n\n private readonly onVisibilityChange = () => {\n if (document.visibilityState === 'hidden' && this.resizeContext) {\n this.cleanupDragState();\n }\n };\n\n private readonly onRightClick = (clickEvent: MouseEvent) => {\n if (clickEvent.button === 2) {\n clickEvent.preventDefault();\n this.cleanupDragState();\n }\n };\n\n private readonly onContextMenu = (menuEvent: MouseEvent) => {\n if (this.resizeContext) {\n menuEvent.preventDefault();\n }\n };\n\n private readonly onGridMouseMove = (e: MouseEvent) => {\n this.lastPointerPosition = { x: e.clientX, y: e.clientY };\n if (\n this.resizeContext ||\n this.revogrid.classList.contains(DRAG_ACTIVE_CLASS) ||\n this.revogrid.classList.contains('column-drag-start')\n ) {\n this.setHoveredResizable(null);\n return;\n }\n\n const target = e.target as HTMLElement | null;\n const handle = target?.closest('.resizable-r, .resizable-l') as HTMLElement | null;\n if (!handle || !this.revogrid.contains(handle)) {\n this.setHoveredResizable(null);\n return;\n }\n this.setHoveredResizable(handle);\n };\n\n private readonly onGridMouseLeave = () => {\n this.lastPointerPosition = null;\n this.setHoveredResizable(null);\n };\n\n private attachDragListeners() {\n if (this.dragListenersAttached) {\n return;\n }\n document.addEventListener('mousemove', this.onMouseMove, CAPTURE_EVENT);\n document.addEventListener('mouseup', this.onMouseUp, CAPTURE_EVENT);\n document.documentElement.addEventListener('mouseup', this.onMouseUp, CAPTURE_EVENT);\n document.documentElement.addEventListener('mouseleave', this.onMouseLeave);\n window.addEventListener('mouseup', this.onMouseUp, CAPTURE_EVENT);\n document.addEventListener('pointerup', this.onPointerUp, CAPTURE_EVENT);\n document.addEventListener('pointercancel', this.onPointerCancel, CAPTURE_EVENT);\n document.addEventListener('mousedown', this.onRightClick, CAPTURE_EVENT);\n document.addEventListener('contextmenu', this.onContextMenu, CAPTURE_EVENT);\n window.addEventListener('blur', this.onWindowBlur);\n document.addEventListener('visibilitychange', this.onVisibilityChange);\n this.dragListenersAttached = true;\n }\n\n private detachDragListeners() {\n if (!this.dragListenersAttached) {\n return;\n }\n document.removeEventListener('mousemove', this.onMouseMove, CAPTURE_EVENT);\n document.removeEventListener('mouseup', this.onMouseUp, CAPTURE_EVENT);\n document.documentElement.removeEventListener('mouseup', this.onMouseUp, CAPTURE_EVENT);\n document.documentElement.removeEventListener('mouseleave', this.onMouseLeave);\n window.removeEventListener('mouseup', this.onMouseUp, CAPTURE_EVENT);\n document.removeEventListener('pointerup', this.onPointerUp, CAPTURE_EVENT);\n document.removeEventListener('pointercancel', this.onPointerCancel, CAPTURE_EVENT);\n document.removeEventListener('mousedown', this.onRightClick, CAPTURE_EVENT);\n document.removeEventListener('contextmenu', this.onContextMenu, CAPTURE_EVENT);\n window.removeEventListener('blur', this.onWindowBlur);\n document.removeEventListener('visibilitychange', this.onVisibilityChange);\n this.dragListenersAttached = false;\n }\n\n private cleanupDragState() {\n // 先解绑自身监听,避免触发兜底事件时重复进入\n this.detachDragListeners();\n\n // Safari 丢失 mouseup 时,主动触发一次原生 resize 结束链路\n this.forceReleaseNativeResizeState();\n\n this.removeIndicatorLine();\n this.resizeContext = null;\n this.revogrid.classList.remove(DRAG_ACTIVE_CLASS);\n document.body.classList.remove(GLOBAL_CURSOR_CLASS);\n document.body.style.cursor = '';\n this.cleanupStaleResizeVisualState();\n this.restoreHoverFromPointer();\n\n if (this.currentResizableElement) {\n this.currentResizableElement.classList.remove('resizable-hover-active');\n this.currentResizableElement = null;\n }\n }\n\n /**\n * 触发一次原生 resize 结束,确保 ResizeDirective 能执行 handleUp -> dropInitial。\n * 主要用于 Safari 在边界场景丢失 mouseup 的兜底。\n */\n private forceReleaseNativeResizeState() {\n const mouseUp = new MouseEvent('mouseup', {\n bubbles: true,\n cancelable: true,\n button: 0,\n });\n const touchEnd = new Event('touchend', {\n bubbles: true,\n cancelable: true,\n });\n document.documentElement.dispatchEvent(mouseUp);\n document.documentElement.dispatchEvent(touchEnd);\n }\n\n /**\n * 清理可能遗留的视觉状态(active 类和 resizable 内联样式)。\n */\n private cleanupStaleResizeVisualState() {\n this.revogrid\n .querySelectorAll('.rgHeaderCell.active')\n .forEach(el => el.classList.remove('active'));\n\n this.revogrid.querySelectorAll('.resizable').forEach(el => {\n (el as HTMLElement).removeAttribute('style');\n el.classList.remove('resizable-hover-active');\n el.classList.remove('resize-handle-hover');\n });\n this.hoveredResizableElement = null;\n }\n\n private setHoveredResizable(handle: HTMLElement | null) {\n if (this.hoveredResizableElement === handle) {\n return;\n }\n if (this.hoveredResizableElement) {\n this.hoveredResizableElement.classList.remove('resize-handle-hover');\n }\n this.hoveredResizableElement = handle;\n if (this.hoveredResizableElement) {\n this.hoveredResizableElement.classList.add('resize-handle-hover');\n }\n }\n\n /**\n * 拖拽结束后按当前指针位置恢复 hover 效果,\n * 这样“按下立即松开”也能保持句柄高亮,无需再移动一次鼠标。\n */\n private restoreHoverFromPointer() {\n const point = this.lastPointerPosition;\n if (!point) {\n this.setHoveredResizable(null);\n return;\n }\n\n requestAnimationFrame(() => {\n if (this.resizeContext || this.revogrid.classList.contains(DRAG_ACTIVE_CLASS)) {\n return;\n }\n const element = document.elementFromPoint(point.x, point.y) as HTMLElement | null;\n const handle = element?.closest('.resizable-r, .resizable-l') as HTMLElement | null;\n if (handle && this.revogrid.contains(handle)) {\n this.setHoveredResizable(handle);\n } else {\n this.setHoveredResizable(null);\n }\n });\n }\n\n private handleMouseDown(e: MouseEvent) {\n this.lastPointerPosition = { x: e.clientX, y: e.clientY };\n // 按下开始 resize 时,先清掉 hover 句柄线,避免与长指示线叠加成“双线”\n this.setHoveredResizable(null);\n // 只响应左键点击\n if (e.button !== 0) {\n return;\n }\n \n const target = e.target as HTMLElement;\n \n // 检查是否点击了 resizable-r 或 resizable-l\n const isLeft = target.classList.contains('resizable-l');\n const isRight = target.classList.contains('resizable-r');\n \n if (!isLeft && !isRight) {\n return;\n }\n\n // 如果正在进行列拖拽,不显示指示线\n if (this.revogrid.classList.contains('column-drag-start')) {\n return;\n }\n\n if (this.resizeContext) {\n this.cleanupDragState();\n }\n\n // 获取单元格信息\n const headerCell = target.closest('.rgHeaderCell') as HTMLElement;\n if (!headerCell) {\n return;\n }\n\n // 保存当前的 resizable 元素\n this.currentResizableElement = target;\n this.currentResizableElement.classList.add('resizable-hover-active');\n\n const cellRect = headerCell.getBoundingClientRect();\n \n // 直接从 DOM 元素获取 minwidth 属性\n const minWidthAttr = headerCell.getAttribute('minwidth');\n const currentMinWidth = minWidthAttr ? parseInt(minWidthAttr, 10) : 30;\n\n // 与 SCSS 中边界句柄的伪元素定位保持一致,避免按下长线与 hover 线出现 1px 偏差。\n const isLastColumnRightHandle = isRight && headerCell.classList.contains('last-column');\n const headerArea = headerCell.closest(\n '.header-area-colPinStart, .header-area-rgCol, .header-area-colPinEnd',\n ) as HTMLElement | null;\n const isFirstCellInRow = headerCell.parentElement?.firstElementChild === headerCell;\n const isLastCellInRow = headerCell.parentElement?.lastElementChild === headerCell;\n const isRightEdgeAdjustedHandle =\n isLastColumnRightHandle ||\n (isRight && !!headerArea?.classList.contains('header-area-colPinStart') && isLastCellInRow) ||\n (isRight && !!headerArea?.classList.contains('header-area-rgCol') && isLastCellInRow);\n const isLeftEdgeAdjustedHandle =\n (isLeft && !!headerArea?.classList.contains('header-area-rgCol') && isFirstCellInRow) ||\n (isLeft && !!headerArea?.classList.contains('header-area-colPinEnd') && isFirstCellInRow);\n const lineOffsetX = isRightEdgeAdjustedHandle ? -1 : isLeftEdgeAdjustedHandle ? 1 : 0;\n \n // 指示线的初始位置居中对齐到拖拽手柄的中心\n const targetRect = target.getBoundingClientRect();\n const initialLineLeft = targetRect.left + targetRect.width / 2 - this.config.width / 2 + lineOffsetX;\n\n // 初始化拖拽上下文\n const gridRect = this.revogrid.getBoundingClientRect();\n this.resizeContext = {\n startX: e.clientX,\n cellWidth: cellRect.width,\n minWidth: currentMinWidth,\n minLineLeft: cellRect.left + currentMinWidth - this.config.width / 2 + lineOffsetX,\n gridMinLeft: gridRect.left - this.config.width / 2,\n gridMaxLeft: gridRect.right - this.config.width / 2,\n initialLineLeft: initialLineLeft,\n };\n\n // 创建独立的指示线元素\n this.createIndicatorLine(target);\n this.revogrid.classList.add(DRAG_ACTIVE_CLASS);\n document.body.classList.add(GLOBAL_CURSOR_CLASS);\n \n // 设置拖拽时的鼠标样式\n document.body.style.cursor = 'col-resize';\n\n this.attachDragListeners();\n }\n\n private createIndicatorLine(target: HTMLElement) {\n // 移除已存在的指示线\n this.removeIndicatorLine();\n\n // 获取表格位置和尺寸\n const gridRect = this.revogrid.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n \n // 从表格顶部开始,延伸到表格底部(减去底部偏移量)\n const startTop = gridRect.top;\n const lineHeight = gridRect.height - this.config.bottomOffset;\n \n // 优先复用 mousedown 时计算的初始位置,避免首帧和拖拽阶段基准不一致。\n const initialLeft =\n this.resizeContext?.initialLineLeft ??\n (targetRect.left + targetRect.width / 2 - this.config.width / 2);\n const indicatorColor = this.resolveIndicatorColor();\n\n // 创建指示线\n this.indicatorLine = document.createElement('div');\n this.indicatorLine.className = 'revo-grid-resize-indicator';\n this.indicatorLine.style.cssText = `\n position: fixed;\n top: ${startTop}px;\n left: ${initialLeft}px;\n width: ${this.config.width}px;\n height: ${lineHeight}px;\n background-color: ${indicatorColor};\n z-index: 999;\n pointer-events: none;\n min-width: ${this.config.width}px;\n max-width: ${this.config.width}px;\n box-sizing: border-box;\n `;\n document.body.appendChild(this.indicatorLine);\n }\n\n /**\n * 长线元素挂在 body 下,无法继承 revo-grid 上的 CSS 变量。\n * 这里把 var(...) 解析为实际颜色值后再写入内联样式。\n */\n private resolveIndicatorColor(): string {\n const color = this.config.color?.trim();\n if (!color) {\n return '#0f87ff';\n }\n\n if (!color.startsWith('var(')) {\n return color;\n }\n\n const matched = color.match(/var\\(\\s*(--[^,\\s)]+)\\s*(?:,\\s*([^)]+))?\\)/);\n if (!matched) {\n return color;\n }\n\n const [, variableName, fallback] = matched;\n const resolved = getComputedStyle(this.revogrid).getPropertyValue(variableName).trim();\n if (resolved) {\n return resolved;\n }\n\n return fallback?.trim() || '#0f87ff';\n }\n\n private updateIndicatorLine(e: MouseEvent) {\n if (!this.indicatorLine || !this.resizeContext) return;\n \n // 计算鼠标相对于初始位置的偏移量\n const mouseDelta = e.clientX - this.resizeContext.startX;\n \n // 指示线的新位置 = 初始位置 + 鼠标偏移量\n let newLineLeft = this.resizeContext.initialLineLeft + mouseDelta;\n \n // 检查当前列宽是否已经是最小宽度\n const isAtMinWidth = Math.abs(this.resizeContext.cellWidth - this.resizeContext.minWidth) <= 1;\n \n // 如果已经是最小宽度,指示线不能再往左移动\n if (isAtMinWidth && newLineLeft < this.resizeContext.initialLineLeft) {\n newLineLeft = this.resizeContext.initialLineLeft;\n } else if (!isAtMinWidth) {\n // 列宽大于最小宽度时,限制指示线不能超过 minLeft\n newLineLeft = Math.max(newLineLeft, this.resizeContext.minLineLeft);\n }\n \n // 不能拖到表格边界外\n newLineLeft = Math.max(newLineLeft, this.resizeContext.gridMinLeft);\n newLineLeft = Math.min(newLineLeft, this.resizeContext.gridMaxLeft);\n \n this.indicatorLine.style.left = `${newLineLeft}px`;\n }\n\n private removeIndicatorLine() {\n if (this.indicatorLine) {\n this.indicatorLine.remove();\n this.indicatorLine = null;\n }\n }\n\n /**\n * 动态更新配置\n */\n updateConfig(config: Partial<ResizeIndicatorConfig>) {\n this.config = { ...this.config, ...config };\n\n if (!this.config.enabled) {\n this.cleanupDragState();\n this.setHoveredResizable(null);\n this.revogrid.removeEventListener('mousemove', this.onGridMouseMove, true);\n this.revogrid.removeEventListener('mouseleave', this.onGridMouseLeave, true);\n if (this.mouseDownHandler) {\n this.revogrid.removeEventListener('mousedown', this.mouseDownHandler, true);\n this.mouseDownHandler = null;\n }\n return;\n }\n\n if (!this.mouseDownHandler) {\n this.mouseDownHandler = (e: MouseEvent) => this.handleMouseDown(e);\n this.revogrid.addEventListener('mousedown', this.mouseDownHandler, true);\n }\n this.revogrid.addEventListener('mousemove', this.onGridMouseMove, true);\n this.revogrid.addEventListener('mouseleave', this.onGridMouseLeave, true);\n }\n\n destroy() {\n this.cleanupDragState();\n this.setHoveredResizable(null);\n \n if (this.mouseDownHandler) {\n this.revogrid.removeEventListener('mousedown', this.mouseDownHandler, true);\n this.mouseDownHandler = null;\n }\n this.revogrid.removeEventListener('mousemove', this.onGridMouseMove, true);\n this.revogrid.removeEventListener('mouseleave', this.onGridMouseLeave, true);\n \n // 清理当前保存的 resizable 元素\n if (this.currentResizableElement) {\n this.currentResizableElement.classList.remove('resizable-hover-active');\n this.currentResizableElement = null;\n }\n \n super.destroy();\n }\n}\n","import type { PluginProviders } from '../types/plugin.types';\nimport { BasePlugin } from './base.plugin';\n\n/**\n * Automatically adds new rows when pasted data is larger than current rows\n * @event newRows - is triggered when new rows are added. Data of new rows can be filled with default values. If the event is prevented, no rows will be added\n */\nexport class AutoAddRowsPlugin extends BasePlugin {\n constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders) {\n super(revogrid, providers);\n this.addEventListener('beforepasteapply', evt =>\n this.handleBeforePasteApply(evt),\n );\n }\n\n handleBeforePasteApply(\n event: CustomEvent<{\n raw: string;\n parsed: string[][];\n event: ClipboardEvent;\n }>,\n ) {\n const start = this.providers.selection.focused;\n const isEditing = this.providers.selection.edit != null;\n\n if (!start || isEditing) {\n return;\n }\n\n const rowLength =\n this.providers.data.stores.rgRow.store.get('items').length;\n\n const endRow = start.y + event.detail.parsed.length;\n\n if (rowLength < endRow) {\n const count = endRow - rowLength;\n const newRows = Array.from({ length: count }, (_, i) => ({\n index: rowLength + i,\n data: {},\n }));\n\n const event = this.emit('newRows', { newRows: newRows });\n\n if (event.defaultPrevented) {\n return;\n }\n\n const items = [\n ...this.providers.data.stores.rgRow.store.get('source'),\n ...event.detail.newRows.map(j => j.data),\n ];\n\n this.providers.data.setData(items);\n }\n }\n}\n","/**\n * 拖拽处理器\n * 支持分组列的拖拽\n */\nimport type { ColumnRegular } from '@type';\nimport type { CustomDragEventDetails, DropTargetType } from './types';\n\nconst DRAG_THRESHOLD = 5;\n\nexport class DragHandler {\n private isDragging = false;\n private isPreparing = false;\n \n private startX = 0;\n private startY = 0;\n \n // 源信息\n private sourceCell: HTMLElement | null = null;\n private sourceRowIndex = -1;\n private sourceColumnIndex = -1;\n private sourceColumn: ColumnRegular | null = null;\n private sourceIsChild = false;\n private sourceGroupName?: string;\n \n // 拖拽元素\n private dragGhost: HTMLDivElement | null = null;\n private dropIndicator: HTMLDivElement | null = null;\n \n // 目标信息\n private currentDropTarget: HTMLElement | null = null;\n private dropPosition: 'left' | 'right' = 'left';\n private targetType: DropTargetType = 'normal';\n private targetGroupName?: string;\n private targetChildIndex?: number;\n\n // 缓存列数量(避免每次 mousemove 都重新计算)\n private cachedColumnCounts: { pinStart: number; normal: number; pinEnd: number } | null = null;\n\n // 拖拽偏移量(鼠标相对于源单元格左上角的偏移)\n private dragOffsetX = 0;\n private dragOffsetY = 0;\n\n // 绑定的事件处理器引用(用于移除监听)\n private boundMouseDown: (e: MouseEvent) => void;\n private initTimeout: number | null = null;\n private isDestroyed = false;\n \n // 拖拽延迟定时器\n private dragDelayTimer?: number;\n\n // 延迟启动拖拽期间,记录最新鼠标位置(避免使用旧坐标导致 ghost 偏移)\n private pendingDragClientX = 0;\n private pendingDragClientY = 0;\n private pendingDragMoveListener?: (e: MouseEvent) => void;\n \n // 双击检测\n private lastClickTime = 0;\n private lastClickTarget: HTMLElement | null = null;\n\n constructor(\n private revogrid: HTMLRevoGridElement,\n private canDrag: (column: ColumnRegular, rowIndex: number, columnIndex: number) => boolean,\n private onDragUpdate: (details: CustomDragEventDetails) => void,\n private cannotDropBefore?: (column: ColumnRegular) => boolean,\n ) {\n this.boundMouseDown = this.onMouseDown.bind(this);\n this.init();\n }\n\n private init() {\n this.initTimeout = window.setTimeout(() => {\n if (!this.isDestroyed) {\n this.revogrid.addEventListener('mousedown', this.boundMouseDown, true);\n }\n this.initTimeout = null;\n }, 500);\n }\n\n private onMouseDown(e: MouseEvent) {\n // 只响应左键点击\n if (e.button !== 0) {\n return;\n }\n\n const target = e.target as HTMLElement;\n \n // 检查是否点击在可交互元素上(按钮、链接、输入框等)\n if (this.isInteractiveElement(target)) {\n return;\n }\n \n const headerCell = target.closest('.rgHeaderCell') as HTMLElement | null;\n if (!headerCell) return;\n\n // 双击检测:如果在300ms内点击同一个单元格两次,认为是双击,不触发拖拽\n const now = Date.now();\n const timeSinceLastClick = now - this.lastClickTime;\n const isSameTarget = this.lastClickTarget === headerCell;\n \n if (isSameTarget && timeSinceLastClick < 300) {\n // 清除之前的定时器\n if (this.dragDelayTimer) {\n clearTimeout(this.dragDelayTimer);\n this.dragDelayTimer = undefined;\n }\n this.stopPendingDragTracking();\n // 重置状态\n this.lastClickTime = 0;\n this.lastClickTarget = null;\n this.sourceCell = null;\n this.sourceColumn = null;\n return;\n }\n \n // 记录本次点击\n this.lastClickTime = now;\n this.lastClickTarget = headerCell;\n\n // 检查是否是编组头(编组头不允许拖拽)\n if (this.isGroupHeader(headerCell)) {\n return;\n }\n\n // 检查是否点击在 resize 区域(右边缘 8px 范围内)\n if (this.isInResizeZone(e, headerCell)) {\n return;\n }\n\n // 解析源列信息\n const sourceInfo = this.parseHeaderCell(headerCell);\n if (!sourceInfo) return;\n\n const { column, rowIndex, columnIndex, isChild, groupName } = sourceInfo;\n\n if (!this.canDrag(column, rowIndex, columnIndex)) {\n return;\n }\n\n // 保存拖拽信息\n this.startX = e.clientX;\n this.startY = e.clientY;\n this.sourceCell = headerCell;\n this.sourceRowIndex = rowIndex;\n this.sourceColumnIndex = columnIndex;\n this.sourceColumn = column;\n this.sourceIsChild = isChild;\n this.sourceGroupName = groupName;\n\n // 阻止默认行为,防止触发文本选中\n e.preventDefault();\n \n // 延迟100ms开始拖拽,避免双击时触发\n this.startPendingDragTracking(e);\n this.dragDelayTimer = window.setTimeout(() => {\n this.dragDelayTimer = undefined;\n const clientX = this.pendingDragClientX;\n const clientY = this.pendingDragClientY;\n this.stopPendingDragTracking();\n this.startDrag(clientX, clientY);\n }, 100);\n \n // 监听 mouseup,如果在延迟期间释放鼠标,取消拖拽\n const cancelDrag = () => {\n if (this.dragDelayTimer) {\n clearTimeout(this.dragDelayTimer);\n this.dragDelayTimer = undefined;\n this.stopPendingDragTracking();\n // 清理拖拽状态\n this.sourceCell = null;\n this.sourceColumn = null;\n }\n document.removeEventListener('mouseup', cancelDrag);\n };\n document.addEventListener('mouseup', cancelDrag);\n }\n\n /**\n * 检查是否点击在可交互元素上\n */\n private isInteractiveElement(target: HTMLElement): boolean {\n // 检查元素本身\n const tagName = target.tagName.toLowerCase();\n if (['button', 'a', 'input', 'select', 'textarea'].includes(tagName)) {\n return true;\n }\n \n // 检查是否有特定的类名(如 header-more-icon)\n if (target.classList.contains('header-more-icon')) {\n return true;\n }\n \n // 检查是否有 onclick 事件\n if (target.onclick || target.getAttribute('onclick')) {\n return true;\n }\n \n // 检查父元素是否是可交互元素\n const parent = target.parentElement;\n if (parent && parent !== target.closest('.rgHeaderCell')) {\n const parentTagName = parent.tagName.toLowerCase();\n if (['button', 'a'].includes(parentTagName)) {\n return true;\n }\n if (parent.classList.contains('header-more-icon')) {\n return true;\n }\n }\n \n return false;\n }\n\n /**\n * 检查是否点击在 resize 区域(单元格右边缘)\n */\n private isInResizeZone(e: MouseEvent, cell: HTMLElement): boolean {\n const rect = cell.getBoundingClientRect();\n const resizeZoneWidth = 8; // resize 触发区域宽度\n \n // 检查是否在右边缘\n const isNearRightEdge = e.clientX >= rect.right - resizeZoneWidth;\n \n // 也检查是否点击了 resize 相关的元素\n const target = e.target as HTMLElement;\n const isResizeElement = \n target.classList.contains('resize') ||\n target.classList.contains('resizable') ||\n target.closest('.resize') !== null ||\n target.closest('.header-resize') !== null;\n \n return isNearRightEdge || isResizeElement;\n }\n\n /**\n * 获取 viewport 类型\n */\n private getViewportType(cell: HTMLElement): 'colPinStart' | 'rgCol' | 'colPinEnd' {\n const headerArea = cell.closest('.header-area-colPinStart, .header-area-rgCol, .header-area-colPinEnd');\n if (headerArea) {\n if (headerArea.classList.contains('header-area-colPinStart')) {\n return 'colPinStart';\n }\n if (headerArea.classList.contains('header-area-colPinEnd')) {\n return 'colPinEnd';\n }\n return 'rgCol';\n }\n \n // 默认返回中间区域\n return 'rgCol';\n }\n\n /**\n * 获取列数量缓存(拖拽开始时计算一次,拖拽结束时清除)\n */\n private getColumnCounts(): { pinStart: number; normal: number; pinEnd: number } {\n if (this.cachedColumnCounts) {\n return this.cachedColumnCounts;\n }\n\n const columns = this.revogrid.columns as any[];\n if (!columns) {\n return { pinStart: 0, normal: 0, pinEnd: 0 };\n }\n\n let pinStart = 0;\n let normal = 0;\n let pinEnd = 0;\n \n for (const col of columns) {\n if (col.children) {\n for (const child of col.children) {\n if (child.pin === 'colPinStart') pinStart++;\n else if (child.pin === 'colPinEnd') pinEnd++;\n else normal++;\n }\n } else {\n if (col.pin === 'colPinStart') pinStart++;\n else if (col.pin === 'colPinEnd') pinEnd++;\n else normal++;\n }\n }\n\n this.cachedColumnCounts = { pinStart, normal, pinEnd };\n return this.cachedColumnCounts;\n }\n\n /**\n * 计算全局扁平索引\n * 需要根据 viewport 类型计算偏移量\n */\n private calculateGlobalIndex(localIndex: number, viewportType: 'colPinStart' | 'rgCol' | 'colPinEnd'): number {\n const counts = this.getColumnCounts();\n\n if (viewportType === 'colPinStart') {\n return localIndex;\n } else if (viewportType === 'rgCol') {\n return counts.pinStart + localIndex;\n } else {\n return counts.pinStart + counts.normal + localIndex;\n }\n }\n\n /**\n * 解析表头单元格信息\n */\n private parseHeaderCell(cell: HTMLElement): {\n column: ColumnRegular;\n rowIndex: number;\n columnIndex: number;\n isChild: boolean;\n groupName?: string;\n } | null {\n const colIndexAttr = cell.getAttribute('data-rgcol');\n const localIndex = colIndexAttr ? parseInt(colIndexAttr, 10) : -1;\n \n // 获取 viewport 类型并计算全局索引\n const viewportType = this.getViewportType(cell);\n const columnIndex = this.calculateGlobalIndex(localIndex, viewportType);\n \n // 判断是否是分组行(第一行)还是子列行(第二行)\n const isGroupRow = cell.closest('.group-rgRow') !== null;\n const rowIndex = isGroupRow ? 0 : 1;\n \n // 判断是否是子列(在第二行且有父分组)\n const hasParent = this.hasParentGroup(cell);\n const isChild = !isGroupRow && hasParent;\n \n // 获取分组名\n let groupName: string | undefined;\n if (isChild) {\n groupName = this.getParentGroupName(cell);\n } else if (this.isGroupHeader(cell)) {\n groupName = cell.querySelector('.header-content')?.textContent || undefined;\n }\n\n // 尝试从 revogrid 获取真实的列配置\n const column = this.getColumnByFlatIndex(columnIndex) || {\n prop: colIndexAttr || String(columnIndex),\n name: cell.querySelector('.header-content')?.textContent || '',\n } as ColumnRegular;\n\n return { column, rowIndex, columnIndex, isChild, groupName };\n }\n\n /**\n * 根据扁平索引获取真实的列配置\n */\n private getColumnByFlatIndex(flatIndex: number): ColumnRegular | null {\n const columns = this.revogrid.columns as any[];\n if (!columns) return null;\n\n let currentIndex = 0;\n for (const col of columns) {\n if (col.children) {\n for (const child of col.children) {\n if (currentIndex === flatIndex) {\n return child;\n }\n currentIndex++;\n }\n } else {\n if (currentIndex === flatIndex) {\n return col;\n }\n currentIndex++;\n }\n }\n return null;\n }\n\n /**\n * 判断单元格是否有父分组(是否是分组的子列)\n * 从 DOM 结构看:\n * - group-rgRow: 包含分组头和普通列(第一行)\n * - header-rgRow actual-rgRow: 包含子列(第二行)\n */\n private hasParentGroup(cell: HTMLElement): boolean {\n // 检查是否在第二行(actual-rgRow)且不在 group-rgRow 中\n const isInActualRow = cell.closest('.actual-rgRow') !== null;\n const isInGroupRow = cell.closest('.group-rgRow') !== null;\n return isInActualRow && !isInGroupRow;\n }\n\n /**\n * 判断单元格是否是分组头\n * 从 DOM 结构看:\n * - 分组头在 group-rgRow 中,但没有 merged-header 类\n * - 普通列在 group-rgRow 中,有 merged-header 类\n * - 或者检查是否在 header-rgRow.group 中\n * - 特殊情况:当没有分组时(groupingDepth === 0),所有列都在 group-rgRow 中且没有 merged-header 类,但它们不是分组头\n */\n private isGroupHeader(cell: HTMLElement): boolean {\n // 必须在 group-rgRow 中\n if (!cell.closest('.group-rgRow')) {\n return false;\n }\n \n // 检查是否有 grouping-depth 属性(表示有分组)\n const groupingDepth = cell.getAttribute('data-grouping-depth');\n const hasGrouping = groupingDepth && parseInt(groupingDepth, 10) > 0;\n \n // 如果没有分组,则不是分组头\n if (!hasGrouping) {\n return false;\n }\n \n // 没有 merged-header 类就是分组头\n if (!cell.classList.contains('merged-header')) {\n return true;\n }\n \n // 或者 colspan > 1\n const colspan = cell.getAttribute('colspan') || cell.getAttribute('aria-colspan');\n return colspan ? parseInt(colspan, 10) > 1 : false;\n }\n\n /**\n * 获取父分组名称\n * 从 DOM 结构看,子列在 actual-rgRow 中,分组头在 group-rgRow 中\n * 需要根据子列的位置找到对应的分组头\n */\n private getParentGroupName(cell: HTMLElement): string | undefined {\n // 获取子列的位置信息\n const cellRect = cell.getBoundingClientRect();\n const cellCenterX = cellRect.left + cellRect.width / 2;\n \n // 从当前单元格向上查找 header-wrapper,然后找 group-rgRow\n const headerWrapper = cell.closest('.header-wrapper');\n if (!headerWrapper) return undefined;\n \n const groupRow = headerWrapper.querySelector('.group-rgRow');\n if (!groupRow) return undefined;\n \n // 查找 group-rgRow 中不是 merged-header 的单元格(即分组头)\n // 或者查找 header-rgRow.group 中的单元格\n const headerGroupRow = headerWrapper.querySelector('.header-rgRow.group');\n if (headerGroupRow) {\n const groupHeaders = Array.from(headerGroupRow.querySelectorAll('.rgHeaderCell'));\n for (const header of groupHeaders) {\n const headerRect = header.getBoundingClientRect();\n // 检查子列是否在这个分组头的水平范围内\n if (cellCenterX >= headerRect.left && cellCenterX <= headerRect.right) {\n return header.querySelector('.header-content')?.textContent || undefined;\n }\n }\n }\n \n // 备用方案:在 group-rgRow 中查找覆盖当前位置的单元格\n const allHeaders = Array.from(groupRow.querySelectorAll('.rgHeaderCell'));\n for (const header of allHeaders) {\n const headerRect = header.getBoundingClientRect();\n // 检查子列是否在这个表头的水平范围内\n if (cellCenterX >= headerRect.left && cellCenterX <= headerRect.right) {\n // 检查这个表头是否是分组头(不是 merged-header 或者宽度较大)\n const headerText = header.querySelector('.header-content')?.textContent;\n if (headerText) {\n return headerText;\n }\n }\n }\n \n return undefined;\n }\n\n private startPendingDragTracking(e: MouseEvent) {\n this.pendingDragClientX = e.clientX;\n this.pendingDragClientY = e.clientY;\n this.stopPendingDragTracking();\n\n this.pendingDragMoveListener = (moveEvent: MouseEvent) => {\n this.pendingDragClientX = moveEvent.clientX;\n this.pendingDragClientY = moveEvent.clientY;\n };\n\n document.addEventListener('mousemove', this.pendingDragMoveListener, true);\n }\n\n private stopPendingDragTracking() {\n if (!this.pendingDragMoveListener) return;\n document.removeEventListener('mousemove', this.pendingDragMoveListener, true);\n this.pendingDragMoveListener = undefined;\n }\n\n private onPrepareMove = (e: MouseEvent) => {\n if (!this.isPreparing || !this.sourceCell) return;\n\n const deltaX = Math.abs(e.clientX - this.startX);\n const deltaY = Math.abs(e.clientY - this.startY);\n\n if (deltaX > DRAG_THRESHOLD || deltaY > DRAG_THRESHOLD) {\n this.startDrag(e.clientX, e.clientY);\n }\n };\n\n private onPrepareUp = () => {\n this.cancelPrepare();\n };\n\n private onContextMenu = (e: MouseEvent) => {\n // 右键点击时取消准备状态\n e.preventDefault();\n this.cancelPrepare();\n };\n\n private cancelPrepare() {\n this.isPreparing = false;\n this.sourceCell = null;\n document.removeEventListener('mousemove', this.onPrepareMove);\n document.removeEventListener('mouseup', this.onPrepareUp);\n document.removeEventListener('contextmenu', this.onContextMenu);\n }\n\n private startDrag(clientX: number, clientY: number) {\n if (!this.sourceCell || !this.sourceColumn) return;\n this.stopPendingDragTracking();\n\n // 在加拖拽 class 前先取位置,保证按下瞬间视觉位置不跳\n const sourceRect = this.sourceCell.getBoundingClientRect();\n\n this.isDragging = true;\n this.revogrid.classList.add('custom-column-drag-active');\n // 添加类名禁用单元格动画\n this.revogrid.classList.add('column-drag-start');\n // 清理 resize 插件的 hover 句柄线,避免与列拖拽定位线叠加\n this.revogrid.querySelectorAll('.resize-handle-hover').forEach(el => {\n el.classList.remove('resize-handle-hover');\n });\n\n // 禁止拖拽时选中文本\n document.body.style.userSelect = 'none';\n\n // 计算鼠标相对于源单元格的偏移量\n this.dragOffsetX = clientX - sourceRect.left;\n this.dragOffsetY = clientY - sourceRect.top;\n\n this.createDragGhost(sourceRect);\n this.createDropIndicator();\n\n document.addEventListener('mousemove', this.onMouseMove);\n document.addEventListener('mouseup', this.onMouseUp);\n document.addEventListener('contextmenu', this.onContextMenuDrag);\n }\n\n private createDragGhost(sourceRect: DOMRect) {\n if (!this.sourceCell) return;\n\n const sourceCellStyle = window.getComputedStyle(this.sourceCell);\n const sourceContentEl = this.sourceCell.querySelector('.header-content') as HTMLElement | null;\n const sourceContentStyle = sourceContentEl ? window.getComputedStyle(sourceContentEl) : null;\n const content = sourceContentEl?.textContent || '';\n const sourceTextAlign = sourceContentStyle?.textAlign || sourceCellStyle.textAlign;\n const textAlign = sourceTextAlign === 'start' ? 'left' : sourceTextAlign === 'end' ? 'right' : sourceTextAlign;\n const justifyContent = textAlign === 'center' ? 'center' : textAlign === 'right' ? 'flex-end' : 'flex-start';\n const lineHeight =\n sourceContentStyle?.lineHeight && sourceContentStyle.lineHeight !== 'normal'\n ? sourceContentStyle.lineHeight\n : 'normal';\n \n const letterSpacing = sourceContentStyle?.letterSpacing || sourceCellStyle.letterSpacing;\n const fontFamily = sourceContentStyle?.fontFamily || sourceCellStyle.fontFamily;\n const fontWeight = sourceContentStyle?.fontWeight || sourceCellStyle.fontWeight;\n const getPaddingValues = (style: CSSStyleDeclaration) => [\n style.paddingTop,\n style.paddingRight,\n style.paddingBottom,\n style.paddingLeft,\n ];\n const hasNonZeroPadding = (values: string[]) => values.some(v => parseFloat(v) > 0);\n const contentWrapperEl =\n (sourceContentEl?.querySelector('.header-content-wrapper') as HTMLElement | null) || null;\n const contentWrapperPaddingValues = contentWrapperEl\n ? getPaddingValues(window.getComputedStyle(contentWrapperEl))\n : null;\n const contentPaddingValues = sourceContentStyle ? getPaddingValues(sourceContentStyle) : null;\n const cellPaddingValues = getPaddingValues(sourceCellStyle);\n const paddingValues =\n contentWrapperPaddingValues && hasNonZeroPadding(contentWrapperPaddingValues)\n ? contentWrapperPaddingValues\n : contentPaddingValues && hasNonZeroPadding(contentPaddingValues)\n ? contentPaddingValues\n : hasNonZeroPadding(cellPaddingValues)\n ? cellPaddingValues\n : ['0px', '9px', '0px', '9px'];\n const padding = `${paddingValues[0]} ${paddingValues[1]} ${paddingValues[2]} ${paddingValues[3]}`;\n\n this.dragGhost = document.createElement('div');\n this.dragGhost.className = 'rv-grid-heading-drag-ghost';\n this.dragGhost.style.cssText = `\n position: fixed;\n left: ${sourceRect.left + 1}px;\n top: ${sourceRect.top}px;\n width: ${sourceRect.width}px;\n height: ${sourceRect.height}px;\n margin: 0;\n transform: none;\n display: flex;\n align-items: center;\n justify-content: ${justifyContent};\n line-height: ${lineHeight};\n padding: ${padding};\n pointer-events: none;\n z-index: 1000;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n box-sizing: border-box;\n font-size: 13px;\n font-family: ${fontFamily};\n font-weight: ${fontWeight};\n letter-spacing: ${letterSpacing};\n text-align: ${textAlign};\n text-transform: ${sourceCellStyle.textTransform};\n direction: ${sourceCellStyle.direction};\n `;\n\n const ghostText = document.createElement('span');\n ghostText.textContent = content;\n ghostText.style.cssText = `\n display: block;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n this.dragGhost.appendChild(ghostText);\n\n document.body.appendChild(this.dragGhost);\n }\n\n private createDropIndicator() {\n this.dropIndicator = document.createElement('div');\n this.dropIndicator.className = 'custom-drop-indicator';\n this.dropIndicator.style.cssText = `\n position: fixed;\n width: 2px;\n background-color: #0f87ff;\n pointer-events: none;\n z-index: 999;\n display: none;\n `;\n document.body.appendChild(this.dropIndicator);\n }\n\n private onMouseMove = (e: MouseEvent) => {\n if (!this.isDragging) return;\n\n // 更新浮动副本位置(保持鼠标相对于ghost的位置不变)\n if (this.dragGhost) {\n this.dragGhost.style.left = `${e.clientX - this.dragOffsetX}px`;\n this.dragGhost.style.top = `${e.clientY - this.dragOffsetY}px`;\n }\n\n // 查找目标列\n const target = this.getTargetFromPoint(e.clientX, e.clientY);\n \n if (target && target !== this.sourceCell) {\n this.currentDropTarget = target;\n \n // 解析目标信息\n const targetInfo = this.parseHeaderCell(target);\n if (targetInfo) {\n // 判断目标类型\n if (targetInfo.isChild) {\n this.targetType = 'child';\n this.targetGroupName = targetInfo.groupName;\n } else if (this.isGroupHeader(target)) {\n this.targetType = 'group';\n this.targetGroupName = targetInfo.groupName;\n } else {\n this.targetType = 'normal';\n this.targetGroupName = undefined;\n }\n }\n \n // 计算定位线位置\n const targetRect = target.getBoundingClientRect();\n const midX = targetRect.left + targetRect.width / 2;\n let dropPosition: 'left' | 'right' = e.clientX < midX ? 'left' : 'right';\n \n // 检查是否试图拖到不可放置列之前\n if (targetInfo && dropPosition === 'left' && this.cannotDropBefore) {\n if (this.cannotDropBefore(targetInfo.column)) {\n // 不允许拖到该列左侧,隐藏指示线\n this.hideDropIndicator();\n this.currentDropTarget = null;\n return;\n }\n }\n \n this.dropPosition = dropPosition;\n \n // 更新定位线 - 高度只在目标单元格范围内\n this.updateDropIndicator(target, this.dropPosition);\n } else {\n this.hideDropIndicator();\n this.currentDropTarget = null;\n }\n };\n\n private updateDropIndicator(target: HTMLElement, position: 'left' | 'right') {\n if (!this.dropIndicator) return;\n\n const targetRect = target.getBoundingClientRect();\n \n // 定位线位置和高度只在目标单元格范围内\n const indicatorX = position === 'left' ? targetRect.left : targetRect.right;\n // 吸附到整像素,避免冻结边界出现半像素渲染导致 2px 线看起来像 1px。\n const indicatorLeft = Math.round(indicatorX - 1);\n this.dropIndicator.style.left = `${indicatorLeft}px`;\n this.dropIndicator.style.top = `${targetRect.top}px`;\n this.dropIndicator.style.height = `${targetRect.height}px`;\n this.dropIndicator.style.display = 'block';\n }\n\n private hideDropIndicator() {\n if (this.dropIndicator) {\n this.dropIndicator.style.display = 'none';\n }\n }\n\n private onMouseUp = (e: MouseEvent) => {\n if (!this.isDragging) return;\n\n // 只响应左键释放\n if (e.button === 0 && this.currentDropTarget && this.sourceColumn) {\n const targetInfo = this.parseHeaderCell(this.currentDropTarget);\n \n if (targetInfo) {\n const details: CustomDragEventDetails = {\n sourceRowIndex: this.sourceRowIndex,\n sourceColumnIndex: this.sourceColumnIndex,\n sourceColumn: this.sourceColumn,\n sourceIsChild: this.sourceIsChild,\n sourceGroupName: this.sourceGroupName,\n targetRowIndex: targetInfo.rowIndex,\n targetColumnIndex: targetInfo.columnIndex,\n targetColumn: targetInfo.column,\n targetType: this.targetType,\n targetGroupName: this.targetGroupName,\n targetChildIndex: this.targetChildIndex,\n dropPosition: this.dropPosition,\n };\n this.onDragUpdate(details);\n }\n }\n\n this.endDrag();\n };\n\n private onContextMenuDrag = (e: MouseEvent) => {\n // 拖拽过程中右键点击,取消拖拽\n if (this.isDragging) {\n e.preventDefault();\n this.endDrag();\n }\n };\n\n private endDrag() {\n this.isDragging = false;\n \n // 恢复文本选中\n document.body.style.userSelect = '';\n \n this.revogrid.classList.remove('custom-column-drag-active');\n \n // 注意:不在这里移除 column-drag-start 类\n // 该类会在 applyColumnMove 完成后移除\n // 如果没有触发 applyColumnMove(位置未改变),则在这里延迟移除\n if (!this.currentDropTarget || this.sourceColumnIndex === -1) {\n setTimeout(() => {\n this.revogrid.classList.remove('column-drag-start');\n }, 50);\n }\n\n if (this.dragGhost) {\n this.dragGhost.remove();\n this.dragGhost = null;\n }\n\n if (this.dropIndicator) {\n this.dropIndicator.remove();\n this.dropIndicator = null;\n }\n\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n document.removeEventListener('contextmenu', this.onContextMenuDrag);\n\n // 重置状态\n this.sourceCell = null;\n this.currentDropTarget = null;\n this.sourceRowIndex = -1;\n this.sourceColumnIndex = -1;\n this.sourceColumn = null;\n this.sourceIsChild = false;\n this.sourceGroupName = undefined;\n this.targetType = 'normal';\n this.targetGroupName = undefined;\n this.targetChildIndex = undefined;\n \n // 清除列数量缓存(列配置可能已变化)\n this.cachedColumnCounts = null;\n\n // 重置拖拽偏移量\n this.dragOffsetX = 0;\n this.dragOffsetY = 0;\n }\n\n private getTargetFromPoint(x: number, y: number): HTMLElement | null {\n const dragGhostVisibility = this.dragGhost?.style.visibility;\n const dropIndicatorVisibility = this.dropIndicator?.style.visibility;\n\n if (this.dragGhost) this.dragGhost.style.visibility = 'hidden';\n if (this.dropIndicator) this.dropIndicator.style.visibility = 'hidden';\n\n const element = document.elementFromPoint(x, y);\n const target = element?.closest('.rgHeaderCell') as HTMLElement | null;\n\n if (this.dragGhost) this.dragGhost.style.visibility = dragGhostVisibility || '';\n if (this.dropIndicator) this.dropIndicator.style.visibility = dropIndicatorVisibility || '';\n\n return target;\n }\n\n destroy() {\n this.isDestroyed = true;\n \n // 清理初始化定时器\n if (this.initTimeout !== null) {\n clearTimeout(this.initTimeout);\n this.initTimeout = null;\n }\n \n // 清理拖拽延迟定时器\n if (this.dragDelayTimer) {\n clearTimeout(this.dragDelayTimer);\n this.dragDelayTimer = undefined;\n }\n this.stopPendingDragTracking();\n \n this.endDrag();\n this.revogrid.removeEventListener('mousedown', this.boundMouseDown, true);\n }\n}\n","/**\n * 列移动辅助函数\n * 处理分组列的移动逻辑,支持冻结列\n */\nimport type { ColumnRegular, ColumnGrouping } from '@type';\nimport type { CustomDragEventDetails } from './types';\nimport { ColumnStretchPlugin } from '../column-stretch.plugin';\nimport { convertCollectionToColumns, getStretchColumnOptions, mergeAdjacentGroups } from '../../utils/column.utils';\n\n// 冻结类型\ntype PinType = 'colPinStart' | 'colPinEnd' | undefined;\n\n/**\n * 深拷贝列配置(保留函数属性)\n */\nfunction deepCloneColumns(cols: (ColumnRegular | ColumnGrouping)[]): (ColumnRegular | ColumnGrouping)[] {\n return cols.map(col => {\n const colAny = col as any;\n if (colAny.children) {\n return {\n ...col,\n children: deepCloneColumns(colAny.children),\n } as ColumnGrouping;\n }\n return { ...col } as ColumnRegular;\n });\n}\n\n// 列信息类型\ninterface ColumnInfo {\n column: ColumnRegular;\n parentIndex: number;\n childIndex: number;\n isChild: boolean;\n pin?: PinType;\n parentGroup?: ColumnGrouping; // 如果是子列,保存父分组的引用\n}\n\n// 分组信息类型\ninterface GroupInfo {\n group: ColumnRegular;\n index: number;\n}\n\n/**\n * 扁平化列(获取所有叶子列)\n */\nexport function flattenColumns(cols: (ColumnRegular | ColumnGrouping)[]): ColumnRegular[] {\n const result: ColumnRegular[] = [];\n for (const col of cols) {\n if ((col as any).children) {\n result.push(...(col as any).children);\n } else {\n result.push(col as ColumnRegular);\n }\n }\n return result;\n}\n\n/**\n * 获取列的 pin 类型\n */\nexport function getColumnPin(col: ColumnRegular): PinType {\n const pin = (col as any).pin;\n if (pin === 'colPinStart' || pin === 'colPinEnd') {\n return pin;\n }\n return undefined;\n}\n\n/**\n * 设置列的 pin 类型\n */\nexport function setColumnPin(col: ColumnRegular, pin: PinType): void {\n if (pin) {\n (col as any).pin = pin;\n } else {\n delete (col as any).pin;\n }\n}\n\n/**\n * 根据 prop 找到列\n */\nexport function findColumnByProp(\n cols: (ColumnRegular | ColumnGrouping)[],\n prop: string | number,\n): ColumnInfo | null {\n for (let i = 0; i < cols.length; i++) {\n const col = cols[i] as any;\n if (col.children) {\n // 分组的 pin 取自子列或分组本身\n const groupPin = getColumnPin(col) || getColumnPin(col.children[0]);\n for (let j = 0; j < col.children.length; j++) {\n if (col.children[j].prop === prop) {\n return {\n column: col.children[j],\n parentIndex: i,\n childIndex: j,\n isChild: true,\n pin: getColumnPin(col.children[j]) || groupPin,\n parentGroup: col, // 保存父分组引用\n };\n }\n }\n } else {\n if (col.prop === prop) {\n return {\n column: col,\n parentIndex: i,\n childIndex: -1,\n isChild: false,\n pin: getColumnPin(col),\n };\n }\n }\n }\n return null;\n}\n\n/**\n * 找到分组(通过目标列的 prop 值查找其所属分组)\n */\nexport function findGroup(\n cols: (ColumnRegular | ColumnGrouping)[],\n targetProp: string | number,\n): GroupInfo | null {\n for (let i = 0; i < cols.length; i++) {\n const col = cols[i] as any;\n if (col.children) {\n // 检查分组的子列中是否包含目标 prop\n for (const child of col.children) {\n if (child.prop === targetProp) {\n return { group: col, index: i };\n }\n }\n }\n }\n return null;\n}\n\n/**\n * 获取目标列的 pin(如果拖到不可拖拽列的右侧,则获取右侧列的 pin)\n */\nfunction getTargetPinForMove(\n details: CustomDragEventDetails,\n targetInfo: ColumnInfo,\n newColumns: (ColumnRegular | ColumnGrouping)[],\n): PinType {\n // 如果拖到右侧,且目标列不可调整大小或是选择列,则继承右侧列的 pin\n // 这些列通常设置了 cannotDropBefore,不允许其他列拖到其左侧\n if (details.dropPosition === 'right' && details.targetColumn) {\n const targetCol = details.targetColumn as any;\n const isSpecialColumn = targetCol.rowSelect || targetCol.prop === 'select';\n \n if (isSpecialColumn) {\n // 找到目标列右侧的列\n const flatColumns = flattenColumns(newColumns);\n const targetFlatIndex = flatColumns.findIndex(col => col.prop === details.targetColumn?.prop);\n \n if (targetFlatIndex !== -1 && targetFlatIndex + 1 < flatColumns.length) {\n // 获取右侧列的 pin\n const rightColumn = flatColumns[targetFlatIndex + 1];\n return getColumnPin(rightColumn);\n }\n }\n }\n \n // 默认返回目标列的 pin\n return targetInfo.pin;\n}\n\n/**\n * 执行列移动\n * @param details 拖拽详情\n * @param providers providers 实例,用于获取列配置和保留列宽度\n * @returns 新的列配置,如果移动失败返回 null\n * \n * ⚠️ 不支持移动分组\n * 移动逻辑:\n * 1. 非冻结移动到非冻结: pin不变\n * 2. 非冻结移动到冻结: pin根据目标更新\n * 3. 冻结移动到非冻结: 删除pin\n * 4. 冻结移动到自己: pin不变\n * 5. 冻结移动到另外一个冻结: pin根据目标更新\n * \n * 1. 列移动到列: 新位置插入,旧删\n * 2. 列移动到分组: 分组内插入,旧删\n * 3. 带有分组移动到分组: 分组下的列移动到目标分组下, 分组如果只有一列整个删除,否则只删除源列\n * 4. 带有分组移动到列: 新位置插入分组,分组如果只有一列整个删除,否则只删除源列\n * \n * 步骤:\n * 1. 准备: 当前列是否在分组下、当前列是否分组下的唯一、目标列是否在分组下、拖拽到目标列的左侧还是右侧(dropPosition: left | right)\n * 2. 判断目标是否分组下\n * - 是: 根据 dropPosition 到分组下目标列的左侧或右侧,源列是否分组?\n * - 是: 分组是否只有一个子列?是就删除分组,否则找到分组下并删除列\n * - 否: 删除列\n * - 否: 根据 dropPosition 到目标列的左侧或右侧,源列是否分组?\n * - 是: 分组是否只有一个子列?是就删除分组,否则找到分组下并删除列\n * - 否: 删除列,此处查找原列会有问题。当目标列是在原列的左侧,就删除第二同名列,否则删除第一个同名列\n * 3. 移动过去的列的pin值直接继承目标列的pin\n */\nexport function moveColumn(\n details: CustomDragEventDetails,\n providers: any,\n): (ColumnRegular | ColumnGrouping)[] | null {\n const {\n sourceColumn,\n targetColumn,\n targetType,\n dropPosition,\n } = details;\n\n // 从 convertCollectionToColumns 获取当前列配置\n const stretchPlugin = providers?.plugins?.getByClass?.(ColumnStretchPlugin);\n const options = getStretchColumnOptions(providers, stretchPlugin);\n const currentColumns = convertCollectionToColumns(providers, options);\n\n // 深拷贝列配置(保留函数属性)\n const newColumns = deepCloneColumns(currentColumns);\n\n // ========== 步骤1: 准备阶段 ==========\n // 根据 prop 获取源列信息\n const sourceInfo = findColumnByProp(newColumns, sourceColumn.prop);\n if (!sourceInfo) {\n console.error('[moveColumn] 找不到源列:', sourceColumn.prop);\n return null;\n }\n\n // 根据 prop 获取目标列信息\n let targetInfo: ColumnInfo | null = null;\n if (targetColumn) {\n targetInfo = findColumnByProp(newColumns, targetColumn.prop);\n if (!targetInfo) {\n console.error('[moveColumn] 找不到目标列:', targetColumn.prop);\n return null;\n }\n }\n\n // 当前列是否在分组下(从 findColumnByProp 中获取)\n const sourceIsInGroup = sourceInfo.isChild;\n \n // 当前列是否是分组下的唯一子列\n let sourceIsOnlyChildInGroup = false;\n if (sourceIsInGroup && sourceInfo.parentGroup) {\n const parentGroup = sourceInfo.parentGroup as any;\n sourceIsOnlyChildInGroup = parentGroup.children && parentGroup.children.length === 1;\n }\n\n // 目标列是否在分组下(从 findColumnByProp 中获取)\n const targetIsInGroup = targetInfo?.isChild || false;\n\n // 获取目标的 pin 类型(用于更新源列的 pin)\n // 如果需要继承右侧列的 pin,则获取右侧列的 pin\n const targetPin = getTargetPinForMove(details, targetInfo!, newColumns);\n\n // ========== 步骤2: 根据目标类型执行移动 ==========\n \n // 2.1 目标是分组下的子列\n if (targetType === 'child' && targetIsInGroup && targetInfo) {\n // 找到目标分组(通过目标列的 prop 查找)\n const targetGroup = findGroup(newColumns, targetColumn!.prop);\n if (!targetGroup) {\n console.error('[moveColumn] 找不到目标分组');\n return null;\n }\n\n // 计算插入位置(根据 dropPosition)\n let insertIndex = targetInfo.childIndex;\n if (dropPosition === 'right') {\n insertIndex++;\n }\n\n // 源列是否在分组下\n if (sourceIsInGroup) {\n // 源列在分组下\n if (sourceIsOnlyChildInGroup) {\n // 分组只有一个子列:删除整个分组\n const removedGroup = newColumns.splice(sourceInfo.parentIndex, 1)[0] as any;\n const movedColumn = removedGroup.children[0];\n \n // 更新 pin\n setColumnPin(movedColumn, targetPin);\n \n // 插入到目标分组\n (targetGroup.group as any).children.splice(insertIndex, 0, movedColumn);\n } else {\n // 分组有多个子列:只删除源列\n const movedColumn = (sourceInfo.parentGroup as any).children.splice(sourceInfo.childIndex, 1)[0];\n \n // 更新 pin\n setColumnPin(movedColumn, targetPin);\n \n // 如果源列和目标列在同一个分组,需要调整插入位置\n if (sourceInfo.parentIndex === targetInfo.parentIndex && sourceInfo.childIndex < targetInfo.childIndex) {\n insertIndex--;\n }\n \n // 插入到目标分组\n (targetGroup.group as any).children.splice(insertIndex, 0, movedColumn);\n }\n } else {\n // 源列不在分组下:直接删除列\n const movedColumn = newColumns.splice(sourceInfo.parentIndex, 1)[0] as ColumnRegular;\n \n // 更新 pin\n setColumnPin(movedColumn, targetPin);\n \n // 插入到目标分组\n (targetGroup.group as any).children.splice(insertIndex, 0, movedColumn);\n }\n }\n // 2.2 目标是分组头\n else if (targetType === 'group') {\n // 找到目标分组(通过目标列的 prop 查找)\n const targetGroup = findGroup(newColumns, targetColumn!.prop);\n if (!targetGroup) {\n console.error('[moveColumn] 找不到目标分组');\n return null;\n }\n\n // 计算插入位置(在分组外面)\n let insertIndex = targetGroup.index;\n if (dropPosition === 'right') {\n insertIndex++;\n }\n\n // 源列是否在分组下\n if (sourceIsInGroup) {\n // 源列在分组下\n if (sourceIsOnlyChildInGroup) {\n // 分组只有一个子列:删除整个分组\n const removedGroup = newColumns.splice(sourceInfo.parentIndex, 1)[0];\n \n // 调整插入位置\n if (sourceInfo.parentIndex < targetGroup.index) {\n insertIndex--;\n }\n \n // 更新分组和子列的 pin\n setColumnPin(removedGroup as ColumnRegular, targetPin);\n const removedGroupAny = removedGroup as any;\n if (removedGroupAny.children) {\n for (const child of removedGroupAny.children) {\n setColumnPin(child, targetPin);\n }\n }\n \n // 插入到目标分组旁边\n newColumns.splice(insertIndex, 0, removedGroup);\n } else {\n // 分组有多个子列:只删除源列\n const movedColumn = (sourceInfo.parentGroup as any).children.splice(sourceInfo.childIndex, 1)[0];\n \n // 更新 pin\n setColumnPin(movedColumn, targetPin);\n \n // 插入到目标分组旁边\n newColumns.splice(insertIndex, 0, movedColumn);\n }\n } else {\n // 源列不在分组下:直接删除列\n const movedColumn = newColumns.splice(sourceInfo.parentIndex, 1)[0] as ColumnRegular;\n \n // 调整插入位置\n if (sourceInfo.parentIndex < targetGroup.index) {\n insertIndex--;\n }\n \n // 更新 pin\n setColumnPin(movedColumn, targetPin);\n \n // 插入到目标分组旁边\n newColumns.splice(insertIndex, 0, movedColumn);\n }\n }\n // 2.3 目标是普通列(不在分组下)\n else if (targetInfo) {\n // 计算插入位置\n let insertIndex = targetInfo.parentIndex;\n if (dropPosition === 'right') {\n insertIndex++;\n }\n\n // 源列是否在分组下\n if (sourceIsInGroup) {\n // 源列在分组下\n if (sourceIsOnlyChildInGroup) {\n // 分组只有一个子列:删除整个分组\n const removedGroup = newColumns.splice(sourceInfo.parentIndex, 1)[0];\n \n // 调整插入位置\n if (sourceInfo.parentIndex < targetInfo.parentIndex) {\n insertIndex--;\n }\n \n // 更新分组和子列的 pin\n setColumnPin(removedGroup as ColumnRegular, targetPin);\n const removedGroupAny = removedGroup as any;\n if (removedGroupAny.children) {\n for (const child of removedGroupAny.children) {\n setColumnPin(child, targetPin);\n }\n }\n \n // 插入到目标列旁边\n newColumns.splice(insertIndex, 0, removedGroup);\n } else {\n // 分组有多个子列:只删除源列\n const movedColumn = (sourceInfo.parentGroup as any).children.splice(sourceInfo.childIndex, 1)[0];\n \n // 更新 pin\n setColumnPin(movedColumn, targetPin);\n \n // 插入到目标列旁边\n newColumns.splice(insertIndex, 0, movedColumn);\n }\n } else {\n // 源列不在分组下:直接删除列\n // 注意:此处需要先插入再删除,避免同名列删除错误\n const movedColumn = { ...newColumns[sourceInfo.parentIndex] } as ColumnRegular;\n \n // 更新 pin\n setColumnPin(movedColumn, targetPin);\n \n // 先插入到目标位置\n newColumns.splice(insertIndex, 0, movedColumn);\n \n // 再删除源列\n // 如果目标在源列左侧,插入后源列索引会+1,删除第二个同名列\n // 如果目标在源列右侧,插入不影响源列索引,删除第一个同名列\n let removeIndex = sourceInfo.parentIndex;\n if (insertIndex <= sourceInfo.parentIndex) {\n removeIndex++;\n }\n newColumns.splice(removeIndex, 1);\n }\n }\n\n // 合并相邻的同名编组\n mergeAdjacentGroups(newColumns);\n\n return newColumns;\n}\n","/**\n * 自定义列拖拽插件\n * 支持分组列的拖拽和重新排序\n */\nimport { BasePlugin } from '../base.plugin';\nimport { DragHandler } from './drag.handler';\nimport { dispatch } from '../dispatcher';\nimport { moveColumn } from './column-move.helper';\nimport type { PluginProviders, ColumnRegular } from '@type';\nimport type { CustomDragEventDetails, CustomColumnDragConfig, DraggableColumn } from './types';\n\nconst DRAG_START = 'columndragstart';\nconst DRAG_END = 'columndragend';\nconst BEFORE_DRAG_END = 'beforecolumndragend';\n\nexport type { CustomDragEventDetails, CustomColumnDragConfig, DraggableColumn };\n\nexport class CustomColumnDragPlugin extends BasePlugin {\n private config: Required<\n Omit<CustomColumnDragConfig, 'canDrag' | 'cannotDropBefore' | 'onDragStart' | 'onDragEnd'>\n > &\n Pick<CustomColumnDragConfig, 'canDrag' | 'cannotDropBefore' | 'onDragStart' | 'onDragEnd'>;\n private dragHandler: DragHandler | null = null;\n\n constructor(\n revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n config?: CustomColumnDragConfig,\n ) {\n super(revogrid, providers);\n\n this.config = {\n enabled: true,\n autoApply: true, // 默认自动应用列移动\n ...config,\n };\n\n if (!this.config.enabled) {\n return;\n }\n\n this.dragHandler = new DragHandler(\n revogrid,\n this.canDragColumn.bind(this),\n this.onDragUpdate.bind(this),\n this.config.cannotDropBefore,\n );\n\n this.init();\n }\n\n private init() {\n this.revogrid.classList.add('custom-column-draggable');\n }\n\n /**\n * 检查列是否可以拖拽\n */\n private canDragColumn(\n column: ColumnRegular,\n rowIndex: number,\n columnIndex: number,\n ): boolean {\n // 检查列配置的 draggable 属性\n const draggableColumn = column as DraggableColumn;\n if (draggableColumn.draggable === false) {\n return false;\n }\n\n // 默认:不允许拖拽分组头\n if ((column as any).children) {\n return false;\n }\n\n // 自定义拖拽权限检查\n if (this.config.canDrag) {\n return this.config.canDrag(column, rowIndex, columnIndex);\n }\n\n return true;\n }\n\n /**\n * 拖拽更新回调\n */\n private onDragUpdate(details: CustomDragEventDetails) {\n\n /**\n * 不需要处理的情况\n * 1. sourceRowIndex 和 targetRowIndex 相同 且 sourceColumnIndex 和 targetColumnIndex 相同\n * 2. 目标列和原列的prop一样(同一列,不管是否跨表头行)\n */\n if (\n (\n details.sourceRowIndex === details.targetRowIndex &&\n details.sourceColumnIndex === details.targetColumnIndex\n ) ||\n details.sourceColumn.prop === details.targetColumn?.prop\n ) {\n return;\n }\n\n // 触发开始事件\n const { defaultPrevented: stopDragStart } = dispatch(\n this.revogrid,\n DRAG_START,\n details,\n );\n\n if (stopDragStart) {\n return;\n }\n\n // 调用 onDragStart 回调\n if (this.config.onDragStart) {\n this.config.onDragStart(details);\n }\n\n // 检查是否允许放置\n const { defaultPrevented: stopDragEnd } = dispatch(\n this.revogrid,\n BEFORE_DRAG_END,\n details,\n );\n\n if (stopDragEnd) {\n return;\n }\n\n // 如果启用了自动应用,执行列移动\n if (this.config.autoApply) {\n this.applyColumnMove(details);\n }\n\n // 触发结束事件\n dispatch(this.revogrid, DRAG_END, details);\n\n // 调用 onDragEnd 回调\n if (this.config.onDragEnd) {\n this.config.onDragEnd(details);\n }\n }\n\n /**\n * 应用列移动\n */\n private async applyColumnMove(details: CustomDragEventDetails) {\n // 动态获取最新的 providers(确保已初始化)\n const providers = await this.revogrid.getProviders();\n\n // 执行列移动,从 providers 获取当前列配置\n const newColumns = moveColumn(details, providers);\n if (!newColumns) {\n return;\n }\n\n // 确保禁用动画的类名存在\n this.revogrid.classList.add('column-drag-start');\n\n // 更新列配置,列宽度已经保存在 size 属性中\n this.revogrid.columns = newColumns;\n\n // 等待足够长的时间确保DOM完全更新和渲染完成\n await new Promise(resolve => {\n // 等待3帧 + 额外延迟\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setTimeout(resolve, 200);\n });\n });\n });\n });\n\n // 移除禁用动画的类\n this.revogrid.classList.remove('column-drag-start');\n }\n\n /**\n * 手动执行列移动(供外部调用)\n */\n public async moveColumn(details: CustomDragEventDetails): Promise<boolean> {\n // 动态获取最新的 providers(确保已初始化)\n const providers = await this.revogrid.getProviders();\n\n // 执行列移动,从 providers 获取当前列配置\n const newColumns = moveColumn(details, providers);\n \n if (!newColumns) {\n return false;\n }\n\n // 更新列配置,列宽度已经保存在 size 属性中\n this.revogrid.columns = newColumns;\n return true;\n }\n\n /**\n * 动态更新配置\n */\n updateConfig(config: Partial<CustomColumnDragConfig>) {\n this.config = { ...this.config, ...config };\n }\n\n destroy() {\n this.dragHandler?.destroy();\n this.revogrid.classList.remove('custom-column-draggable');\n super.destroy();\n }\n}\n","/**\n * Grid 初始化配置工具\n * 提供配置化的方式来设置 RevoGrid 的常用插件\n */\nimport { ColumnStretchPlugin, ColumnStretchConfig } from './column-stretch.plugin';\nimport { ResizeIndicatorPlugin } from './resize-indicator.plugin';\nimport { CustomColumnDragPlugin, CustomColumnDragConfig } from './customColumnDrag/custom-column-drag.plugin';\nimport type { PluginProviders } from '@type';\n\n/**\n * Grid 初始化配置\n */\nexport interface GridSetupConfig {\n /** 列拉伸配置 */\n stretch?: ColumnStretchConfig & {\n /** 是否启用,默认 true */\n enabled?: boolean;\n };\n \n /** 列拖拽配置 */\n drag?: CustomColumnDragConfig;\n \n /** 是否启用 resize 指示器,默认 true */\n resizeIndicator?: boolean;\n \n /** 额外的插件 */\n extraPlugins?: any[];\n}\n\n/**\n * 创建自定义的 ColumnStretchPlugin\n * 支持隐藏滚动条时不预留空间\n */\nexport function createStretchPlugin(config: GridSetupConfig['stretch'] = {}): typeof ColumnStretchPlugin | null {\n const { enabled = true, ...stretchConfig } = config;\n \n if (!enabled) {\n return null;\n }\n\n // 使用命名类避免匿名类导出问题\n class ConfiguredStretchPlugin extends ColumnStretchPlugin {\n constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders) {\n super(revogrid, providers, stretchConfig);\n }\n }\n \n return ConfiguredStretchPlugin;\n}\n\n/**\n * 初始化 Grid 插件\n * \n * @example\n * ```ts\n * // 基础用法\n * setupGrid(grid, {\n * stretch: { stretchColumn: 'taskName', minWidth: 100 },\n * drag: { enabled: true, autoApply: true },\n * });\n * \n * // 带回调\n * setupGrid(grid, {\n * drag: {\n * enabled: true,\n * onDragEnd: (details) => console.log('拖拽完成', details),\n * },\n * });\n * ```\n */\nexport function setupGrid(\n grid: HTMLRevoGridElement,\n config: GridSetupConfig = {},\n): { destroy: () => void } {\n const {\n stretch = { enabled: true, stretchColumn: 'last' },\n drag,\n resizeIndicator = true,\n extraPlugins = [],\n } = config;\n\n const plugins: any[] = [];\n let dragPluginInstance: CustomColumnDragPlugin | null = null;\n let isDestroyed = false;\n\n // 添加 ResizeIndicatorPlugin\n if (resizeIndicator) {\n plugins.push(ResizeIndicatorPlugin);\n }\n\n // 添加 ColumnStretchPlugin\n const StretchPlugin = createStretchPlugin(stretch);\n if (StretchPlugin) {\n plugins.push(StretchPlugin);\n }\n\n // 添加额外插件\n if (extraPlugins.length > 0) {\n plugins.push(...extraPlugins);\n }\n\n // 设置插件\n if (plugins.length > 0) {\n grid.plugins = plugins;\n }\n\n // 禁用官方列移动(如果启用了自定义拖拽)\n if (drag?.enabled) {\n grid.canMoveColumns = false;\n }\n\n // 初始化拖拽插件(需要等 grid 渲染完成)\n if (drag?.enabled) {\n const initDragPlugin = () => {\n if (isDestroyed) return;\n \n const providers = {\n column: (grid as any).columnService,\n dimension: (grid as any).dimensionService,\n } as PluginProviders;\n\n dragPluginInstance = new CustomColumnDragPlugin(grid, providers, drag);\n };\n\n // 监听 aftergridrender 事件\n grid.addEventListener('aftergridrender', initDragPlugin, { once: true });\n }\n\n // 返回销毁函数\n return {\n destroy() {\n isDestroyed = true;\n dragPluginInstance?.destroy();\n dragPluginInstance = null;\n },\n };\n}\n\n/**\n * 快捷方式:创建任务表格配置\n * 预设了常用的任务管理表格配置\n */\nexport function setupTaskGrid(\n grid: HTMLRevoGridElement,\n options?: {\n stretchColumn?: string;\n onDragEnd?: (details: any) => void;\n cannotDropBefore?: (column: any) => boolean;\n extraPlugins?: any[];\n },\n) {\n const { stretchColumn = 'taskName', onDragEnd, cannotDropBefore, extraPlugins = [] } = options || {};\n\n return setupGrid(grid, {\n stretch: {\n stretchColumn,\n minWidth: 100,\n },\n drag: {\n enabled: true,\n autoApply: true,\n onDragEnd,\n cannotDropBefore,\n },\n resizeIndicator: true,\n extraPlugins,\n });\n}\n\nexport { ColumnStretchPlugin, ResizeIndicatorPlugin, CustomColumnDragPlugin };\nexport type { CustomColumnDragConfig, ColumnStretchConfig };\n","/**\n * 列隐藏插件\n * 实现表格列的隐藏、显示、插入、删除功能\n */\nimport { BasePlugin } from './base.plugin';\nimport type { PluginProviders, ColumnRegular } from '@type';\n\n/**\n * 深拷贝列配置(保留函数属性)\n */\nfunction deepCloneColumns(cols: ColumnRegular[]): ColumnRegular[] {\n return cols.map(col => {\n const colAny = col as any;\n if (colAny.children) {\n return {\n ...col,\n children: deepCloneColumns(colAny.children),\n } as ColumnRegular;\n }\n return { ...col } as ColumnRegular;\n });\n}\n\nexport interface ColumnHideConfig {\n /** 初始隐藏的列 */\n hiddenColumns?: string | number | (string | number)[];\n /** 拉伸列的 prop(该列宽度不保留,让 ColumnStretchPlugin 重新计算) */\n stretchColumn?: string;\n /** 列隐藏变化回调 */\n onHiddenChange?: (hiddenProps: string[]) => void;\n /** 列插入回调 */\n onColumnInsert?: (column: ColumnRegular, index: number) => void;\n /** 列删除回调 */\n onColumnRemove?: (column: ColumnRegular, index: number) => void;\n}\n\nexport class ColumnHidePlugin extends BasePlugin {\n private config: ColumnHideConfig;\n private hiddenProps: Set<string> = new Set();\n private originalColumns: ColumnRegular[] | null = null;\n\n constructor(\n revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n config: ColumnHideConfig = {},\n ) {\n super(revogrid, providers);\n this.config = config;\n\n // 初始化隐藏列\n if (config.hiddenColumns) {\n this.hideColumns(config.hiddenColumns);\n }\n }\n\n // ==================== 隐藏/显示列 ====================\n\n /**\n * 隐藏列\n */\n hideColumns(columns: string | number | (string | number)[]): void {\n const props = this.normalizeColumnConfig(columns);\n props.forEach(prop => this.hiddenProps.add(prop));\n this.applyHiddenColumns();\n }\n\n /**\n * 显示列\n */\n showColumns(columns: string | number | (string | number)[]): void {\n const props = this.normalizeColumnConfig(columns);\n props.forEach(prop => this.hiddenProps.delete(prop));\n this.applyHiddenColumns();\n }\n\n /**\n * 切换列显示/隐藏状态\n */\n toggleColumns(columns: string | number | (string | number)[]): void {\n const props = this.normalizeColumnConfig(columns);\n props.forEach(prop => {\n if (this.hiddenProps.has(prop)) {\n this.hiddenProps.delete(prop);\n } else {\n this.hiddenProps.add(prop);\n }\n });\n this.applyHiddenColumns();\n }\n\n /**\n * 显示所有列\n */\n showAllColumns(): void {\n this.hiddenProps.clear();\n this.applyHiddenColumns();\n }\n\n /**\n * 获取当前隐藏的列\n */\n getHiddenColumns(): string[] {\n return Array.from(this.hiddenProps);\n }\n\n /**\n * 检查列是否隐藏\n */\n isColumnHidden(prop: string): boolean {\n return this.hiddenProps.has(prop);\n }\n\n /**\n * 将隐藏的列显示在指定列的左侧或右侧\n * @param column 要显示的列的 prop\n * @param target 目标列的 prop\n * @param position 位置:'before' 左侧,'after' 右侧\n */\n showColumnAt(\n column: string,\n target: string,\n position: 'before' | 'after' = 'after',\n ): boolean {\n // 检查列是否被隐藏\n if (!this.hiddenProps.has(column)) {\n console.warn(`[ColumnHidePlugin] 列 \"${column}\" 未被隐藏`);\n return false;\n }\n\n // 检查 originalColumns 是否存在\n if (!this.originalColumns) {\n console.warn('[ColumnHidePlugin] originalColumns 未初始化');\n return false;\n }\n\n // 在 originalColumns 中找到源列和目标列\n const sourceInfo = this.findColumnInOriginal(column);\n const targetInfo = this.findColumnInOriginal(target);\n\n if (!sourceInfo) {\n console.warn(`[ColumnHidePlugin] 找不到源列 \"${column}\"`);\n return false;\n }\n if (!targetInfo) {\n console.warn(`[ColumnHidePlugin] 找不到目标列 \"${target}\"`);\n return false;\n }\n\n // 从原位置移除\n const movedColumn = this.removeColumnFromOriginal(sourceInfo);\n if (!movedColumn) {\n return false;\n }\n\n // 插入到新位置\n this.insertColumnToOriginal(movedColumn, target, position);\n\n // 取消隐藏\n this.hiddenProps.delete(column);\n\n // 应用变更\n this.applyHiddenColumns();\n\n return true;\n }\n\n /**\n * 批量将隐藏的列显示在指定列的左侧或右侧\n */\n showColumnsAt(\n columns: string[],\n target: string,\n position: 'before' | 'after' = 'after',\n ): boolean {\n // 按顺序插入,如果是 after,需要反转顺序\n const orderedColumns = position === 'after' ? [...columns].reverse() : columns;\n \n let success = true;\n for (const col of orderedColumns) {\n if (!this.showColumnAt(col, target, position)) {\n success = false;\n }\n }\n return success;\n }\n\n /**\n * 替换列:将当前列隐藏,同时将隐藏的列显示在当前列的位置\n * @param hiddenColumn 要显示的隐藏列的 prop\n * @param visibleColumn 要隐藏的当前显示列的 prop\n */\n replaceColumn(hiddenColumn: string, visibleColumn: string): boolean {\n // 检查隐藏列是否确实被隐藏\n if (!this.hiddenProps.has(hiddenColumn)) {\n console.warn(`[ColumnHidePlugin] 列 \"${hiddenColumn}\" 未被隐藏`);\n return false;\n }\n\n // 检查显示列是否确实在显示\n if (this.hiddenProps.has(visibleColumn)) {\n console.warn(`[ColumnHidePlugin] 列 \"${visibleColumn}\" 已被隐藏`);\n return false;\n }\n\n // 检查 originalColumns 是否存在\n if (!this.originalColumns) {\n console.warn('[ColumnHidePlugin] originalColumns 未初始化');\n return false;\n }\n\n // 在 originalColumns 中找到两个列\n const hiddenInfo = this.findColumnInOriginal(hiddenColumn);\n const visibleInfo = this.findColumnInOriginal(visibleColumn);\n\n if (!hiddenInfo || !visibleInfo) {\n console.warn('[ColumnHidePlugin] 找不到列');\n return false;\n }\n\n // 先将隐藏列移动到显示列的位置\n const movedColumn = this.removeColumnFromOriginal(hiddenInfo);\n if (!movedColumn) {\n return false;\n }\n\n // 插入到显示列的位置(在它之前)\n this.insertColumnToOriginal(movedColumn, visibleColumn, 'before');\n\n // 更新隐藏状态:显示隐藏列,隐藏显示列\n this.hiddenProps.delete(hiddenColumn);\n this.hiddenProps.add(visibleColumn);\n\n // 应用变更\n this.applyHiddenColumns();\n\n return true;\n }\n\n /**\n * 获取所有列信息(包括隐藏的)\n */\n getAllColumns(): Array<{ prop: string; name: string; hidden: boolean }> {\n if (!this.originalColumns) {\n return [];\n }\n\n const result: Array<{ prop: string; name: string; hidden: boolean }> = [];\n const traverse = (cols: ColumnRegular[]) => {\n for (const col of cols) {\n const colAny = col as any;\n if (colAny.children) {\n traverse(colAny.children);\n } else if (col.prop) {\n result.push({\n prop: col.prop as string,\n name: (col as any).name || col.prop as string,\n hidden: this.hiddenProps.has(col.prop as string),\n });\n }\n }\n };\n traverse(this.originalColumns);\n return result;\n }\n\n // ==================== 插入/删除列 ====================\n\n /**\n * 插入列\n */\n insertColumn(\n column: ColumnRegular,\n target: string | number,\n position: 'before' | 'after' = 'after',\n ): boolean {\n const currentColumns = this.revogrid.columns as ColumnRegular[];\n if (!currentColumns) return false;\n\n const newColumns = deepCloneColumns(currentColumns);\n const targetIndex = this.findColumnIndex(newColumns, target);\n if (targetIndex === -1) return false;\n\n const insertIndex = position === 'before' ? targetIndex : targetIndex + 1;\n newColumns.splice(insertIndex, 0, column);\n\n this.revogrid.columns = newColumns;\n \n // 同步更新 originalColumns\n if (this.originalColumns) {\n const origTargetIndex = this.findColumnIndex(this.originalColumns, target);\n if (origTargetIndex !== -1) {\n const origInsertIndex = position === 'before' ? origTargetIndex : origTargetIndex + 1;\n this.originalColumns.splice(origInsertIndex, 0, { ...column });\n }\n }\n \n this.config.onColumnInsert?.(column, insertIndex);\n\n return true;\n }\n\n /**\n * 批量插入列\n */\n insertColumns(\n columns: ColumnRegular[],\n target: string | number,\n position: 'before' | 'after' = 'after',\n ): boolean {\n const currentColumns = this.revogrid.columns as ColumnRegular[];\n if (!currentColumns) return false;\n\n const newColumns = deepCloneColumns(currentColumns);\n const targetIndex = this.findColumnIndex(newColumns, target);\n if (targetIndex === -1) return false;\n\n const insertIndex = position === 'before' ? targetIndex : targetIndex + 1;\n newColumns.splice(insertIndex, 0, ...columns);\n\n this.revogrid.columns = newColumns;\n return true;\n }\n\n /**\n * 删除列\n */\n removeColumn(target: string | number): ColumnRegular | null {\n const currentColumns = this.revogrid.columns as ColumnRegular[];\n if (!currentColumns) return null;\n\n const newColumns = deepCloneColumns(currentColumns);\n const targetIndex = this.findColumnIndex(newColumns, target);\n if (targetIndex === -1) return null;\n\n const [removed] = newColumns.splice(targetIndex, 1);\n this.revogrid.columns = newColumns;\n\n // 同步更新 originalColumns\n if (this.originalColumns) {\n const origTargetIndex = this.findColumnIndex(this.originalColumns, target);\n if (origTargetIndex !== -1) {\n this.originalColumns.splice(origTargetIndex, 1);\n }\n }\n\n if (removed.prop) {\n this.hiddenProps.delete(removed.prop as string);\n }\n\n this.config.onColumnRemove?.(removed, targetIndex);\n return removed;\n }\n\n /**\n * 批量删除列\n */\n removeColumns(targets: (string | number)[]): ColumnRegular[] {\n const removed: ColumnRegular[] = [];\n const currentColumns = this.revogrid.columns as ColumnRegular[];\n \n // 从后往前删除,避免索引变化\n const sortedTargets = [...targets].sort((a, b) => {\n const indexA = typeof a === 'number' ? a : this.findColumnIndex(currentColumns, a);\n const indexB = typeof b === 'number' ? b : this.findColumnIndex(currentColumns, b);\n return indexB - indexA;\n });\n\n sortedTargets.forEach(target => {\n const col = this.removeColumn(target);\n if (col) removed.push(col);\n });\n\n return removed;\n }\n\n // ==================== 内部方法 ====================\n\n private applyHiddenColumns(): void {\n // 获取当前列的宽度信息(从 DOM 获取实际宽度)\n const currentColumns = this.revogrid.columns as ColumnRegular[];\n const currentSizeMap = this.buildSizeMap(currentColumns);\n \n // 计算当前所有列的总宽度(用于计算拉伸列的新宽度)\n let totalCurrentWidth = 0;\n currentSizeMap.forEach(width => {\n totalCurrentWidth += width;\n });\n \n // 使用原始列配置(首次保存,使用深拷贝保留函数属性)\n if (!this.originalColumns) {\n this.originalColumns = deepCloneColumns(currentColumns);\n }\n\n // 计算隐藏/显示后其他列的总宽度变化\n let newOtherColumnsWidth = 0;\n const countOtherColumnsWidth = (cols: ColumnRegular[]) => {\n cols.forEach(col => {\n const colAny = col as any;\n if (colAny.children) {\n countOtherColumnsWidth(colAny.children);\n } else if (col.prop) {\n const isHidden = this.hiddenProps.has(col.prop as string);\n const isStretchColumn = col.prop === this.config.stretchColumn;\n if (!isHidden && !isStretchColumn) {\n const width = currentSizeMap.get(col.prop as string) || col.size || 100;\n newOtherColumnsWidth += width;\n }\n }\n });\n };\n countOtherColumnsWidth(this.originalColumns);\n \n // 计算拉伸列的新宽度(保持总宽度不变)\n const newStretchColumnWidth = this.config.stretchColumn \n ? totalCurrentWidth - newOtherColumnsWidth\n : 0;\n\n // 从原始列中过滤掉隐藏的列,并合并当前宽度\n const filterColumns = (cols: ColumnRegular[]): ColumnRegular[] => {\n return cols\n .map(col => {\n const colAny = col as any;\n if (colAny.children) {\n const filteredChildren = filterColumns(colAny.children);\n // 如果分组内所有子列都被隐藏,则隐藏整个分组\n if (filteredChildren.length === 0) {\n return null;\n }\n return {\n ...col,\n children: filteredChildren,\n } as ColumnRegular;\n }\n\n // 检查是否需要隐藏\n const isHidden = col.prop\n ? this.hiddenProps.has(col.prop as string)\n : false;\n if (isHidden) return null;\n \n // 拉伸列使用计算后的新宽度\n const isStretchColumn = this.config.stretchColumn && col.prop === this.config.stretchColumn;\n if (isStretchColumn && newStretchColumnWidth > 0) {\n const minWidth = (col as any).minSize || 100;\n return { ...col, size: Math.max(minWidth, newStretchColumnWidth) } as ColumnRegular;\n }\n \n // 其他列保留当前宽度\n const currentSize = col.prop ? currentSizeMap.get(col.prop as string) : undefined;\n if (currentSize !== undefined) {\n return { ...col, size: currentSize } as ColumnRegular;\n }\n return col;\n })\n .filter(Boolean) as ColumnRegular[];\n };\n\n const newColumns = filterColumns(this.originalColumns);\n \n // 设置列(所有列的宽度都已经计算好了)\n this.revogrid.columns = newColumns;\n\n this.config.onHiddenChange?.(this.getHiddenColumns());\n }\n \n /**\n * 从 DOM 获取列的实际宽度\n */\n private buildSizeMap(columns: ColumnRegular[]): Map<string, number> {\n const propToWidth = new Map<string, number>();\n \n // 获取所有表头单元格\n const headerCells = this.revogrid.querySelectorAll('.rgHeaderCell');\n \n // 扁平化列\n const flatCols = this.flattenColumns(columns);\n \n // 遍历所有表头单元格,通过 data-rgcol 和 viewport 类型来匹配\n headerCells.forEach(cell => {\n const width = cell.getBoundingClientRect().width;\n if (width <= 0) return;\n \n const colIndex = cell.getAttribute('data-rgcol');\n if (colIndex === null) return;\n \n const localIdx = parseInt(colIndex, 10);\n \n // 判断 viewport 类型\n let viewportType: 'colPinStart' | 'rgCol' | 'colPinEnd' = 'rgCol';\n if (cell.closest('.colPinStart')) {\n viewportType = 'colPinStart';\n } else if (cell.closest('.colPinEnd')) {\n viewportType = 'colPinEnd';\n }\n \n // 在对应类型的列中查找\n let currentIdx = 0;\n for (const col of flatCols) {\n const pin = (col as any).pin;\n const colViewport = pin === 'colPinStart' ? 'colPinStart' \n : pin === 'colPinEnd' ? 'colPinEnd' \n : 'rgCol';\n \n if (colViewport === viewportType) {\n if (currentIdx === localIdx && col.prop) {\n propToWidth.set(col.prop as string, width);\n break;\n }\n currentIdx++;\n }\n }\n });\n\n return propToWidth;\n }\n\n private normalizeColumnConfig(config: string | number | (string | number)[]): string[] {\n const items = Array.isArray(config) ? config : [config];\n const currentColumns = this.revogrid.columns as ColumnRegular[] || [];\n const flatColumns = this.flattenColumns(currentColumns);\n\n return items\n .map(item => {\n if (typeof item === 'string') {\n return item;\n }\n const col = flatColumns[item];\n return (col?.prop as string) || '';\n })\n .filter(Boolean);\n }\n\n private flattenColumns(cols: ColumnRegular[]): ColumnRegular[] {\n const result: ColumnRegular[] = [];\n for (const col of cols) {\n const colAny = col as any;\n if (colAny.children) {\n result.push(...colAny.children);\n } else {\n result.push(col);\n }\n }\n return result;\n }\n\n private findColumnIndex(cols: ColumnRegular[], target: string | number): number {\n if (typeof target === 'number') {\n return target >= 0 && target < cols.length ? target : -1;\n }\n return cols.findIndex(col => col.prop === target);\n }\n\n /**\n * 在 originalColumns 中查找列\n */\n private findColumnInOriginal(prop: string): { parentIndex: number; childIndex: number; isChild: boolean } | null {\n if (!this.originalColumns) return null;\n\n for (let i = 0; i < this.originalColumns.length; i++) {\n const col = this.originalColumns[i] as any;\n if (col.children) {\n for (let j = 0; j < col.children.length; j++) {\n if (col.children[j].prop === prop) {\n return { parentIndex: i, childIndex: j, isChild: true };\n }\n }\n } else if (col.prop === prop) {\n return { parentIndex: i, childIndex: -1, isChild: false };\n }\n }\n return null;\n }\n\n /**\n * 从 originalColumns 中移除列\n */\n private removeColumnFromOriginal(info: { parentIndex: number; childIndex: number; isChild: boolean }): ColumnRegular | null {\n if (!this.originalColumns) return null;\n\n if (info.isChild) {\n const parent = this.originalColumns[info.parentIndex] as any;\n const removed = parent.children.splice(info.childIndex, 1)[0];\n \n // 如果分组只剩一个子列,解散分组\n if (parent.children.length === 1) {\n const lastChild = parent.children[0];\n this.originalColumns.splice(info.parentIndex, 1, lastChild);\n } else if (parent.children.length === 0) {\n this.originalColumns.splice(info.parentIndex, 1);\n }\n return removed;\n } else {\n return this.originalColumns.splice(info.parentIndex, 1)[0];\n }\n }\n\n /**\n * 将列插入到 originalColumns 的指定位置\n */\n private insertColumnToOriginal(\n column: ColumnRegular,\n target: string,\n position: 'before' | 'after',\n ): void {\n if (!this.originalColumns) return;\n\n const targetInfo = this.findColumnInOriginal(target);\n if (!targetInfo) return;\n\n if (targetInfo.isChild) {\n // 目标是子列,插入到同一个分组\n const parent = this.originalColumns[targetInfo.parentIndex] as any;\n const insertIndex = position === 'before' ? targetInfo.childIndex : targetInfo.childIndex + 1;\n \n // 继承目标列的 pin 属性\n const targetCol = parent.children[targetInfo.childIndex];\n if (targetCol.pin) {\n (column as any).pin = targetCol.pin;\n }\n \n parent.children.splice(insertIndex, 0, column);\n } else {\n // 目标是顶层列\n const insertIndex = position === 'before' ? targetInfo.parentIndex : targetInfo.parentIndex + 1;\n \n // 继承目标列的 pin 属性\n const targetCol = this.originalColumns[targetInfo.parentIndex];\n if ((targetCol as any).pin) {\n (column as any).pin = (targetCol as any).pin;\n } else {\n delete (column as any).pin;\n }\n \n this.originalColumns.splice(insertIndex, 0, column);\n }\n }\n\n destroy(): void {\n this.hiddenProps.clear();\n super.destroy();\n }\n}\n","/**\n * RowSelectPlugin - 行选择插件\n * \n * 功能说明:\n * 1. 单选/多选:支持点击复选框选择单行,支持 Shift 键范围多选\n * 2. 全选/取消全选:列头复选框支持全选当前可见行,半选状态显示\n * 3. 树形选择:与 TreeDataPlugin 配合,支持选择父节点时自动选择/取消子节点\n * 4. 选中状态同步:行选中后会在行元素上添加 selected 属性,方便 CSS 样式控制\n * 5. 事件通知:选中状态变化时触发 rowselected 事件,包含选中数量等信息\n * \n * 使用方式:\n * 1. 在列配置中添加 rowSelect: true 启用该列的复选框\n * 2. 或使用 columnType 指定自定义的 CheckboxCellType\n * 3. rowSelect 也可以是函数,根据行数据动态决定是否显示复选框\n */\n\nimport type { VNode } from '@stencil/core';\nimport type {\n ColumnDataSchemaModel,\n ColumnRegular,\n DataType,\n HyperFunc,\n BeforeCellRenderEvent,\n BeforeRowRenderEvent,\n CellTemplate,\n ColumnTemplateProp,\n CellProps,\n DimensionRows,\n DimensionCols,\n} from '@type';\nimport type { PluginProviders } from '../types';\nimport { BasePlugin } from './base.plugin';\n\n// ==================== 常量定义 ====================\n\n/** 行数据类型数组 */\nconst ROW_TYPES: DimensionRows[] = ['rowPinStart', 'rgRow', 'rowPinEnd'];\n\n/** 视口类型数组 */\nconst VIEWPORT_TYPES: DimensionCols[] = ['colPinStart', 'rgCol', 'colPinEnd'];\n\n/** 选中属性名称 */\nexport const SELECTED_ATTRIBUTE = 'selected';\n\n// ==================== 事件常量 ====================\n\n/** 行选择点击事件 */\nconst ROW_SELECT_CLICK_EVENT = 'rowselectclick';\n\n/** 全选事件 */\nconst ROW_ALL_SELECT_EVENT = 'rowallselect';\n\n/** 列头渲染前事件 */\nconst BEFORE_HEADER_RENDER_EVENT = 'beforeheaderrender';\n\n/** 单元格渲染前事件 */\nconst BEFORE_CELL_RENDER_EVENT = 'beforecellrender';\n\n/** 行渲染前事件 */\nconst BEFORE_ROW_RENDER_EVENT = 'beforerowrender';\n\n/** 树形行选择事件 */\nconst TREE_ROW_SELECT_EVENT = 'treerowselect';\n\n/** 行选中状态变化事件 */\nconst ROW_SELECTED_EVENT = 'rowselected';\n\n/** 滚动期间 wheel 选中态同步限频,避免每帧都触发属性写入 */\nconst WHEEL_SELECTION_SYNC_INTERVAL_ACTIVE = 64;\n/** 视口滚动空闲判定 */\nconst VIEWPORT_SCROLL_IDLE_DELAY = 90;\n/** hover 指针对齐限频,减少 mousemove 高频触发 RAF */\nconst HOVER_POINTER_SYNC_INTERVAL = 40;\n\n/** 调试开关:临时停用 RowSelectPlugin 注入的所有样式逻辑 */\nconst ENABLE_ROW_SELECT_PLUGIN_STYLES = true;\nconst DEBUG_ROW_HIGHLIGHT_TRACE = false;\nconst ROW_HOVER_ACTIVE_CLASS = 'row-hover-active';\nconst ROW_HOVER_SELECTED_ACTIVE_CLASS = 'row-hover-selected-active';\n\nconst EMPTY_ROW_STYLE_FLAGS: RowStyleFlags = {\n highlighted: false,\n background: false,\n focused: false,\n};\n\n// ==================== 类型定义 ====================\n\n/** 行选择点击事件详情 */\ninterface RowSelectClickDetail extends ColumnDataSchemaModel {\n originalEvent: MouseEvent;\n}\n\n/** 全选事件详情 */\ninterface RowAllSelectDetail {\n type: DimensionRows;\n selected: boolean;\n}\n\n/** 树形行选择事件详情 */\ninterface TreeRowSelectDetail {\n type: DimensionRows;\n parentIndex: number;\n childrenIndices: number[];\n}\n\n/** 行选中状态变化事件详情 */\nexport interface RowSelectedEventDetail {\n /** 选中行的集合,按行类型分组 */\n selected: Map<DimensionRows, Set<number>>;\n /** 所有选中行的总数 */\n count: number;\n /** 所有行的总数 */\n allRowsCount: number;\n /** 当前可见的选中行数 */\n visibleCount: number;\n /** 当前可见的行总数 */\n visibleRowsCount: number;\n}\n\ninterface RowStyleFlags {\n highlighted: boolean;\n background: boolean;\n focused: boolean;\n}\n\ninterface SourceSetDetail {\n type: DimensionRows;\n source: DataType[];\n}\n\ninterface PendingSelectionRemap {\n keyField: string;\n keys: any[];\n rows: DataType[];\n}\n\n/** 选中状态统计 */\ninterface SelectionStatus {\n isSelected: boolean;\n anySelected: boolean;\n visibleSelectedItems: number;\n allSelectedItems: number;\n /** 是否有数据行 */\n hasData: boolean;\n}\n\n/** 复选框单元格属性扩展 */\nexport interface CheckboxCellProps extends ColumnDataSchemaModel {\n selected?: boolean;\n allSelected?: boolean;\n allIndeterminate?: boolean;\n}\n\n/** 自定义复选框模板函数 */\nexport type CheckboxTemplateFunc = (\n h: HyperFunc<VNode>,\n context: {\n selected: boolean;\n onClick: (event: MouseEvent) => void;\n props?: any;\n additionalData?: any;\n },\n) => VNode;\n\n/** 自定义列头复选框模板函数 */\nexport type HeaderCheckboxTemplateFunc = (\n h: HyperFunc<VNode>,\n context: {\n allSelected: boolean;\n indeterminate: boolean;\n onClick: (event: MouseEvent) => void;\n props?: any;\n additionalData?: any;\n },\n) => VNode;\n\n/** 树形数据配置 */\nexport interface TreeConfig {\n /** ID 字段名 */\n idField: string;\n /** 父 ID 字段名 */\n parentIdField: string;\n /** 根节点的父 ID 值 */\n rootParentId?: any;\n}\n\n/** 行样式类型 */\nexport type RowStyleType = 'highlight' | 'background' | 'focused';\n\n/** 行选择插件配置 */\nexport interface RowSelectConfig {\n /** 初始选中的行索引 */\n initialSelected?: Map<DimensionRows, Set<number>>;\n /** 自定义单元格复选框模板 */\n checkboxTemplate?: CheckboxTemplateFunc;\n /** 自定义列头复选框模板 */\n headerCheckboxTemplate?: HeaderCheckboxTemplateFunc;\n /** 自定义复选框列类型(优先级高于 checkboxTemplate,可以是 Vue/React 组件) */\n customCheckboxType?: any;\n /** 树形数据配置(用于过滤子节点) */\n tree?: TreeConfig;\n /** 选中行的样式配置 */\n selectedRowStyle?: {\n /** 背景色 */\n backgroundColor?: string;\n };\n /** 未选中行的 hover 样式配置 */\n hoverRowStyle?: {\n /** hover 时的背景色 */\n backgroundColor?: string;\n };\n /** 高亮行的样式配置 */\n highlightRowStyle?: {\n /** 背景色 */\n backgroundColor?: string;\n };\n /** 聚焦行的样式配置 */\n focusedRowStyle?: {\n /** 背景色 */\n backgroundColor?: string;\n };\n /** 高亮行的 ID 字段名,默认为 'id' */\n highlightIdField?: string;\n}\n\n// ==================== 工具函数 ====================\n\n/**\n * 触发自定义事件\n */\nfunction dispatchCustomEvent<T>(\n originalEvent: Event,\n eventName: string,\n detail: T,\n): void {\n const customEvent = new CustomEvent(eventName, {\n detail,\n bubbles: true,\n cancelable: true,\n });\n originalEvent.target?.dispatchEvent(customEvent);\n}\n\n/**\n * 获取物理行索引\n */\nfunction getPhysicalRowIndex(store: any, virtualIndex: number): number {\n const items = store.get('items');\n return items[virtualIndex];\n}\n\n/**\n * 创建单元格模板(包装器模式)\n */\nfunction createCellTemplate(\n wrapper: CellTemplate,\n ...templates: (CellTemplate | undefined)[]\n): CellTemplate {\n return (h: HyperFunc<VNode>, props: any, additionalData?: any) => {\n wrapper(h, props, additionalData);\n for (const template of templates) {\n if (template) {\n return template(h, props, additionalData);\n }\n }\n return props.value ?? '';\n };\n}\n\n/**\n * 获取默认单元格值模板\n */\nfunction getDefaultCellValue(template?: CellTemplate): CellTemplate {\n return template ?? ((_: any, props: any) => props.value ?? '');\n}\n\n\n\n// ==================== CheckboxCellType ====================\n\n/**\n * 复选框单元格类型\n * 提供复选框的单元格和列头模板\n */\nexport class CheckboxCellType {\n readonly = true;\n\n /**\n * 单元格模板 - 渲染行复选框\n */\n cellTemplate: CellTemplate = (h, props: CheckboxCellProps) =>\n h('input', {\n type: 'checkbox',\n checked: !!props.selected,\n onClick(event: MouseEvent) {\n event.preventDefault();\n const detail: RowSelectClickDetail = {\n ...props,\n originalEvent: event,\n };\n dispatchCustomEvent(event, ROW_SELECT_CLICK_EVENT, detail);\n },\n });\n\n /**\n * 单元格属性\n */\n cellProperties = (): CellProps => ({\n class: 'cell-checkbox',\n });\n\n /**\n * 列属性\n */\n columnProperties = (): CellProps => ({\n class: 'cell-checkbox',\n });\n\n /**\n * 列头模板 - 渲染全选复选框\n */\n columnTemplate = (h: HyperFunc<VNode>, props: ColumnTemplateProp & { allSelected?: boolean; allIndeterminate?: boolean }) =>\n h(\n 'div',\n {\n class: 'cell-header-checkbox-container',\n },\n h('input', {\n ref(element: HTMLInputElement | null) {\n if (element) {\n element.setAttribute('data-ref', 'ref');\n }\n },\n type: 'checkbox',\n checked: !!props.allSelected,\n indeterminate: !props.allSelected && !!props.allIndeterminate,\n onClick(event: MouseEvent) {\n event.preventDefault();\n if (!(event.target instanceof HTMLInputElement)) return;\n\n const detail: RowAllSelectDetail = {\n type: props.providers.type as DimensionRows,\n selected: !!event.target.checked,\n };\n dispatchCustomEvent(event, ROW_ALL_SELECT_EVENT, detail);\n },\n }),\n );\n}\n\n// ==================== RowSelectPlugin ====================\n\n/**\n * 行选择插件\n * 实现表格行的单选和多选功能\n */\nexport class RowSelectPlugin extends BasePlugin {\n /** 最后选中的行索引(用于 Shift 多选) */\n private lastSelectedIndex?: number;\n\n /** 选中行的集合,按行类型分组存储 */\n private selected: Map<DimensionRows, Set<number>>;\n\n /** 复选框单元格类型实例 */\n private checkboxCellType: CheckboxCellType;\n\n /** 自定义复选框模板 */\n private customCheckboxTemplate?: CheckboxTemplateFunc;\n\n /** 自定义列头复选框模板 */\n private customHeaderCheckboxTemplate?: HeaderCheckboxTemplateFunc;\n\n /** 自定义复选框列类型 */\n private customCheckboxType?: any;\n\n /** 树形数据配置 */\n private treeConfig?: TreeConfig;\n\n /** 选中行样式配置 */\n private selectedRowStyle?: {\n backgroundColor?: string;\n };\n\n /** 未选中行 hover 样式配置 */\n private hoverRowStyle?: {\n backgroundColor?: string;\n };\n\n /** 高亮行样式配置 */\n private highlightRowStyle?: {\n backgroundColor?: string;\n };\n\n /** 聚焦行样式配置 */\n private focusedRowStyle?: {\n backgroundColor?: string;\n };\n\n /** 高亮行的 ID 字段名 */\n private highlightIdField: string = 'id';\n\n /** 行样式 ID 集合,按类型分组存储 */\n private rowStyleIds: Map<RowStyleType, Set<any>> = new Map([\n ['highlight', new Set()],\n ['background', new Set()],\n ['focused', new Set()],\n ]);\n\n /** 样式元素 */\n private styleElement?: HTMLStyleElement;\n\n /** Hover 同步状态 */\n private hoverSyncEnabled = false;\n private hoverRowType: DimensionRows | null = null;\n private hoverPhysicalIndex: number | null = null;\n private hoverLastPointer: { x: number; y: number } | null = null;\n private hoverSyncProcessing = false;\n private hoverResyncTimer: ReturnType<typeof setTimeout> | null = null;\n private hoverResyncRaf: number | null = null;\n private hoverRenderBlocked = false;\n private hoverResyncPending = false;\n private hoverMouseDown = false;\n private hoverInteractionSuspended = false;\n private viewportScrollIdleTimer: ReturnType<typeof setTimeout> | null = null;\n private viewportScrolling = false;\n private pendingWheelSelectionSyncAfterScroll = false;\n private lastWheelSelectionSyncAt = 0;\n private lastHoverPointerSyncAt = 0;\n private cleanupHoverSync: (() => void) | null = null;\n private pendingSelectionAttributeSync = false;\n private selectionAttributeSyncRaf: number | null = null;\n private postRefreshSyncRaf: number | null = null;\n private wheelRowSelectionSyncRaf: number | null = null;\n private pendingSelectionRemapByType: Map<DimensionRows, PendingSelectionRemap> = new Map();\n\n constructor(\n revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n config: RowSelectConfig = {},\n ) {\n super(revogrid, providers);\n\n // 初始化选中集合\n this.selected = config.initialSelected ?? new Map();\n ROW_TYPES.forEach((type) => {\n if (!this.selected.has(type)) {\n this.selected.set(type, new Set());\n }\n });\n\n // 保存自定义模板和类型\n this.customCheckboxTemplate = config.checkboxTemplate;\n this.customHeaderCheckboxTemplate = config.headerCheckboxTemplate;\n this.customCheckboxType = config.customCheckboxType;\n this.treeConfig = config.tree;\n this.selectedRowStyle = config.selectedRowStyle;\n this.hoverRowStyle = config.hoverRowStyle;\n this.highlightRowStyle = config.highlightRowStyle;\n this.focusedRowStyle = config.focusedRowStyle;\n this.highlightIdField = config.highlightIdField || 'id';\n\n // 创建复选框单元格类型实例\n this.checkboxCellType = new CheckboxCellType();\n\n // 注入自定义样式\n if (ENABLE_ROW_SELECT_PLUGIN_STYLES) {\n this.injectCustomStyles();\n }\n\n // 监听过滤器应用事件,更新选中状态\n this.addEventListener('afterfilterapply', () => {\n this.blockHoverRender();\n this.emitSelectionChange();\n this.scheduleHoverResync();\n });\n\n // 渲染完成后兜底同步 hover,避免中间态闪烁\n this.addEventListener('afterrender' as any, () => {\n const shouldResync = this.hoverResyncPending;\n if (this.hoverRenderBlocked) {\n this.hoverRenderBlocked = false;\n }\n if (this.pendingSelectionAttributeSync) {\n this.queueSelectionAttributeSync();\n } else if (this.hasAnySelectedRows() || this.hasAnyRowStyles()) {\n // 滚动虚拟渲染过程中,同步 wheel-capture-row 的 selected/行样式,避免“慢一拍”上色\n this.queueWheelRowSelectionSync(true);\n }\n if (shouldResync && this.hoverSyncEnabled) {\n if (this.hoverInteractionSuspended) {\n this.hoverResyncPending = true;\n } else {\n this.hoverResyncPending = false;\n this.syncHoverFromPointer();\n }\n }\n });\n\n // 记录滚动活跃状态,用于限频 wheel-capture 的 selected 同步\n this.addEventListener('scrollviewport' as any, () => {\n this.markViewportScrolling();\n });\n\n // 在 source 变更前后基于稳定 ID 重建选中索引,避免索引漂移导致选中错位\n this.addEventListener('beforesourceset' as any, (event: CustomEvent<SourceSetDetail>) => {\n const rowType = event.detail?.type;\n if (!rowType || !ROW_TYPES.includes(rowType)) {\n return;\n }\n this.capturePendingSelectionRemap(rowType);\n this.clearAllHoverClass();\n this.clearWheelCaptureVisualState();\n this.clearRenderedRowStyleAttributes();\n this.blockHoverRender();\n this.pendingSelectionAttributeSync = true;\n });\n this.addEventListener('aftersourceset' as any, (event: CustomEvent<SourceSetDetail>) => {\n const rowType = event.detail?.type;\n if (!rowType || !ROW_TYPES.includes(rowType)) {\n return;\n }\n const remapped = this.applyPendingSelectionRemap(rowType, event.detail?.source);\n this.updateSelectedRowsAttribute();\n this.pendingSelectionAttributeSync = true;\n this.blockHoverRender();\n this.queueWheelRowSelectionSync(true);\n if (remapped) {\n this.emitSelectionChange();\n }\n });\n\n // 监听行选择点击事件\n this.addEventListener(ROW_SELECT_CLICK_EVENT as any, (event: CustomEvent<RowSelectClickDetail>) => {\n if (event.defaultPrevented) return;\n\n const { detail } = event;\n const selectedSet = this.selected.get(detail.type);\n if (!selectedSet) return;\n\n const dataStore = providers.data.stores[detail.type];\n const physicalIndex = getPhysicalRowIndex(dataStore.store, detail.rowIndex);\n const isShiftKey = detail.originalEvent.shiftKey;\n\n // 处理 Shift 键多选\n if (isShiftKey && this.lastSelectedIndex !== undefined) {\n const startIndex = this.lastSelectedIndex;\n const minIndex = Math.min(startIndex, physicalIndex);\n const maxIndex = Math.max(startIndex, physicalIndex);\n\n // 选中范围内的所有行\n for (let i = minIndex; i <= maxIndex; i++) {\n selectedSet.add(i);\n }\n this.lastSelectedIndex = physicalIndex;\n } else {\n // 单击切换选中状态\n const willSelect = !selectedSet.has(physicalIndex);\n \n if (willSelect) {\n selectedSet.add(physicalIndex);\n this.lastSelectedIndex = physicalIndex;\n } else {\n selectedSet.delete(physicalIndex);\n this.lastSelectedIndex = undefined;\n }\n\n // 如果配置了树形数据,处理父子节点联动\n if (this.treeConfig) {\n const source = dataStore.store.get('source');\n const currentRow = source[physicalIndex];\n \n if (currentRow) {\n // 获取所有子节点\n const childIndices = this.getChildrenIndices(source, currentRow);\n \n console.log('🟢 复选框点击 - 树形联动:', {\n parentIndex: physicalIndex,\n parentRowKey: currentRow[this.treeConfig.idField],\n willSelect,\n childIndices,\n childCount: childIndices.length,\n });\n \n // 同步子节点的选中状态\n childIndices.forEach((childIndex) => {\n if (willSelect) {\n selectedSet.add(childIndex);\n } else {\n selectedSet.delete(childIndex);\n }\n });\n }\n }\n }\n\n this.emitSelectionChange();\n this.refreshViewports();\n });\n\n // 监听全选事件\n this.addEventListener(ROW_ALL_SELECT_EVENT as any, (event: CustomEvent<RowAllSelectDetail>) => {\n const { detail } = event;\n this.lastSelectedIndex = undefined;\n\n ROW_TYPES.forEach((rowType) => {\n const selectedSet = this.selected.get(rowType);\n if (!selectedSet) return;\n\n const dataStore = providers.data.stores[rowType];\n const source = dataStore.store.get('source');\n const proxyItems = dataStore.store.get('proxyItems');\n\n if (detail.selected) {\n // 全选:批量添加所有非分组行的索引\n const indicesToAdd: number[] = [];\n proxyItems.forEach((itemIndex: number) => {\n const rowData = source[itemIndex];\n // 跳过分组行(分组行有 __rvgr-depth 标记)\n if (rowData && rowData['__rvgr-depth'] !== undefined) {\n return;\n }\n indicesToAdd.push(itemIndex);\n });\n // 批量添加到 Set(比逐个 add 快很多)\n indicesToAdd.forEach(index => selectedSet.add(index));\n } else {\n // 取消全选:直接清空 Set\n selectedSet.clear();\n }\n });\n\n this.emitSelectionChange();\n this.refreshViewports();\n });\n\n // 监听列头渲染事件\n this.addEventListener(BEFORE_HEADER_RENDER_EVENT as any, (event: CustomEvent<{ data: ColumnRegular }>) => {\n const columnData = event.detail.data;\n\n if (this.isCheckboxColumn(columnData)) {\n // 如果用户提供了自定义 columnType,使用自定义类型\n const baseType = this.customCheckboxType || this.checkboxCellType;\n \n event.detail.data = {\n ...baseType,\n ...columnData,\n columnTemplate: this.createHeaderTemplate(columnData),\n };\n }\n });\n\n // 监听单元格渲染事件\n this.addEventListener(BEFORE_CELL_RENDER_EVENT as any, (event: CustomEvent<BeforeCellRenderEvent<ColumnDataSchemaModel>>) => {\n const { detail } = event;\n let column = detail.model.column;\n\n if (this.isCheckboxColumn(column)) {\n // 检查 rowSelect 是否为函数,如果是则调用判断是否显示\n if (typeof column.rowSelect === 'function' && !column.rowSelect(detail.model)) {\n // 不显示复选框\n } else {\n // 如果用户提供了自定义 columnType,使用自定义类型\n const baseType = this.customCheckboxType || this.checkboxCellType;\n \n column = {\n ...baseType,\n ...column,\n cellTemplate: createCellTemplate(\n this.cellTemplateWrapper.bind(this),\n this.createCellCheckboxTemplate(),\n getDefaultCellValue(column.cellTemplate),\n ),\n };\n }\n }\n\n detail.model = {\n ...detail.model,\n column,\n };\n });\n\n // 监听行渲染事件 - 设置行的选中属性(包括行号列)\n this.addEventListener(BEFORE_ROW_RENDER_EVENT as any, (event: CustomEvent<BeforeRowRenderEvent>) => {\n const { detail } = event;\n const rowType = detail.rowType as DimensionRows;\n const isRowType = ROW_TYPES.includes(rowType);\n const virtualIndex = detail.item.itemIndex;\n const rowStore = isRowType ? this.providers.data.stores[rowType] : undefined;\n const rowItems = rowStore?.store.get('items');\n const physicalIndex =\n isRowType && Array.isArray(rowItems) ? rowItems[virtualIndex] : undefined;\n const hasValidPhysicalIndex = Number.isInteger(physicalIndex);\n const rowId =\n isRowType && hasValidPhysicalIndex\n ? this.getRowIdByPhysicalIndex(rowType, physicalIndex as number, this.highlightIdField)\n : null;\n const cleanupStaleAttrs = (attrs: Record<string, any>): Record<string, any> => {\n const nextAttrs = { ...attrs };\n delete nextAttrs[SELECTED_ATTRIBUTE];\n delete nextAttrs['data-highlighted'];\n delete nextAttrs['data-row-bg'];\n delete nextAttrs['data-focused'];\n const existingClass = nextAttrs.class;\n if (typeof existingClass === 'string') {\n const nextClass = existingClass\n .replace(/\\brow-hover-active\\b/g, '')\n .replace(/\\brow-hover-selected-active\\b/g, '')\n .replace(/\\s+/g, ' ')\n .trim();\n if (nextClass) {\n nextAttrs.class = nextClass;\n } else if ('class' in nextAttrs) {\n delete nextAttrs.class;\n }\n } else if (existingClass && typeof existingClass === 'object') {\n nextAttrs.class = {\n ...existingClass,\n [ROW_HOVER_ACTIVE_CLASS]: false,\n [ROW_HOVER_SELECTED_ACTIVE_CLASS]: false,\n };\n }\n return nextAttrs;\n };\n const setSelectedAttr = (attrs: Record<string, any>, isSelected: boolean) => {\n if (isSelected) {\n attrs[SELECTED_ATTRIBUTE] = 'true';\n return;\n }\n if (SELECTED_ATTRIBUTE in attrs) {\n delete attrs[SELECTED_ATTRIBUTE];\n }\n };\n const hasActiveHoverRow = this.hoverRowType !== null && this.hoverPhysicalIndex !== null;\n const shouldProcessHoverClass =\n this.hoverSyncEnabled &&\n !this.hoverInteractionSuspended &&\n !!this.hoverRowStyle?.backgroundColor &&\n hasActiveHoverRow;\n const hasAnySelected =\n !!this.selected.get('rowPinStart')?.size ||\n !!this.selected.get('rgRow')?.size ||\n !!this.selected.get('rowPinEnd')?.size;\n const hasAnyRowStyle = this.hasAnyRowStyles();\n if (isRowType && !hasValidPhysicalIndex) {\n const prevAttrs = ((detail.node as any).$attrs$ || {}) as Record<string, any>;\n const attrs = cleanupStaleAttrs((detail.node as any).$attrs$ || {});\n const hadHighlighted = this.isTruthyRowFlag(prevAttrs['data-highlighted']);\n (detail.node as any).$attrs$ = attrs;\n if (hadHighlighted) {\n this.logHighlightTrace('beforerowrender.cleanup.invalid-physical-index', {\n rowType,\n colType: detail.colType,\n virtualIndex,\n physicalIndex,\n });\n }\n return;\n }\n if (!hasAnySelected && !shouldProcessHoverClass && !hasAnyRowStyle) {\n if (isRowType) {\n const prevAttrs = ((detail.node as any).$attrs$ || {}) as Record<string, any>;\n const attrs = cleanupStaleAttrs((detail.node as any).$attrs$ || {});\n const hadHighlighted = this.isTruthyRowFlag(prevAttrs['data-highlighted']);\n (detail.node as any).$attrs$ = attrs;\n if (hadHighlighted) {\n this.logHighlightTrace('beforerowrender.cleanup.no-style-state', {\n rowType,\n colType: detail.colType,\n virtualIndex,\n physicalIndex,\n rowId,\n });\n }\n }\n return;\n }\n const resolvedPhysicalIndex = physicalIndex as number;\n const styleFlags =\n hasAnyRowStyle && isRowType\n ? this.getRowStyleFlags(rowType, resolvedPhysicalIndex)\n : EMPTY_ROW_STYLE_FLAGS;\n\n const syncHoverClass = (attrs: any) => {\n const existingClass = attrs.class;\n if (typeof existingClass === 'string') {\n const nextClass = existingClass\n .replace(/\\brow-hover-active\\b/g, '')\n .replace(/\\brow-hover-selected-active\\b/g, '')\n .replace(/\\s+/g, ' ')\n .trim();\n attrs.class = nextClass || undefined;\n return;\n }\n\n if (existingClass && typeof existingClass === 'object') {\n attrs.class = {\n ...existingClass,\n [ROW_HOVER_ACTIVE_CLASS]: false,\n [ROW_HOVER_SELECTED_ACTIVE_CLASS]: false,\n };\n }\n };\n \n // 处理数据行\n if (isRowType && (detail.colType as any) !== 'rowHeaders') {\n const prevAttrs = ((detail.node as any).$attrs$ || {}) as Record<string, any>;\n const prevHighlighted = this.isTruthyRowFlag(prevAttrs['data-highlighted']);\n const isSelected = this.selected.get(detail.rowType)?.has(resolvedPhysicalIndex);\n const attrs = {\n ...(detail.node as any).$attrs$,\n };\n setSelectedAttr(attrs as any, !!isSelected);\n this.applyRowStyleFlagsToAttrs(attrs as any, styleFlags, {\n path: 'beforerowrender.dataRow.flags',\n rowType,\n colType: detail.colType,\n virtualIndex,\n physicalIndex: resolvedPhysicalIndex,\n rowId,\n });\n syncHoverClass(attrs as any);\n (detail.node as any).$attrs$ = attrs;\n const nextHighlighted = this.isTruthyRowFlag((attrs as any)['data-highlighted']);\n if (prevHighlighted !== nextHighlighted || nextHighlighted) {\n this.logHighlightTrace('beforerowrender.dataRow.commit', {\n rowType,\n colType: detail.colType,\n virtualIndex,\n physicalIndex: resolvedPhysicalIndex,\n rowId,\n prevHighlighted,\n nextHighlighted,\n selected: !!isSelected,\n });\n }\n }\n \n // 处理行号列(rowHeaders)\n if ((detail.colType as any) === 'rowHeaders') {\n // 行号列的行索引与数据行相同\n const rowType = detail.rowType as DimensionRows;\n if (ROW_TYPES.includes(rowType)) {\n const prevAttrs = ((detail.node as any).$attrs$ || {}) as Record<string, any>;\n const prevHighlighted = this.isTruthyRowFlag(prevAttrs['data-highlighted']);\n const rowId = this.getRowIdByPhysicalIndex(\n rowType,\n resolvedPhysicalIndex,\n this.highlightIdField,\n );\n const isSelected = this.selected.get(rowType)?.has(resolvedPhysicalIndex);\n\n const attrs = {\n ...(detail.node as any).$attrs$,\n };\n setSelectedAttr(attrs as any, !!isSelected);\n this.applyRowStyleFlagsToAttrs(attrs as any, styleFlags, {\n path: 'beforerowrender.rowHeaders.flags',\n rowType,\n colType: detail.colType,\n virtualIndex,\n physicalIndex: resolvedPhysicalIndex,\n rowId,\n });\n syncHoverClass(attrs as any);\n (detail.node as any).$attrs$ = attrs;\n const nextHighlighted = this.isTruthyRowFlag((attrs as any)['data-highlighted']);\n if (prevHighlighted !== nextHighlighted || nextHighlighted) {\n this.logHighlightTrace('beforerowrender.rowHeaders.commit', {\n rowType,\n colType: detail.colType,\n virtualIndex,\n physicalIndex: resolvedPhysicalIndex,\n rowId,\n prevHighlighted,\n nextHighlighted,\n selected: !!isSelected,\n });\n }\n }\n }\n });\n\n // 监听树形行选择事件\n this.addEventListener(TREE_ROW_SELECT_EVENT as any, (event: CustomEvent<TreeRowSelectDetail>) => {\n const { detail } = event;\n const selectedSet = this.selected.get(detail.type);\n if (!selectedSet) return;\n\n // 切换父节点和子节点的选中状态\n if (!selectedSet.has(detail.parentIndex)) {\n // 如果父节点未选中,则选中父节点和所有子节点\n selectedSet.add(detail.parentIndex);\n detail.childrenIndices.forEach((childIndex) => selectedSet.add(childIndex));\n } else {\n // 如果父节点已选中,则取消选中父节点和所有子节点\n detail.childrenIndices.forEach((childIndex) => selectedSet.delete(childIndex));\n selectedSet.delete(detail.parentIndex);\n }\n\n this.emitSelectionChange();\n this.refreshViewports();\n });\n\n // 监听分组展开/折叠事件,更新选中状态显示\n this.addEventListener('groupexpandclick' as any, () => {\n this.clearAllHoverClass();\n this.clearWheelCaptureVisualState();\n this.clearRenderedRowStyleAttributes();\n this.blockHoverRender();\n this.pendingSelectionAttributeSync = true;\n });\n\n // 监听树形节点展开/折叠事件,更新选中状态显示\n this.addEventListener('treenodetoggle' as any, () => {\n this.clearAllHoverClass();\n this.clearWheelCaptureVisualState();\n this.clearRenderedRowStyleAttributes();\n this.blockHoverRender();\n this.pendingSelectionAttributeSync = true;\n });\n\n // 树形/分组 trimmed 变更期间强制清理 hover,避免频繁展开收起后残留多行 hover\n this.addEventListener('beforetrimmed' as any, (event: CustomEvent<{ trimmedType?: string; type?: string }>) => {\n const trimmedType = event.detail?.trimmedType;\n const rowType = event.detail?.type;\n if (rowType && rowType !== 'rgRow') {\n return;\n }\n if (trimmedType !== 'tree-collapsed' && trimmedType !== 'grouping') {\n return;\n }\n this.clearAllHoverClass();\n this.blockHoverRender();\n });\n }\n\n // ==================== 公共方法 ====================\n\n /**\n * 获取所有选中行的索引\n */\n getSelectedIndexes(): Map<DimensionRows, Set<number>> {\n return this.selected;\n }\n\n /**\n * 获取选中行的数据\n */\n getSelectedRows(): Map<DimensionRows, DataType[]> {\n const result = new Map<DimensionRows, DataType[]>();\n\n this.selected.forEach((selectedSet, rowType) => {\n const dataStore = this.providers.data.stores[rowType];\n const source = dataStore.store.get('source');\n const rows: DataType[] = [];\n\n selectedSet.forEach((physicalIndex) => {\n if (source[physicalIndex]) {\n rows.push(source[physicalIndex]);\n }\n });\n\n result.set(rowType, rows);\n });\n\n return result;\n }\n\n /**\n * 清空所有选中\n */\n clearSelection(): void {\n this.selected.forEach((selectedSet) => selectedSet.clear());\n this.lastSelectedIndex = undefined;\n this.emitSelectionChange();\n this.refreshViewports();\n }\n\n /**\n * 全选所有行(触发全选事件)\n */\n selectAll(): void {\n // 触发全选事件\n const event = new CustomEvent('rowallselect', {\n detail: {\n type: 'rgRow',\n selected: true,\n },\n bubbles: true,\n });\n this.revogrid.dispatchEvent(event);\n }\n\n /**\n * 取消全选(触发取消全选事件)\n */\n deselectAll(): void {\n // 触发取消全选事件\n const event = new CustomEvent('rowallselect', {\n detail: {\n type: 'rgRow',\n selected: false,\n },\n bubbles: true,\n });\n this.revogrid.dispatchEvent(event);\n }\n\n /**\n * 选中指定行(支持树形联动)\n */\n selectRows(rowType: DimensionRows, indices: number[]): void {\n const selectedSet = this.selected.get(rowType);\n if (!selectedSet) return;\n\n const indicesToSelect = [...indices];\n\n // 如果配置了树形数据,处理父子节点联动\n if (this.treeConfig) {\n const dataStore = this.providers.data.stores[rowType];\n const source = dataStore.store.get('source');\n\n indices.forEach((index) => {\n const row = source[index];\n if (row) {\n const { idField, parentIdField } = this.treeConfig!;\n const parentId = row[idField];\n \n console.log('🔵 selectRows - 父节点信息:', {\n parentIndex: index,\n idField,\n parentIdField,\n parentId,\n parentRowData: row,\n });\n \n // 获取所有子节点\n const childIndices = this.getChildrenIndices(source, row);\n \n // 打印找到的子节点\n childIndices.forEach(childIdx => {\n const childRow = source[childIdx];\n console.log('🔵 找到子节点:', {\n childIndex: childIdx,\n childParentId: childRow?.[parentIdField],\n childRowKey: childRow?.rowKey,\n });\n });\n \n console.log('🔵 selectRows - 树形联动结果:', {\n parentIndex: index,\n childIndices,\n childCount: childIndices.length,\n });\n indicesToSelect.push(...childIndices);\n }\n });\n }\n\n console.log('🔵 selectRows - 最终选中索引:', indicesToSelect);\n indicesToSelect.forEach((index) => selectedSet.add(index));\n this.emitSelectionChange();\n this.refreshViewports();\n }\n\n /**\n * 取消选中指定行(支持树形联动)\n */\n deselectRows(rowType: DimensionRows, indices: number[]): void {\n const selectedSet = this.selected.get(rowType);\n if (!selectedSet) return;\n\n const indicesToDeselect = [...indices];\n\n // 如果配置了树形数据,处理父子节点联动\n if (this.treeConfig) {\n const dataStore = this.providers.data.stores[rowType];\n const source = dataStore.store.get('source');\n\n indices.forEach((index) => {\n const row = source[index];\n if (row) {\n // 获取所有子节点\n const childIndices = this.getChildrenIndices(source, row);\n indicesToDeselect.push(...childIndices);\n }\n });\n }\n\n indicesToDeselect.forEach((index) => selectedSet.delete(index));\n this.emitSelectionChange();\n this.refreshViewports();\n }\n\n /**\n * 获取选中行的指定字段值列表\n * @param field 字段名,如 'id'、'key' 等\n * @param rowType 行类型,默认 'rgRow'\n * @returns 字段值数组\n */\n getSelectedFieldValues<T = any>(field: string, rowType: DimensionRows = 'rgRow'): T[] {\n const selectedSet = this.selected.get(rowType);\n if (!selectedSet) return [];\n\n const dataStore = this.providers.data.stores[rowType];\n const source = dataStore.store.get('source');\n const values: T[] = [];\n\n selectedSet.forEach((physicalIndex) => {\n const row = source[physicalIndex];\n if (row && row[field] !== undefined) {\n values.push(row[field]);\n }\n });\n\n return values;\n }\n\n /**\n * 获取所有选中行的数据(扁平数组)\n * @param rowType 行类型,默认 'rgRow'\n * @returns 选中行数据数组\n */\n getSelectedData(rowType: DimensionRows = 'rgRow'): DataType[] {\n const selectedSet = this.selected.get(rowType);\n if (!selectedSet) return [];\n\n const dataStore = this.providers.data.stores[rowType];\n const source = dataStore.store.get('source');\n const rows: DataType[] = [];\n\n selectedSet.forEach((physicalIndex) => {\n if (source[physicalIndex]) {\n rows.push(source[physicalIndex]);\n }\n });\n\n return rows;\n }\n\n /**\n * 获取选中的根节点数据(过滤掉子节点)\n * 用于树形数据场景,只返回顶层选中的节点\n * @param rowType 行类型,默认 'rgRow'\n * @returns 根节点数据数组\n */\n getSelectedRootData(rowType: DimensionRows = 'rgRow'): DataType[] {\n if (!this.treeConfig) {\n // 没有配置树形,返回所有选中数据\n return this.getSelectedData(rowType);\n }\n\n const { idField, parentIdField, rootParentId } = this.treeConfig;\n const selectedData = this.getSelectedData(rowType);\n\n // 构建选中 ID 集合\n const selectedIds = new Set(selectedData.map(row => row[idField]));\n\n // 过滤:只保留父节点不在选中集合中的行(即根节点)\n return selectedData.filter(row => {\n const parentId = row[parentIdField];\n // 如果父 ID 是根节点值,或者父节点不在选中集合中,则为根节点\n return parentId === rootParentId || parentId === null || parentId === undefined || !selectedIds.has(parentId);\n });\n }\n\n /**\n * 获取选中根节点的指定字段值列表(过滤掉子节点)\n * @param field 字段名,如 'id'、'key' 等\n * @param rowType 行类型,默认 'rgRow'\n * @returns 字段值数组\n */\n getSelectedRootFieldValues<T = any>(field: string, rowType: DimensionRows = 'rgRow'): T[] {\n const rootData = this.getSelectedRootData(rowType);\n return rootData\n .filter(row => row[field] !== undefined)\n .map(row => row[field] as T);\n }\n\n /**\n * 根据 ID 高亮某一行\n * @param id 行的 ID 值\n * @param idField 可选,ID 字段名,默认使用配置的 highlightIdField\n * @deprecated 请使用 applyRowStyle('highlight', [id], idField) 代替\n */\n highlightRowById(id: any, idField?: string): void {\n this.applyRowStyle('highlight', [id], idField);\n }\n\n /**\n * 清除行高亮\n * @deprecated 请使用 clearRowStyle('highlight') 代替\n */\n clearHighlight(): void {\n this.clearRowStyle('highlight');\n }\n\n /**\n * 获取当前高亮的行 ID\n * @deprecated 请使用 getRowStyleIds('highlight') 代替\n */\n getHighlightedRowId(): any {\n const ids = this.rowStyleIds.get('highlight');\n return ids && ids.size > 0 ? Array.from(ids)[0] : null;\n }\n\n /**\n * 获取当前高亮的行数据\n * @param rowType 行类型,默认 'rgRow'\n */\n getHighlightedRowData(rowType: DimensionRows = 'rgRow'): DataType | null {\n const highlightedId = this.getHighlightedRowId();\n if (highlightedId === null) return null;\n\n const dataStore = this.providers.data.stores[rowType];\n const source = dataStore.store.get('source');\n\n for (const row of source) {\n if (row && row[this.highlightIdField] === highlightedId) {\n return row;\n }\n }\n\n return null;\n }\n\n /**\n * 为指定行应用样式(高亮或背景色)\n * @param type 样式类型:'highlight' 使用高亮色,'background' 使用 hover 背景色\n * @param ids 行的 ID 值数组\n * @param idField 可选,ID 字段名,默认使用配置的 highlightIdField\n */\n applyRowStyle(type: RowStyleType, ids: any[], idField?: string): void {\n const styleSet = this.rowStyleIds.get(type);\n if (!styleSet) return;\n const styleIdField = idField || this.highlightIdField;\n if (type === 'highlight') {\n this.logHighlightTrace('applyRowStyle.input', {\n type,\n ids,\n idField: styleIdField,\n beforeSize: styleSet.size,\n });\n }\n\n if (type === 'focused') {\n styleSet.clear();\n const firstId = ids[0];\n if (firstId !== undefined && firstId !== null) {\n styleSet.add(firstId);\n }\n this.updateRowStyleAttribute(type, styleIdField);\n return;\n }\n\n ids.forEach((id) => styleSet.add(id));\n if (type === 'highlight') {\n this.logHighlightTrace('applyRowStyle.after-set', {\n type,\n ids,\n idField: styleIdField,\n afterSize: styleSet.size,\n highlightedIds: Array.from(styleSet),\n });\n }\n this.updateRowStyleAttribute(type, styleIdField);\n }\n\n /**\n * 移除指定行的样式\n * @param type 样式类型:'highlight' 或 'background'\n * @param ids 行的 ID 值数组,如果不传则移除该类型所有行的样式\n * @param idField 可选,ID 字段名,默认使用配置的 highlightIdField\n */\n removeRowStyle(type: RowStyleType, ids?: any[], idField?: string): void {\n const styleSet = this.rowStyleIds.get(type);\n if (!styleSet) return;\n const styleIdField = idField || this.highlightIdField;\n if (type === 'highlight') {\n this.logHighlightTrace('removeRowStyle.input', {\n type,\n ids,\n idField: styleIdField,\n beforeSize: styleSet.size,\n });\n }\n\n if (ids) {\n ids.forEach((id) => styleSet.delete(id));\n } else {\n styleSet.clear();\n }\n if (type === 'highlight') {\n this.logHighlightTrace('removeRowStyle.after-set', {\n type,\n ids,\n idField: styleIdField,\n afterSize: styleSet.size,\n highlightedIds: Array.from(styleSet),\n });\n }\n this.updateRowStyleAttribute(type, styleIdField);\n }\n\n /**\n * 清除指定类型的所有行样式\n * @param type 样式类型:'highlight' 或 'background'\n */\n clearRowStyle(type: RowStyleType): void {\n const styleSet = this.rowStyleIds.get(type);\n if (!styleSet) return;\n if (type === 'highlight') {\n this.logHighlightTrace('clearRowStyle.input', {\n type,\n beforeSize: styleSet.size,\n highlightedIds: Array.from(styleSet),\n });\n }\n\n styleSet.clear();\n this.clearRowStyleAttribute(type);\n this.refreshViewports();\n }\n\n /**\n * 获取已应用样式的行 ID\n * @param type 样式类型:'highlight' 或 'background'\n */\n getRowStyleIds(type: RowStyleType): Set<any> {\n return this.rowStyleIds.get(type) || new Set();\n }\n\n /**\n * 清除所有行样式(高亮和背景色)\n */\n clearAllRowStyles(): void {\n this.rowStyleIds.forEach((styleSet, type) => {\n styleSet.clear();\n this.clearRowStyleAttribute(type);\n });\n this.refreshViewports();\n }\n\n // ==================== 私有方法 ====================\n\n /**\n * 注入自定义样式\n */\n private injectCustomStyles(): void {\n if (!ENABLE_ROW_SELECT_PLUGIN_STYLES) {\n return;\n }\n\n // 如果没有配置样式,则不注入\n if (!this.selectedRowStyle && !this.hoverRowStyle && !this.highlightRowStyle && !this.focusedRowStyle) {\n return;\n }\n\n // 创建 style 元素\n this.styleElement = document.createElement('style');\n this.styleElement.setAttribute('data-revogrid-row-select-styles', '');\n\n // 设置 CSS 变量到 revo-grid 元素\n if (this.selectedRowStyle?.backgroundColor) {\n this.revogrid.style.setProperty('--revo-row-selected-bg', this.selectedRowStyle.backgroundColor);\n }\n if (this.highlightRowStyle?.backgroundColor) {\n this.revogrid.style.setProperty('--revo-row-highlight-bg', this.highlightRowStyle.backgroundColor);\n } else if (this.selectedRowStyle?.backgroundColor) {\n // 默认使用选中行的颜色\n this.revogrid.style.setProperty('--revo-row-highlight-bg', this.selectedRowStyle.backgroundColor);\n }\n if (this.focusedRowStyle?.backgroundColor) {\n this.revogrid.style.setProperty('--revo-row-focused-bg', this.focusedRowStyle.backgroundColor);\n }\n if (this.hoverRowStyle?.backgroundColor) {\n this.revogrid.style.setProperty('--revo-row-hover-bg', this.hoverRowStyle.backgroundColor);\n }\n\n let css = '';\n\n // wheel-capture 行默认透明,避免滚动虚拟渲染时短暂覆盖底层单元格/行背景导致闪烁\n css += `\n revo-grid .wheel-capture-row {\n background-color: transparent !important;\n }\n `;\n\n // 选中行样式 - 作用在真实数据行,避免 overlay 层覆盖单元格内容导致闪烁\n if (this.selectedRowStyle?.backgroundColor) {\n css += `\n revo-grid revogr-data .rgRow:not(.groupingRow)[selected='true'],\n revo-grid revogr-data .rgRow:not(.groupingRow)[selected=''] {\n background-color: var(--revo-row-selected-bg) !important;\n }\n `;\n }\n\n // 高亮行样式 - 独立于选中状态\n if (this.highlightRowStyle?.backgroundColor || this.selectedRowStyle?.backgroundColor) {\n css += `\n revo-grid revogr-data .rgRow:not(.groupingRow)[data-highlighted='true'] {\n background-color: var(--revo-row-highlight-bg) !important;\n }\n `;\n }\n\n // 聚焦行样式 - 独立样式,优先级最高\n if (this.focusedRowStyle?.backgroundColor) {\n css += `\n revo-grid revogr-data .rgRow:not(.groupingRow)[data-focused='true'] {\n background-color: var(--revo-row-focused-bg) !important;\n }\n `;\n }\n\n // 未选中行 hover 样式 - 作用在真实数据行;分组行保留 overlay 路径\n if (this.hoverRowStyle?.backgroundColor) {\n css += `\n revo-grid revogr-data .rgRow:not(.groupingRow).row-hover-active:not([selected='true']):not([selected='']):not([data-focused='true']) {\n background-color: var(--revo-row-hover-bg) !important;\n }\n revo-grid revogr-grouping-overlay .rgRow.groupingRow.row-hover-active:not([selected='true']):not([selected='']):not([data-focused='true']) {\n background-color: var(--revo-row-hover-bg) !important;\n }\n revo-grid .wheel-capture-row.row-hover-active:not([selected='true']):not([selected='']):not([data-focused='true']) {\n background-color: var(--revo-row-hover-bg) !important;\n }\n /* 程序化应用背景色样式 - 沿用 hover 样式配置 */\n revo-grid revogr-data .rgRow:not(.groupingRow)[data-row-bg='true']:not([selected='true']):not([selected='']):not([data-focused='true']) {\n background-color: var(--revo-row-hover-bg) !important;\n }\n revo-grid revogr-grouping-overlay .rgRow.groupingRow[data-row-bg='true']:not([selected='true']):not([selected='']):not([data-focused='true']) {\n background-color: var(--revo-row-hover-bg) !important;\n }\n revo-grid .wheel-capture-row[data-row-bg='true']:not([selected='true']):not([selected='']):not([data-focused='true']) {\n background-color: var(--revo-row-hover-bg) !important;\n }\n /* 滚动期间临时禁用行层 pointer events,减少 pointerover 带来的样式重算 */\n revo-grid.row-hover-suspended revogr-grouping-overlay .rgRow,\n revo-grid.row-hover-suspended revogr-data .rgRow,\n revo-grid.row-hover-suspended .wheel-capture-row {\n pointer-events: none !important;\n }\n `;\n }\n\n this.styleElement.textContent = css;\n document.head.appendChild(this.styleElement);\n \n // 仅在启用 hover 样式时添加跨视口 hover 同步监听,避免不必要的滚动计算\n if (this.hoverRowStyle?.backgroundColor) {\n this.setupHoverSync();\n }\n }\n\n /**\n * 设置 hover 同步(跨视口)\n * 通过添加/移除 row-hover-active 类实现跨视口的 hover 效果\n */\n private getRowTypeFromElement(row: HTMLElement | null): DimensionRows | null {\n if (!row) {\n return null;\n }\n const container = row.closest('revogr-data, revogr-grouping-overlay') as HTMLElement | null;\n if (!container) {\n return null;\n }\n if (container.tagName === 'REVOGR-GROUPING-OVERLAY') {\n return 'rgRow';\n }\n const rawType = container.getAttribute('type') || (container as any).type;\n if (rawType === 'rowHeaders') {\n return 'rgRow';\n }\n if (rawType && ROW_TYPES.includes(rawType as DimensionRows)) {\n return rawType as DimensionRows;\n }\n return null;\n }\n\n private getPhysicalIndexFromRow(row: HTMLElement, rowType: DimensionRows): number | null {\n const rowIndexAttr = row.getAttribute('data-rgRow');\n if (!rowIndexAttr) {\n return null;\n }\n const virtualIndex = Number(rowIndexAttr);\n if (Number.isNaN(virtualIndex)) {\n return null;\n }\n const store = this.providers.data.stores[rowType];\n if (!store) {\n return null;\n }\n const items = store.store.get('items');\n const physicalIndex = items[virtualIndex];\n return physicalIndex === undefined ? null : physicalIndex;\n }\n\n private getVirtualIndexFromPhysical(rowType: DimensionRows, physicalIndex: number): number | null {\n const store = this.providers.data.stores[rowType];\n if (!store) {\n return null;\n }\n const items = store.store.get('items');\n const virtualIndex = items.indexOf(physicalIndex);\n return virtualIndex === -1 ? null : virtualIndex;\n }\n\n private getRowElementsByVirtualIndex(\n rowType: DimensionRows,\n virtualIndex: number,\n ): NodeListOf<HTMLElement> {\n const selectors: string[] = [\n `revogr-data[type=\"${rowType}\"] .rgRow[data-rgRow=\"${virtualIndex}\"]`,\n `.wheel-capture-row[data-rgRow=\"${virtualIndex}\"]`,\n ];\n if (rowType === 'rgRow') {\n selectors.push(`revogr-grouping-overlay .rgRow[data-rgRow=\"${virtualIndex}\"]`);\n selectors.push(`revogr-data[type=\"rowHeaders\"] .rgRow[data-rgRow=\"${virtualIndex}\"]`);\n }\n const selector = selectors.join(', ');\n return this.revogrid.querySelectorAll(selector);\n }\n\n private isRowSelected(rowType: DimensionRows, physicalIndex: number): boolean {\n return !!this.selected.get(rowType)?.has(physicalIndex);\n }\n\n private applyHoverClass(rowType: DimensionRows, physicalIndex: number): boolean {\n const virtualIndex = this.getVirtualIndexFromPhysical(rowType, physicalIndex);\n if (virtualIndex === null) {\n return false;\n }\n const isSelected = this.isRowSelected(rowType, physicalIndex);\n const allRowsWithSameIndex = this.getRowElementsByVirtualIndex(rowType, virtualIndex);\n allRowsWithSameIndex.forEach((row) => {\n row.classList.remove(isSelected ? ROW_HOVER_ACTIVE_CLASS : ROW_HOVER_SELECTED_ACTIVE_CLASS);\n row.classList.add(isSelected ? ROW_HOVER_SELECTED_ACTIVE_CLASS : ROW_HOVER_ACTIVE_CLASS);\n });\n return true;\n }\n\n private clearAllHoverClass(): void {\n const allHoverRows = this.revogrid.querySelectorAll(\n `.rgRow.${ROW_HOVER_ACTIVE_CLASS}, .rgRow.${ROW_HOVER_SELECTED_ACTIVE_CLASS}, .wheel-capture-row.${ROW_HOVER_ACTIVE_CLASS}, .wheel-capture-row.${ROW_HOVER_SELECTED_ACTIVE_CLASS}`,\n );\n allHoverRows.forEach((row) => {\n row.classList.remove(ROW_HOVER_ACTIVE_CLASS);\n row.classList.remove(ROW_HOVER_SELECTED_ACTIVE_CLASS);\n });\n this.hoverRowType = null;\n this.hoverPhysicalIndex = null;\n }\n\n private clearWheelCaptureVisualState(): void {\n const wheelRows = this.revogrid.querySelectorAll('.wheel-capture-row');\n wheelRows.forEach((el) => {\n el.classList.remove(ROW_HOVER_ACTIVE_CLASS);\n el.classList.remove(ROW_HOVER_SELECTED_ACTIVE_CLASS);\n this.clearWheelCaptureSelectionState(el);\n });\n }\n\n private clearWheelCaptureSelectionState(el: Element): void {\n if (el.hasAttribute(SELECTED_ATTRIBUTE)) {\n el.removeAttribute(SELECTED_ATTRIBUTE);\n }\n if (el.hasAttribute('data-highlighted')) {\n el.removeAttribute('data-highlighted');\n }\n if (el.hasAttribute('data-row-bg')) {\n el.removeAttribute('data-row-bg');\n }\n if (el.hasAttribute('data-focused')) {\n el.removeAttribute('data-focused');\n }\n }\n\n private clearRenderedRowStyleAttributes(): void {\n const attrNames = ['data-highlighted', 'data-row-bg', 'data-focused'];\n attrNames.forEach((attrName) => {\n const styledRows = this.revogrid.querySelectorAll(`[${attrName}=\"true\"]`);\n styledRows.forEach((el) => el.removeAttribute(attrName));\n });\n }\n\n private normalizeHoverClasses(\n expectedType: DimensionRows | null,\n expectedPhysicalIndex: number | null,\n ): void {\n this.clearAllHoverClass();\n\n if (expectedType && expectedPhysicalIndex !== null) {\n const applied = this.applyHoverClass(expectedType, expectedPhysicalIndex);\n if (applied) {\n this.hoverRowType = expectedType;\n this.hoverPhysicalIndex = expectedPhysicalIndex;\n } else {\n this.hoverRowType = null;\n this.hoverPhysicalIndex = null;\n }\n } else {\n this.hoverRowType = null;\n this.hoverPhysicalIndex = null;\n }\n }\n\n private updateHoverFromRow(row: HTMLElement | null): void {\n if (!row) {\n this.normalizeHoverClasses(null, null);\n return;\n }\n\n const rowType = this.getRowTypeFromElement(row);\n if (!rowType) {\n return;\n }\n const physicalIndex = this.getPhysicalIndexFromRow(row, rowType);\n if (physicalIndex === null) {\n return;\n }\n\n if (this.hoverRowType === rowType && this.hoverPhysicalIndex === physicalIndex) {\n return;\n }\n\n // 收敛为单一路径:先清空全部 hover,再应用当前目标,避免旧节点残留\n this.normalizeHoverClasses(rowType, physicalIndex);\n }\n\n private syncHoverFromPointer(): void {\n if (this.hoverInteractionSuspended) {\n this.hoverResyncPending = true;\n return;\n }\n\n if (this.hoverMouseDown && this.hoverRowType && this.hoverPhysicalIndex !== null) {\n this.normalizeHoverClasses(this.hoverRowType, this.hoverPhysicalIndex);\n return;\n }\n\n if (!this.hoverLastPointer) {\n this.normalizeHoverClasses(null, null);\n return;\n }\n\n const element = document.elementFromPoint(\n this.hoverLastPointer.x,\n this.hoverLastPointer.y,\n ) as HTMLElement | null;\n\n if (!element || !this.revogrid.contains(element)) {\n const rect = this.revogrid.getBoundingClientRect();\n const isPointerInsideGrid =\n this.hoverLastPointer.x >= rect.left &&\n this.hoverLastPointer.x <= rect.right &&\n this.hoverLastPointer.y >= rect.top &&\n this.hoverLastPointer.y <= rect.bottom;\n\n if (isPointerInsideGrid && this.hoverRowType && this.hoverPhysicalIndex !== null) {\n this.normalizeHoverClasses(this.hoverRowType, this.hoverPhysicalIndex);\n return;\n }\n\n this.normalizeHoverClasses(null, null);\n return;\n }\n\n const row = element.closest('.rgRow') as HTMLElement | null;\n const rowType = this.getRowTypeFromElement(row);\n const physicalIndex = row && rowType ? this.getPhysicalIndexFromRow(row, rowType) : null;\n this.normalizeHoverClasses(rowType, physicalIndex);\n }\n\n private blockHoverRender(): void {\n if (this.hoverRenderBlocked) {\n this.hoverResyncPending = true;\n return;\n }\n this.hoverRenderBlocked = true;\n this.hoverResyncPending = true;\n }\n\n private queueHoverResync(): void {\n if (!this.hoverSyncEnabled) {\n return;\n }\n if (this.hoverInteractionSuspended) {\n this.hoverResyncPending = true;\n return;\n }\n if (this.hoverResyncRaf !== null) {\n cancelAnimationFrame(this.hoverResyncRaf);\n }\n this.hoverResyncRaf = requestAnimationFrame(() => {\n this.hoverResyncRaf = null;\n if (this.hoverRenderBlocked) {\n this.hoverResyncPending = true;\n return;\n }\n this.hoverResyncPending = false;\n this.syncHoverFromPointer();\n });\n }\n\n private scheduleHoverResync(delay = 0): void {\n if (!this.hoverSyncEnabled) {\n return;\n }\n if (this.hoverInteractionSuspended) {\n this.hoverResyncPending = true;\n return;\n }\n if (this.hoverResyncTimer) {\n clearTimeout(this.hoverResyncTimer);\n }\n if (this.hoverRenderBlocked) {\n this.hoverResyncPending = true;\n return;\n }\n this.hoverResyncTimer = setTimeout(() => {\n this.queueHoverResync();\n }, delay);\n }\n\n private queueSelectionAttributeSync(): void {\n if (this.selectionAttributeSyncRaf !== null) {\n return;\n }\n\n this.selectionAttributeSyncRaf = requestAnimationFrame(() => {\n this.selectionAttributeSyncRaf = null;\n if (!this.pendingSelectionAttributeSync) {\n return;\n }\n\n this.pendingSelectionAttributeSync = false;\n this.updateSelectedAttributes();\n if (this.hasAnyRowStyles()) {\n this.rowStyleIds.forEach((styleSet, type) => {\n if (styleSet.size > 0) {\n this.updateRowStyleAttribute(type, this.highlightIdField);\n }\n });\n }\n this.scheduleHoverResync();\n });\n }\n\n private setHoverSuspendedClass(active: boolean): void {\n this.revogrid.classList.toggle('row-hover-suspended', active);\n }\n\n private setupHoverSync(): void {\n this.cleanupHoverSync?.();\n\n this.hoverSyncEnabled = true;\n\n const handleMouseDown = (e: MouseEvent) => {\n if (this.viewportScrolling) {\n return;\n }\n this.hoverMouseDown = true;\n this.hoverLastPointer = { x: e.clientX, y: e.clientY };\n const target = e.target as HTMLElement | null;\n const row = target?.closest ? (target.closest('.rgRow') as HTMLElement | null) : null;\n this.updateHoverFromRow(row);\n };\n\n const handleMouseUp = (e: MouseEvent) => {\n if (this.viewportScrolling) {\n return;\n }\n this.hoverMouseDown = false;\n this.hoverLastPointer = { x: e.clientX, y: e.clientY };\n if (this.hoverInteractionSuspended) {\n this.hoverResyncPending = true;\n return;\n }\n this.syncHoverFromPointer();\n };\n\n const handleMouseMove = (e: MouseEvent) => {\n if (this.viewportScrolling) {\n return;\n }\n if (this.hoverInteractionSuspended) {\n this.hoverLastPointer = { x: e.clientX, y: e.clientY };\n this.hoverResyncPending = true;\n return;\n }\n const now = performance.now();\n if (now - this.lastHoverPointerSyncAt < HOVER_POINTER_SYNC_INTERVAL) {\n this.hoverLastPointer = { x: e.clientX, y: e.clientY };\n return;\n }\n this.lastHoverPointerSyncAt = now;\n if (this.hoverSyncProcessing) return;\n this.hoverSyncProcessing = true;\n\n this.hoverLastPointer = { x: e.clientX, y: e.clientY };\n\n requestAnimationFrame(() => {\n if (this.hoverRenderBlocked) {\n this.hoverSyncProcessing = false;\n return;\n }\n const target = e.target as HTMLElement | null;\n const row = target?.closest ? (target.closest('.rgRow') as HTMLElement | null) : null;\n this.updateHoverFromRow(row);\n this.hoverSyncProcessing = false;\n });\n };\n\n const handleMouseLeave = (e: MouseEvent) => {\n if (this.viewportScrolling) {\n return;\n }\n if (this.hoverInteractionSuspended) {\n return;\n }\n if (this.hoverMouseDown) {\n return;\n }\n\n const relatedTarget = e.relatedTarget as Node | null;\n if (relatedTarget && this.revogrid.contains(relatedTarget)) {\n return;\n }\n\n const pointer = { x: e.clientX, y: e.clientY };\n this.hoverLastPointer = pointer;\n\n requestAnimationFrame(() => {\n const element = document.elementFromPoint(pointer.x, pointer.y) as HTMLElement | null;\n if (element && this.revogrid.contains(element)) {\n const row = element.closest('.rgRow') as HTMLElement | null;\n this.updateHoverFromRow(row);\n return;\n }\n this.clearAllHoverClass();\n this.hoverLastPointer = null;\n });\n };\n\n this.revogrid.addEventListener('mousedown', handleMouseDown as EventListener);\n document.addEventListener('mouseup', handleMouseUp as EventListener);\n this.revogrid.addEventListener('mousemove', handleMouseMove as EventListener);\n this.revogrid.addEventListener('mouseleave', handleMouseLeave as EventListener);\n\n this.cleanupHoverSync = () => {\n this.revogrid.removeEventListener('mousedown', handleMouseDown as EventListener);\n document.removeEventListener('mouseup', handleMouseUp as EventListener);\n this.revogrid.removeEventListener('mousemove', handleMouseMove as EventListener);\n this.revogrid.removeEventListener('mouseleave', handleMouseLeave as EventListener);\n this.hoverMouseDown = false;\n this.hoverSyncProcessing = false;\n this.hoverInteractionSuspended = false;\n this.setHoverSuspendedClass(false);\n this.lastHoverPointerSyncAt = 0;\n };\n }\n\n /**\n * 获取所有子节点的索引(递归)\n */\n private getChildrenIndices(source: DataType[], parentRow: DataType): number[] {\n if (!this.treeConfig) return [];\n\n const { idField, parentIdField } = this.treeConfig;\n const parentId = parentRow[idField];\n const childIndices: number[] = [];\n\n // 遍历所有行,找到子节点\n source.forEach((row, index) => {\n if (row[parentIdField] === parentId) {\n childIndices.push(index);\n // 递归获取子节点的子节点\n const grandChildIndices = this.getChildrenIndices(source, row);\n childIndices.push(...grandChildIndices);\n }\n });\n\n return childIndices;\n }\n\n private isTruthyRowFlag(value: any): boolean {\n return value === '' || value === true || value === 'true';\n }\n\n private getRowIdByPhysicalIndex(\n rowType: DimensionRows,\n physicalIndex: number,\n idField: string,\n ): any {\n const source = this.providers.data.stores[rowType]?.store.get('source');\n const rowData = source?.[physicalIndex];\n return rowData ? rowData[idField] : null;\n }\n\n private logHighlightTrace(event: string, payload: Record<string, any>): void {\n if (!DEBUG_ROW_HIGHLIGHT_TRACE) {\n return;\n }\n console.log('[RowSelectPlugin][highlight]', event, payload);\n }\n\n /**\n * 更新行样式属性\n */\n private updateRowStyleAttribute(type: RowStyleType, idField: string): void {\n if (type === 'highlight') {\n this.logHighlightTrace('updateRowStyleAttribute.start', {\n type,\n idField,\n highlightIds: Array.from(this.rowStyleIds.get(type) || []),\n });\n }\n\n // 先清除该类型的所有样式\n this.clearRowStyleAttribute(type);\n\n const styleSet = this.rowStyleIds.get(type);\n if (!styleSet || styleSet.size === 0) return;\n\n const attrName = type === 'highlight' ? 'data-highlighted' : type === 'focused' ? 'data-focused' : 'data-row-bg';\n\n // 基于当前已渲染行反查 physicalIndex 与 rowData,避免虚拟索引切换窗口期误写导致闪烁\n const renderedRows = this.revogrid.querySelectorAll('.rgRow[data-rgRow]');\n renderedRows.forEach((el) => {\n const rowEl = el as HTMLElement;\n const rowType = this.getRowTypeFromElement(rowEl);\n if (!rowType) {\n return;\n }\n const dataStore = this.providers.data.stores[rowType];\n if (!dataStore) {\n return;\n }\n const physicalIndex = this.getPhysicalIndexFromRow(rowEl, rowType);\n if (physicalIndex === null) {\n return;\n }\n const source = dataStore.store.get('source');\n const rowData = source?.[physicalIndex];\n if (!rowData) {\n return;\n }\n const rowId = rowData[idField];\n if (rowId === undefined || rowId === null) {\n return;\n }\n if (styleSet.has(rowId)) {\n const prevValue = rowEl.getAttribute(attrName);\n rowEl.setAttribute(attrName, 'true');\n if (type === 'highlight') {\n this.logHighlightTrace('updateRowStyleAttribute.set-row-attr', {\n attrName,\n rowType,\n virtualIndex: rowEl.getAttribute('data-rgRow'),\n physicalIndex,\n rowId,\n prevValue,\n nextValue: 'true',\n });\n }\n }\n });\n\n // 更新 revo-grid 元素的属性\n if (type === 'highlight') {\n this.revogrid.setAttribute('data-highlighted-rows', JSON.stringify(Array.from(styleSet)));\n this.logHighlightTrace('updateRowStyleAttribute.set-grid-attr', {\n attrName: 'data-highlighted-rows',\n highlightIds: Array.from(styleSet),\n });\n } else if (type === 'focused') {\n this.revogrid.setAttribute('data-focused-rows', JSON.stringify(Array.from(styleSet)));\n } else {\n this.revogrid.setAttribute('data-row-bg-ids', JSON.stringify(Array.from(styleSet)));\n }\n }\n\n /**\n * 清除行样式属性\n */\n private clearRowStyleAttribute(type: RowStyleType): void {\n const attrName = type === 'highlight' ? 'data-highlighted' : type === 'focused' ? 'data-focused' : 'data-row-bg';\n \n // 移除所有行的样式属性\n const styledRows = this.revogrid.querySelectorAll(`[${attrName}=\"true\"]`);\n if (type === 'highlight') {\n this.logHighlightTrace('clearRowStyleAttribute.start', {\n attrName,\n rowCount: styledRows.length,\n });\n }\n styledRows.forEach((el) => {\n if (type === 'highlight') {\n const row = el as HTMLElement;\n const rowType = this.getRowTypeFromElement(row);\n const physicalIndex = rowType ? this.getPhysicalIndexFromRow(row, rowType) : null;\n const rowId =\n rowType && physicalIndex !== null\n ? this.getRowIdByPhysicalIndex(rowType, physicalIndex, this.highlightIdField)\n : null;\n this.logHighlightTrace('clearRowStyleAttribute.remove-row-attr', {\n attrName,\n rowType,\n virtualIndex: row.getAttribute('data-rgRow'),\n physicalIndex,\n rowId,\n });\n }\n el.removeAttribute(attrName);\n });\n\n // 移除 revo-grid 元素的属性\n if (type === 'highlight') {\n this.revogrid.removeAttribute('data-highlighted-rows');\n this.logHighlightTrace('clearRowStyleAttribute.remove-grid-attr', {\n attrName: 'data-highlighted-rows',\n });\n } else if (type === 'focused') {\n this.revogrid.removeAttribute('data-focused-rows');\n } else {\n this.revogrid.removeAttribute('data-row-bg-ids');\n }\n }\n\n private hasAnySelectedRows(): boolean {\n return (\n !!this.selected.get('rowPinStart')?.size ||\n !!this.selected.get('rgRow')?.size ||\n !!this.selected.get('rowPinEnd')?.size\n );\n }\n\n private hasAnyRowStyles(): boolean {\n return (\n !!this.rowStyleIds.get('highlight')?.size ||\n !!this.rowStyleIds.get('background')?.size ||\n !!this.rowStyleIds.get('focused')?.size\n );\n }\n\n private getRowStyleFlags(rowType: DimensionRows, physicalIndex: number): RowStyleFlags {\n const source = this.providers.data.stores[rowType]?.store.get('source');\n const rowData = source?.[physicalIndex];\n if (!rowData) {\n return {\n highlighted: false,\n background: false,\n focused: false,\n };\n }\n\n const id = rowData[this.highlightIdField];\n if (id === undefined || id === null) {\n return {\n highlighted: false,\n background: false,\n focused: false,\n };\n }\n\n return {\n highlighted: !!this.rowStyleIds.get('highlight')?.has(id),\n background: !!this.rowStyleIds.get('background')?.has(id),\n focused: !!this.rowStyleIds.get('focused')?.has(id),\n };\n }\n\n private applyRowStyleFlagsToAttrs(\n attrs: Record<string, any>,\n flags: RowStyleFlags,\n context?: Record<string, any>,\n ): void {\n const prevHighlighted = this.isTruthyRowFlag(attrs['data-highlighted']);\n const setFlag = (attrName: string, enabled: boolean) => {\n if (enabled) {\n attrs[attrName] = 'true';\n return;\n }\n if (attrName in attrs) {\n delete attrs[attrName];\n }\n };\n\n setFlag('data-highlighted', flags.highlighted);\n setFlag('data-row-bg', flags.background);\n setFlag('data-focused', flags.focused);\n const nextHighlighted = this.isTruthyRowFlag(attrs['data-highlighted']);\n if (prevHighlighted !== nextHighlighted || nextHighlighted) {\n this.logHighlightTrace('applyRowStyleFlagsToAttrs', {\n ...context,\n flags,\n prevHighlighted,\n nextHighlighted,\n });\n }\n }\n\n /**\n * 判断是否为复选框列\n */\n private isCheckboxColumn(column: ColumnRegular): boolean {\n if (column.columnType && this.revogrid.columnTypes?.[column.columnType] instanceof CheckboxCellType) {\n return true;\n }\n return !!column.rowSelect;\n }\n\n /**\n * 获取选中状态统计\n */\n private getSelectionStatus(): SelectionStatus {\n let isAllSelected = true;\n let hasAnySelected = false;\n let visibleSelectedCount = 0;\n let totalSelectedCount = 0;\n let totalRowCount = 0;\n\n this.selected.forEach((selectedSet, rowType) => {\n totalSelectedCount += selectedSet.size;\n\n const dataStore = this.providers.data.stores[rowType];\n const source = dataStore.store.get('source');\n // 使用 proxyItems(所有行,包括折叠的)来计算全选状态\n const proxyItems = dataStore.store.get('proxyItems');\n const items = dataStore.store.get('items');\n \n // 计算所有数据行(排除分组行)\n proxyItems.forEach((itemIndex: number) => {\n const rowData = source[itemIndex];\n // 跳过分组行(分组行有 __rvgr-depth 标记)\n if (rowData && rowData['__rvgr-depth'] !== undefined) {\n return;\n }\n \n totalRowCount++;\n \n if (selectedSet.has(itemIndex)) {\n hasAnySelected = true;\n } else {\n isAllSelected = false;\n }\n });\n\n // 计算可见的选中行数\n items.forEach((itemIndex: number) => {\n const rowData = source[itemIndex];\n if (rowData && rowData['__rvgr-depth'] !== undefined) {\n return;\n }\n if (selectedSet.has(itemIndex)) {\n visibleSelectedCount++;\n }\n });\n });\n\n // 如果没有数据行,则不应该显示为全选状态\n if (totalRowCount === 0) {\n isAllSelected = false;\n }\n\n return {\n isSelected: isAllSelected,\n anySelected: hasAnySelected,\n visibleSelectedItems: visibleSelectedCount,\n allSelectedItems: totalSelectedCount,\n hasData: totalRowCount > 0,\n };\n }\n\n /**\n * 发出选中状态变化事件\n */\n private emitSelectionChange(): void {\n const status = this.getSelectionStatus();\n const detail: RowSelectedEventDetail = {\n selected: this.selected,\n count: status.allSelectedItems,\n allRowsCount: ROW_TYPES.reduce(\n (total, type) => total + this.providers.data.stores[type].store.get('proxyItems').length,\n 0,\n ),\n visibleCount: status.visibleSelectedItems,\n visibleRowsCount: ROW_TYPES.reduce(\n (total, type) => total + this.providers.data.stores[type].store.get('items').length,\n 0,\n ),\n };\n this.emit(ROW_SELECTED_EVENT, detail);\n }\n\n /**\n * 刷新视口以更新 UI\n */\n private updateSelectedRowsAttribute(): void {\n const selectedIndices: number[] = [];\n const rgSelectedIndices: number[] = [];\n this.selected.forEach((selectedSet) => {\n selectedSet.forEach((index) => selectedIndices.push(index));\n });\n this.selected.get('rgRow')?.forEach((index) => rgSelectedIndices.push(index));\n this.revogrid.setAttribute('data-selected-rows', JSON.stringify(selectedIndices));\n this.revogrid.setAttribute('data-selected-rg-rows', JSON.stringify(rgSelectedIndices));\n }\n\n private getSelectionKeyField(rowType: DimensionRows): string {\n if (rowType === 'rgRow' && this.treeConfig?.idField) {\n return this.treeConfig.idField;\n }\n return this.highlightIdField;\n }\n\n private isGroupingRowData(row: DataType | undefined): boolean {\n return !!row && (row as any)['__rvgr-depth'] !== undefined;\n }\n\n private capturePendingSelectionRemap(rowType: DimensionRows): void {\n const selectedSet = this.selected.get(rowType);\n if (!selectedSet || selectedSet.size === 0) {\n this.pendingSelectionRemapByType.delete(rowType);\n return;\n }\n\n const keyField = this.getSelectionKeyField(rowType);\n const source = this.providers.data.stores[rowType]?.store.get('source') as DataType[] | undefined;\n if (!source?.length) {\n this.pendingSelectionRemapByType.delete(rowType);\n return;\n }\n\n const keys: any[] = [];\n const rows: DataType[] = [];\n selectedSet.forEach((physicalIndex) => {\n const row = source[physicalIndex];\n if (!row || this.isGroupingRowData(row)) {\n return;\n }\n rows.push(row);\n const key = row[keyField];\n if (key === undefined || key === null) {\n return;\n }\n keys.push(key);\n });\n\n if (!keys.length && !rows.length) {\n this.pendingSelectionRemapByType.delete(rowType);\n return;\n }\n\n this.pendingSelectionRemapByType.set(rowType, {\n keyField,\n keys: Array.from(new Set(keys)),\n rows,\n });\n }\n\n private applyPendingSelectionRemap(rowType: DimensionRows, nextSource?: DataType[]): boolean {\n const pending = this.pendingSelectionRemapByType.get(rowType);\n this.pendingSelectionRemapByType.delete(rowType);\n if (!pending || (!pending.keys?.length && !pending.rows?.length)) {\n return false;\n }\n\n const selectedSet = this.selected.get(rowType);\n if (!selectedSet) {\n return false;\n }\n\n const source =\n nextSource ||\n (this.providers.data.stores[rowType]?.store.get('source') as DataType[] | undefined) ||\n [];\n if (!source.length) {\n selectedSet.clear();\n this.lastSelectedIndex = undefined;\n return true;\n }\n\n const duplicateKeys = new Set<any>();\n const keyToPhysicalIndex = new Map<any, number>();\n const rowToPhysicalIndex = new Map<DataType, number>();\n\n source.forEach((row, physicalIndex) => {\n if (!row || this.isGroupingRowData(row)) {\n return;\n }\n rowToPhysicalIndex.set(row, physicalIndex);\n const key = row[pending.keyField];\n if (key === undefined || key === null) {\n return;\n }\n if (keyToPhysicalIndex.has(key)) {\n duplicateKeys.add(key);\n keyToPhysicalIndex.delete(key);\n return;\n }\n if (!duplicateKeys.has(key)) {\n keyToPhysicalIndex.set(key, physicalIndex);\n }\n });\n\n const nextSelected = new Set<number>();\n pending.rows.forEach((row) => {\n const physicalIndex = rowToPhysicalIndex.get(row);\n if (physicalIndex !== undefined) {\n nextSelected.add(physicalIndex);\n }\n });\n pending.keys.forEach((key) => {\n if (duplicateKeys.has(key)) {\n return;\n }\n const physicalIndex = keyToPhysicalIndex.get(key);\n if (physicalIndex !== undefined) {\n nextSelected.add(physicalIndex);\n }\n });\n\n selectedSet.clear();\n nextSelected.forEach((index) => selectedSet.add(index));\n\n if (this.lastSelectedIndex !== undefined && !selectedSet.has(this.lastSelectedIndex)) {\n this.lastSelectedIndex = undefined;\n }\n\n return true;\n }\n\n private refreshViewports(): void {\n // 更新 revo-grid 元素的 data-selected-rows 属性\n this.updateSelectedRowsAttribute();\n \n // 刷新列视口\n VIEWPORT_TYPES.forEach((viewportType) => {\n const { store } = this.providers.viewport.stores[viewportType];\n store.set('items', [...store.get('items')]);\n });\n \n // 刷新 grouping-overlay 组件\n const groupingOverlays = this.revogrid.querySelectorAll('revogr-grouping-overlay');\n groupingOverlays.forEach((overlay: any) => {\n if (overlay.refresh) {\n overlay.refresh();\n }\n });\n\n // 刷新后在下一帧同步样式和选中状态,避免 setTimeout 带来的“慢一拍”视觉延迟\n if (this.postRefreshSyncRaf !== null) {\n cancelAnimationFrame(this.postRefreshSyncRaf);\n }\n this.postRefreshSyncRaf = requestAnimationFrame(() => {\n this.postRefreshSyncRaf = null;\n\n // 重新应用行样式\n this.rowStyleIds.forEach((styleSet, type) => {\n if (styleSet.size > 0) {\n this.updateRowStyleAttribute(type, this.highlightIdField);\n }\n });\n\n // 重新应用选中状态到DOM元素\n this.updateSelectedAttributes();\n });\n }\n\n private markViewportScrolling(): void {\n this.viewportScrolling = true;\n this.hoverInteractionSuspended = true;\n this.setHoverSuspendedClass(true);\n this.hoverSyncProcessing = false;\n this.clearAllHoverClass();\n if (this.hoverResyncTimer) {\n clearTimeout(this.hoverResyncTimer);\n this.hoverResyncTimer = null;\n }\n if (this.hoverResyncRaf !== null) {\n cancelAnimationFrame(this.hoverResyncRaf);\n this.hoverResyncRaf = null;\n }\n if (this.viewportScrollIdleTimer) {\n clearTimeout(this.viewportScrollIdleTimer);\n }\n this.viewportScrollIdleTimer = setTimeout(() => {\n this.viewportScrollIdleTimer = null;\n this.viewportScrolling = false;\n this.hoverInteractionSuspended = false;\n this.setHoverSuspendedClass(false);\n if (this.pendingWheelSelectionSyncAfterScroll) {\n this.pendingWheelSelectionSyncAfterScroll = false;\n this.queueWheelRowSelectionSync(true);\n }\n if (this.hoverSyncEnabled && this.hoverLastPointer) {\n this.queueHoverResync();\n }\n }, VIEWPORT_SCROLL_IDLE_DELAY);\n }\n\n private queueWheelRowSelectionSync(force = false): void {\n if (force && !this.viewportScrolling) {\n this.updateWheelCaptureSelectedAttributes();\n return;\n }\n const now = performance.now();\n if (\n !force &&\n this.viewportScrolling &&\n now - this.lastWheelSelectionSyncAt < WHEEL_SELECTION_SYNC_INTERVAL_ACTIVE\n ) {\n this.pendingWheelSelectionSyncAfterScroll = true;\n return;\n }\n if (this.wheelRowSelectionSyncRaf !== null) {\n if (this.viewportScrolling) {\n this.pendingWheelSelectionSyncAfterScroll = true;\n }\n return;\n }\n\n this.wheelRowSelectionSyncRaf = requestAnimationFrame(() => {\n this.wheelRowSelectionSyncRaf = null;\n this.lastWheelSelectionSyncAt = performance.now();\n this.updateWheelCaptureSelectedAttributes();\n });\n }\n\n private updateWheelCaptureSelectedAttributes(): void {\n const wheelRows = this.revogrid.querySelectorAll('.wheel-capture-row');\n wheelRows.forEach((el) => this.clearWheelCaptureSelectionState(el));\n }\n\n /**\n * 更新所有行的选中属性\n * 用于确保展开分组后,之前被折叠的行也能正确显示选中状态\n */\n private updateSelectedAttributes(): void {\n const rowElements = this.revogrid.querySelectorAll('.rgRow[data-rgRow]');\n rowElements.forEach((el) => {\n const row = el as HTMLElement;\n const rowType = this.getRowTypeFromElement(row);\n if (!rowType) {\n return;\n }\n\n const physicalIndex = this.getPhysicalIndexFromRow(row, rowType);\n if (physicalIndex === null) {\n return;\n }\n\n const isSelected = !!this.selected.get(rowType)?.has(physicalIndex);\n if (isSelected) {\n row.setAttribute(SELECTED_ATTRIBUTE, 'true');\n } else {\n row.removeAttribute(SELECTED_ATTRIBUTE);\n }\n });\n\n this.updateWheelCaptureSelectedAttributes();\n }\n\n /**\n * 创建列头模板\n */\n private createHeaderTemplate(columnData: ColumnRegular): any {\n const originalTemplate = columnData.columnTemplate;\n const checkboxTemplate = this.checkboxCellType.columnTemplate;\n const customTemplate = this.customHeaderCheckboxTemplate;\n\n return (h: HyperFunc<VNode>, props: ColumnTemplateProp, additionalData?: any) => {\n const status = this.getSelectionStatus();\n\n // 如果有自定义模板,使用自定义模板\n if (customTemplate) {\n return customTemplate(h, {\n allSelected: status.isSelected,\n indeterminate: status.anySelected && !status.isSelected,\n onClick: (event: MouseEvent) => {\n event.preventDefault();\n const detail: RowAllSelectDetail = {\n type: props.providers.type as DimensionRows,\n selected: !status.isSelected,\n };\n dispatchCustomEvent(event, ROW_ALL_SELECT_EVENT, detail);\n },\n // 传递完整的 props 和 additionalData,方便 Vue 组件使用\n props,\n additionalData,\n });\n }\n\n const extendedProps = {\n ...props,\n allSelected: status.isSelected,\n allIndeterminate: status.anySelected,\n };\n\n if (originalTemplate) {\n return originalTemplate(h, extendedProps as any, additionalData);\n }\n return checkboxTemplate(h, extendedProps);\n };\n }\n\n /**\n * 创建单元格复选框模板\n */\n private createCellCheckboxTemplate(): CellTemplate {\n const defaultTemplate = this.checkboxCellType.cellTemplate;\n const customTemplate = this.customCheckboxTemplate;\n\n return (h: HyperFunc<VNode>, props: any, additionalData?: any) => {\n // 如果有自定义模板,使用自定义模板\n if (customTemplate) {\n return customTemplate(h, {\n selected: !!props.selected,\n onClick: (event: MouseEvent) => {\n event.preventDefault();\n const detail: RowSelectClickDetail = {\n ...props,\n originalEvent: event,\n };\n dispatchCustomEvent(event, ROW_SELECT_CLICK_EVENT, detail);\n },\n // 传递完整的 props 和 additionalData,方便 Vue 组件使用\n props,\n additionalData,\n });\n }\n\n return defaultTemplate(h, props, additionalData);\n };\n }\n\n /**\n * 单元格模板包装器 - 注入选中状态\n */\n private cellTemplateWrapper(_h: HyperFunc<VNode>, props: any): string {\n const dataStore = this.providers.data.stores[props.providers.type as DimensionRows];\n const physicalIndex = getPhysicalRowIndex(dataStore.store, props.rowIndex);\n const isSelected = this.selected.get(props.type)?.has(physicalIndex);\n props.selected = !!isSelected;\n return '';\n }\n\n destroy(): void {\n this.cleanupHoverSync?.();\n this.cleanupHoverSync = null;\n\n if (this.hoverResyncTimer) {\n clearTimeout(this.hoverResyncTimer);\n this.hoverResyncTimer = null;\n }\n if (this.hoverResyncRaf !== null) {\n cancelAnimationFrame(this.hoverResyncRaf);\n this.hoverResyncRaf = null;\n }\n if (this.viewportScrollIdleTimer) {\n clearTimeout(this.viewportScrollIdleTimer);\n this.viewportScrollIdleTimer = null;\n }\n this.hoverInteractionSuspended = false;\n this.setHoverSuspendedClass(false);\n this.viewportScrolling = false;\n this.pendingWheelSelectionSyncAfterScroll = false;\n this.lastHoverPointerSyncAt = 0;\n\n if (this.selectionAttributeSyncRaf !== null) {\n cancelAnimationFrame(this.selectionAttributeSyncRaf);\n this.selectionAttributeSyncRaf = null;\n }\n if (this.postRefreshSyncRaf !== null) {\n cancelAnimationFrame(this.postRefreshSyncRaf);\n this.postRefreshSyncRaf = null;\n }\n if (this.wheelRowSelectionSyncRaf !== null) {\n cancelAnimationFrame(this.wheelRowSelectionSyncRaf);\n this.wheelRowSelectionSyncRaf = null;\n }\n this.pendingSelectionAttributeSync = false;\n this.pendingSelectionRemapByType.clear();\n\n if (this.styleElement?.parentNode) {\n this.styleElement.parentNode.removeChild(this.styleElement);\n }\n this.styleElement = undefined;\n\n this.selected.clear();\n super.destroy();\n }\n}\n","import type { PluginProviders, ViewPortScrollEvent, DimensionType } from '@type';\nimport { BasePlugin } from './base.plugin';\n\n/** 调试开关:临时停用 PinShadowPlugin 的阴影样式逻辑 */\nconst ENABLE_PIN_SHADOW_PLUGIN_STYLES = true;\n\n/**\n * 冻结列阴影插件\n * 只有在内容滚动时才显示冻结列的阴影,类似 position: sticky 效果\n * 同时支持头部阴影,垂直滚动时显示\n */\nexport class PinShadowPlugin extends BasePlugin {\n private static readonly SHADOW_SYNC_FRAMES = 2;\n private static readonly VIEWPORT_RECOVERY_COOLDOWN = 120;\n private static readonly COVERAGE_CHECK_INTERVAL = 96;\n\n private scrollTop = 0;\n private maxScrollLeft = 0;\n private syncFrameId: number | null = null;\n private pendingHorizontalSync = false;\n private pendingVerticalSync = false;\n private pinShadowSyncFrameId: number | null = null;\n private pinShadowSyncFrameCount = 0;\n private lastViewportRecoveryAt = 0;\n\n private mainViewportEl: HTMLElement | null = null;\n private verticalScrollEl: HTMLElement | null = null;\n private viewportsContainerEl: HTMLElement | null = null;\n private pinStartViewportEl: HTMLElement | null = null;\n private pinEndViewportEl: HTMLElement | null = null;\n private headerEl: HTMLElement | null = null;\n private pinStartWidth = 0;\n private pinEndWidth = 0;\n private headerHeight = 0;\n private hasVerticalScrollSpace = false;\n private pinStartShadowApplied = false;\n private pinEndShadowApplied = false;\n private headerShadowApplied = false;\n private pinStartShadowOffset = '';\n private pinEndShadowOffset = '';\n private headerShadowOffset = '';\n private lastMainScrollLeft = 0;\n private lastPinShadowSnapshot: {\n scrollLeft: number;\n maxScrollLeft: number;\n pinStartWidth: number;\n pinEndWidth: number;\n } | null = null;\n private lastCoverageCheckAt = 0;\n\n private readonly onMainViewportScroll = () => {\n if (this.isResizing) {\n return;\n }\n const nextScrollLeft = this.mainViewportEl?.scrollLeft || 0;\n if (nextScrollLeft === this.lastMainScrollLeft) {\n return;\n }\n this.lastMainScrollLeft = nextScrollLeft;\n this.scheduleDomSync(true, false);\n };\n\n private readonly onVerticalViewportScroll = () => {\n if (this.isResizing) {\n return;\n }\n this.scrollTop = this.verticalScrollEl?.scrollTop || this.scrollTop;\n if (this.shouldSyncHeaderShadow(this.scrollTop)) {\n this.scheduleDomSync(false, true);\n }\n };\n\n // resize 防抖定时器\n private resizeDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n \n // 是否正在 resize\n private isResizing = false;\n \n // 防抖延迟时间(毫秒)\n private static readonly RESIZE_DEBOUNCE_DELAY = 200;\n private static readonly VERTICAL_SCROLL_THRESHOLD = 10;\n\n constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders) {\n super(revogrid, providers);\n\n if (!ENABLE_PIN_SHADOW_PLUGIN_STYLES) {\n this.clearShadowState();\n return;\n }\n\n // 监听滚动事件\n this.addEventListener(\n 'viewportscroll',\n (e: CustomEvent<ViewPortScrollEvent>) => {\n this.onScroll(e.detail);\n },\n );\n\n // 直接监听原始 scrollviewport(来自 viewport 组件),\n // 在下一帧从 DOM 读取真实 scrollLeft/scrollTop,避免代理链路竞态导致阴影偶现异常。\n this.addEventListener(\n 'scrollviewport',\n (e: CustomEvent<ViewPortScrollEvent>) => {\n const isHorizontal = e.detail.dimension === 'rgCol';\n const isVertical = e.detail.dimension === 'rgRow';\n if (isVertical && typeof e.detail.coordinate === 'number') {\n this.scrollTop = e.detail.coordinate;\n }\n const shouldSyncVertical =\n isVertical && typeof e.detail.coordinate === 'number'\n ? this.shouldSyncHeaderShadow(this.scrollTop)\n : false;\n this.scheduleDomSync(isHorizontal, shouldSyncVertical);\n },\n );\n\n // 监听 aftergridrender 初始化状态\n this.addEventListener('aftergridrender', () => {\n // 使用 requestAnimationFrame 确保 DOM 更新完成后再获取滚动位置\n requestAnimationFrame(() => {\n this.bindViewportDomListeners();\n this.refreshVerticalScrollPosition();\n this.updatePinShadow(true);\n this.updateHeaderShadow(this.scrollTop);\n });\n });\n\n // 监听 viewport resize 事件\n this.addEventListener('resizeviewport', () => {\n this.onResize();\n });\n\n // 跟随视口滚动可见性变化更新垂直滚动空间状态,避免仅靠缓存导致头部阴影状态陈旧\n this.addEventListener(\n 'scrollchange',\n (e: CustomEvent<{ type: DimensionType; hasScroll: boolean }>) => {\n if (e.detail?.type !== 'rgRow') {\n return;\n }\n\n const nextHasVerticalScrollSpace = !!e.detail.hasScroll;\n if (nextHasVerticalScrollSpace === this.hasVerticalScrollSpace) {\n return;\n }\n\n this.hasVerticalScrollSpace = nextHasVerticalScrollSpace;\n if (!nextHasVerticalScrollSpace) {\n this.setHeaderShadow(false);\n return;\n }\n if (this.scrollTop > 0) {\n this.scheduleDomSync(false, true);\n }\n },\n );\n }\n\n private cacheStaticElements(force = false) {\n if (force || !this.viewportsContainerEl || !this.viewportsContainerEl.isConnected) {\n this.viewportsContainerEl = this.revogrid.querySelector('.viewports') as HTMLElement | null;\n }\n if (force || !this.pinStartViewportEl || !this.pinStartViewportEl.isConnected) {\n this.pinStartViewportEl = this.revogrid.querySelector(\n 'revogr-viewport-scroll.colPinStart',\n ) as HTMLElement | null;\n }\n if (force || !this.pinEndViewportEl || !this.pinEndViewportEl.isConnected) {\n this.pinEndViewportEl = this.revogrid.querySelector(\n 'revogr-viewport-scroll.colPinEnd',\n ) as HTMLElement | null;\n }\n if (force || !this.headerEl || !this.headerEl.isConnected) {\n const unifiedHeader = this.revogrid.querySelector('revogr-header-unified') as HTMLElement | null;\n const basicHeader = this.revogrid.querySelector('revogr-header') as HTMLElement | null;\n this.headerEl = unifiedHeader || basicHeader;\n }\n }\n\n private refreshStaticMetrics() {\n this.pinStartWidth = this.pinStartViewportEl?.offsetWidth || 0;\n this.pinEndWidth = this.pinEndViewportEl?.offsetWidth || 0;\n this.headerHeight = this.headerEl?.clientHeight || 0;\n if (this.verticalScrollEl) {\n const maxScrollTop = this.verticalScrollEl.scrollHeight - this.verticalScrollEl.clientHeight;\n this.hasVerticalScrollSpace = maxScrollTop > PinShadowPlugin.VERTICAL_SCROLL_THRESHOLD;\n } else {\n this.hasVerticalScrollSpace = false;\n }\n }\n\n private clearShadowState() {\n this.cacheStaticElements();\n if (this.viewportsContainerEl) {\n this.viewportsContainerEl.classList.remove('pin-start-shadow');\n this.viewportsContainerEl.classList.remove('pin-end-shadow');\n this.viewportsContainerEl.style.removeProperty('--pin-start-shadow-offset');\n this.viewportsContainerEl.style.removeProperty('--pin-end-shadow-offset');\n }\n\n this.revogrid.classList.remove('header-shadow');\n this.revogrid.style.removeProperty('--header-shadow-offset');\n this.pinStartShadowApplied = false;\n this.pinEndShadowApplied = false;\n this.headerShadowApplied = false;\n this.pinStartShadowOffset = '';\n this.pinEndShadowOffset = '';\n this.headerShadowOffset = '';\n this.lastPinShadowSnapshot = null;\n this.lastCoverageCheckAt = 0;\n }\n\n private bindViewportDomListeners() {\n const nextMainViewport = this.revogrid.querySelector(\n 'revogr-viewport-scroll.rgCol',\n ) as HTMLElement | null;\n\n const nextVerticalScroll = this.revogrid.querySelector(\n 'revogr-viewport-scroll.rgCol .vertical-inner',\n ) as HTMLElement | null;\n\n if (this.mainViewportEl !== nextMainViewport) {\n this.mainViewportEl?.removeEventListener('scroll', this.onMainViewportScroll);\n this.mainViewportEl = nextMainViewport;\n this.mainViewportEl?.addEventListener('scroll', this.onMainViewportScroll, { passive: true });\n this.lastMainScrollLeft = this.mainViewportEl?.scrollLeft || 0;\n }\n\n if (this.verticalScrollEl !== nextVerticalScroll) {\n this.verticalScrollEl?.removeEventListener('scroll', this.onVerticalViewportScroll);\n this.verticalScrollEl = nextVerticalScroll;\n this.verticalScrollEl?.addEventListener('scroll', this.onVerticalViewportScroll, { passive: true });\n }\n\n this.cacheStaticElements(true);\n this.refreshStaticMetrics();\n }\n\n private ensureViewportBindings() {\n const needViewportRebind =\n !this.mainViewportEl ||\n !this.mainViewportEl.isConnected ||\n !this.verticalScrollEl ||\n !this.verticalScrollEl.isConnected;\n\n if (needViewportRebind) {\n this.bindViewportDomListeners();\n return;\n }\n\n const needStaticRefresh =\n !this.viewportsContainerEl ||\n !this.viewportsContainerEl.isConnected ||\n (this.pinStartViewportEl !== null && !this.pinStartViewportEl.isConnected) ||\n (this.pinEndViewportEl !== null && !this.pinEndViewportEl.isConnected) ||\n (this.headerEl !== null && !this.headerEl.isConnected);\n\n if (needStaticRefresh) {\n this.cacheStaticElements(true);\n this.refreshStaticMetrics();\n }\n }\n\n private schedulePinShadowSync() {\n if (this.pinShadowSyncFrameId !== null) {\n return;\n }\n\n this.pinShadowSyncFrameCount = 0;\n const tick = () => {\n this.pinShadowSyncFrameId = null;\n\n if (this.isResizing) {\n return;\n }\n\n this.ensureViewportBindings();\n this.updatePinShadow();\n\n this.pinShadowSyncFrameCount += 1;\n if (this.pinShadowSyncFrameCount < PinShadowPlugin.SHADOW_SYNC_FRAMES) {\n this.pinShadowSyncFrameId = requestAnimationFrame(tick);\n }\n };\n\n this.pinShadowSyncFrameId = requestAnimationFrame(tick);\n }\n\n private shouldSyncHeaderShadow(scrollTop: number): boolean {\n const shouldShowHeaderShadow = this.hasVerticalScrollSpace && scrollTop > 0;\n return shouldShowHeaderShadow !== this.headerShadowApplied;\n }\n\n private scheduleDomSync(horizontal = false, vertical = false) {\n if (this.isResizing) {\n return;\n }\n\n // 没有任何待同步内容时不进入 RAF,避免滚动中无效的 DOM 绑定/查询\n if (!horizontal && !vertical) {\n return;\n }\n\n if (horizontal) {\n this.pendingHorizontalSync = true;\n }\n if (vertical) {\n this.pendingVerticalSync = true;\n }\n\n if (this.syncFrameId !== null) {\n return;\n }\n\n this.syncFrameId = requestAnimationFrame(() => {\n this.syncFrameId = null;\n\n this.ensureViewportBindings();\n\n if (this.pendingHorizontalSync) {\n this.updatePinShadow();\n }\n if (this.pendingVerticalSync) {\n this.updateHeaderShadow(this.scrollTop);\n }\n\n this.pendingHorizontalSync = false;\n this.pendingVerticalSync = false;\n });\n }\n\n /**\n * 处理 resize 事件,使用防抖避免频繁更新\n */\n private onResize() {\n // 进入 resize 状态:拖拽过程中保持当前阴影显隐状态,\n // 仅同步偏移,避免 class 被清空后反复加回造成闪烁。\n if (!this.isResizing) {\n this.isResizing = true;\n }\n\n this.syncShadowOffsetsDuringResize();\n \n // 清除之前的定时器\n if (this.resizeDebounceTimer) {\n clearTimeout(this.resizeDebounceTimer);\n }\n \n // 设置新的定时器,只有在 200ms 内没有新的调用时才执行\n this.resizeDebounceTimer = setTimeout(() => {\n this.resizeDebounceTimer = null;\n this.isResizing = false;\n \n // resize 稳定后,重新获取滚动位置并更新阴影\n requestAnimationFrame(() => {\n this.bindViewportDomListeners();\n this.refreshVerticalScrollPosition();\n this.updatePinShadow(true);\n this.updateHeaderShadow(this.scrollTop);\n });\n }, PinShadowPlugin.RESIZE_DEBOUNCE_DELAY);\n }\n\n /**\n * resize 进行中同步阴影偏移,不切换显隐状态,避免头部/冻结列阴影闪烁\n */\n private syncShadowOffsetsDuringResize() {\n this.cacheStaticElements();\n this.refreshStaticMetrics();\n this.setPinStartShadow(this.pinStartShadowApplied);\n this.setPinEndShadow(this.pinEndShadowApplied);\n this.setHeaderShadow(this.headerShadowApplied);\n }\n\n /**\n * 从 DOM 中重新获取当前的垂直滚动位置(仅用于初始化/重布局后的兜底)\n */\n private refreshVerticalScrollPosition() {\n if (this.verticalScrollEl) {\n this.scrollTop = this.verticalScrollEl.scrollTop || 0;\n }\n }\n\n private onScroll(e: ViewPortScrollEvent) {\n if (this.isResizing) {\n return;\n }\n\n // 处理水平滚动\n if (e.dimension === 'rgCol') {\n if (e.coordinate === this.lastMainScrollLeft) {\n return;\n }\n this.lastMainScrollLeft = e.coordinate;\n this.scheduleDomSync(true, false);\n }\n\n // 处理垂直滚动\n if (e.dimension === 'rgRow') {\n this.scrollTop = e.coordinate;\n if (this.shouldSyncHeaderShadow(this.scrollTop)) {\n this.scheduleDomSync(false, true);\n }\n }\n }\n\n private setPinStartShadow(active: boolean) {\n if (!this.viewportsContainerEl) {\n return;\n }\n if (active) {\n const offset = `${this.pinStartWidth}px`;\n if (this.pinStartShadowOffset !== offset) {\n this.pinStartShadowOffset = offset;\n this.viewportsContainerEl.style.setProperty('--pin-start-shadow-offset', offset);\n }\n }\n if (this.pinStartShadowApplied !== active) {\n this.pinStartShadowApplied = active;\n this.viewportsContainerEl.classList.toggle('pin-start-shadow', active);\n }\n }\n\n private setPinEndShadow(active: boolean) {\n if (!this.viewportsContainerEl) {\n return;\n }\n if (active) {\n const offset = `-${this.pinEndWidth}px`;\n if (this.pinEndShadowOffset !== offset) {\n this.pinEndShadowOffset = offset;\n this.viewportsContainerEl.style.setProperty('--pin-end-shadow-offset', offset);\n }\n }\n if (this.pinEndShadowApplied !== active) {\n this.pinEndShadowApplied = active;\n this.viewportsContainerEl.classList.toggle('pin-end-shadow', active);\n }\n }\n\n private setHeaderShadow(active: boolean) {\n if (active) {\n const offset = `${this.headerHeight}px`;\n if (this.headerShadowOffset !== offset) {\n this.headerShadowOffset = offset;\n this.revogrid.style.setProperty('--header-shadow-offset', offset);\n }\n }\n if (this.headerShadowApplied !== active) {\n this.headerShadowApplied = active;\n this.revogrid.classList.toggle('header-shadow', active);\n }\n }\n\n private updatePinShadow(force = false) {\n // 滚动阈值:小于此值认为没有实际滚动空间(忽略边框、padding 等微小差异)\n const SCROLL_THRESHOLD = 10;\n const START_THRESHOLD = 2;\n\n if (this.isResizing) {\n return;\n }\n\n this.cacheStaticElements();\n\n if (!this.viewportsContainerEl || !this.mainViewportEl) {\n this.setPinStartShadow(false);\n this.setPinEndShadow(false);\n return;\n }\n\n const mainViewport = this.mainViewportEl as HTMLRevogrViewportScrollElement;\n const effectiveScrollLeft = mainViewport.scrollLeft || 0;\n const contentWidth = mainViewport.contentWidth || 0;\n const clientWidth = mainViewport.clientWidth || 0;\n this.maxScrollLeft = Math.max(0, contentWidth - clientWidth);\n\n const normalizedScrollLeft = Math.max(0, Math.min(this.maxScrollLeft, effectiveScrollLeft));\n this.lastMainScrollLeft = normalizedScrollLeft;\n\n const snapshot = this.lastPinShadowSnapshot;\n if (\n !force &&\n snapshot &&\n snapshot.scrollLeft === normalizedScrollLeft &&\n snapshot.maxScrollLeft === this.maxScrollLeft &&\n snapshot.pinStartWidth === this.pinStartWidth &&\n snapshot.pinEndWidth === this.pinEndWidth\n ) {\n return;\n }\n this.lastPinShadowSnapshot = {\n scrollLeft: normalizedScrollLeft,\n maxScrollLeft: this.maxScrollLeft,\n pinStartWidth: this.pinStartWidth,\n pinEndWidth: this.pinEndWidth,\n };\n\n const nowPerf = performance.now();\n const shouldCheckCoverage =\n force ||\n this.lastCoverageCheckAt === 0 ||\n nowPerf - this.lastCoverageCheckAt >= PinShadowPlugin.COVERAGE_CHECK_INTERVAL;\n if (shouldCheckCoverage) {\n this.lastCoverageCheckAt = nowPerf;\n const viewportStore = this.providers.viewport?.stores?.rgCol;\n const viewportItems = viewportStore?.store.get('items') || [];\n const viewportStart = viewportStore?.store.get('start') ?? 0;\n const viewportEnd = viewportStore?.store.get('end') ?? 0;\n const firstViewportItem = viewportItems[viewportStart] || viewportItems[0];\n const lastViewportItem =\n viewportItems[viewportEnd] || viewportItems[viewportItems.length - 1];\n\n const coverageStart = firstViewportItem?.start ?? 0;\n const coverageEnd = lastViewportItem?.end ?? 0;\n const hasCoverage = viewportItems.length > 0 && coverageEnd >= coverageStart;\n\n const outOfCoverage =\n !hasCoverage ||\n normalizedScrollLeft < coverageStart - 8 ||\n normalizedScrollLeft > coverageEnd + 8;\n\n if (outOfCoverage) {\n const now = Date.now();\n if (now - this.lastViewportRecoveryAt > PinShadowPlugin.VIEWPORT_RECOVERY_COOLDOWN) {\n this.lastViewportRecoveryAt = now;\n this.providers.dimension.setViewPortCoordinate({\n type: 'rgCol',\n coordinate: normalizedScrollLeft,\n force: true,\n });\n this.schedulePinShadowSync();\n }\n }\n }\n\n const hasScrollSpace = this.maxScrollLeft > SCROLL_THRESHOLD;\n const showPinStart = hasScrollSpace && normalizedScrollLeft > START_THRESHOLD && this.pinStartWidth > 0;\n const showPinEnd =\n hasScrollSpace &&\n normalizedScrollLeft < this.maxScrollLeft - 1 &&\n this.pinEndWidth > 0;\n\n this.setPinStartShadow(showPinStart);\n this.setPinEndShadow(showPinEnd);\n }\n\n private updateHeaderShadow(scrollTop: number) {\n const shouldShowHeaderShadow = this.hasVerticalScrollSpace && scrollTop > 0;\n this.setHeaderShadow(shouldShowHeaderShadow);\n }\n\n destroy() {\n this.clearShadowState();\n\n // 清理定时器\n if (this.resizeDebounceTimer) {\n clearTimeout(this.resizeDebounceTimer);\n this.resizeDebounceTimer = null;\n }\n if (this.syncFrameId !== null) {\n cancelAnimationFrame(this.syncFrameId);\n this.syncFrameId = null;\n }\n if (this.pinShadowSyncFrameId !== null) {\n cancelAnimationFrame(this.pinShadowSyncFrameId);\n this.pinShadowSyncFrameId = null;\n }\n this.pendingHorizontalSync = false;\n this.pendingVerticalSync = false;\n this.mainViewportEl?.removeEventListener('scroll', this.onMainViewportScroll);\n this.verticalScrollEl?.removeEventListener('scroll', this.onVerticalViewportScroll);\n this.mainViewportEl = null;\n this.verticalScrollEl = null;\n this.viewportsContainerEl = null;\n this.pinStartViewportEl = null;\n this.pinEndViewportEl = null;\n this.headerEl = null;\n this.lastPinShadowSnapshot = null;\n this.lastCoverageCheckAt = 0;\n super.destroy();\n }\n}\n","import type { PluginProviders, ViewPortScrollEvent } from '@type';\nimport { BasePlugin } from './base.plugin';\nimport { isSafariDesktop } from '../utils/browser';\n\nexport interface EnhancedScrollbarOptions {\n /** 滚动条高度,默认 8px */\n height?: number;\n /** 滚动条轨道背景色 */\n trackColor?: string;\n /** 滚动条滑块颜色 */\n thumbColor?: string;\n /** 滚动条滑块 hover 颜色 */\n thumbHoverColor?: string;\n /** 滚动条圆角 */\n borderRadius?: number;\n /** 距离底部的距离 */\n bottom?: number;\n /** 过渡动画时长,默认 0.2s */\n transition?: number;\n /** shift+滚轮的滚动速度倍数,默认 1 */\n scrollSpeed?: number;\n /** 滚动平滑度(0-1),值越小越平滑,默认 0.2 */\n smoothness?: number;\n /** 是否启用平滑滚动,默认 true */\n enableSmooth?: boolean;\n}\n\nconst DEFAULT_OPTIONS: Required<EnhancedScrollbarOptions> = {\n height: 8,\n trackColor: 'rgba(0, 0, 0, 0.04)',\n thumbColor: 'rgba(0, 0, 0, 0.2)',\n thumbHoverColor: 'rgba(0, 0, 0, 0.35)',\n borderRadius: 4,\n bottom: 0,\n transition: 0.2,\n scrollSpeed: 1,\n smoothness: 0.2,\n enableSmooth: true,\n};\n\n/**\n * 增强型水平滚动条插件\n */\nexport class EnhancedScrollbarPlugin extends BasePlugin {\n private options: Required<EnhancedScrollbarOptions>;\n private scrollbar: HTMLElement | null = null;\n private track: HTMLElement | null = null;\n private thumb: HTMLElement | null = null;\n private isDragging = false;\n private startX = 0;\n private startThumbLeft = 0;\n private contentWidth = 0;\n private viewportWidth = 0;\n private thumbWidth = 0;\n private trackWidth = 0;\n private resizeObserver: ResizeObserver | null = null;\n \n // 防抖定时器\n private updateDimensionsTimer: ReturnType<typeof setTimeout> | null = null;\n // 滚动阈值:小于此值认为没有实际滚动空间\n private static readonly SCROLL_THRESHOLD = 10;\n // 滑块左右间距(类似padding)\n private static readonly THUMB_PADDING = 1;\n \n // 上次的表格宽度,用于检测宽度变化\n private lastGridWidth = 0;\n // 宽度稳定检测延迟\n private static readonly WIDTH_STABLE_DELAY = 200;\n // 是否正在 resize\n private isResizing = false;\n // resize 开始前是否显示滚动条\n private wasVisibleBeforeResize = false;\n // 冻结列宽度\n private pinStartWidth = 0;\n private pinEndWidth = 0;\n\n constructor(\n revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n options?: EnhancedScrollbarOptions,\n ) {\n super(revogrid, providers);\n this.options = { ...DEFAULT_OPTIONS, ...options };\n\n this.onMouseMove = this.onMouseMove.bind(this);\n this.onMouseUp = this.onMouseUp.bind(this);\n\n // 监听滚动事件\n this.addEventListener(\n 'viewportscroll',\n (e: CustomEvent<ViewPortScrollEvent>) => {\n if (e.detail.dimension === 'rgCol') {\n this.syncThumbPosition(e.detail.coordinate);\n }\n },\n );\n\n // 监听列宽改变事件,延迟更新尺寸\n this.addEventListener('aftercolumnresize', () => {\n // 如果正在 resize,不触发更新(等待 resize 稳定后统一更新)\n if (this.isResizing) {\n return;\n }\n // 延迟更新尺寸,确保 contentWidth 已更新\n setTimeout(() => {\n // 再次检查是否在 resize 中\n if (!this.isResizing) {\n this.updateDimensions();\n }\n }, 200);\n });\n\n // 监听 aftergridrender 初始化\n this.addEventListener('aftergridrender', () => {\n setTimeout(() => {\n this.createScrollbar();\n this.updateDimensions();\n this.setupWheelHandler();\n }, 50);\n });\n }\n\n private wheelHandler: ((e: WheelEvent) => void) | null = null;\n private smoothScrollTimer: number | null = null;\n private targetScrollLeft: number = 0;\n private currentScrollLeft: number = 0;\n private isAnimating: boolean = false;\n private animationFrameId: number | null = null;\n\n private emitScrollSync(scrollLeft: number) {\n this.revogrid.dispatchEvent(new CustomEvent('enhancedscrollsync', {\n detail: { scrollLeft },\n }));\n }\n\n private setupWheelHandler() {\n // Safari 桌面版使用原生滚动,不需要自定义处理\n // 触摸板的惯性滚动与自定义动画冲突会导致卡顿\n const isSafari = isSafariDesktop();\n \n // 监听水平滚动事件(shift+滚轮 或 鼠标中键水平滚动)\n this.wheelHandler = (e: WheelEvent) => {\n // 如果 manual-focus-box 存在,禁止滚动\n if (document.querySelector('.manual-focus-box')) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n \n const isShiftScroll = e.shiftKey;\n const absX = Math.abs(e.deltaX);\n const absY = Math.abs(e.deltaY);\n \n // Safari 触摸板横向手势常会携带较大的 deltaY,不能只用 absX > absY 判断\n const safariHorizontalIntent = isSafari && !isShiftScroll && absX > 2 && absX >= absY * 0.35;\n \n // 判断是否为主要的水平滚动:\n // 1. shift 键按下(强制水平滚动)\n // 2. 常规浏览器:deltaX 明显大于 deltaY\n // 3. Safari:允许一定比例的纵向分量,避免横向手势被误判\n const isHorizontalIntent = isShiftScroll || (absX > 1 && absX > absY) || safariHorizontalIntent;\n \n // 如果不是水平滚动意图,不处理(让原生垂直滚动处理)\n if (!isHorizontalIntent) {\n return;\n }\n \n const viewportScroll = this.revogrid.querySelector(\n 'revogr-viewport-scroll.rgCol',\n ) as HTMLRevogrViewportScrollElement;\n \n if (!viewportScroll) return;\n \n // 实时获取内容宽度和视口宽度\n const contentWidth = viewportScroll.contentWidth || 0;\n const viewportWidth = viewportScroll.clientWidth || 0;\n const maxScroll = contentWidth - viewportWidth;\n \n // 使用阈值判断是否有滚动空间\n const SCROLL_THRESHOLD = 10;\n if (maxScroll <= SCROLL_THRESHOLD) {\n return;\n }\n \n // 阻止默认行为和事件传播\n e.preventDefault();\n e.stopPropagation();\n \n // 计算滚动增量\n let scrollDelta: number;\n if (isShiftScroll) {\n // shift+滚轮:浏览器可能会将 deltaY 转换为 deltaX,需要同时检查\n scrollDelta = e.deltaX !== 0 ? e.deltaX : e.deltaY;\n } else {\n // 鼠标中键水平滚动:直接使用 deltaX\n scrollDelta = e.deltaX;\n }\n \n // 根据 deltaMode 调整滚动量\n if (e.deltaMode === 1) {\n scrollDelta *= 40;\n } else if (e.deltaMode === 2) {\n scrollDelta *= viewportWidth;\n }\n \n // 应用配置的滚动速度\n scrollDelta *= this.options.scrollSpeed;\n \n // 禁用平滑滚动时,直接滚动\n if (!this.options.enableSmooth) {\n const currentScrollLeft = viewportScroll.scrollLeft;\n const newScrollLeft = Math.max(0, Math.min(maxScroll, currentScrollLeft + scrollDelta));\n viewportScroll.scrollLeft = newScrollLeft;\n this.emitScrollSync(newScrollLeft);\n this.syncThumbPosition(newScrollLeft);\n return;\n }\n\n // Safari 使用直接滚动\n if (isSafari) {\n const currentScrollLeft = viewportScroll.scrollLeft;\n const newScrollLeft = Math.max(0, Math.min(maxScroll, currentScrollLeft + scrollDelta));\n viewportScroll.scrollLeft = newScrollLeft;\n this.emitScrollSync(newScrollLeft);\n this.syncThumbPosition(newScrollLeft);\n return;\n }\n \n // 初始化目标滚动位置\n if (!this.isAnimating) {\n this.currentScrollLeft = viewportScroll.scrollLeft;\n this.targetScrollLeft = this.currentScrollLeft;\n }\n \n // 更新目标滚动位置\n this.targetScrollLeft = Math.max(0, Math.min(maxScroll, this.targetScrollLeft + scrollDelta));\n \n // 启动平滑滚动动画\n if (!this.isAnimating) {\n this.startSmoothScroll(viewportScroll);\n }\n };\n \n // 使用捕获阶段\n this.revogrid.addEventListener('wheel', this.wheelHandler, { passive: false, capture: true });\n }\n\n /**\n * 使用 requestAnimationFrame 实现平滑滚动动画\n */\n private startSmoothScroll(horizontalScroll: HTMLElement) {\n this.isAnimating = true;\n \n const animate = () => {\n // 计算当前位置和目标位置的差值\n const diff = this.targetScrollLeft - this.currentScrollLeft;\n \n // 如果差值很小(小于 0.5px),直接设置为目标值并停止动画\n if (Math.abs(diff) < 0.5) {\n this.currentScrollLeft = this.targetScrollLeft;\n horizontalScroll.scrollLeft = this.currentScrollLeft;\n this.emitScrollSync(this.currentScrollLeft);\n this.syncThumbPosition(this.currentScrollLeft);\n this.isAnimating = false;\n this.animationFrameId = null;\n return;\n }\n \n // 使用缓动函数(easeOutCubic)实现平滑过渡\n // 每次移动差值的指定百分比,这样会产生减速效果\n this.currentScrollLeft += diff * this.options.smoothness;\n horizontalScroll.scrollLeft = this.currentScrollLeft;\n this.emitScrollSync(this.currentScrollLeft);\n this.syncThumbPosition(this.currentScrollLeft);\n \n // 继续下一帧动画\n this.animationFrameId = requestAnimationFrame(animate);\n };\n \n animate();\n }\n\n private createScrollbar() {\n if (this.scrollbar) return;\n\n const { height, trackColor, thumbColor, thumbHoverColor, borderRadius, bottom, transition } =\n this.options;\n\n // 创建滚动条容器\n this.scrollbar = document.createElement('div');\n this.scrollbar.className = 'revo-enhanced-scrollbar';\n Object.assign(this.scrollbar.style, {\n position: 'absolute',\n left: '0',\n right: '0',\n bottom: `${bottom}px`,\n height: `${height}px`,\n zIndex: '100',\n display: 'none',\n });\n\n // 创建轨道\n this.track = document.createElement('div');\n this.track.className = 'revo-scrollbar-track';\n Object.assign(this.track.style, {\n position: 'absolute',\n left: '0',\n right: '0',\n top: '0',\n bottom: '0',\n background: trackColor,\n borderRadius: `${borderRadius}px`,\n cursor: 'pointer',\n });\n\n // 创建滑块\n this.thumb = document.createElement('div');\n this.thumb.className = 'revo-scrollbar-thumb';\n Object.assign(this.thumb.style, {\n position: 'absolute',\n top: '0',\n left: '0',\n height: '100%',\n minWidth: '30px',\n background: thumbColor,\n borderRadius: `${borderRadius}px`,\n cursor: 'pointer',\n transition: `background ${transition}s`,\n });\n\n // hover 效果\n this.thumb.addEventListener('mouseenter', () => {\n if (this.thumb) this.thumb.style.background = thumbHoverColor;\n });\n this.thumb.addEventListener('mouseleave', () => {\n if (this.thumb && !this.isDragging) this.thumb.style.background = thumbColor;\n });\n\n // 拖拽事件\n this.thumb.addEventListener('mousedown', (e) => this.onThumbMouseDown(e));\n\n // 点击轨道跳转\n this.track.addEventListener('mousedown', (e) => this.onTrackClick(e));\n\n this.track.appendChild(this.thumb);\n this.scrollbar.appendChild(this.track);\n\n // 添加到 main-viewport\n const mainViewport = this.revogrid.querySelector('.main-viewport');\n if (mainViewport) {\n (mainViewport as HTMLElement).style.position = 'relative';\n mainViewport.appendChild(this.scrollbar);\n }\n\n // 监听尺寸变化\n this.resizeObserver = new ResizeObserver(() => {\n this.debouncedUpdateDimensions();\n });\n this.resizeObserver.observe(this.revogrid);\n }\n\n /**\n * 防抖的 updateDimensions\n */\n private debouncedUpdateDimensions() {\n // 第一次调用时,记录当前状态并决定是否隐藏\n if (!this.isResizing) {\n this.isResizing = true;\n \n // 记录 resize 前是否显示滚动条\n this.wasVisibleBeforeResize = this.scrollbar?.style.display === 'block';\n \n // 只有之前不显示滚动条时才隐藏(表格可能变大,不需要滚动条)\n // 如果之前就显示,说明需要滚动条,变小后更需要,保持显示\n if (!this.wasVisibleBeforeResize && this.scrollbar) {\n this.scrollbar.style.display = 'none';\n }\n }\n \n // 清除之前的定时器\n if (this.updateDimensionsTimer) {\n clearTimeout(this.updateDimensionsTimer);\n }\n \n // 获取当前表格宽度\n const currentGridWidth = this.revogrid.clientWidth || 0;\n \n // 更新宽度记录\n if (currentGridWidth !== this.lastGridWidth) {\n this.lastGridWidth = currentGridWidth;\n }\n \n // 设置新的定时器,只有在 200ms 内没有新的调用时才执行\n this.updateDimensionsTimer = setTimeout(() => {\n this.updateDimensionsTimer = null;\n this.isResizing = false;\n this.updateDimensions();\n }, EnhancedScrollbarPlugin.WIDTH_STABLE_DELAY);\n }\n\n private updateDimensions() {\n // 从 revogr-viewport-scroll.rgCol 获取内容宽度\n const viewportScroll = this.revogrid.querySelector(\n 'revogr-viewport-scroll.rgCol',\n ) as HTMLRevogrViewportScrollElement;\n\n if (!viewportScroll || !this.scrollbar || !this.thumb || !this.track) return;\n\n // 使用组件的 contentWidth 属性获取内容宽度\n this.contentWidth = viewportScroll.contentWidth || 0;\n // 使用 clientWidth 获取视口宽度\n this.viewportWidth = viewportScroll.clientWidth || 0;\n \n // 获取冻结列宽度\n const colPinStartEl = this.revogrid.querySelector('revogr-viewport-scroll.colPinStart') as HTMLElement;\n const colPinEndEl = this.revogrid.querySelector('revogr-viewport-scroll.colPinEnd') as HTMLElement;\n this.pinStartWidth = colPinStartEl?.offsetWidth || 0;\n this.pinEndWidth = colPinEndEl?.offsetWidth || 0;\n \n // 获取行头宽度\n const rowHeaderEl = this.revogrid.querySelector('.main-viewport > .viewports > .rowHeaders') as HTMLElement;\n const rowHeaderWidth = rowHeaderEl?.offsetWidth || 0;\n \n // 滚动条轨道宽度 = 表格总宽度 - 行头宽度\n const totalTableWidth = rowHeaderWidth + this.pinStartWidth + this.viewportWidth + this.pinEndWidth;\n this.trackWidth = totalTableWidth - rowHeaderWidth;\n \n // 更新滚动条位置和宽度\n this.scrollbar.style.left = `${rowHeaderWidth}px`;\n this.scrollbar.style.right = 'auto';\n this.scrollbar.style.width = `${this.trackWidth}px`;\n\n const maxScroll = this.contentWidth - this.viewportWidth;\n\n // 如果正在 resize,只更新尺寸数据,不改变显示状态\n if (this.isResizing) {\n // 滑块宽度 = (中间区域宽度 / 内容宽度) * 轨道宽度\n const ratio = this.viewportWidth / this.contentWidth;\n this.thumbWidth = Math.max(30, ratio * this.trackWidth);\n this.thumb.style.width = `${this.thumbWidth}px`;\n \n // 同步滑块位置\n const currentScrollLeft = viewportScroll.scrollLeft;\n this.syncThumbPosition(currentScrollLeft);\n return;\n }\n\n // 如果没有滚动内容(使用阈值避免闪烁),隐藏滚动条\n if (maxScroll <= EnhancedScrollbarPlugin.SCROLL_THRESHOLD) {\n if (this.scrollbar.style.display !== 'none') {\n this.scrollbar.style.display = 'none';\n }\n // 重置滚动位置到0,避免残留的滚动偏移影响布局\n if (viewportScroll.scrollLeft > 0) {\n viewportScroll.scrollLeft = 0;\n }\n return;\n }\n\n // 显示滚动条\n if (this.scrollbar.style.display !== 'block') {\n this.scrollbar.style.display = 'block';\n }\n\n // 滑块宽度 = (中间区域宽度 / 内容宽度) * (轨道宽度 - 左右间距)\n const ratio = this.viewportWidth / this.contentWidth;\n const availableWidth = this.trackWidth - (EnhancedScrollbarPlugin.THUMB_PADDING * 2);\n this.thumbWidth = Math.max(30, ratio * availableWidth);\n this.thumb.style.width = `${this.thumbWidth}px`;\n \n // console.log('[Scrollbar] 滑块宽度计算:', {\n // viewportWidth: this.viewportWidth,\n // contentWidth: this.contentWidth,\n // trackWidth: this.trackWidth,\n // availableWidth,\n // ratio,\n // thumbWidth: this.thumbWidth,\n // });\n\n // 获取当前滚动位置(直接从 DOM 获取最新值)\n const currentScrollLeft = viewportScroll.scrollLeft;\n \n // 同步滑块位置\n this.syncThumbPosition(currentScrollLeft);\n }\n\n private syncThumbPosition(scrollLeft: number) {\n if (!this.thumb || !this.trackWidth || !this.thumbWidth) return;\n\n const maxScroll = this.contentWidth - this.viewportWidth;\n if (maxScroll <= 0) return;\n\n // 确保 scrollLeft 在有效范围内\n const validScrollLeft = Math.max(0, Math.min(maxScroll, scrollLeft));\n \n const scrollRatio = validScrollLeft / maxScroll;\n \n // 滑块可移动范围 = 轨道宽度 - 滑块宽度 - 左右间距\n const maxThumbLeft = this.trackWidth - this.thumbWidth - (EnhancedScrollbarPlugin.THUMB_PADDING * 2);\n \n // 滑块位置 = 左间距 + scrollRatio * 可移动范围\n const thumbLeft = EnhancedScrollbarPlugin.THUMB_PADDING + (scrollRatio * maxThumbLeft);\n \n // console.log('[Scrollbar] scrollLeft:', scrollLeft, 'validScrollLeft:', validScrollLeft, 'maxThumbLeft:', maxThumbLeft, 'thumbLeft:', thumbLeft);\n \n this.thumb.style.left = `${thumbLeft}px`;\n }\n\n private onThumbMouseDown(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n this.isDragging = true;\n this.startX = e.clientX;\n this.startThumbLeft = parseFloat(this.thumb?.style.left || '0');\n\n document.addEventListener('mousemove', this.onMouseMove);\n document.addEventListener('mouseup', this.onMouseUp);\n }\n\n private onMouseMove(e: MouseEvent) {\n if (!this.isDragging || !this.thumb) return;\n\n const deltaX = e.clientX - this.startX;\n const maxThumbLeft = this.trackWidth - this.thumbWidth - (EnhancedScrollbarPlugin.THUMB_PADDING * 2);\n \n // 如果滑块几乎占满轨道,不允许拖动\n if (maxThumbLeft <= 1) return;\n \n const newThumbLeft = Math.max(\n EnhancedScrollbarPlugin.THUMB_PADDING,\n Math.min(EnhancedScrollbarPlugin.THUMB_PADDING + maxThumbLeft, this.startThumbLeft + deltaX)\n );\n\n this.thumb.style.left = `${newThumbLeft}px`;\n\n // 计算并设置滚动位置\n const scrollRatio = (newThumbLeft - EnhancedScrollbarPlugin.THUMB_PADDING) / maxThumbLeft;\n const maxScroll = this.contentWidth - this.viewportWidth;\n const newScrollLeft = scrollRatio * maxScroll;\n\n this.scrollTo(newScrollLeft);\n }\n\n private onMouseUp() {\n this.isDragging = false;\n if (this.thumb) {\n this.thumb.style.background = this.options.thumbColor;\n }\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n }\n\n private onTrackClick(e: MouseEvent) {\n if (e.target === this.thumb || !this.track) return;\n\n const rect = this.track.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const maxThumbLeft = this.trackWidth - this.thumbWidth - (EnhancedScrollbarPlugin.THUMB_PADDING * 2);\n\n // 如果滑块几乎占满轨道,不处理点击\n if (maxThumbLeft <= 1) return;\n\n // 点击位置作为滑块中心\n const newThumbLeft = Math.max(\n EnhancedScrollbarPlugin.THUMB_PADDING,\n Math.min(EnhancedScrollbarPlugin.THUMB_PADDING + maxThumbLeft, clickX - this.thumbWidth / 2)\n );\n const scrollRatio = (newThumbLeft - EnhancedScrollbarPlugin.THUMB_PADDING) / maxThumbLeft;\n const maxScroll = this.contentWidth - this.viewportWidth;\n const newScrollLeft = scrollRatio * maxScroll;\n\n this.scrollTo(newScrollLeft);\n }\n\n private scrollTo(position: number) {\n // 使用 revogr-viewport-scroll.rgCol 来设置滚动位置\n const viewportScroll = this.revogrid.querySelector(\n 'revogr-viewport-scroll.rgCol',\n ) as HTMLElement;\n\n if (viewportScroll) {\n viewportScroll.scrollLeft = position;\n this.emitScrollSync(position);\n this.syncThumbPosition(position);\n }\n }\n\n destroy() {\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n if (this.wheelHandler) {\n this.revogrid.removeEventListener('wheel', this.wheelHandler, { capture: true });\n this.wheelHandler = null;\n }\n if (this.smoothScrollTimer) {\n clearTimeout(this.smoothScrollTimer);\n this.smoothScrollTimer = null;\n }\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n if (this.updateDimensionsTimer) {\n clearTimeout(this.updateDimensionsTimer);\n this.updateDimensionsTimer = null;\n }\n this.isAnimating = false;\n this.resizeObserver?.disconnect();\n this.scrollbar?.remove();\n this.scrollbar = null;\n this.track = null;\n this.thumb = null;\n super.destroy();\n }\n}\n","import { BasePlugin } from './base.plugin';\nimport type { PluginProviders, DimensionCols } from '@type';\n\nexport interface ManualFocusOptions {\n /** 边框颜色 */\n borderColor?: string;\n /** 边框粗细 */\n borderWidth?: number;\n /** 焦点框显示时是否禁止滚动,默认 false */\n disableScroll?: boolean;\n}\n\nexport interface CustomSize {\n /** 自定义宽度(像素) */\n width?: number;\n /** 自定义高度(像素) */\n height?: number;\n}\n\n/**\n * Manual Focus Plugin\n * 提供手动控制的单元格焦点框功能\n * \n * 功能:\n * 1. 提供 show/hide API 控制焦点框显示\n * 2. 在指定单元格上显示焦点框\n * 3. 支持手动切换焦点框显示状态\n * 4. 支持自定义边框颜色和粗细\n * 5. 焦点框显示时禁止表格滚动\n */\nexport class ManualFocusPlugin extends BasePlugin {\n private focusElement: HTMLElement | null = null;\n private isVisible: boolean = false;\n private currentCell: { x: number; y: number; rowType: string; colType: string } | null = null;\n private options: ManualFocusOptions;\n private scrollPreventHandlers: Array<(e: Event) => void> = [];\n private afterFocusHandler: ((e: CustomEvent) => void) | null = null;\n private hideBorder: boolean = false;\n private customSize: CustomSize | null = null;\n\n constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders, options: ManualFocusOptions = {}) {\n super(revogrid, providers);\n this.options = {\n borderColor: options.borderColor || '#1D74F5',\n borderWidth: options.borderWidth || 2,\n disableScroll: options.disableScroll ?? false,\n };\n\n // 监听 afterfocus 事件\n this.afterFocusHandler = (e: CustomEvent) => {\n const detail = e.detail;\n // 检查是否是当前要显示焦点的单元格\n if (\n this.currentCell &&\n detail.rowIndex === this.currentCell.y &&\n detail.colIndex === this.currentCell.x &&\n detail.rowType === this.currentCell.rowType &&\n detail.colType === this.currentCell.colType\n ) {\n // 延迟一帧,确保 DOM 更新完成\n requestAnimationFrame(() => {\n this.isVisible = true;\n this.updateFocusBox();\n if (this.options.disableScroll) {\n this.disableScroll();\n }\n });\n }\n };\n this.revogrid.addEventListener('afterfocus', this.afterFocusHandler as any);\n }\n\n /**\n * 设置焦点到指定单元格\n * @param rowIndex 行索引\n * @param colIndex 列索引\n * @param rowType 行类型,默认 'rgRow'\n * @param colType 列类型,默认 'rgCol'\n * @param hideBorder 是否隐藏边框(设置 opacity: 0),默认 false\n * @param customSize 自定义尺寸 { width?: number, height?: number }\n */\n async setFocusAt(rowIndex: number, colIndex: number, rowType: string = 'rgRow', colType: string = 'rgCol', hideBorder: boolean = false, customSize?: CustomSize) {\n // 先移除旧的焦点框\n this.removeFocusBox();\n this.isVisible = false;\n \n this.currentCell = {\n x: colIndex,\n y: rowIndex,\n rowType,\n colType,\n };\n\n // 保存 hideBorder 状态\n this.hideBorder = hideBorder;\n \n // 保存自定义尺寸\n this.customSize = customSize || null;\n\n // 先设置表格的焦点,让 revogr-focus 渲染出来\n const rowTypeIndex: number | undefined = (this.providers.selection.storesByType as any)[rowType];\n const colTypeIndex: number | undefined = (this.providers.selection.storesByType as any)[colType];\n \n if (rowTypeIndex !== undefined && colTypeIndex !== undefined) {\n const store = this.providers.selection.stores[rowTypeIndex]?.[colTypeIndex];\n if (store) {\n store.setFocus({ x: colIndex, y: rowIndex }, { x: colIndex, y: rowIndex });\n }\n }\n\n // afterfocus 事件会触发 updateFocusBox\n // 如果 50ms 内没有触发,则强制显示\n setTimeout(() => {\n if (this.currentCell && !this.isVisible) {\n this.show();\n }\n }, 50);\n }\n\n /**\n * 移除指定单元格的焦点\n */\n removeFocusAt(rowIndex: number, colIndex: number, rowType: string = 'rgRow', colType: string = 'rgCol') {\n // 检查是否是当前焦点单元格\n const isSameCell = this.currentCell && \n this.currentCell.x === colIndex && \n this.currentCell.y === rowIndex &&\n this.currentCell.rowType === rowType &&\n this.currentCell.colType === colType;\n \n if (isSameCell) {\n this.hide();\n }\n }\n\n /**\n * 切换指定单元格的焦点显示状态\n * @param rowIndex 行索引\n * @param colIndex 列索引\n * @param rowType 行类型,默认 'rgRow'\n * @param colType 列类型,默认 'rgCol'\n * @param hideBorder 是否隐藏边框(设置 opacity: 0),默认 false\n * @param customSize 自定义尺寸 { width?: number, height?: number }\n */\n toggleFocusAt(rowIndex: number, colIndex: number, rowType: string = 'rgRow', colType: string = 'rgCol', hideBorder: boolean = false, customSize?: CustomSize) {\n // 检查是否是同一个单元格\n const isSameCell = this.currentCell && \n this.currentCell.x === colIndex && \n this.currentCell.y === rowIndex &&\n this.currentCell.rowType === rowType &&\n this.currentCell.colType === colType;\n \n if (isSameCell && this.isVisible) {\n // 如果是同一个单元格且已显示,则移除\n this.hide();\n } else {\n // 否则设置焦点\n this.setFocusAt(rowIndex, colIndex, rowType, colType, hideBorder, customSize);\n }\n }\n\n /**\n * 显示焦点框\n */\n show() {\n this.isVisible = true;\n if (this.currentCell) {\n this.updateFocusBox();\n if (this.options.disableScroll) {\n this.disableScroll();\n }\n }\n }\n\n /**\n * 隐藏焦点框\n */\n hide() {\n this.isVisible = false;\n this.removeFocusBox();\n this.currentCell = null; // 清除当前单元格,防止自动重新显示\n this.customSize = null; // 清除自定义尺寸\n if (this.options.disableScroll) {\n this.enableScroll();\n }\n }\n\n /**\n * 切换焦点框显示状态\n */\n toggle() {\n // 如果已经显示,检查是否是同一个单元格\n if (this.isVisible && this.currentCell) {\n // 不隐藏,保持显示状态\n this.show();\n } else {\n this.show();\n }\n }\n\n /**\n * 获取当前焦点框显示状态\n */\n isShown(): boolean {\n return this.isVisible;\n }\n\n /**\n * 动态修改焦点框的宽高\n * @param width 新的宽度(像素值)\n * @param height 新的高度(像素值)\n */\n updateSize(width: number, height: number) {\n if (!this.focusElement) {\n console.warn('⚠️ 焦点框不存在,无法修改尺寸');\n return;\n }\n\n this.focusElement.style.width = `${width}px`;\n this.focusElement.style.height = `${height}px`;\n \n console.log('✅ 焦点框尺寸已更新:', { width: `${width}px`, height: `${height}px` });\n }\n\n /**\n * 设置边框的显示/隐藏状态\n * @param hide 是否隐藏边框(设置 opacity: 0)\n */\n setBorderVisibility(hide: boolean) {\n this.hideBorder = hide;\n \n if (this.focusElement) {\n this.focusElement.style.opacity = hide ? '0' : '1';\n console.log(`✅ 焦点框边框已${hide ? '隐藏' : '显示'}`);\n } else {\n console.warn('⚠️ 焦点框不存在');\n }\n }\n\n /**\n * 更新焦点框位置和样式\n */\n private updateFocusBox() {\n if (!this.currentCell) {\n return;\n }\n\n const { rowType, colType, x } = this.currentCell;\n\n // 查找匹配的 revogr-focus 元素\n const allFocusElements = this.revogrid.querySelectorAll('revogr-focus.focused-cell');\n \n let focusElement: Element | null = null;\n allFocusElements.forEach(el => {\n const elRowType = el.getAttribute('row-type');\n const elColType = el.getAttribute('col-type');\n if (elRowType === rowType && elColType === colType) {\n focusElement = el;\n }\n });\n\n if (!focusElement) {\n return;\n }\n\n // 移除旧的焦点框\n this.removeFocusBox();\n\n // 使用 getBoundingClientRect 获取 revogr-focus 的绝对位置\n const rect = (focusElement as HTMLElement).getBoundingClientRect();\n\n // 创建新的焦点框\n this.focusElement = document.createElement('div');\n this.focusElement.className = 'manual-focus-box';\n \n const { borderColor, borderWidth } = this.options;\n const w = borderWidth!;\n const opacity = this.hideBorder ? 0 : 1;\n\n // 表格边框宽度(通过 box-shadow inset 实现)\n const cellAdditional = 1;\n\n const columnCount = this.providers.column.getColumns(colType as DimensionCols).length;\n const isLastColumn = columnCount > 0 && x === columnCount - 1;\n const widthAdditional = isLastColumn ? 0 : cellAdditional;\n\n // 使用自定义尺寸或默认尺寸,并扩展以覆盖边框\n const finalWidth = (this.customSize?.width ?? rect.width) + widthAdditional;\n const finalHeight = (this.customSize?.height ?? rect.height) + cellAdditional;\n\n this.focusElement.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 2000;\n display: block;\n border: ${w}px solid ${borderColor};\n box-sizing: border-box;\n opacity: ${opacity};\n left: ${rect.left}px;\n top: ${rect.top - cellAdditional}px;\n width: ${finalWidth}px;\n height: ${finalHeight}px;\n `;\n\n // 添加到 body 下\n document.body.appendChild(this.focusElement);\n }\n\n /**\n * 移除焦点框\n */\n private removeFocusBox() {\n if (this.focusElement && this.focusElement.parentNode) {\n this.focusElement.parentNode.removeChild(this.focusElement);\n this.focusElement = null;\n }\n }\n\n /**\n * 清除所有焦点框\n */\n clearAll() {\n this.hide();\n this.currentCell = null;\n this.customSize = null;\n // 触发清除事件\n this.revogrid.dispatchEvent(new CustomEvent('manualfocuscleared', {\n bubbles: true,\n detail: {},\n }));\n }\n\n /**\n * 禁止表格滚动\n */\n private disableScroll() {\n // 阻止所有滚动相关的事件\n const preventScroll = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n // 查找所有可能触发滚动的元素\n const scrollElements = [\n ...Array.from(this.revogrid.querySelectorAll('revogr-viewport-scroll')),\n ...Array.from(this.revogrid.querySelectorAll('revogr-scroll-virtual')),\n ...Array.from(this.revogrid.querySelectorAll('[class*=\"scroll\"]')),\n ];\n\n // 为每个滚动元素添加事件监听\n scrollElements.forEach(el => {\n const handler = (e: Event) => preventScroll(e);\n this.scrollPreventHandlers.push(handler);\n \n el.addEventListener('wheel', handler, { passive: false, capture: true });\n el.addEventListener('scroll', handler, { passive: false, capture: true });\n el.addEventListener('touchmove', handler, { passive: false, capture: true });\n \n // 禁用自定义滚动条的指针事件\n (el as HTMLElement).style.pointerEvents = 'none';\n });\n\n // 同时在 revogrid 根元素上添加监听\n const rootHandler = (e: Event) => preventScroll(e);\n this.scrollPreventHandlers.push(rootHandler);\n this.revogrid.addEventListener('wheel', rootHandler, { passive: false, capture: true });\n this.revogrid.addEventListener('scroll', rootHandler, { passive: false, capture: true });\n this.revogrid.addEventListener('touchmove', rootHandler, { passive: false, capture: true });\n }\n\n /**\n * 恢复表格滚动\n */\n private enableScroll() {\n // 移除所有滚动阻止事件监听\n const scrollElements = [\n ...Array.from(this.revogrid.querySelectorAll('revogr-viewport-scroll')),\n ...Array.from(this.revogrid.querySelectorAll('revogr-scroll-virtual')),\n ...Array.from(this.revogrid.querySelectorAll('[class*=\"scroll\"]')),\n this.revogrid,\n ];\n\n scrollElements.forEach(el => {\n this.scrollPreventHandlers.forEach(handler => {\n el.removeEventListener('wheel', handler, { capture: true } as any);\n el.removeEventListener('scroll', handler, { capture: true } as any);\n el.removeEventListener('touchmove', handler, { capture: true } as any);\n });\n \n // 恢复自定义滚动条的指针事件\n if (el !== this.revogrid) {\n (el as HTMLElement).style.pointerEvents = '';\n }\n });\n\n this.scrollPreventHandlers = [];\n }\n\n /**\n * 清理插件资源\n */\n destroy() {\n this.enableScroll();\n this.removeFocusBox();\n this.currentCell = null;\n \n // 移除 afterfocus 事件监听\n if (this.afterFocusHandler) {\n this.revogrid.removeEventListener('afterfocus', this.afterFocusHandler as any);\n this.afterFocusHandler = null;\n }\n \n super.destroy();\n }\n}\n"],"names":["createCellTemplate","deepCloneColumns"],"mappings":"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"}
|