@visactor/vtable 1.24.0-alpha.0 → 1.25.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.
Files changed (111) hide show
  1. package/cjs/core/BaseTable.d.ts +7 -0
  2. package/cjs/core/BaseTable.js +55 -17
  3. package/cjs/core/BaseTable.js.map +1 -1
  4. package/cjs/core/animation.js +3 -5
  5. package/cjs/core/animation.js.map +1 -1
  6. package/cjs/core/tableHelper.js +5 -3
  7. package/cjs/core/tableHelper.js.map +1 -1
  8. package/cjs/core/utils/get-cell-position.js +23 -12
  9. package/cjs/core/utils/get-cell-position.js.map +1 -1
  10. package/cjs/dataset/DataStatistics.js +2 -1
  11. package/cjs/edit/edit-manager.js +0 -1
  12. package/cjs/event/listener/container-dom.js +7 -5
  13. package/cjs/event/listener/container-dom.js.map +1 -1
  14. package/cjs/event/listener/scroll-bar.js +77 -6
  15. package/cjs/event/listener/scroll-bar.js.map +1 -1
  16. package/cjs/event/listener/table-group.js +29 -20
  17. package/cjs/event/listener/table-group.js.map +1 -1
  18. package/cjs/event/scroll.js +34 -11
  19. package/cjs/event/scroll.js.map +1 -1
  20. package/cjs/event/util.d.ts +2 -0
  21. package/cjs/event/util.js +28 -3
  22. package/cjs/event/util.js.map +1 -1
  23. package/cjs/index.d.ts +1 -1
  24. package/cjs/index.js +1 -1
  25. package/cjs/index.js.map +1 -1
  26. package/cjs/scenegraph/component/table-component.d.ts +6 -1
  27. package/cjs/scenegraph/component/table-component.js +143 -16
  28. package/cjs/scenegraph/component/table-component.js.map +1 -1
  29. package/cjs/scenegraph/component/util.js +5 -2
  30. package/cjs/scenegraph/component/util.js.map +1 -1
  31. package/cjs/scenegraph/graphic/contributions/group-contribution-render.js +29 -10
  32. package/cjs/scenegraph/graphic/contributions/group-contribution-render.js.map +1 -1
  33. package/cjs/scenegraph/group-creater/init-scenegraph.js +36 -6
  34. package/cjs/scenegraph/group-creater/init-scenegraph.js.map +1 -1
  35. package/cjs/scenegraph/group-creater/progress/proxy.js +4 -2
  36. package/cjs/scenegraph/group-creater/progress/proxy.js.map +1 -1
  37. package/cjs/scenegraph/scenegraph.d.ts +13 -0
  38. package/cjs/scenegraph/scenegraph.js +194 -23
  39. package/cjs/scenegraph/scenegraph.js.map +1 -1
  40. package/cjs/scenegraph/select/create-select-border.js +9 -10
  41. package/cjs/scenegraph/select/create-select-border.js.map +1 -1
  42. package/cjs/scenegraph/select/delete-select-border.js.map +1 -1
  43. package/cjs/scenegraph/select/move-select-border.js.map +1 -1
  44. package/cjs/scenegraph/select/update-custom-select-border.js +9 -9
  45. package/cjs/scenegraph/select/update-custom-select-border.js.map +1 -1
  46. package/cjs/scenegraph/select/update-select-border.js +14 -73
  47. package/cjs/scenegraph/select/update-select-border.js.map +1 -1
  48. package/cjs/scenegraph/select/update-select-style.js.map +1 -1
  49. package/cjs/state/state.d.ts +7 -1
  50. package/cjs/state/state.js +61 -28
  51. package/cjs/state/state.js.map +1 -1
  52. package/cjs/ts-types/base-table.d.ts +10 -0
  53. package/cjs/ts-types/base-table.js.map +1 -1
  54. package/cjs/vrender.js.map +1 -1
  55. package/dist/vtable.js +1087 -337
  56. package/dist/vtable.min.js +2 -2
  57. package/es/core/BaseTable.d.ts +7 -0
  58. package/es/core/BaseTable.js +55 -17
  59. package/es/core/BaseTable.js.map +1 -1
  60. package/es/core/animation.js +3 -5
  61. package/es/core/animation.js.map +1 -1
  62. package/es/core/tableHelper.js +5 -3
  63. package/es/core/tableHelper.js.map +1 -1
  64. package/es/core/utils/get-cell-position.js +23 -12
  65. package/es/core/utils/get-cell-position.js.map +1 -1
  66. package/es/dataset/DataStatistics.js +2 -1
  67. package/es/edit/edit-manager.js +1 -2
  68. package/es/event/listener/container-dom.js +7 -5
  69. package/es/event/listener/container-dom.js.map +1 -1
  70. package/es/event/listener/scroll-bar.js +75 -6
  71. package/es/event/listener/scroll-bar.js.map +1 -1
  72. package/es/event/listener/table-group.js +29 -21
  73. package/es/event/listener/table-group.js.map +1 -1
  74. package/es/event/scroll.js +34 -11
  75. package/es/event/scroll.js.map +1 -1
  76. package/es/event/util.d.ts +2 -0
  77. package/es/event/util.js +24 -0
  78. package/es/event/util.js.map +1 -1
  79. package/es/index.d.ts +1 -1
  80. package/es/index.js +1 -1
  81. package/es/index.js.map +1 -1
  82. package/es/scenegraph/component/table-component.d.ts +6 -1
  83. package/es/scenegraph/component/table-component.js +141 -16
  84. package/es/scenegraph/component/table-component.js.map +1 -1
  85. package/es/scenegraph/component/util.js +5 -2
  86. package/es/scenegraph/component/util.js.map +1 -1
  87. package/es/scenegraph/graphic/contributions/group-contribution-render.js +29 -10
  88. package/es/scenegraph/graphic/contributions/group-contribution-render.js.map +1 -1
  89. package/es/scenegraph/group-creater/init-scenegraph.js +36 -6
  90. package/es/scenegraph/group-creater/init-scenegraph.js.map +1 -1
  91. package/es/scenegraph/group-creater/progress/proxy.js +4 -2
  92. package/es/scenegraph/group-creater/progress/proxy.js.map +1 -1
  93. package/es/scenegraph/scenegraph.d.ts +13 -0
  94. package/es/scenegraph/scenegraph.js +185 -18
  95. package/es/scenegraph/scenegraph.js.map +1 -1
  96. package/es/scenegraph/select/create-select-border.js +9 -10
  97. package/es/scenegraph/select/create-select-border.js.map +1 -1
  98. package/es/scenegraph/select/delete-select-border.js.map +1 -1
  99. package/es/scenegraph/select/move-select-border.js.map +1 -1
  100. package/es/scenegraph/select/update-custom-select-border.js +9 -9
  101. package/es/scenegraph/select/update-custom-select-border.js.map +1 -1
  102. package/es/scenegraph/select/update-select-border.js +14 -73
  103. package/es/scenegraph/select/update-select-border.js.map +1 -1
  104. package/es/scenegraph/select/update-select-style.js.map +1 -1
  105. package/es/state/state.d.ts +7 -1
  106. package/es/state/state.js +61 -28
  107. package/es/state/state.js.map +1 -1
  108. package/es/ts-types/base-table.d.ts +10 -0
  109. package/es/ts-types/base-table.js.map +1 -1
  110. package/es/vrender.js.map +1 -1
  111. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/event/scroll.ts"],"names":[],"mappings":"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","file":"scroll.js","sourcesContent":["import type { StateManager } from '../state/state';\nimport { InteractionState } from '../ts-types';\nimport { vglobal, type FederatedWheelEvent } from './../vrender';\n\n/**\n *\n * @param event\n * @param state\n * @param isWheelEvent 是否是由鼠标或者触摸板原生滚动事件触发进入?\n */\nexport function handleWhell(event: FederatedWheelEvent, state: StateManager, isWheelEvent: boolean = true) {\n let { deltaX, deltaY } = event;\n // 如果按住了shift 则进行横向滚动 纵向不滚动\n if (event.shiftKey && event.deltaY) {\n //mac电脑按住shift 鼠标滚动deltaX和deltaY是自动互换的,所以此逻辑只针对windows电脑有效及mac触摸板有效\n deltaX = deltaY;\n deltaY = 0;\n }\n const [optimizedDeltaX, optimizedDeltaY] = optimizeScrollXY(deltaX, deltaY, { horizontal: 1, vertical: 1 });\n if (optimizedDeltaX || optimizedDeltaY) {\n if (state.interactionState !== InteractionState.scrolling) {\n state.updateInteractionState(InteractionState.scrolling);\n }\n }\n const autoHide = state.table.options.theme?.scrollStyle?.visible === 'scrolling';\n if (optimizedDeltaX) {\n state.setScrollLeft(state.scroll.horizontalBarPos + optimizedDeltaX, event);\n state.showHorizontalScrollBar(autoHide);\n }\n if (optimizedDeltaY) {\n state.setScrollTop(state.scroll.verticalBarPos + optimizedDeltaY, event);\n state.showVerticalScrollBar(autoHide);\n }\n isWheelEvent && state.resetInteractionState(state.interactionStateBeforeScroll);\n if (\n event.nativeEvent?.cancelable &&\n ((state.table.internalProps.overscrollBehavior === 'none' &&\n ((deltaY && isVerticalExistScrollBar(state)) || (deltaX && isHorizontalExistScrollBar(state)))) ||\n (Math.abs(deltaY) >= Math.abs(deltaX) && deltaY !== 0 && isVerticalScrollable(deltaY, state)) ||\n (Math.abs(deltaY) <= Math.abs(deltaX) && deltaX !== 0 && isHorizontalScrollable(deltaX, state)))\n ) {\n event.nativeEvent.preventDefault();\n }\n}\n\ninterface ScrollSpeedRatio {\n horizontal?: number;\n vertical?: number;\n}\n\n/**\n * 优化滚动方向,对于小角度的滚动,固定为一个方向\n * @param x\n * @param y\n * @param ratio\n */\nfunction optimizeScrollXY(x: number, y: number, ratio: ScrollSpeedRatio): [number, number] {\n const ANGLE = 2; // 调参 根据斜率来调整xy方向的划分\n const angle = Math.abs(x / y);\n\n // 经过滚动优化之后的 x, y\n const deltaX = angle <= 1 / ANGLE ? 0 : x;\n const deltaY = angle > ANGLE ? 0 : y;\n\n return [Math.ceil(deltaX * (ratio.horizontal ?? 0)), Math.ceil(deltaY * (ratio.vertical ?? 0))];\n}\n\nexport function isVerticalScrollable(deltaY: number, state: StateManager) {\n const totalHeight = state.table.getAllRowsHeight() - state.table.scenegraph.height;\n if (totalHeight === 0) {\n return false;\n }\n return !isScrollToTop(deltaY, state) && !isScrollToBottom(deltaY, state);\n}\n\nexport function isHorizontalScrollable(deltaX: number, state: StateManager) {\n const totalWidth = state.table.getAllColsWidth() - state.table.scenegraph.width;\n if (totalWidth === 0) {\n return false;\n }\n return !isScrollToLeft(deltaX, state) && !isScrollToRight(deltaX, state);\n}\n\nexport function isVerticalExistScrollBar(state: StateManager) {\n const totalHeight = state.table.getAllRowsHeight() - state.table.scenegraph.height;\n if (totalHeight <= 0) {\n return false;\n }\n return true;\n}\n\nexport function isHorizontalExistScrollBar(state: StateManager) {\n const totalWidth = state.table.getAllColsWidth() - state.table.scenegraph.width;\n if (totalWidth <= 0) {\n return false;\n }\n return true;\n}\n\nfunction isScrollToTop(deltaY: number, state: StateManager) {\n const totalHeight = state.table.getAllRowsHeight() - state.table.scenegraph.height;\n return totalHeight !== 0 && deltaY <= 0 && state.scroll.verticalBarPos < 1;\n}\n\nfunction isScrollToBottom(deltaY: number, state: StateManager) {\n // 这里加入tolerance,避免出现无用滚动\n const sizeTolerance = state.table.options.customConfig?._disableColumnAndRowSizeRound ? 1 : 0;\n\n const totalHeight = state.table.getAllRowsHeight() - state.table.scenegraph.height;\n return totalHeight !== 0 && deltaY >= 0 && Math.abs(state.scroll.verticalBarPos - totalHeight) < 1 + sizeTolerance;\n}\n\nfunction isScrollToLeft(deltaX: number, state: StateManager) {\n const totalWidth = state.table.getAllColsWidth() - state.table.scenegraph.width;\n return totalWidth !== 0 && deltaX <= 0 && state.scroll.horizontalBarPos < 1;\n}\n\nfunction isScrollToRight(deltaX: number, state: StateManager) {\n // 这里加入tolerance,避免出现无用滚动\n const sizeTolerance = state.table.options.customConfig?._disableColumnAndRowSizeRound ? 1 : 0;\n\n const totalWidth = state.table.getAllColsWidth() - state.table.scenegraph.width;\n return totalWidth !== 0 && deltaX >= 0 && Math.abs(state.scroll.horizontalBarPos - totalWidth) < 1 + sizeTolerance;\n}\n\nexport class InertiaScroll {\n friction: number;\n lastTime: number;\n speedX: number;\n speedY: number;\n stateManager: StateManager;\n runingId: number;\n scrollHandle: (dx: number, dy: number) => void;\n constructor(stateManager: StateManager) {\n this.stateManager = stateManager;\n }\n setScrollHandle(scrollHandle: (dx: number, dy: number) => void) {\n this.scrollHandle = scrollHandle;\n }\n\n startInertia(speedX: number, speedY: number, friction: number) {\n this.lastTime = Date.now();\n this.speedX = speedX;\n this.speedY = speedY;\n this.friction = friction;\n if (!this.runingId) {\n this.runingId = vglobal.getRequestAnimationFrame()(this.inertia.bind(this));\n }\n }\n inertia() {\n const now = Date.now();\n const dffTime = now - this.lastTime;\n let stopped = true;\n const f = Math.pow(this.friction, dffTime / 16);\n const newSpeedX = f * this.speedX;\n const newSpeedY = f * this.speedY;\n let dx = 0;\n let dy = 0;\n if (Math.abs(newSpeedX) > 0.05) {\n stopped = false;\n dx = ((this.speedX + newSpeedX) / 2) * dffTime;\n }\n if (Math.abs(newSpeedY) > 0.05) {\n stopped = false;\n dy = ((this.speedY + newSpeedY) / 2) * dffTime;\n }\n this.scrollHandle?.(dx, dy);\n if (stopped) {\n this.runingId = null;\n return;\n }\n this.lastTime = now;\n this.speedX = newSpeedX;\n this.speedY = newSpeedY;\n\n this.runingId = vglobal.getRequestAnimationFrame()(this.inertia.bind(this));\n }\n endInertia() {\n vglobal.getCancelAnimationFrame()(this.runingId);\n this.runingId = null;\n }\n isInertiaScrolling() {\n return !!this.runingId;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/event/scroll.ts"],"names":[],"mappings":"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","file":"scroll.js","sourcesContent":["import type { StateManager } from '../state/state';\nimport { InteractionState } from '../ts-types';\nimport { vglobal, type FederatedWheelEvent } from './../vrender';\n\n/**\n *\n * @param event\n * @param state\n * @param isWheelEvent 是否是由鼠标或者触摸板原生滚动事件触发进入?\n */\nexport function handleWhell(event: FederatedWheelEvent, state: StateManager, isWheelEvent: boolean = true) {\n let { deltaX, deltaY } = event;\n // 如果按住了shift 则进行横向滚动 纵向不滚动\n if (event.shiftKey && event.deltaY) {\n //mac电脑按住shift 鼠标滚动deltaX和deltaY是自动互换的,所以此逻辑只针对windows电脑有效及mac触摸板有效\n deltaX = deltaY;\n deltaY = 0;\n }\n const [optimizedDeltaX, optimizedDeltaY] = optimizeScrollXY(deltaX, deltaY, { horizontal: 1, vertical: 1 });\n if (optimizedDeltaX || optimizedDeltaY) {\n if (state.interactionState !== InteractionState.scrolling) {\n state.updateInteractionState(InteractionState.scrolling);\n }\n }\n const visible1 = state.table.theme.scrollStyle?.visible;\n const horizontalVisible = state.table.theme.scrollStyle?.horizontalVisible ?? visible1;\n const verticalVisible = state.table.theme.scrollStyle?.verticalVisible ?? visible1;\n const horizontalAutoHide = horizontalVisible === 'scrolling';\n const verticalAutoHide = verticalVisible === 'scrolling';\n let usedFrozenHorizontal = false;\n let usedRightFrozenHorizontal = false;\n let blockedFrozenHorizontal = false;\n let blockedRightFrozenHorizontal = false;\n if (optimizedDeltaX) {\n // 横向滚动需要判断“滚动意图属于哪个区域”:\n // - body:主滚动域(影响非冻结列)\n // - frozen:左侧冻结区域内部滚动(scrollFrozenCols 开启且溢出时)\n // - rightFrozen:右侧冻结区域内部滚动(scrollRightFrozenCols 开启且溢出时)\n //\n // 部分浏览器/输入设备的 wheel 事件不一定带坐标(event.x/y),因此这里会回退使用 LastBodyPointerXY。\n const pxEvent = (event as any).x;\n const pyEvent = (event as any).y;\n const pxFallback = (state.table as any).eventManager?.LastBodyPointerXY?.x;\n const pyFallback = (state.table as any).eventManager?.LastBodyPointerXY?.y;\n const px = typeof pxEvent === 'number' ? pxEvent : pxFallback;\n const py = typeof pyEvent === 'number' ? pyEvent : pyFallback;\n const usedFallback = typeof pxEvent !== 'number' || typeof pyEvent !== 'number';\n const relativeX = typeof px === 'number' ? px - state.table.tableX : NaN;\n const relativeY = typeof py === 'number' ? py - state.table.tableY : NaN;\n const isInTable =\n isFinite(relativeX) &&\n isFinite(relativeY) &&\n relativeX >= 0 &&\n relativeY >= 0 &&\n relativeX <= state.table.tableNoFrameWidth &&\n relativeY <= state.table.tableNoFrameHeight;\n const frozenColsScrollable = state.table.options.scrollFrozenCols && state.table.getFrozenColsOffset() > 0;\n const rightFrozenColsScrollable =\n state.table.options.scrollRightFrozenCols && state.table.getRightFrozenColsOffset() > 0;\n const isInFrozenViewport = isInTable && relativeX > 0 && relativeX < state.table.getFrozenColsWidth();\n const isInRightFrozenViewport =\n isInTable && relativeX > state.table.tableNoFrameWidth - state.table.getRightFrozenColsWidth();\n\n if (frozenColsScrollable && isInFrozenViewport) {\n const maxFrozenScrollLeft = state.table.getFrozenColsOffset();\n const nextFrozenScrollLeft = state.scroll.frozenHorizontalBarPos + optimizedDeltaX;\n const canScrollFrozen =\n (optimizedDeltaX < 0 && state.scroll.frozenHorizontalBarPos > 0) ||\n (optimizedDeltaX > 0 && state.scroll.frozenHorizontalBarPos < maxFrozenScrollLeft);\n if (canScrollFrozen) {\n state.setFrozenColsScrollLeft(nextFrozenScrollLeft);\n usedFrozenHorizontal = true;\n state.showHorizontalScrollBar(horizontalAutoHide, 'frozen');\n } else {\n if (state.table.options.scrollFrozenColsPassThroughToBody) {\n state.setScrollLeft(state.scroll.horizontalBarPos + optimizedDeltaX, event);\n state.showHorizontalScrollBar(horizontalAutoHide, 'body');\n } else {\n blockedFrozenHorizontal = true;\n state.showHorizontalScrollBar(horizontalAutoHide, 'frozen');\n }\n }\n } else if (rightFrozenColsScrollable && isInRightFrozenViewport) {\n const maxRightFrozenScrollLeft = state.table.getRightFrozenColsOffset();\n // 右冻结区域的内容从右向左展开。为了让触摸板的“向左滑”表现为“展开更多右冻结列”,\n // 这里将 deltaX 反向映射到 rightFrozen 的 scrollLeft。\n const rightFrozenDelta = -optimizedDeltaX;\n const nextRightFrozenScrollLeft = state.scroll.rightFrozenHorizontalBarPos + rightFrozenDelta;\n const canScrollRightFrozen =\n (rightFrozenDelta < 0 && state.scroll.rightFrozenHorizontalBarPos > 0) ||\n (rightFrozenDelta > 0 && state.scroll.rightFrozenHorizontalBarPos < maxRightFrozenScrollLeft);\n if (canScrollRightFrozen) {\n state.setRightFrozenColsScrollLeft(nextRightFrozenScrollLeft);\n usedRightFrozenHorizontal = true;\n state.showHorizontalScrollBar(horizontalAutoHide, 'rightFrozen');\n } else {\n if (state.table.options.scrollFrozenColsPassThroughToBody) {\n state.setScrollLeft(state.scroll.horizontalBarPos + optimizedDeltaX, event);\n state.showHorizontalScrollBar(horizontalAutoHide, 'body');\n } else {\n blockedRightFrozenHorizontal = true;\n state.showHorizontalScrollBar(horizontalAutoHide, 'rightFrozen');\n }\n }\n } else {\n state.setScrollLeft(state.scroll.horizontalBarPos + optimizedDeltaX, event);\n state.showHorizontalScrollBar(horizontalAutoHide, 'body');\n }\n }\n if (optimizedDeltaY) {\n state.setScrollTop(state.scroll.verticalBarPos + optimizedDeltaY, event);\n state.showVerticalScrollBar(verticalAutoHide);\n }\n isWheelEvent && state.resetInteractionState(state.interactionStateBeforeScroll);\n if (\n event.nativeEvent?.cancelable &&\n ((state.table.internalProps.overscrollBehavior === 'none' &&\n ((deltaY && isVerticalExistScrollBar(state)) || (deltaX && isHorizontalExistScrollBar(state)))) ||\n (Math.abs(deltaY) >= Math.abs(deltaX) && deltaY !== 0 && isVerticalScrollable(deltaY, state)) ||\n (Math.abs(deltaY) <= Math.abs(deltaX) &&\n deltaX !== 0 &&\n (blockedFrozenHorizontal || blockedRightFrozenHorizontal\n ? false\n : usedFrozenHorizontal\n ? state.table.getFrozenColsOffset() > 0\n : usedRightFrozenHorizontal\n ? state.table.getRightFrozenColsOffset() > 0\n : isHorizontalScrollable(deltaX, state))))\n ) {\n event.nativeEvent.preventDefault();\n }\n}\n\ninterface ScrollSpeedRatio {\n horizontal?: number;\n vertical?: number;\n}\n\n/**\n * 优化滚动方向,对于小角度的滚动,固定为一个方向\n * @param x\n * @param y\n * @param ratio\n */\nfunction optimizeScrollXY(x: number, y: number, ratio: ScrollSpeedRatio): [number, number] {\n const ANGLE = 2; // 调参 根据斜率来调整xy方向的划分\n const angle = Math.abs(x / y);\n\n // 经过滚动优化之后的 x, y\n const deltaX = angle <= 1 / ANGLE ? 0 : x;\n const deltaY = angle > ANGLE ? 0 : y;\n\n return [Math.ceil(deltaX * (ratio.horizontal ?? 0)), Math.ceil(deltaY * (ratio.vertical ?? 0))];\n}\n\nexport function isVerticalScrollable(deltaY: number, state: StateManager) {\n const totalHeight = state.table.getAllRowsHeight() - state.table.scenegraph.height;\n if (totalHeight === 0) {\n return false;\n }\n return !isScrollToTop(deltaY, state) && !isScrollToBottom(deltaY, state);\n}\n\nexport function isHorizontalScrollable(deltaX: number, state: StateManager) {\n const frozenOffset = state.table.getFrozenColsOffset?.() ?? 0;\n const rightFrozenOffset = state.table.getRightFrozenColsOffset?.() ?? 0;\n const totalWidth = state.table.getAllColsWidth() - state.table.scenegraph.width - frozenOffset - rightFrozenOffset;\n if (totalWidth === 0) {\n return false;\n }\n return !isScrollToLeft(deltaX, state) && !isScrollToRight(deltaX, state);\n}\n\nexport function isVerticalExistScrollBar(state: StateManager) {\n const totalHeight = state.table.getAllRowsHeight() - state.table.scenegraph.height;\n if (totalHeight <= 0) {\n return false;\n }\n return true;\n}\n\nexport function isHorizontalExistScrollBar(state: StateManager) {\n const frozenOffset = state.table.getFrozenColsOffset?.() ?? 0;\n const rightFrozenOffset = state.table.getRightFrozenColsOffset?.() ?? 0;\n const totalWidth = state.table.getAllColsWidth() - state.table.scenegraph.width - frozenOffset - rightFrozenOffset;\n if (totalWidth <= 0) {\n return false;\n }\n return true;\n}\n\nfunction isScrollToTop(deltaY: number, state: StateManager) {\n const totalHeight = state.table.getAllRowsHeight() - state.table.scenegraph.height;\n return totalHeight !== 0 && deltaY <= 0 && state.scroll.verticalBarPos < 1;\n}\n\nfunction isScrollToBottom(deltaY: number, state: StateManager) {\n // 这里加入tolerance,避免出现无用滚动\n const sizeTolerance = state.table.options.customConfig?._disableColumnAndRowSizeRound ? 1 : 0;\n\n const totalHeight = state.table.getAllRowsHeight() - state.table.scenegraph.height;\n return totalHeight !== 0 && deltaY >= 0 && Math.abs(state.scroll.verticalBarPos - totalHeight) < 1 + sizeTolerance;\n}\n\nfunction isScrollToLeft(deltaX: number, state: StateManager) {\n const frozenOffset = state.table.getFrozenColsOffset?.() ?? 0;\n const rightFrozenOffset = state.table.getRightFrozenColsOffset?.() ?? 0;\n const totalWidth = state.table.getAllColsWidth() - state.table.scenegraph.width - frozenOffset - rightFrozenOffset;\n return totalWidth !== 0 && deltaX <= 0 && state.scroll.horizontalBarPos < 1;\n}\n\nfunction isScrollToRight(deltaX: number, state: StateManager) {\n // 这里加入tolerance,避免出现无用滚动\n const sizeTolerance = state.table.options.customConfig?._disableColumnAndRowSizeRound ? 1 : 0;\n\n const frozenOffset = state.table.getFrozenColsOffset?.() ?? 0;\n const rightFrozenOffset = state.table.getRightFrozenColsOffset?.() ?? 0;\n const totalWidth = state.table.getAllColsWidth() - state.table.scenegraph.width - frozenOffset - rightFrozenOffset;\n return totalWidth !== 0 && deltaX >= 0 && Math.abs(state.scroll.horizontalBarPos - totalWidth) < 1 + sizeTolerance;\n}\n\nexport class InertiaScroll {\n friction: number;\n lastTime: number;\n speedX: number;\n speedY: number;\n stateManager: StateManager;\n runingId: number;\n scrollHandle: (dx: number, dy: number) => void;\n constructor(stateManager: StateManager) {\n this.stateManager = stateManager;\n }\n setScrollHandle(scrollHandle: (dx: number, dy: number) => void) {\n this.scrollHandle = scrollHandle;\n }\n\n startInertia(speedX: number, speedY: number, friction: number) {\n this.lastTime = Date.now();\n this.speedX = speedX;\n this.speedY = speedY;\n this.friction = friction;\n if (!this.runingId) {\n this.runingId = vglobal.getRequestAnimationFrame()(this.inertia.bind(this));\n }\n }\n inertia() {\n const now = Date.now();\n const dffTime = now - this.lastTime;\n let stopped = true;\n const f = Math.pow(this.friction, dffTime / 16);\n const newSpeedX = f * this.speedX;\n const newSpeedY = f * this.speedY;\n let dx = 0;\n let dy = 0;\n if (Math.abs(newSpeedX) > 0.05) {\n stopped = false;\n dx = ((this.speedX + newSpeedX) / 2) * dffTime;\n }\n if (Math.abs(newSpeedY) > 0.05) {\n stopped = false;\n dy = ((this.speedY + newSpeedY) / 2) * dffTime;\n }\n this.scrollHandle?.(dx, dy);\n if (stopped) {\n this.runingId = null;\n return;\n }\n this.lastTime = now;\n this.speedX = newSpeedX;\n this.speedY = newSpeedY;\n\n this.runingId = vglobal.getRequestAnimationFrame()(this.inertia.bind(this));\n }\n endInertia() {\n vglobal.getCancelAnimationFrame()(this.runingId);\n this.runingId = null;\n }\n isInertiaScrolling() {\n return !!this.runingId;\n }\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import type { FederatedPointerEvent, IEventTarget } from './../vrender';
2
2
  import type { Group } from '../scenegraph/graphic/group';
3
3
  import type { MergeCellInfo } from '../ts-types';
4
+ import type { BaseTableAPI } from '../ts-types/base-table';
4
5
  export interface SceneEvent {
5
6
  abstractPos: {
6
7
  x: number;
@@ -16,6 +17,7 @@ export interface SceneEvent {
16
17
  };
17
18
  }
18
19
  export declare function getCellEventArgsSet(e: FederatedPointerEvent): SceneEvent;
20
+ export declare function getCellEventArgsSetWithTable(e: FederatedPointerEvent, table: BaseTableAPI): SceneEvent;
19
21
  export declare function getTargetCell(target: any): any;
20
22
  export declare const regIndexReg: RegExp;
21
23
  export declare function setDataToHTML(data: string): string;
package/cjs/event/util.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- }), exports.setDataToHTML = exports.regIndexReg = exports.getTargetCell = exports.getCellEventArgsSet = void 0;
5
+ }), exports.setDataToHTML = exports.regIndexReg = exports.getTargetCell = exports.getCellEventArgsSetWithTable = exports.getCellEventArgsSet = void 0;
6
6
 
7
7
  const vutils_1 = require("@visactor/vutils");
8
8
 
@@ -23,6 +23,30 @@ function getCellEventArgsSet(e) {
23
23
  }), tableEvent;
24
24
  }
25
25
 
26
+ function getCellEventArgsSetWithTable(e, table) {
27
+ var _a;
28
+ const eventArgsSet = getCellEventArgsSet(e);
29
+ if (!eventArgsSet.eventArgs) return eventArgsSet;
30
+ if (!table.options.scrollFrozenCols || 0 === (null === (_a = table.getFrozenColsOffset) || void 0 === _a ? void 0 : _a.call(table))) return eventArgsSet;
31
+ const xInTable = e.x - table.tableX, yInTable = e.y - table.tableY;
32
+ if (xInTable < 0 || yInTable < 0 || xInTable > table.tableNoFrameWidth || yInTable > table.tableNoFrameHeight) return eventArgsSet;
33
+ const frozenViewportWidth = table.getFrozenColsWidth(), pickedCol = eventArgsSet.eventArgs.col, pickedRow = eventArgsSet.eventArgs.row;
34
+ if (pickedCol >= 0 && pickedCol < table.frozenColCount && !table.isRightFrozenColumn(pickedCol, pickedRow) && xInTable >= frozenViewportWidth) {
35
+ const cell = table.getCellAtRelativePosition(e.x, e.y);
36
+ if (-1 === cell.col || -1 === cell.row) return eventArgsSet;
37
+ const targetCell = table.scenegraph.getCell(cell.col, cell.row);
38
+ eventArgsSet.eventArgs = {
39
+ col: cell.col,
40
+ row: cell.row,
41
+ event: e,
42
+ targetCell: targetCell,
43
+ mergeInfo: getMergeCellInfo(targetCell),
44
+ target: targetCell
45
+ };
46
+ }
47
+ return eventArgsSet;
48
+ }
49
+
26
50
  function getTargetCell(target) {
27
51
  for (;target && target.parent; ) {
28
52
  if ("cell" === target.role) return target;
@@ -52,6 +76,7 @@ function setDataToHTML(data) {
52
76
  })), result.push("</table>"), [ META_HEAD, result.join("") ].join("");
53
77
  }
54
78
 
55
- exports.getCellEventArgsSet = getCellEventArgsSet, exports.getTargetCell = getTargetCell,
56
- exports.regIndexReg = /radio-\d+-\d+-(\d+)/, exports.setDataToHTML = setDataToHTML;
79
+ exports.getCellEventArgsSet = getCellEventArgsSet, exports.getCellEventArgsSetWithTable = getCellEventArgsSetWithTable,
80
+ exports.getTargetCell = getTargetCell, exports.regIndexReg = /radio-\d+-\d+-(\d+)/,
81
+ exports.setDataToHTML = setDataToHTML;
57
82
  //# sourceMappingURL=util.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/event/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import type { FederatedPointerEvent, IEventTarget } from './../vrender';\nimport type { Group } from '../scenegraph/graphic/group';\nimport type { MergeCellInfo } from '../ts-types';\nimport { isValid } from '@visactor/vutils';\n\nexport interface SceneEvent {\n abstractPos: {\n x: number;\n y: number;\n };\n eventArgs?: {\n col: number;\n row: number;\n event: FederatedPointerEvent;\n targetCell: Group;\n mergeInfo?: MergeCellInfo;\n target: IEventTarget;\n };\n}\n\nexport function getCellEventArgsSet(e: FederatedPointerEvent): SceneEvent {\n const tableEvent: SceneEvent = {\n abstractPos: {\n // x: e.x,\n // y: e.y,\n x: e.viewport.x,\n y: e.viewport.y\n }\n // eventArgs: {\n // col: (e.target as any).col,\n // row: (e.target as any).row,\n // event: e,\n // },\n };\n const targetCell = getTargetCell(e.target);\n if (targetCell) {\n tableEvent.eventArgs = {\n col: targetCell.col,\n row: targetCell.row,\n event: e,\n targetCell,\n mergeInfo: getMergeCellInfo(targetCell),\n target: e.target\n };\n }\n return tableEvent;\n}\n\nexport function getTargetCell(target: any) {\n while (target && target.parent) {\n if (target.role === 'cell') {\n return target;\n }\n target = target.parent;\n }\n return null;\n}\n\nfunction getMergeCellInfo(cellGroup: Group): MergeCellInfo | undefined {\n if (\n isValid(cellGroup.mergeStartCol) &&\n isValid(cellGroup.mergeStartRow) &&\n isValid(cellGroup.mergeEndCol) &&\n isValid(cellGroup.mergeEndRow)\n ) {\n return {\n colStart: cellGroup.mergeStartCol,\n colEnd: cellGroup.mergeEndCol,\n rowStart: cellGroup.mergeStartRow,\n rowEnd: cellGroup.mergeEndRow\n };\n }\n return undefined;\n}\n\nexport const regIndexReg = /radio-\\d+-\\d+-(\\d+)/;\n\nexport function setDataToHTML(data: string) {\n const result = ['<table>'];\n const META_HEAD = [\n '<meta name=\"author\" content=\"Visactor\"/>', // 后面可用于vtable之间的快速复制粘贴\n //white-space:normal,连续的空白字符会被合并为一个空格,并且文本会根据容器的宽度自动换行显示\n //mso-data-placement:same-cell,excel专用, 在同一个单元格中显示所有数据,而不是默认情况下将数据分散到多个单元格中显示\n '<style type=\"text/css\">td{white-space:normal}br{mso-data-placement:same-cell}</style>'\n ].join('');\n const rows = data.split('\\r\\n'); // 将数据拆分为行\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: string[] = [];\n if (rowIndex === 0) {\n result.push('<tbody>');\n }\n cells.forEach(function (cell: string, cellIndex: number) {\n // 单元格数据处理\n const parsedCellData = !cell\n ? ' '\n : cell\n .toString()\n .replace(/&/g, '&amp;') // replace & with &amp; to prevent XSS attacks\n .replace(/'/g, '&#39;') // replace ' with &#39; to prevent XSS attacks\n .replace(/</g, '&lt;') // replace < with &lt; to prevent XSS attacks\n .replace(/>/g, '&gt;') // replace > with &gt; to prevent XSS attacks\n .replace(/\\n/g, '<br>') // replace \\n with <br> to prevent XSS attacks\n .replace(/(<br(\\s*|\\/)>(\\r\\n|\\n)?|\\r\\n|\\n)/g, '<br>\\r\\n') // replace <br> with <br>\\r\\n to prevent XSS attacks\n .replace(/\\x20{2,}/gi, (substring: string | any[]) => {\n // excel连续空格序列化\n return `<span style=\"mso-spacerun: yes\">${'&nbsp;'.repeat(substring.length - 1)} </span>`;\n }) // replace 2 or more spaces with &nbsp; to prevent XSS attacks\n .replace(/\\t/gi, '&#9;'); // replace \\t with &#9; to prevent XSS attacks\n\n rowValues.push(`<td>${parsedCellData}</td>`);\n });\n result.push('<tr>', ...rowValues, '</tr>');\n\n if (rowIndex === rows.length - 1) {\n result.push('</tbody>');\n }\n });\n result.push('</table>');\n return [META_HEAD, result.join('')].join('');\n}\n"]}
1
+ {"version":3,"sources":["../src/event/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import type { FederatedPointerEvent, IEventTarget } from './../vrender';\nimport type { Group } from '../scenegraph/graphic/group';\nimport type { MergeCellInfo } from '../ts-types';\nimport { isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n\nexport interface SceneEvent {\n abstractPos: {\n x: number;\n y: number;\n };\n eventArgs?: {\n col: number;\n row: number;\n event: FederatedPointerEvent;\n targetCell: Group;\n mergeInfo?: MergeCellInfo;\n target: IEventTarget;\n };\n}\n\nexport function getCellEventArgsSet(e: FederatedPointerEvent): SceneEvent {\n const tableEvent: SceneEvent = {\n abstractPos: {\n // x: e.x,\n // y: e.y,\n x: e.viewport.x,\n y: e.viewport.y\n }\n // eventArgs: {\n // col: (e.target as any).col,\n // row: (e.target as any).row,\n // event: e,\n // },\n };\n const targetCell = getTargetCell(e.target);\n if (targetCell) {\n tableEvent.eventArgs = {\n col: targetCell.col,\n row: targetCell.row,\n event: e,\n targetCell,\n mergeInfo: getMergeCellInfo(targetCell),\n target: e.target\n };\n }\n return tableEvent;\n}\n\nexport function getCellEventArgsSetWithTable(e: FederatedPointerEvent, table: BaseTableAPI): SceneEvent {\n const eventArgsSet = getCellEventArgsSet(e);\n if (!eventArgsSet.eventArgs) {\n return eventArgsSet;\n }\n if (!table.options.scrollFrozenCols || table.getFrozenColsOffset?.() === 0) {\n return eventArgsSet;\n }\n\n const xInTable = e.x - table.tableX;\n const yInTable = e.y - table.tableY;\n if (xInTable < 0 || yInTable < 0 || xInTable > table.tableNoFrameWidth || yInTable > table.tableNoFrameHeight) {\n return eventArgsSet;\n }\n\n const frozenViewportWidth = table.getFrozenColsWidth();\n const pickedCol = eventArgsSet.eventArgs.col;\n const pickedRow = eventArgsSet.eventArgs.row;\n const isPickedLeftFrozen =\n pickedCol >= 0 && pickedCol < table.frozenColCount && !table.isRightFrozenColumn(pickedCol, pickedRow);\n\n if (isPickedLeftFrozen && xInTable >= frozenViewportWidth) {\n const cell = table.getCellAtRelativePosition(e.x, e.y);\n if (cell.col === -1 || cell.row === -1) {\n return eventArgsSet;\n }\n const targetCell = table.scenegraph.getCell(cell.col, cell.row);\n eventArgsSet.eventArgs = {\n col: cell.col,\n row: cell.row,\n event: e,\n targetCell,\n mergeInfo: getMergeCellInfo(targetCell),\n target: targetCell as unknown as IEventTarget\n };\n }\n\n return eventArgsSet;\n}\n\nexport function getTargetCell(target: any) {\n while (target && target.parent) {\n if (target.role === 'cell') {\n return target;\n }\n target = target.parent;\n }\n return null;\n}\n\nfunction getMergeCellInfo(cellGroup: Group): MergeCellInfo | undefined {\n if (\n isValid(cellGroup.mergeStartCol) &&\n isValid(cellGroup.mergeStartRow) &&\n isValid(cellGroup.mergeEndCol) &&\n isValid(cellGroup.mergeEndRow)\n ) {\n return {\n colStart: cellGroup.mergeStartCol,\n colEnd: cellGroup.mergeEndCol,\n rowStart: cellGroup.mergeStartRow,\n rowEnd: cellGroup.mergeEndRow\n };\n }\n return undefined;\n}\n\nexport const regIndexReg = /radio-\\d+-\\d+-(\\d+)/;\n\nexport function setDataToHTML(data: string) {\n const result = ['<table>'];\n const META_HEAD = [\n '<meta name=\"author\" content=\"Visactor\"/>', // 后面可用于vtable之间的快速复制粘贴\n //white-space:normal,连续的空白字符会被合并为一个空格,并且文本会根据容器的宽度自动换行显示\n //mso-data-placement:same-cell,excel专用, 在同一个单元格中显示所有数据,而不是默认情况下将数据分散到多个单元格中显示\n '<style type=\"text/css\">td{white-space:normal}br{mso-data-placement:same-cell}</style>'\n ].join('');\n const rows = data.split('\\r\\n'); // 将数据拆分为行\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: string[] = [];\n if (rowIndex === 0) {\n result.push('<tbody>');\n }\n cells.forEach(function (cell: string, cellIndex: number) {\n // 单元格数据处理\n const parsedCellData = !cell\n ? ' '\n : cell\n .toString()\n .replace(/&/g, '&amp;') // replace & with &amp; to prevent XSS attacks\n .replace(/'/g, '&#39;') // replace ' with &#39; to prevent XSS attacks\n .replace(/</g, '&lt;') // replace < with &lt; to prevent XSS attacks\n .replace(/>/g, '&gt;') // replace > with &gt; to prevent XSS attacks\n .replace(/\\n/g, '<br>') // replace \\n with <br> to prevent XSS attacks\n .replace(/(<br(\\s*|\\/)>(\\r\\n|\\n)?|\\r\\n|\\n)/g, '<br>\\r\\n') // replace <br> with <br>\\r\\n to prevent XSS attacks\n .replace(/\\x20{2,}/gi, (substring: string | any[]) => {\n // excel连续空格序列化\n return `<span style=\"mso-spacerun: yes\">${'&nbsp;'.repeat(substring.length - 1)} </span>`;\n }) // replace 2 or more spaces with &nbsp; to prevent XSS attacks\n .replace(/\\t/gi, '&#9;'); // replace \\t with &#9; to prevent XSS attacks\n\n rowValues.push(`<td>${parsedCellData}</td>`);\n });\n result.push('<tr>', ...rowValues, '</tr>');\n\n if (rowIndex === rows.length - 1) {\n result.push('</tbody>');\n }\n });\n result.push('</table>');\n return [META_HEAD, result.join('')].join('');\n}\n"]}
package/cjs/index.d.ts CHANGED
@@ -24,7 +24,7 @@ export { toBoxArray } from './tools/helper';
24
24
  export { Icon } from './scenegraph/graphic/icon';
25
25
  export { CUSTOM_MERGE_PRE_NAME, CUSTOM_CONTAINER_NAME } from './scenegraph/component/custom';
26
26
  export { matrixAllocate, transformPointForCanvas, mapToCanvasPointForCanvas, registerGlobalEventTransformer, registerWindowEventTransformer, vglobal, Group, graphicUtil } from './vrender';
27
- export declare const version = "1.24.0-alpha.0";
27
+ export declare const version = "1.25.0";
28
28
  export { TYPES, core, ListTable, ListTableSimple, BaseTableAPI, ListTableConstructorOptions, PivotTable, PivotTableSimple, PivotTableConstructorOptions, PivotChartConstructorOptions, PivotChart, IHeaderTreeDefine, IDimension, IIndicator, ITitleDefine, ICornerDefine, ColumnsDefine, ColumnDefine, LinkColumnDefine, ChartColumnDefine, ImageColumnDefine, SparklineColumnDefine, ProgressbarColumnDefine, TextColumnDefine, GroupColumnDefine, TextAlignType, TextBaselineType, textMeasure, themes, data, MousePointerCellEvent, getIcons, clearGlobal, register, DataStatistics, CustomLayout, updateCell, renderChart, setCustomAlphabetCharSet, restoreMeasureText, pluginsDefinition };
29
29
  declare function getIcons(): {
30
30
  [key: string]: TYPES.ColumnIconOption;
package/cjs/index.js CHANGED
@@ -249,7 +249,7 @@ Object.defineProperty(exports, "matrixAllocate", {
249
249
  get: function() {
250
250
  return vrender_2.graphicUtil;
251
251
  }
252
- }), exports.version = "1.24.0-alpha.0", exports.getIcons = getIcons, exports.clearGlobal = clearGlobal,
252
+ }), exports.version = "1.25.0", exports.getIcons = getIcons, exports.clearGlobal = clearGlobal,
253
253
  TYPES.AggregationType, __exportStar(require("./components"), exports), __exportStar(require("./scenegraph/group-creater/cell-type"), exports);
254
254
 
255
255
  var TABLE_EVENT_TYPE_1 = require("./core/TABLE_EVENT_TYPE");
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAA+C;AAC/C,IAAA,4BAAkB,GAAE,CAAC;AAErB,kDAAoC;AA4ElC,sBAAK;AA3EP,6CAA+B;AA4E7B,oBAAI;AA3EN,6CAA+B;AAuG7B,oBAAI;AAtGN,+CAAiC;AACjC,qDAAuC;AA0GrC,4BAAQ;AAzGV,iDAAmC;AAmGjC,wBAAM;AAlGR,yEAA2D;AA4GzD,wCAAc;AA3GhB,6DAA+C;AAiH7C,8CAAiB;AA3FnB,mDAA4D;AAiD1D,0FAjDuB,4BAAS,OAiDvB;AAhDX,yDAAqD;AAiDnD,gGAjDO,kCAAe,OAiDP;AA/CjB,qDAA+D;AAkD7D,2FAlDwB,8BAAU,OAkDxB;AAjDZ,2DAAuD;AAkDrD,iGAlDO,oCAAgB,OAkDP;AAjDlB,6CAA0C;AAoDxC,2FApDO,uBAAU,OAoDP;AAlDZ,8DAAgD;AA+E9C,oCAAY;AA7Ed,wEAAoE;AA8ElE,2FA9EO,wBAAU,OA8EP;AA7EZ,gGAAqF;AA8EnF,4FA9EO,iCAAW,OA8EP;AA7Eb,kEAA4G;AA+E1G,mGA/EO,iCAAkB,OA+EP;AADlB,yGA9E2B,uCAAwB,OA8E3B;AAfxB,4FA/DqD,0BAAW,OA+DrD;AAzDb,uDAAwD;AAA/C,gHAAA,eAAe,OAAA;AACxB,+CAA6B;AAC7B,qCAA6C;AAApC,qGAAA,aAAa,OAAA;AACtB,yCAA4C;AAAnC,oGAAA,UAAU,OAAA;AACnB,kDAAiD;AAAxC,4FAAA,IAAI,OAAA;AACb,wDAA6F;AAApF,+GAAA,qBAAqB,OAAA;AAAE,+GAAA,qBAAqB,OAAA;AAErD,qCASmB;AARjB,yGAAA,cAAc,OAAA;AACd,kHAAA,uBAAuB,OAAA;AACvB,oHAAA,yBAAyB,OAAA;AACzB,yHAAA,8BAA8B,OAAA;AAC9B,yHAAA,8BAA8B,OAAA;AAC9B,kGAAA,OAAO,OAAA;AACP,gGAAA,KAAK,OAAA;AACL,sGAAA,WAAW,OAAA;AAMA,QAAA,OAAO,GAAG,gBAAgB,CAAC;AAyDxC,SAAS,QAAQ;IAGf,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC;AACrB,CAAC;AArBC,4BAAQ;AAuBV,SAAS,WAAW;IAClB,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAGtB,CAAC;AA1BC,kCAAW;AA2Bb,KAAK,CAAC,eAAe,CAAC;AAEtB,+CAA6B;AAC7B,uEAAqD;AAErD,4DAA2D;AAAlD,oHAAA,gBAAgB,OAAA;AACzB,wFAA+G;AAAtG,gIAAA,sBAAsB,OAAA;AAAE,gIAAA,sBAAsB,OAAA;AAEvD,mDAAkD;AAAzC,0GAAA,WAAW,OAAA","file":"index.js","sourcesContent":["/* eslint-disable sort-imports */\nimport { registerForVrender } from './vrender';\nregisterForVrender();\n\nimport * as TYPES from './ts-types';\nimport * as core from './core';\nimport * as data from './data';\nimport * as icons from './icons';\nimport * as register from './register';\nimport * as themes from './themes';\nimport * as DataStatistics from './dataset/DataStatistics';\nimport * as pluginsDefinition from './plugins';\nimport type {\n ColumnDefine,\n ColumnsDefine,\n LinkColumnDefine,\n ChartColumnDefine,\n ImageColumnDefine,\n SparklineColumnDefine,\n ProgressbarColumnDefine,\n TextColumnDefine,\n GroupColumnDefine,\n ListTableConstructorOptions,\n PivotTableConstructorOptions,\n PivotChartConstructorOptions,\n IHeaderTreeDefine,\n IDimension,\n IIndicator,\n ITitleDefine,\n ICornerDefine,\n TextAlignType,\n TextBaselineType\n} from './ts-types';\nimport { ListTableAll as ListTable } from './ListTable-all';\nimport { ListTableSimple } from './ListTable-simple';\n// import { PivotTable } from './PivotTable';\nimport { PivotTableAll as PivotTable } from './PivotTable-all';\nimport { PivotTableSimple } from './PivotTable-simple';\nimport { PivotChart } from './PivotChart';\nimport type { MousePointerCellEvent } from './ts-types/events';\nimport * as CustomLayout from './render/layout';\n\nimport { updateCell } from './scenegraph/group-creater/cell-helper';\nimport { renderChart } from './scenegraph/graphic/contributions/chart-render-helper';\nimport { restoreMeasureText, setCustomAlphabetCharSet, textMeasure } from './scenegraph/utils/text-measure';\nimport type { BaseTableAPI } from './ts-types/base-table';\n\n// import { container, loadCanvasPicker } from '@src/vrender';\n// loadCanvasPicker(container);\n\nexport { getDataCellPath } from './tools/get-data-path';\nexport * from './render/jsx';\nexport { getTargetCell } from './event/util';\nexport { toBoxArray } from './tools/helper';\nexport { Icon } from './scenegraph/graphic/icon';\nexport { CUSTOM_MERGE_PRE_NAME, CUSTOM_CONTAINER_NAME } from './scenegraph/component/custom';\n// 为插件等场景提供必要的 vrender 能力:只导出用到的符号,避免与 render/jsx 的导出成员发生命名冲突。\nexport {\n matrixAllocate,\n transformPointForCanvas,\n mapToCanvasPointForCanvas,\n registerGlobalEventTransformer,\n registerWindowEventTransformer,\n vglobal,\n Group,\n graphicUtil\n} from './vrender';\n\n// export * as VRender from './vrender';\n// import * as VRender from './vrender';\n\nexport const version = \"1.24.0-alpha.0\";\n/**\n * @namespace VTable\n */\nexport {\n /**\n * Types\n * @namespace VTable.TYPES\n */\n TYPES,\n core,\n ListTable,\n ListTableSimple,\n BaseTableAPI,\n ListTableConstructorOptions,\n PivotTable,\n PivotTableSimple,\n PivotTableConstructorOptions,\n PivotChartConstructorOptions,\n PivotChart,\n IHeaderTreeDefine,\n IDimension,\n IIndicator,\n ITitleDefine,\n ICornerDefine,\n ColumnsDefine,\n ColumnDefine,\n LinkColumnDefine,\n ChartColumnDefine,\n ImageColumnDefine,\n SparklineColumnDefine,\n ProgressbarColumnDefine,\n TextColumnDefine,\n GroupColumnDefine,\n TextAlignType,\n TextBaselineType,\n textMeasure,\n themes,\n data,\n MousePointerCellEvent,\n getIcons,\n clearGlobal,\n //plugin registers\n register,\n /**\n * 暂不推荐使用\n */\n DataStatistics,\n CustomLayout,\n updateCell,\n renderChart,\n setCustomAlphabetCharSet,\n restoreMeasureText,\n pluginsDefinition\n};\n\n/** @private */\nfunction getIcons(): {\n [key: string]: TYPES.ColumnIconOption;\n} {\n return icons.get();\n}\n/** 清理内部的全局变量 如注册的icon theme等 以及共享的header column类实例 */\nfunction clearGlobal() {\n register.clearAll();\n // headers.type.clearGlobal();\n // columns.type.clearGlobal();\n}\nTYPES.AggregationType;\n\nexport * from './components';\nexport * from './scenegraph/group-creater/cell-type';\n\nexport { TABLE_EVENT_TYPE } from './core/TABLE_EVENT_TYPE';\nexport { PIVOT_CHART_EVENT_TYPE, PIVOT_TABLE_EVENT_TYPE } from './ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE';\n\nexport { EventTarget } from './event/EventTarget';\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAA+C;AAC/C,IAAA,4BAAkB,GAAE,CAAC;AAErB,kDAAoC;AA4ElC,sBAAK;AA3EP,6CAA+B;AA4E7B,oBAAI;AA3EN,6CAA+B;AAuG7B,oBAAI;AAtGN,+CAAiC;AACjC,qDAAuC;AA0GrC,4BAAQ;AAzGV,iDAAmC;AAmGjC,wBAAM;AAlGR,yEAA2D;AA4GzD,wCAAc;AA3GhB,6DAA+C;AAiH7C,8CAAiB;AA3FnB,mDAA4D;AAiD1D,0FAjDuB,4BAAS,OAiDvB;AAhDX,yDAAqD;AAiDnD,gGAjDO,kCAAe,OAiDP;AA/CjB,qDAA+D;AAkD7D,2FAlDwB,8BAAU,OAkDxB;AAjDZ,2DAAuD;AAkDrD,iGAlDO,oCAAgB,OAkDP;AAjDlB,6CAA0C;AAoDxC,2FApDO,uBAAU,OAoDP;AAlDZ,8DAAgD;AA+E9C,oCAAY;AA7Ed,wEAAoE;AA8ElE,2FA9EO,wBAAU,OA8EP;AA7EZ,gGAAqF;AA8EnF,4FA9EO,iCAAW,OA8EP;AA7Eb,kEAA4G;AA+E1G,mGA/EO,iCAAkB,OA+EP;AADlB,yGA9E2B,uCAAwB,OA8E3B;AAfxB,4FA/DqD,0BAAW,OA+DrD;AAzDb,uDAAwD;AAA/C,gHAAA,eAAe,OAAA;AACxB,+CAA6B;AAC7B,qCAA6C;AAApC,qGAAA,aAAa,OAAA;AACtB,yCAA4C;AAAnC,oGAAA,UAAU,OAAA;AACnB,kDAAiD;AAAxC,4FAAA,IAAI,OAAA;AACb,wDAA6F;AAApF,+GAAA,qBAAqB,OAAA;AAAE,+GAAA,qBAAqB,OAAA;AAErD,qCASmB;AARjB,yGAAA,cAAc,OAAA;AACd,kHAAA,uBAAuB,OAAA;AACvB,oHAAA,yBAAyB,OAAA;AACzB,yHAAA,8BAA8B,OAAA;AAC9B,yHAAA,8BAA8B,OAAA;AAC9B,kGAAA,OAAO,OAAA;AACP,gGAAA,KAAK,OAAA;AACL,sGAAA,WAAW,OAAA;AAMA,QAAA,OAAO,GAAG,QAAQ,CAAC;AAyDhC,SAAS,QAAQ;IAGf,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC;AACrB,CAAC;AArBC,4BAAQ;AAuBV,SAAS,WAAW;IAClB,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAGtB,CAAC;AA1BC,kCAAW;AA2Bb,KAAK,CAAC,eAAe,CAAC;AAEtB,+CAA6B;AAC7B,uEAAqD;AAErD,4DAA2D;AAAlD,oHAAA,gBAAgB,OAAA;AACzB,wFAA+G;AAAtG,gIAAA,sBAAsB,OAAA;AAAE,gIAAA,sBAAsB,OAAA;AAEvD,mDAAkD;AAAzC,0GAAA,WAAW,OAAA","file":"index.js","sourcesContent":["/* eslint-disable sort-imports */\nimport { registerForVrender } from './vrender';\nregisterForVrender();\n\nimport * as TYPES from './ts-types';\nimport * as core from './core';\nimport * as data from './data';\nimport * as icons from './icons';\nimport * as register from './register';\nimport * as themes from './themes';\nimport * as DataStatistics from './dataset/DataStatistics';\nimport * as pluginsDefinition from './plugins';\nimport type {\n ColumnDefine,\n ColumnsDefine,\n LinkColumnDefine,\n ChartColumnDefine,\n ImageColumnDefine,\n SparklineColumnDefine,\n ProgressbarColumnDefine,\n TextColumnDefine,\n GroupColumnDefine,\n ListTableConstructorOptions,\n PivotTableConstructorOptions,\n PivotChartConstructorOptions,\n IHeaderTreeDefine,\n IDimension,\n IIndicator,\n ITitleDefine,\n ICornerDefine,\n TextAlignType,\n TextBaselineType\n} from './ts-types';\nimport { ListTableAll as ListTable } from './ListTable-all';\nimport { ListTableSimple } from './ListTable-simple';\n// import { PivotTable } from './PivotTable';\nimport { PivotTableAll as PivotTable } from './PivotTable-all';\nimport { PivotTableSimple } from './PivotTable-simple';\nimport { PivotChart } from './PivotChart';\nimport type { MousePointerCellEvent } from './ts-types/events';\nimport * as CustomLayout from './render/layout';\n\nimport { updateCell } from './scenegraph/group-creater/cell-helper';\nimport { renderChart } from './scenegraph/graphic/contributions/chart-render-helper';\nimport { restoreMeasureText, setCustomAlphabetCharSet, textMeasure } from './scenegraph/utils/text-measure';\nimport type { BaseTableAPI } from './ts-types/base-table';\n\n// import { container, loadCanvasPicker } from '@src/vrender';\n// loadCanvasPicker(container);\n\nexport { getDataCellPath } from './tools/get-data-path';\nexport * from './render/jsx';\nexport { getTargetCell } from './event/util';\nexport { toBoxArray } from './tools/helper';\nexport { Icon } from './scenegraph/graphic/icon';\nexport { CUSTOM_MERGE_PRE_NAME, CUSTOM_CONTAINER_NAME } from './scenegraph/component/custom';\n// 为插件等场景提供必要的 vrender 能力:只导出用到的符号,避免与 render/jsx 的导出成员发生命名冲突。\nexport {\n matrixAllocate,\n transformPointForCanvas,\n mapToCanvasPointForCanvas,\n registerGlobalEventTransformer,\n registerWindowEventTransformer,\n vglobal,\n Group,\n graphicUtil\n} from './vrender';\n\n// export * as VRender from './vrender';\n// import * as VRender from './vrender';\n\nexport const version = \"1.25.0\";\n/**\n * @namespace VTable\n */\nexport {\n /**\n * Types\n * @namespace VTable.TYPES\n */\n TYPES,\n core,\n ListTable,\n ListTableSimple,\n BaseTableAPI,\n ListTableConstructorOptions,\n PivotTable,\n PivotTableSimple,\n PivotTableConstructorOptions,\n PivotChartConstructorOptions,\n PivotChart,\n IHeaderTreeDefine,\n IDimension,\n IIndicator,\n ITitleDefine,\n ICornerDefine,\n ColumnsDefine,\n ColumnDefine,\n LinkColumnDefine,\n ChartColumnDefine,\n ImageColumnDefine,\n SparklineColumnDefine,\n ProgressbarColumnDefine,\n TextColumnDefine,\n GroupColumnDefine,\n TextAlignType,\n TextBaselineType,\n textMeasure,\n themes,\n data,\n MousePointerCellEvent,\n getIcons,\n clearGlobal,\n //plugin registers\n register,\n /**\n * 暂不推荐使用\n */\n DataStatistics,\n CustomLayout,\n updateCell,\n renderChart,\n setCustomAlphabetCharSet,\n restoreMeasureText,\n pluginsDefinition\n};\n\n/** @private */\nfunction getIcons(): {\n [key: string]: TYPES.ColumnIconOption;\n} {\n return icons.get();\n}\n/** 清理内部的全局变量 如注册的icon theme等 以及共享的header column类实例 */\nfunction clearGlobal() {\n register.clearAll();\n // headers.type.clearGlobal();\n // columns.type.clearGlobal();\n}\nTYPES.AggregationType;\n\nexport * from './components';\nexport * from './scenegraph/group-creater/cell-type';\n\nexport { TABLE_EVENT_TYPE } from './core/TABLE_EVENT_TYPE';\nexport { PIVOT_CHART_EVENT_TYPE, PIVOT_TABLE_EVENT_TYPE } from './ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE';\n\nexport { EventTarget } from './event/EventTarget';\n"]}
@@ -7,6 +7,7 @@ import { CellMover } from './cell-mover';
7
7
  import type { BaseTableAPI } from '../../ts-types/base-table';
8
8
  export declare class TableComponent {
9
9
  table: BaseTableAPI;
10
+ _horizontalScrollBarTarget?: 'body' | 'frozen' | 'rightFrozen' | 'all';
10
11
  border: IRect;
11
12
  columnResizeLine: ILine;
12
13
  columnResizeBgLine: ILine;
@@ -17,6 +18,8 @@ export declare class TableComponent {
17
18
  menu: MenuHandler;
18
19
  vScrollBar: ScrollBar;
19
20
  hScrollBar: ScrollBar;
21
+ frozenHScrollBar: ScrollBar;
22
+ rightFrozenHScrollBar: ScrollBar;
20
23
  frozenShadowLine: IRect;
21
24
  rightFrozenShadowLine: IRect;
22
25
  drillIcon: DrillIcon;
@@ -47,8 +50,10 @@ export declare class TableComponent {
47
50
  hideVerticalScrollBar(): void;
48
51
  showVerticalScrollBar(): void;
49
52
  hideHorizontalScrollBar(): void;
50
- showHorizontalScrollBar(): void;
53
+ showHorizontalScrollBar(target?: 'body' | 'frozen' | 'rightFrozen' | 'all'): void;
51
54
  updateVerticalScrollBarPos(topRatio: number): void;
52
55
  updateHorizontalScrollBarPos(leftRatio: number): void;
56
+ updateFrozenHorizontalScrollBarPos(leftRatio: number): void;
57
+ updateRightFrozenHorizontalScrollBarPos(leftRatio: number): void;
53
58
  updateStyle(): void;
54
59
  }
@@ -183,7 +183,9 @@ class TableComponent {
183
183
  componentGroup.addChild(this.columnResizeLabel), componentGroup.addChild(this.rowResizeBgLine),
184
184
  componentGroup.addChild(this.rowResizeLine), componentGroup.addChild(this.rowResizeLabel);
185
185
  this.table.theme.scrollStyle.hoverOn && !this.table.theme.scrollStyle.barToSide ? (componentGroup.addChild(this.hScrollBar),
186
+ componentGroup.addChild(this.frozenHScrollBar), componentGroup.addChild(this.rightFrozenHScrollBar),
186
187
  componentGroup.addChild(this.vScrollBar)) : (componentGroup.stage.defaultLayer.addChild(this.hScrollBar),
188
+ componentGroup.stage.defaultLayer.addChild(this.frozenHScrollBar), componentGroup.stage.defaultLayer.addChild(this.rightFrozenHScrollBar),
187
189
  componentGroup.stage.defaultLayer.addChild(this.vScrollBar)), this.menu.bindTableComponent(componentGroup),
188
190
  this.drillIcon.appand(componentGroup), this.cellMover.appand(componentGroup);
189
191
  }
@@ -209,7 +211,33 @@ class TableComponent {
209
211
  sliderStyle: sliderStyle,
210
212
  range: [ 0, .1 ],
211
213
  visible: !1
212
- }), this.hScrollBar.render(), this.hScrollBar.hideAll(), this.vScrollBar = new vrender_2.ScrollBar({
214
+ }), this.hScrollBar.render(), this.hScrollBar.hideAll(), this.frozenHScrollBar = new vrender_2.ScrollBar({
215
+ direction: "horizontal",
216
+ x: 2 * -this.table.tableNoFrameWidth,
217
+ y: 2 * -this.table.tableNoFrameHeight,
218
+ width: this.table.tableNoFrameWidth,
219
+ height: width,
220
+ padding: horizontalPadding,
221
+ railStyle: {
222
+ fill: scrollRailColor
223
+ },
224
+ sliderStyle: sliderStyle,
225
+ range: [ 0, .1 ],
226
+ visible: !1
227
+ }), this.frozenHScrollBar.render(), this.frozenHScrollBar.hideAll(), this.rightFrozenHScrollBar = new vrender_2.ScrollBar({
228
+ direction: "horizontal",
229
+ x: 2 * -this.table.tableNoFrameWidth,
230
+ y: 2 * -this.table.tableNoFrameHeight,
231
+ width: this.table.tableNoFrameWidth,
232
+ height: width,
233
+ padding: horizontalPadding,
234
+ railStyle: {
235
+ fill: scrollRailColor
236
+ },
237
+ sliderStyle: sliderStyle,
238
+ range: [ 0, .1 ],
239
+ visible: !1
240
+ }), this.rightFrozenHScrollBar.render(), this.rightFrozenHScrollBar.hideAll(), this.vScrollBar = new vrender_2.ScrollBar({
213
241
  direction: "vertical",
214
242
  x: 2 * -this.table.tableNoFrameWidth,
215
243
  y: 2 * -this.table.tableNoFrameHeight,
@@ -225,14 +253,15 @@ class TableComponent {
225
253
  }), this.vScrollBar.render(), this.vScrollBar.hideAll();
226
254
  }
227
255
  updateScrollBar() {
228
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
229
- const oldHorizontalBarPos = this.table.stateManager.scroll.horizontalBarPos, oldVerticalBarPos = this.table.stateManager.scroll.verticalBarPos, theme = this.table.theme, width = null === (_a = theme.scrollStyle) || void 0 === _a ? void 0 : _a.width, visible1 = null === (_b = theme.scrollStyle) || void 0 === _b ? void 0 : _b.visible, horizontalVisible = null !== (_d = null === (_c = theme.scrollStyle) || void 0 === _c ? void 0 : _c.horizontalVisible) && void 0 !== _d ? _d : visible1, verticalVisible = null !== (_f = null === (_e = theme.scrollStyle) || void 0 === _e ? void 0 : _e.verticalVisible) && void 0 !== _f ? _f : visible1, tableWidth = Math.ceil(this.table.tableNoFrameWidth), tableHeight = Math.ceil(this.table.tableNoFrameHeight), totalHeight = this.table.getAllRowsHeight(), totalWidth = this.table.getAllColsWidth(), frozenRowsHeight = this.table.getFrozenRowsHeight(), frozenColsWidth = this.table.getFrozenColsWidth(), bottomFrozenRowsHeight = this.table.getBottomFrozenRowsHeight(), rightFrozenColsWidth = this.table.getRightFrozenColsWidth(), hoverOn = this.table.theme.scrollStyle.hoverOn, sizeTolerance = (null === (_g = this.table.options.customConfig) || void 0 === _g ? void 0 : _g._disableColumnAndRowSizeRound) ? 1 : 0;
256
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
257
+ const oldHorizontalBarPos = this.table.stateManager.scroll.horizontalBarPos, oldVerticalBarPos = this.table.stateManager.scroll.verticalBarPos, oldFrozenHorizontalBarPos = this.table.stateManager.scroll.frozenHorizontalBarPos, oldRightFrozenHorizontalBarPos = this.table.stateManager.scroll.rightFrozenHorizontalBarPos, theme = this.table.theme, width = null === (_a = theme.scrollStyle) || void 0 === _a ? void 0 : _a.width, visible1 = null === (_b = theme.scrollStyle) || void 0 === _b ? void 0 : _b.visible, horizontalVisible = null !== (_d = null === (_c = theme.scrollStyle) || void 0 === _c ? void 0 : _c.horizontalVisible) && void 0 !== _d ? _d : visible1, verticalVisible = null !== (_f = null === (_e = theme.scrollStyle) || void 0 === _e ? void 0 : _e.verticalVisible) && void 0 !== _f ? _f : visible1, tableWidth = Math.ceil(this.table.tableNoFrameWidth), tableHeight = Math.ceil(this.table.tableNoFrameHeight), totalHeight = this.table.getAllRowsHeight(), totalWidth = this.table.getAllColsWidth(), frozenRowsHeight = this.table.getFrozenRowsHeight(), frozenColsWidth = this.table.getFrozenColsWidth(), frozenColsContentWidth = null !== (_j = null === (_h = (_g = this.table).getFrozenColsContentWidth) || void 0 === _h ? void 0 : _h.call(_g)) && void 0 !== _j ? _j : frozenColsWidth, bottomFrozenRowsHeight = this.table.getBottomFrozenRowsHeight(), rightFrozenColsWidth = this.table.getRightFrozenColsWidth(), rightFrozenColsContentWidth = null !== (_m = null === (_l = (_k = this.table).getRightFrozenColsContentWidth) || void 0 === _l ? void 0 : _l.call(_k)) && void 0 !== _m ? _m : rightFrozenColsWidth, hoverOn = this.table.theme.scrollStyle.hoverOn, sizeTolerance = (null === (_o = this.table.options.customConfig) || void 0 === _o ? void 0 : _o._disableColumnAndRowSizeRound) ? 1 : 0;
230
258
  if (totalWidth > tableWidth + sizeTolerance) {
231
- const y = Math.min(tableHeight, totalHeight), rangeEnd = Math.max(.05, (tableWidth - frozenColsWidth) / (totalWidth - frozenColsWidth));
259
+ const y = Math.min(tableHeight, totalHeight), bodyViewportWidth = tableWidth - frozenColsWidth - rightFrozenColsWidth, bodyContentWidth = totalWidth - frozenColsContentWidth - rightFrozenColsContentWidth, rangeEnd = bodyContentWidth > 0 ? Math.max(.05, bodyViewportWidth / bodyContentWidth) : 1;
232
260
  let attrY = 0;
233
261
  attrY = this.table.theme.scrollStyle.barToSide ? this.table.tableNoFrameHeight - (hoverOn ? width : -this.table.scenegraph.tableGroup.attribute.y) + this.table.tableY : y - (hoverOn ? width : -this.table.scenegraph.tableGroup.attribute.y);
234
262
  let hScrollBarx = frozenColsWidth + (hoverOn ? 0 : this.table.scenegraph.tableGroup.attribute.x), hScrollBarWidth = tableWidth - frozenColsWidth - rightFrozenColsWidth;
235
- null !== (_j = null === (_h = this.table.theme.scrollStyle) || void 0 === _h ? void 0 : _h.ignoreFrozenCols) && void 0 !== _j && _j ? (hScrollBarx = hoverOn ? 0 : this.table.scenegraph.tableGroup.attribute.x,
263
+ const ignoreFrozenCols = null !== (_q = null === (_p = this.table.theme.scrollStyle) || void 0 === _p ? void 0 : _p.ignoreFrozenCols) && void 0 !== _q && _q;
264
+ ignoreFrozenCols ? (hScrollBarx = hoverOn ? 0 : this.table.scenegraph.tableGroup.attribute.x,
236
265
  hScrollBarWidth = tableWidth) : (hScrollBarx = frozenColsWidth + (hoverOn ? 0 : this.table.scenegraph.tableGroup.attribute.x),
237
266
  hScrollBarWidth = tableWidth - frozenColsWidth - rightFrozenColsWidth), this.hScrollBar.setAttributes({
238
267
  x: hScrollBarx,
@@ -246,11 +275,63 @@ class TableComponent {
246
275
  x: bounds.x1,
247
276
  y: bounds.y1
248
277
  }, "always" === horizontalVisible && this.hScrollBar.showAll();
278
+ const frozenScrollable = this.table.options.scrollFrozenCols && this.table.getFrozenColsOffset() > 0;
279
+ if (!ignoreFrozenCols && frozenScrollable) {
280
+ const frozenRangeEnd = Math.max(.05, frozenColsWidth / frozenColsContentWidth), x = hoverOn ? 0 : this.table.scenegraph.tableGroup.attribute.x;
281
+ this.frozenHScrollBar.setAttributes({
282
+ x: x,
283
+ y: attrY,
284
+ width: frozenColsWidth,
285
+ range: [ 0, frozenRangeEnd ],
286
+ visible: "always" === horizontalVisible
287
+ });
288
+ const bounds = this.frozenHScrollBar.AABBBounds && this.frozenHScrollBar.globalAABBBounds;
289
+ this.frozenHScrollBar._viewPosition = {
290
+ x: bounds.x1,
291
+ y: bounds.y1
292
+ }, "always" === horizontalVisible && this.frozenHScrollBar.showAll();
293
+ } else this.frozenHScrollBar.setAttributes({
294
+ x: 2 * -this.table.tableNoFrameWidth,
295
+ y: 2 * -this.table.tableNoFrameHeight,
296
+ width: 0,
297
+ visible: !1
298
+ });
299
+ const rightFrozenScrollable = this.table.options.scrollRightFrozenCols && this.table.getRightFrozenColsOffset() > 0;
300
+ if (!ignoreFrozenCols && rightFrozenScrollable) {
301
+ const rightFrozenRangeEnd = Math.max(.05, rightFrozenColsWidth / rightFrozenColsContentWidth), x = tableWidth - rightFrozenColsWidth + (hoverOn ? 0 : this.table.scenegraph.tableGroup.attribute.x);
302
+ this.rightFrozenHScrollBar.setAttributes({
303
+ x: x,
304
+ y: attrY,
305
+ width: rightFrozenColsWidth,
306
+ range: [ 0, rightFrozenRangeEnd ],
307
+ visible: "always" === horizontalVisible
308
+ });
309
+ const bounds = this.rightFrozenHScrollBar.AABBBounds && this.rightFrozenHScrollBar.globalAABBBounds;
310
+ this.rightFrozenHScrollBar._viewPosition = {
311
+ x: bounds.x1,
312
+ y: bounds.y1
313
+ }, "always" === horizontalVisible && this.rightFrozenHScrollBar.showAll();
314
+ } else this.rightFrozenHScrollBar.setAttributes({
315
+ x: 2 * -this.table.tableNoFrameWidth,
316
+ y: 2 * -this.table.tableNoFrameHeight,
317
+ width: 0,
318
+ visible: !1
319
+ });
249
320
  } else this.hScrollBar.setAttributes({
250
321
  x: 2 * -this.table.tableNoFrameWidth,
251
322
  y: 2 * -this.table.tableNoFrameHeight,
252
323
  width: 0,
253
324
  visible: !1
325
+ }), this.frozenHScrollBar.setAttributes({
326
+ x: 2 * -this.table.tableNoFrameWidth,
327
+ y: 2 * -this.table.tableNoFrameHeight,
328
+ width: 0,
329
+ visible: !1
330
+ }), this.rightFrozenHScrollBar.setAttributes({
331
+ x: 2 * -this.table.tableNoFrameWidth,
332
+ y: 2 * -this.table.tableNoFrameHeight,
333
+ width: 0,
334
+ visible: !1
254
335
  });
255
336
  if (totalHeight > tableHeight + sizeTolerance) {
256
337
  const x = Math.min(tableWidth, totalWidth), rangeEnd = Math.max(.05, (tableHeight - frozenRowsHeight) / (totalHeight - frozenRowsHeight));
@@ -274,7 +355,9 @@ class TableComponent {
274
355
  height: 0,
275
356
  visible: !1
276
357
  });
277
- this.table.stateManager.setScrollLeft(oldHorizontalBarPos), this.table.stateManager.setScrollTop(oldVerticalBarPos);
358
+ this.table.stateManager.setScrollLeft(oldHorizontalBarPos), this.table.stateManager.setFrozenColsScrollLeft(oldFrozenHorizontalBarPos, !1),
359
+ this.table.stateManager.setRightFrozenColsScrollLeft(oldRightFrozenHorizontalBarPos, !1),
360
+ this.table.stateManager.setScrollTop(oldVerticalBarPos);
278
361
  }
279
362
  hideResizeCol() {
280
363
  this.columnResizeLine.setAttribute("visible", !1), this.columnResizeBgLine.setAttribute("visible", !1),
@@ -400,9 +483,10 @@ class TableComponent {
400
483
  this.cellMover.update(backX, lineX, backY, lineY);
401
484
  }
402
485
  setFrozenColumnShadow(col, isRightFrozen) {
403
- var _a, _b;
404
- const colX = (0, util_1.getColX)(col, this.table, isRightFrozen);
405
- col < 0 || "always" !== (null === (_b = null === (_a = this.table.theme.frozenColumnLine) || void 0 === _a ? void 0 : _a.shadow) || void 0 === _b ? void 0 : _b.visible) ? this.frozenShadowLine.setAttributes({
486
+ var _a, _b, _c, _d, _e;
487
+ const colX = !isRightFrozen && col === this.table.frozenColCount - 1 && (null !== (_c = null === (_b = (_a = this.table).getFrozenColsOffset) || void 0 === _b ? void 0 : _b.call(_a)) && void 0 !== _c ? _c : 0) > 0 ? this.table.getFrozenColsWidth() : (0,
488
+ util_1.getColX)(col, this.table, isRightFrozen);
489
+ col < 0 || "always" !== (null === (_e = null === (_d = this.table.theme.frozenColumnLine) || void 0 === _d ? void 0 : _d.shadow) || void 0 === _e ? void 0 : _e.visible) ? this.frozenShadowLine.setAttributes({
406
490
  visible: !1,
407
491
  x: colX,
408
492
  height: this.table.getDrawRange().height
@@ -413,9 +497,10 @@ class TableComponent {
413
497
  });
414
498
  }
415
499
  setRightFrozenColumnShadow(col) {
416
- var _a, _b;
417
- const colX = (0, util_1.getColX)(col, this.table, !0);
418
- col >= this.table.colCount || "always" !== (null === (_b = null === (_a = this.table.theme.frozenColumnLine) || void 0 === _a ? void 0 : _a.shadow) || void 0 === _b ? void 0 : _b.visible) ? this.rightFrozenShadowLine.setAttributes({
500
+ var _a, _b, _c, _d, _e;
501
+ const colX = this.table.options.scrollRightFrozenCols && (null !== (_c = null === (_b = (_a = this.table).getRightFrozenColsOffset) || void 0 === _b ? void 0 : _b.call(_a)) && void 0 !== _c ? _c : 0) > 0 ? this.table.tableNoFrameWidth - this.table.getRightFrozenColsWidth() : (0,
502
+ util_1.getColX)(col, this.table, !0);
503
+ col >= this.table.colCount || "always" !== (null === (_e = null === (_d = this.table.theme.frozenColumnLine) || void 0 === _d ? void 0 : _d.shadow) || void 0 === _e ? void 0 : _e.visible) ? this.rightFrozenShadowLine.setAttributes({
419
504
  visible: !1,
420
505
  x: colX - this.rightFrozenShadowLine.attribute.width,
421
506
  height: this.table.getDrawRange().height
@@ -453,13 +538,23 @@ class TableComponent {
453
538
  var _a;
454
539
  const visible1 = this.table.theme.scrollStyle.visible, horizontalVisible = null !== (_a = this.table.theme.scrollStyle.horizontalVisible) && void 0 !== _a ? _a : visible1;
455
540
  "focus" !== horizontalVisible && "scrolling" !== horizontalVisible || (this.hScrollBar.setAttribute("visible", !1),
456
- this.hScrollBar.hideAll(), this.table.scenegraph.updateNextFrame());
541
+ this.hScrollBar.hideAll(), this.frozenHScrollBar.setAttribute("visible", !1), this.frozenHScrollBar.hideAll(),
542
+ this.rightFrozenHScrollBar.setAttribute("visible", !1), this.rightFrozenHScrollBar.hideAll(),
543
+ this._horizontalScrollBarTarget = void 0, this.table.scenegraph.updateNextFrame());
457
544
  }
458
- showHorizontalScrollBar() {
545
+ showHorizontalScrollBar(target = "all") {
459
546
  var _a;
460
547
  const visible1 = this.table.theme.scrollStyle.visible, horizontalVisible = null !== (_a = this.table.theme.scrollStyle.horizontalVisible) && void 0 !== _a ? _a : visible1;
461
- "focus" !== horizontalVisible && "scrolling" !== horizontalVisible || (this.hScrollBar.setAttribute("visible", !0),
462
- this.hScrollBar.showAll(), this.table.scenegraph.updateNextFrame());
548
+ if ("focus" !== horizontalVisible && "scrolling" !== horizontalVisible) return;
549
+ if (this._horizontalScrollBarTarget === target) return;
550
+ this._horizontalScrollBarTarget = target;
551
+ const showFrozen = "all" === target || "frozen" === target, showRightFrozen = "all" === target || "rightFrozen" === target, bodyVisible = ("all" === target || "body" === target) && this.hScrollBar.attribute.width > 0;
552
+ this.hScrollBar.setAttribute("visible", bodyVisible), bodyVisible ? this.hScrollBar.showAll() : this.hScrollBar.hideAll();
553
+ const frozenVisible = showFrozen && this.frozenHScrollBar.attribute.width > 0;
554
+ this.frozenHScrollBar.setAttribute("visible", frozenVisible), frozenVisible ? this.frozenHScrollBar.showAll() : this.frozenHScrollBar.hideAll();
555
+ const rightFrozenVisible = showRightFrozen && this.rightFrozenHScrollBar.attribute.width > 0;
556
+ this.rightFrozenHScrollBar.setAttribute("visible", rightFrozenVisible), rightFrozenVisible ? this.rightFrozenHScrollBar.showAll() : this.rightFrozenHScrollBar.hideAll(),
557
+ this.table.scenegraph.updateNextFrame();
463
558
  }
464
559
  updateVerticalScrollBarPos(topRatio) {
465
560
  const range = this.vScrollBar.attribute.range, size = range[1] - range[0], range0 = topRatio * (1 - size);
@@ -479,6 +574,24 @@ class TableComponent {
479
574
  y: bounds.y1
480
575
  };
481
576
  }
577
+ updateFrozenHorizontalScrollBarPos(leftRatio) {
578
+ const range = this.frozenHScrollBar.attribute.range, size = range[1] - range[0], range0 = leftRatio * (1 - size);
579
+ this.frozenHScrollBar.setAttribute("range", [ range0, range0 + size ]);
580
+ const bounds = this.frozenHScrollBar.AABBBounds && this.frozenHScrollBar.globalAABBBounds;
581
+ this.frozenHScrollBar._viewPosition = {
582
+ x: bounds.x1,
583
+ y: bounds.y1
584
+ };
585
+ }
586
+ updateRightFrozenHorizontalScrollBarPos(leftRatio) {
587
+ const range = this.rightFrozenHScrollBar.attribute.range, size = range[1] - range[0], range0 = leftRatio * (1 - size);
588
+ this.rightFrozenHScrollBar.setAttribute("range", [ range0, range0 + size ]);
589
+ const bounds = this.rightFrozenHScrollBar.AABBBounds && this.rightFrozenHScrollBar.globalAABBBounds;
590
+ this.rightFrozenHScrollBar._viewPosition = {
591
+ x: bounds.x1,
592
+ y: bounds.y1
593
+ };
594
+ }
482
595
  updateStyle() {
483
596
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
484
597
  const theme = this.table.theme, scrollRailColor = null === (_a = theme.scrollStyle) || void 0 === _a ? void 0 : _a.scrollRailColor, scrollSliderColor = null === (_b = theme.scrollStyle) || void 0 === _b ? void 0 : _b.scrollSliderColor, scrollSliderCornerRadius = null === (_c = theme.scrollStyle) || void 0 === _c ? void 0 : _c.scrollSliderCornerRadius, width = null === (_d = theme.scrollStyle) || void 0 === _d ? void 0 : _d.width, horizontalPadding = null === (_e = theme.scrollStyle) || void 0 === _e ? void 0 : _e.horizontalPadding, verticalPadding = null === (_f = theme.scrollStyle) || void 0 === _f ? void 0 : _f.verticalPadding;
@@ -502,6 +615,20 @@ class TableComponent {
502
615
  fill: scrollRailColor
503
616
  },
504
617
  sliderStyle: sliderStyle
618
+ }), this.frozenHScrollBar.setAttributes({
619
+ height: width,
620
+ padding: horizontalPadding,
621
+ railStyle: {
622
+ fill: scrollRailColor
623
+ },
624
+ sliderStyle: sliderStyle
625
+ }), this.rightFrozenHScrollBar.setAttributes({
626
+ height: width,
627
+ padding: horizontalPadding,
628
+ railStyle: {
629
+ fill: scrollRailColor
630
+ },
631
+ sliderStyle: sliderStyle
505
632
  });
506
633
  const columnResizeColor = null === (_g = theme.columnResize) || void 0 === _g ? void 0 : _g.lineColor, columnResizeWidth = null === (_h = theme.columnResize) || void 0 === _h ? void 0 : _h.lineWidth, columnResizeBgColor = null === (_j = theme.columnResize) || void 0 === _j ? void 0 : _j.bgColor, columnResizeBgWidth = null === (_k = theme.columnResize) || void 0 === _k ? void 0 : _k.width;
507
634
  this.columnResizeLine.setAttributes({