@tarojs/components-advanced 4.1.12-beta.43 → 4.1.12-beta.45

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 (43) hide show
  1. package/dist/components/list/hooks/useListNestedScroll.d.ts +1 -1
  2. package/dist/components/list/hooks/useListNestedScroll.js +2 -2
  3. package/dist/components/list/hooks/useListNestedScroll.js.map +1 -1
  4. package/dist/components/list/hooks/useListScrollElementAttachWeapp.d.ts +2 -1
  5. package/dist/components/list/hooks/useListScrollElementAttachWeapp.js +7 -6
  6. package/dist/components/list/hooks/useListScrollElementAttachWeapp.js.map +1 -1
  7. package/dist/components/list/hooks/useMeasureStartOffsetWeapp.d.ts +4 -4
  8. package/dist/components/list/hooks/useMeasureStartOffsetWeapp.js +30 -25
  9. package/dist/components/list/hooks/useMeasureStartOffsetWeapp.js.map +1 -1
  10. package/dist/components/list/hooks/useResizeObserver.d.ts +4 -2
  11. package/dist/components/list/hooks/useResizeObserver.js +7 -6
  12. package/dist/components/list/hooks/useResizeObserver.js.map +1 -1
  13. package/dist/components/list/index.d.ts +0 -2
  14. package/dist/components/list/index.js +7 -7
  15. package/dist/components/list/index.js.map +1 -1
  16. package/dist/components/list/utils.d.ts +11 -4
  17. package/dist/components/list/utils.js +18 -12
  18. package/dist/components/list/utils.js.map +1 -1
  19. package/dist/components/water-flow/flow-item.js +12 -7
  20. package/dist/components/water-flow/flow-item.js.map +1 -1
  21. package/dist/components/water-flow/node.d.ts +3 -0
  22. package/dist/components/water-flow/node.js +34 -1
  23. package/dist/components/water-flow/node.js.map +1 -1
  24. package/dist/components/water-flow/root.d.ts +4 -0
  25. package/dist/components/water-flow/root.js +37 -9
  26. package/dist/components/water-flow/root.js.map +1 -1
  27. package/dist/components/water-flow/section.d.ts +2 -0
  28. package/dist/components/water-flow/section.js +16 -9
  29. package/dist/components/water-flow/section.js.map +1 -1
  30. package/dist/components/water-flow/water-flow.js +26 -11
  31. package/dist/components/water-flow/water-flow.js.map +1 -1
  32. package/dist/index.js +1 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/utils/dom.d.ts +2 -2
  35. package/dist/utils/dom.js +7 -6
  36. package/dist/utils/dom.js.map +1 -1
  37. package/dist/utils/index.d.ts +1 -0
  38. package/dist/utils/index.js +1 -0
  39. package/dist/utils/index.js.map +1 -1
  40. package/dist/utils/weapp-scope.d.ts +7 -0
  41. package/dist/utils/weapp-scope.js +20 -0
  42. package/dist/utils/weapp-scope.js.map +1 -0
  43. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"section.js","sources":["../../../src/components/water-flow/section.ts"],"sourcesContent":["import { debounce } from '../../utils'\nimport { Size } from './interface'\nimport { Node } from './node'\nimport { Root, RootEvents } from './root'\nimport { StatefulEventBus } from './stateful-event-bus'\nimport { createImperativePromise, getMatrixPosition, isSameRenderRange } from './utils'\n\nexport interface SectionProps {\n /** 分组的唯一标识 */\n id: string\n /** 分组的列数 */\n col: number\n /** 分组的顺序 */\n order: number\n /** 节点数量 */\n count: number\n /** 该分组的行间距 */\n rowGap: number\n /** 该分组的列间距 */\n columnGap: number\n}\n\n/**\n * 分组状态\n */\ntype SectionState = {\n /**\n * 分组是否已经布局计算\n */\n layouted: boolean\n /**\n * 分组顶部距离容器顶部的距离\n */\n scrollTop: number\n /**\n * 分组的高度\n */\n height: number\n /**\n * 每个列的渲染范围\n * 每个元素为一个二元组,第一个元素为起始索引,第二个元素为结束索引\n */\n renderRange: [number, number][]\n}\n\nexport const SectionEvents = {\n AllNodesLayouted: Symbol.for('AllNodesLayouted'),\n Resize: Symbol.for('Resize'),\n}\n\nexport class Section extends StatefulEventBus<SectionState> {\n id: string\n order: number\n col: number\n columnMap: Node[][]\n nodes: Map<string, Node> = new Map()\n defaultSize = 200\n count = 0\n rowGap = 0\n columnGap = 0\n layoutedSignal = createImperativePromise()\n\n /** pushNodesStructuralOnly 后待 finalize;由 WaterFlow 的 useLayoutEffect 收尾,避免在父 render 中更新子 state */\n private _pendingPushFinalize = false\n\n constructor(public root: Root, props: SectionProps) {\n const { id, col, order, count, rowGap, columnGap } = props\n super({\n layouted: false,\n scrollTop: 0,\n height: 0,\n renderRange: Array.from({ length: col }, () => [0, 0]),\n })\n Object.assign(this, {\n id,\n col,\n count,\n order,\n rowGap,\n columnGap,\n columnMap: Array.from({ length: col }, () => []),\n })\n this.initializeColumnMap()\n root.registerSection(this)\n this.setupSubscriptions()\n }\n\n /**\n * 订阅事件\n */\n private setupSubscriptions() {\n // 分组的所有节点完成初次布局计算,Nodes的实际高度已经拿到,那么这时分组的高度是确定的,距离滚动容器的顶部距离也是确定的,可以开始计算\n this.sub(SectionEvents.AllNodesLayouted, () => {\n this.setStateBatch({\n scrollTop: this.calcScrollTop(),\n height: this.maxColumnHeight,\n })\n this.updateNodes()\n this.setStateIn('renderRange', this.getNodeRenderRange())\n this.setStateIn('layouted', true)\n this.layoutedSignal.resolve()\n if (this.root.sections.every((section) => section.getState().layouted)) {\n this.root.pub(RootEvents.AllSectionsLayouted)\n }\n })\n // 滚动过程中,如果分组自身可见,那么需要计算分组内应该渲染的元素节点索引区间\n this.root.sub('scrollOffset', () => {\n if (this.isInRange) {\n this.setStateIn('renderRange', this.getNodeRenderRange())\n }\n })\n\n /**\n * 对应分组内的节点尺寸发生变化,需要重新进行相关计算\n * 1. 重新计算尺寸发生变化的节点所在列的所有节点位置信息\n * 2. 重新计算分组的高度\n * 3. 重新计算当前分组之后的所有分组的scrollTop以及分组内的节点位置\n * 4. 更新分组内节点的渲染范围\n */\n this.sub<{ node: Node, newSize: Size, originalSize: Size }>(\n SectionEvents.Resize,\n debounce(() => {\n this.setStateIn('height', this.maxColumnHeight)\n this.updateBehindSectionsPosition()\n if (this.isInRange) {\n this.setStateIn('renderRange', this.getNodeRenderRange())\n }\n this.root.pub(RootEvents.Resize)\n })\n )\n }\n\n /**\n * 获取当前分组的最大高度,分组的最大高度由分组最高列决定\n * @returns 当前分组的最大高度\n */\n get maxColumnHeight() {\n return Math.max(\n ...this.columnMap.map(\n (column) => column.reduce((buf, node) => buf + node.getState().height, 0) + (column.length - 1) * this.rowGap\n )\n )\n }\n\n /**\n * 当前分组是否在可视区域\n *\n * 滚动偏移为 scrollOffset,容器的高度为 containerSize.height\n *\n * 当前容器滚动上边界(scrollBoundaryStart)为 scrollOffset,容器滚动的下边界(scrollBoundaryEnd)为 scrollOffset + containerSize.height\n *\n * 如果分组的 scrollTop 小于滚动下边界并且 scrollTop + 分组高度大于滚动上边界,那么分组在可视区域\n */\n get isInRange() {\n const { scrollBoundaryStart, scrollBoundaryEnd } = this.root\n const { height: sectionHeight, scrollTop: sectionScrollTop } = this.getState()\n return sectionScrollTop <= scrollBoundaryEnd && sectionScrollTop + sectionHeight >= scrollBoundaryStart\n }\n\n /**\n * 注册节点\n */\n private register(node: Node) {\n const { col, order } = node\n this.columnMap[col][order] = node\n this.nodes.set(node.id, node)\n }\n\n /**\n * 初始化分组内的列,即将一维数组转二维数组\n */\n private initializeColumnMap() {\n const { count, col } = this\n for (let i = 0; i < count; i++) {\n this.pushNode(i, col)\n }\n }\n\n /**\n * 更新当前分组之后的分组的位置信息\n */\n private updateBehindSectionsPosition() {\n let start = this.order + 1\n if (start > this.root.sections.length) {\n return\n }\n for (; start < this.root.sections.length; start++) {\n const currentSection = this.root.sections[start - 1]\n const nextSection = this.root.sections[start]\n // 使用 maxColumnHeight 替代 getState().height,避免 pushNodes 后 state 未同步导致 footer 错位\n const effectiveHeight = currentSection.maxColumnHeight\n const newScrollTop = currentSection.getState().scrollTop + effectiveHeight + this.rowGap\n nextSection.setStateIn('scrollTop', newScrollTop)\n nextSection.updateNodes()\n }\n }\n\n /**\n * 更新指定列的节点位置信息\n * @param col 列索引\n */\n private updateColumnNode(col: number) {\n const column = this.columnMap[col]\n const { scrollTop: sectionScrollTop } = this.getState()\n for (let i = 0; i < column.length; i++) {\n const node = column[i]\n if (i === 0) {\n node.setStateBatch({\n scrollTop: sectionScrollTop,\n top: 0,\n })\n } else {\n const prevNode = column[i - 1]\n const { scrollTop: prevNodeScrollTop, height: prevNodeHeight, top: prevNodeTop } = prevNode.getState()\n node.setStateBatch({\n scrollTop: prevNodeScrollTop + prevNodeHeight + this.rowGap,\n top: prevNodeHeight + prevNodeTop + this.rowGap,\n })\n }\n }\n }\n\n /**\n * 更新每列节点的位置\n */\n private updateNodes() {\n for (let col = 0; col < this.columnMap.length; col++) {\n this.updateColumnNode(col)\n }\n }\n\n /**\n * 计算当前分组的 scrollTop,即该分组之前的所有分组的最大列高度 + rowGap 之和\n */\n private calcScrollTop() {\n return this.root.sections.slice(0, this.order).reduce(\n (acc, section) => acc + section.maxColumnHeight + (section.rowGap ?? 0),\n 0\n )\n }\n\n /**\n * 计算当前分组内每列应该渲染的节点索引区间\n */\n public getNodeRenderRange() {\n if (!this.isInRange) {\n return Array.from({ length: this.col }, () => [0, -1] as [number, number])\n }\n\n const result = Array.from({ length: this.col }, () => [Infinity, -Infinity] as unknown as [number, number])\n for (let i = 0; i < this.columnMap.length; i++) {\n const column = this.columnMap[i]\n for (let j = 0; j < column.length; j++) {\n const node = column[j]\n if (node.isInRange) {\n result[i][0] = Math.min(result[i][0], j)\n result[i][1] = Math.max(result[i][1], j)\n }\n }\n const start = result[i][0]\n const end = result[i][1]\n if (start === Infinity) {\n result[i][0] = 0\n }\n if (end === -Infinity) {\n result[i][1] = -1\n }\n\n const backwardDistance = this.root.nodeCacheBackward\n const forwardDistance = this.root.nodeCacheForward\n const overscanBackward = result[i][0] - backwardDistance\n const overscanForward = result[i][1] + forwardDistance\n result[i][0] = overscanBackward < 0 ? 0 : overscanBackward\n result[i][1] = overscanForward > column.length ? column.length - 1 : overscanForward\n\n // 列尾连续未测量节点纳入渲染区间,保证追加数据后能挂载并完成 measure\n let tailUnmeasuredStart = column.length\n for (let j = column.length - 1; j >= 0; j--) {\n if (!column[j].getState().layouted) {\n tailUnmeasuredStart = j\n } else {\n break\n }\n }\n if (tailUnmeasuredStart < column.length) {\n result[i][0] = Math.min(result[i][0], tailUnmeasuredStart)\n result[i][1] = Math.max(result[i][1], column.length - 1)\n }\n }\n\n const prevRange = this.getState().renderRange\n return isSameRenderRange(result, prevRange) ? prevRange : result\n }\n\n public pushNode(nodeIndex: number, col: number) {\n const { row: rowIndex, col: columnIndex } = getMatrixPosition(nodeIndex, col)\n const node = new Node(this.root, this, {\n childIndex: nodeIndex,\n order: rowIndex,\n col: columnIndex,\n height: this.defaultSize,\n })\n this.register(node)\n this.root.registerNode(node)\n }\n\n /** 仅扩展 columnMap / 注册 Node,不 setState;与 finalizePushNodesStateIfNeeded 配对 */\n public pushNodesStructuralOnly (count: number) {\n const { count: originalCount, col } = this\n for (let i = originalCount; i < originalCount + count; i++) {\n this.pushNode(i, col)\n }\n this.count += count\n this.root.lowerThresholdScrollTop = Infinity\n this._pendingPushFinalize = true\n }\n\n /** 在 commit 后同步 height、节点位置与 scrollHeight(见 WaterFlow useLayoutEffect) */\n public finalizePushNodesStateIfNeeded () {\n if (!this._pendingPushFinalize) return\n this._pendingPushFinalize = false\n // 同步 section state.height,避免与 maxColumnHeight 不一致导致 footer 错位\n this.setStateIn('height', this.maxColumnHeight)\n this.updateNodes()\n this.updateBehindSectionsPosition()\n // 立即更新 scrollHeight,避免防抖导致容器高度滞后引发往上抖动\n this.root.updateScrollHeight(true)\n if (this.isInRange) {\n this.setStateIn('renderRange', this.getNodeRenderRange())\n }\n // 扩展 Root 的 section 切片,保证多 FlowSection 时当前分组始终在渲染树内\n const [rStart, rEnd] = this.root.getState().renderRange\n const newStart = Math.min(rStart, this.order)\n const newEnd = Math.max(rEnd, this.order)\n if (newStart !== rStart || newEnd !== rEnd) {\n this.root.setStateIn('renderRange', [newStart, newEnd])\n }\n this.root.resetLowerReachEdgeAfterContentChange()\n }\n\n public pushNodes (count: number) {\n this.pushNodesStructuralOnly(count)\n this.finalizePushNodesStateIfNeeded()\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"section.js","sources":["../../../src/components/water-flow/section.ts"],"sourcesContent":["import { cancelAnimationFrame, requestAnimationFrame } from '@tarojs/runtime'\n\nimport { Size } from './interface'\nimport { Node } from './node'\nimport { Root, RootEvents } from './root'\nimport { StatefulEventBus } from './stateful-event-bus'\nimport { createImperativePromise, getMatrixPosition, isSameRenderRange } from './utils'\n\nexport interface SectionProps {\n /** 分组的唯一标识 */\n id: string\n /** 分组的列数 */\n col: number\n /** 分组的顺序 */\n order: number\n /** 节点数量 */\n count: number\n /** 该分组的行间距 */\n rowGap: number\n /** 该分组的列间距 */\n columnGap: number\n}\n\n/**\n * 分组状态\n */\ntype SectionState = {\n /**\n * 分组是否已经布局计算\n */\n layouted: boolean\n /**\n * 分组顶部距离容器顶部的距离\n */\n scrollTop: number\n /**\n * 分组的高度\n */\n height: number\n /**\n * 每个列的渲染范围\n * 每个元素为一个二元组,第一个元素为起始索引,第二个元素为结束索引\n */\n renderRange: [number, number][]\n}\n\nexport const SectionEvents = {\n AllNodesLayouted: Symbol.for('AllNodesLayouted'),\n Resize: Symbol.for('Resize'),\n}\n\nexport class Section extends StatefulEventBus<SectionState> {\n id: string\n order: number\n col: number\n columnMap: Node[][]\n nodes: Map<string, Node> = new Map()\n defaultSize = 200\n count = 0\n rowGap = 0\n columnGap = 0\n layoutedSignal = createImperativePromise()\n\n /** pushNodesStructuralOnly 后待 finalize;由 WaterFlow 的 useLayoutEffect 收尾,避免在父 render 中更新子 state */\n private _pendingPushFinalize = false\n\n /** 同帧内多次 Resize 合并为一次 rAF 刷新 */\n private _resizeCoalesceRafId: number | null = null\n\n constructor(public root: Root, props: SectionProps) {\n const { id, col, order, count, rowGap, columnGap } = props\n super({\n layouted: false,\n scrollTop: 0,\n height: 0,\n renderRange: Array.from({ length: col }, () => [0, 0]),\n })\n Object.assign(this, {\n id,\n col,\n count,\n order,\n rowGap,\n columnGap,\n columnMap: Array.from({ length: col }, () => []),\n })\n this.initializeColumnMap()\n root.registerSection(this)\n this.setupSubscriptions()\n }\n\n /**\n * 订阅事件\n */\n private setupSubscriptions() {\n // 分组的所有节点完成初次布局计算,Nodes的实际高度已经拿到,那么这时分组的高度是确定的,距离滚动容器的顶部距离也是确定的,可以开始计算\n this.sub(SectionEvents.AllNodesLayouted, () => {\n this.setStateBatch({\n scrollTop: this.calcScrollTop(),\n height: this.maxColumnHeight,\n })\n this.updateNodes()\n this.setStateIn('renderRange', this.getNodeRenderRange())\n this.setStateIn('layouted', true)\n this.layoutedSignal.resolve()\n if (this.root.sections.every((section) => section.getState().layouted)) {\n this.root.pub(RootEvents.AllSectionsLayouted)\n }\n })\n // 滚动过程中,如果分组自身可见,那么需要计算分组内应该渲染的元素节点索引区间\n this.root.sub('scrollOffset', () => {\n if (this.isInRange) {\n this.setStateIn('renderRange', this.getNodeRenderRange())\n }\n })\n\n /**\n * 对应分组内的节点尺寸发生变化,需要重新进行相关计算\n * 1. 重新计算尺寸发生变化的节点所在列的所有节点位置信息\n * 2. 重新计算分组的高度\n * 3. 重新计算当前分组之后的所有分组的scrollTop以及分组内的节点位置\n * 4. 更新分组内节点的渲染范围\n */\n this.sub<{ node: Node, newSize: Size, originalSize: Size }>(\n SectionEvents.Resize,\n () => {\n if (this._resizeCoalesceRafId != null) {\n cancelAnimationFrame(this._resizeCoalesceRafId)\n }\n this._resizeCoalesceRafId = requestAnimationFrame(() => {\n this._resizeCoalesceRafId = null\n this.setStateIn('height', this.maxColumnHeight)\n this.updateBehindSectionsPosition()\n if (this.isInRange) {\n this.setStateIn('renderRange', this.getNodeRenderRange())\n }\n this.root.pub(RootEvents.Resize)\n })\n }\n )\n }\n\n /**\n * 获取当前分组的最大高度,分组的最大高度由分组最高列决定\n * @returns 当前分组的最大高度\n */\n get maxColumnHeight() {\n return Math.max(\n ...this.columnMap.map(\n (column) => column.reduce((buf, node) => buf + node.getState().height, 0) + (column.length - 1) * this.rowGap\n )\n )\n }\n\n /**\n * 当前分组是否在可视区域\n *\n * 滚动偏移为 scrollOffset,容器的高度为 containerSize.height\n *\n * 当前容器滚动上边界(scrollBoundaryStart)为 scrollOffset,容器滚动的下边界(scrollBoundaryEnd)为 scrollOffset + containerSize.height\n *\n * 如果分组的 scrollTop 小于滚动下边界并且 scrollTop + 分组高度大于滚动上边界,那么分组在可视区域\n */\n get isInRange() {\n const { scrollBoundaryStart, scrollBoundaryEnd } = this.root\n const { height: sectionHeight, scrollTop: sectionScrollTop } = this.getState()\n return sectionScrollTop <= scrollBoundaryEnd && sectionScrollTop + sectionHeight >= scrollBoundaryStart\n }\n\n /**\n * 注册节点\n */\n private register(node: Node) {\n const { col, order } = node\n this.columnMap[col][order] = node\n this.nodes.set(node.id, node)\n }\n\n /**\n * 初始化分组内的列,即将一维数组转二维数组\n */\n private initializeColumnMap() {\n const { count, col } = this\n for (let i = 0; i < count; i++) {\n this.pushNode(i, col)\n }\n }\n\n /**\n * 更新当前分组之后的分组的位置信息\n */\n private updateBehindSectionsPosition() {\n let start = this.order + 1\n if (start > this.root.sections.length) {\n return\n }\n for (; start < this.root.sections.length; start++) {\n const currentSection = this.root.sections[start - 1]\n const nextSection = this.root.sections[start]\n // 使用 maxColumnHeight 替代 getState().height,避免 pushNodes 后 state 未同步导致 footer 错位\n const effectiveHeight = currentSection.maxColumnHeight\n const newScrollTop = currentSection.getState().scrollTop + effectiveHeight + this.rowGap\n nextSection.setStateIn('scrollTop', newScrollTop)\n nextSection.updateNodes()\n }\n }\n\n /**\n * 更新指定列的节点位置信息\n * @param col 列索引\n */\n private updateColumnNode(col: number) {\n const column = this.columnMap[col]\n const { scrollTop: sectionScrollTop } = this.getState()\n for (let i = 0; i < column.length; i++) {\n const node = column[i]\n if (i === 0) {\n node.setStateBatch({\n scrollTop: sectionScrollTop,\n top: 0,\n })\n } else {\n const prevNode = column[i - 1]\n const { scrollTop: prevNodeScrollTop, height: prevNodeHeight, top: prevNodeTop } = prevNode.getState()\n node.setStateBatch({\n scrollTop: prevNodeScrollTop + prevNodeHeight + this.rowGap,\n top: prevNodeHeight + prevNodeTop + this.rowGap,\n })\n }\n }\n }\n\n /**\n * 更新每列节点的位置\n */\n private updateNodes() {\n for (let col = 0; col < this.columnMap.length; col++) {\n this.updateColumnNode(col)\n }\n }\n\n /**\n * 计算当前分组的 scrollTop,即该分组之前的所有分组的最大列高度 + rowGap 之和\n */\n private calcScrollTop() {\n return this.root.sections.slice(0, this.order).reduce(\n (acc, section) => acc + section.maxColumnHeight + (section.rowGap ?? 0),\n 0\n )\n }\n\n /**\n * 计算当前分组内每列应该渲染的节点索引区间\n */\n public getNodeRenderRange() {\n if (!this.isInRange) {\n return Array.from({ length: this.col }, () => [0, -1] as [number, number])\n }\n\n const result = Array.from({ length: this.col }, () => [Infinity, -Infinity] as unknown as [number, number])\n for (let i = 0; i < this.columnMap.length; i++) {\n const column = this.columnMap[i]\n for (let j = 0; j < column.length; j++) {\n const node = column[j]\n if (node.isInRange) {\n result[i][0] = Math.min(result[i][0], j)\n result[i][1] = Math.max(result[i][1], j)\n }\n }\n const start = result[i][0]\n const end = result[i][1]\n if (start === Infinity) {\n result[i][0] = 0\n }\n if (end === -Infinity) {\n result[i][1] = -1\n }\n\n const backwardDistance = this.root.nodeCacheBackward\n const forwardDistance = this.root.nodeCacheForward\n const overscanBackward = result[i][0] - backwardDistance\n const overscanForward = result[i][1] + forwardDistance\n result[i][0] = overscanBackward < 0 ? 0 : overscanBackward\n result[i][1] = overscanForward > column.length ? column.length - 1 : overscanForward\n\n // 列尾连续未测量节点纳入渲染区间,保证追加数据后能挂载并完成 measure\n let tailUnmeasuredStart = column.length\n for (let j = column.length - 1; j >= 0; j--) {\n if (!column[j].getState().layouted) {\n tailUnmeasuredStart = j\n } else {\n break\n }\n }\n if (tailUnmeasuredStart < column.length) {\n result[i][0] = Math.min(result[i][0], tailUnmeasuredStart)\n result[i][1] = Math.max(result[i][1], column.length - 1)\n }\n }\n\n const prevRange = this.getState().renderRange\n return isSameRenderRange(result, prevRange) ? prevRange : result\n }\n\n public pushNode(nodeIndex: number, col: number) {\n const { row: rowIndex, col: columnIndex } = getMatrixPosition(nodeIndex, col)\n const node = new Node(this.root, this, {\n childIndex: nodeIndex,\n order: rowIndex,\n col: columnIndex,\n height: this.defaultSize,\n })\n this.register(node)\n this.root.registerNode(node)\n }\n\n /** 仅扩展 columnMap / 注册 Node,不 setState;与 finalizePushNodesStateIfNeeded 配对 */\n public pushNodesStructuralOnly (count: number) {\n const { count: originalCount, col } = this\n for (let i = originalCount; i < originalCount + count; i++) {\n this.pushNode(i, col)\n }\n this.count += count\n this.root.lowerThresholdScrollTop = Infinity\n this._pendingPushFinalize = true\n }\n\n /** 在 commit 后同步 height、节点位置与 scrollHeight(见 WaterFlow useLayoutEffect) */\n public finalizePushNodesStateIfNeeded () {\n if (!this._pendingPushFinalize) return\n this._pendingPushFinalize = false\n // 同步 section state.height,避免与 maxColumnHeight 不一致导致 footer 错位\n this.setStateIn('height', this.maxColumnHeight)\n this.updateNodes()\n this.updateBehindSectionsPosition()\n // 立即更新 scrollHeight,避免防抖导致容器高度滞后引发往上抖动\n this.root.updateScrollHeight(true)\n if (this.isInRange) {\n this.setStateIn('renderRange', this.getNodeRenderRange())\n }\n // 扩展 Root 的 section 切片,保证多 FlowSection 时当前分组始终在渲染树内\n const [rStart, rEnd] = this.root.getState().renderRange\n const newStart = Math.min(rStart, this.order)\n const newEnd = Math.max(rEnd, this.order)\n if (newStart !== rStart || newEnd !== rEnd) {\n this.root.setStateIn('renderRange', [newStart, newEnd])\n }\n this.root.resetLowerReachEdgeAfterContentChange()\n }\n\n public pushNodes (count: number) {\n this.pushNodesStructuralOnly(count)\n this.finalizePushNodesStateIfNeeded()\n }\n}\n"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ import { getSysInfo, isH5, isWeapp } from './utils.js';
15
15
  import { createWaterFlowNodeCacheControl } from './water-flow-node-cache.js';
16
16
  import { getScrollViewContextNode } from '../../utils/dom.js';
17
17
  import { debounce } from '../../utils/lodash.js';
18
+ import { weappScope } from '../../utils/weapp-scope.js';
18
19
 
19
20
  getSysInfo();
20
21
  const InnerWaterFlow = (_a, ref) => {
@@ -33,7 +34,13 @@ const InnerWaterFlow = (_a, ref) => {
33
34
  ref.current = el;
34
35
  }, [ref]);
35
36
  const defaultId = useId().replace(/:/g, '');
36
- const contentId = useMemo(() => id !== null && id !== void 0 ? id : defaultId, [id, defaultId]);
37
+ /** 仅在原有 id 后追加同一实例内共享的随机数尾缀,不替换原 id */
38
+ const instanceIdSuffixRef = useRef(null);
39
+ if (instanceIdSuffixRef.current === null) {
40
+ instanceIdSuffixRef.current = String(Math.floor(Math.random() * 1e9));
41
+ }
42
+ const instanceSuffix = instanceIdSuffixRef.current;
43
+ const contentId = useMemo(() => `${id !== null && id !== void 0 ? id : defaultId}_${instanceSuffix}`, [id, defaultId, instanceSuffix]);
37
44
  const needAutoFind = flowType === 'nested' &&
38
45
  !scrollElement &&
39
46
  !(scrollElementCtx === null || scrollElementCtx === void 0 ? void 0 : scrollElementCtx.scrollRef) &&
@@ -66,6 +73,8 @@ const InnerWaterFlow = (_a, ref) => {
66
73
  }
67
74
  containerHeightRef.current = effectiveContainerHeight;
68
75
  const useScrollElementMode = flowType === 'nested' && !!(effectiveScrollElement && (isH5 || isWeapp));
76
+ const renderView = useScrollElementMode || (!!needAutoFind && autoFindStatus === 'pending');
77
+ const scrollViewShellRef = useRef(null);
69
78
  if (flowType === 'nested' && !effectiveScrollElement && (isH5 || isWeapp) && autoFindStatus === 'not-found') {
70
79
  // eslint-disable-next-line no-console
71
80
  console.warn('[WaterFlow] nestedScroll 模式但无 scrollElement(props/Context/自动查找),回退为 default,将渲染自有 ScrollView');
@@ -92,6 +101,12 @@ const InnerWaterFlow = (_a, ref) => {
92
101
  const renderRange$ = useObservedAttr(root, 'renderRange');
93
102
  const refEventOrig = useRef();
94
103
  const nodeCacheCtlRef = useRef(null);
104
+ useLayoutEffect(() => {
105
+ if (root.skipContainerMeasure)
106
+ return;
107
+ const shell = renderView ? contentWrapperRef.current : scrollViewShellRef.current;
108
+ root.measureContainerSize(shell).catch(() => { });
109
+ }, [root, renderView, needAutoFind, autoFindStatus]);
95
110
  useEffect(() => {
96
111
  const ctl = createWaterFlowNodeCacheControl(root, () => root.cacheCount);
97
112
  nodeCacheCtlRef.current = ctl;
@@ -301,9 +316,9 @@ const InnerWaterFlow = (_a, ref) => {
301
316
  if (!target.id)
302
317
  target.id = `_wf_${contentId}`;
303
318
  const scrollViewId = target.id;
304
- const instance = Taro.getCurrentInstance();
305
- const query = (instance === null || instance === void 0 ? void 0 : instance.page)
306
- ? Taro.createSelectorQuery().in(instance.page)
319
+ const scope = weappScope({ current: target });
320
+ const query = scope != null
321
+ ? Taro.createSelectorQuery().in(scope)
307
322
  : Taro.createSelectorQuery();
308
323
  query.select(`#${scrollViewId}`).scrollOffset().exec((res) => {
309
324
  var _a;
@@ -355,9 +370,9 @@ const InnerWaterFlow = (_a, ref) => {
355
370
  el.id = `_wf_${contentId}`;
356
371
  const scrollViewId = el.id;
357
372
  const measure = () => {
358
- const instance = Taro.getCurrentInstance();
359
- const query = (instance === null || instance === void 0 ? void 0 : instance.page)
360
- ? Taro.createSelectorQuery().in(instance.page)
373
+ const scope = weappScope({ current: el });
374
+ const query = scope != null
375
+ ? Taro.createSelectorQuery().in(scope)
361
376
  : Taro.createSelectorQuery();
362
377
  query.select(`#${scrollViewId}`).boundingClientRect().exec((res) => {
363
378
  var _a;
@@ -387,8 +402,6 @@ const InnerWaterFlow = (_a, ref) => {
387
402
  ro.observe(el);
388
403
  return () => ro.disconnect();
389
404
  }, [useScrollElementMode, effectiveScrollElement, root, effectiveContainerHeight, contentId]);
390
- // scrollElement 模式下只渲染内容 View(不渲染 ScrollView);内容高度须为 scrollHeight 以支持父级滚动;needAutoFind 且 pending 时 probe 渲染以便查找父容器
391
- const renderView = useScrollElementMode || (!!needAutoFind && autoFindStatus === 'pending');
392
405
  if (renderView) {
393
406
  return createElement(View, {
394
407
  ref: setContainerRef,
@@ -397,9 +410,11 @@ const InnerWaterFlow = (_a, ref) => {
397
410
  className,
398
411
  }, sections);
399
412
  }
400
- return createElement(ScrollView, Object.assign({ id: root.id, style: Object.assign({ WebkitOverflowScrolling: 'touch', overflow: 'auto' }, style), className, scrollY: true, onScroll: handleScroll }, rest), createElement(View, {
413
+ return createElement(ScrollView, Object.assign({ id: root.id, ref: (el) => {
414
+ scrollViewShellRef.current = el;
415
+ }, style: Object.assign({ WebkitOverflowScrolling: 'touch', overflow: 'auto' }, style), className, scrollY: true, onScroll: handleScroll }, rest), createElement(View, {
401
416
  ref: setContainerRef,
402
- id: 'waterflow-root',
417
+ id: `waterflow-root_${instanceSuffix}`,
403
418
  style: {
404
419
  width: '100%',
405
420
  position: 'relative',
@@ -1 +1 @@
1
- {"version":3,"file":"water-flow.js","sources":["../../../src/components/water-flow/water-flow.ts"],"sourcesContent":["import { BaseEventOrig, ScrollView, ScrollViewProps, View } from '@tarojs/components'\nimport Taro, { nextTick } from '@tarojs/taro'\nimport {\n Children,\n cloneElement,\n createElement,\n forwardRef,\n PropsWithChildren,\n ReactElement,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react'\n\nimport { debounce, getScrollViewContextNode } from '../../utils'\nimport {\n type ScrollElementContextValueShape,\n ScrollElementContextOrFallback,\n} from '../../utils/scrollElementContext'\nimport { useMeasureStartOffset } from '../list/hooks/useMeasureStartOffset'\nimport { useMeasureStartOffsetWeapp } from '../list/hooks/useMeasureStartOffsetWeapp'\nimport { useScrollParentAutoFind } from '../list/hooks/useScrollParentAutoFind'\nimport { _FlowSectionProps } from './flow-section'\nimport { Root, RootEvents } from './root'\nimport { Section } from './section'\nimport { useMemoizedFn } from './use-memoized-fn'\nimport { useObservedAttr } from './use-observed-attr'\nimport { getSysInfo, isH5, isWeapp } from './utils'\nimport { createWaterFlowNodeCacheControl } from './water-flow-node-cache'\n\nimport type { ScrollDirection, WaterFlowProps } from './interface'\n\ngetSysInfo()\n\nconst InnerWaterFlow = (\n { children, ...props }: PropsWithChildren<WaterFlowProps>,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const {\n id,\n style = {},\n className,\n cacheCount = 1,\n onScrollToUpper,\n onScrollToLower,\n upperThresholdCount,\n lowerThresholdCount,\n scrollIntoView,\n nestedScroll,\n scrollElement,\n startOffset,\n containerHeight,\n onScrollHeightChange,\n onScrollIntoViewComplete,\n ...rest\n } = props\n const flowType = nestedScroll === true ? 'nested' : 'default'\n // 从 ScrollElementContext 获取 scrollRef(List/ScrollView 内嵌时提供);无 Context 时兜底为 fallback\n const scrollElementCtx = useContext(ScrollElementContextOrFallback) as ScrollElementContextValueShape | null\n const contentWrapperRef = useRef<HTMLDivElement>(null)\n const setContainerRef = useCallback(\n (el: HTMLElement | null) => {\n (contentWrapperRef as React.MutableRefObject<HTMLElement | null>).current = el\n if (typeof ref === 'function') ref(el)\n else if (ref) (ref as React.MutableRefObject<HTMLElement | null>).current = el\n },\n [ref]\n )\n const defaultId = useId().replace(/:/g, '')\n const contentId = useMemo(() => id ?? defaultId, [id, defaultId])\n const needAutoFind =\n flowType === 'nested' &&\n !scrollElement &&\n !scrollElementCtx?.scrollRef &&\n (isH5 || isWeapp)\n const { scrollParentRef: autoFoundRef, status: autoFindStatus } = useScrollParentAutoFind(\n contentWrapperRef,\n { enabled: !!needAutoFind, isHorizontal: false, contentId: isWeapp ? contentId : undefined }\n )\n const effectiveScrollElement =\n scrollElement ??\n scrollElementCtx?.scrollRef ??\n (needAutoFind && autoFindStatus === 'found' ? autoFoundRef : null)\n const ctxStart = scrollElementCtx?.startOffset\n const hasExplicitStartOffset = ctxStart != null && ctxStart > 0\n const needMeasureStartOffset =\n flowType === 'nested' &&\n effectiveScrollElement &&\n isH5 &&\n startOffset == null &&\n !hasExplicitStartOffset\n const needMeasureStartOffsetWeapp =\n flowType === 'nested' &&\n effectiveScrollElement &&\n isWeapp &&\n startOffset == null &&\n !hasExplicitStartOffset\n const measuredStartOffset = useMeasureStartOffset(\n effectiveScrollElement ?? { current: null },\n contentWrapperRef,\n { enabled: !!needMeasureStartOffset, isHorizontal: false }\n )\n const effectiveStartOffsetRef = useRef(0)\n const measuredStartOffsetWeapp = useMeasureStartOffsetWeapp(\n effectiveScrollElement ?? { current: null },\n contentId,\n { enabled: !!needMeasureStartOffsetWeapp, isHorizontal: false, startOffsetRef: effectiveStartOffsetRef }\n )\n const effectiveStartOffset =\n startOffset ??\n (ctxStart != null && ctxStart > 0 ? ctxStart : null) ??\n measuredStartOffset ??\n measuredStartOffsetWeapp ??\n 0\n\n const effectiveContainerHeight = containerHeight ?? scrollElementCtx?.containerHeight\n\n const startOffsetRef = useRef(effectiveStartOffset)\n const containerHeightRef = useRef(effectiveContainerHeight)\n const lastReportedHeightRef = useRef<number>(0)\n startOffsetRef.current = effectiveStartOffset\n if (!needMeasureStartOffsetWeapp) {\n effectiveStartOffsetRef.current = effectiveStartOffset\n }\n containerHeightRef.current = effectiveContainerHeight\n\n const useScrollElementMode =\n flowType === 'nested' && !!(effectiveScrollElement && (isH5 || isWeapp))\n if (flowType === 'nested' && !effectiveScrollElement && (isH5 || isWeapp) && autoFindStatus === 'not-found') {\n // eslint-disable-next-line no-console\n console.warn('[WaterFlow] nestedScroll 模式但无 scrollElement(props/Context/自动查找),回退为 default,将渲染自有 ScrollView')\n }\n /**\n * 初始化数据模型\n */\n const root = useMemo(() => {\n return new Root({\n id: contentId,\n cacheCount,\n upperThresholdCount,\n lowerThresholdCount,\n skipContainerMeasure: useScrollElementMode || (!!needAutoFind && autoFindStatus === 'pending'),\n })\n }, [contentId, upperThresholdCount, lowerThresholdCount, useScrollElementMode, needAutoFind, autoFindStatus])\n\n /** props 动态修改 cacheCount 时同步到 Root,避免重建 Root;并收敛快滑单边放大到新的基线 */\n useLayoutEffect(() => {\n root.cacheCount = cacheCount\n root.setNodeCacheRange(cacheCount, cacheCount)\n }, [root, cacheCount])\n const isScrolling$ = useObservedAttr(root, 'isScrolling')\n const scrollHeight$ = useObservedAttr(root, 'scrollHeight')\n const renderRange$ = useObservedAttr(root, 'renderRange')\n const refEventOrig = useRef<BaseEventOrig>()\n const nodeCacheCtlRef = useRef<ReturnType<typeof createWaterFlowNodeCacheControl> | null>(null)\n\n useEffect(() => {\n const ctl = createWaterFlowNodeCacheControl(root, () => root.cacheCount)\n nodeCacheCtlRef.current = ctl\n return () => {\n ctl.dispose()\n nodeCacheCtlRef.current = null\n }\n }, [root])\n\n /**\n * 滚动事件\n */\n const handleScroll = useMemoizedFn((ev: BaseEventOrig<ScrollViewProps.onScrollDetail>) => {\n refEventOrig.current = ev\n const { scrollTop } = ev.detail\n nodeCacheCtlRef.current?.onScrollSample(scrollTop)\n const scrollDirection: ScrollDirection = root.getState().scrollOffset < scrollTop ? 'forward' : 'backward'\n root.setStateBatch({\n scrollDirection: scrollDirection,\n scrollOffset: scrollTop,\n isScrolling: true,\n })\n })\n\n const sections = useMemo(() => {\n const [start, end] = renderRange$\n return Children.map(children, (child: ReactElement<PropsWithChildren<_FlowSectionProps>>, order) => {\n if (Object.is(child, null)) {\n return null\n }\n const sectionProps = child.props\n const sectionId = sectionProps.id || `section-${order}`\n const childCount = Children.count(sectionProps.children)\n let section = root.findSection(sectionId)\n if (section) {\n const originalCount = section.count\n if (childCount > originalCount) {\n section.pushNodesStructuralOnly(childCount - originalCount)\n }\n } else {\n section = new Section(root, {\n id: sectionId,\n order,\n col: sectionProps.column ?? 1,\n rowGap: sectionProps.rowGap || 0,\n columnGap: sectionProps.columnGap || 0,\n count: Children.count(sectionProps.children),\n })\n }\n\n return cloneElement(child, { section, key: `${props.id}-${order}` })\n })?.slice(start, end + 1)\n }, [renderRange$[0], renderRange$[1], children, root, props.id])\n\n /** 配对 pushNodesStructuralOnly:在 layout 阶段完成 Section 状态,避免 useMemo 内 setState 告警 */\n useLayoutEffect(() => {\n Children.forEach(children, (child: ReactElement<PropsWithChildren<_FlowSectionProps>>, order) => {\n if (Object.is(child, null)) {\n return\n }\n const sectionProps = child.props\n const sectionId = sectionProps.id || `section-${order}`\n root.findSection(sectionId)?.finalizePushNodesStateIfNeeded()\n })\n }, [children, root])\n\n const scrollTo = useMemoizedFn((scrollOffset = 0) => {\n scrollOffset = Math.max(0, scrollOffset)\n if (root.getState().scrollOffset === scrollOffset) return\n if (useScrollElementMode && effectiveScrollElement?.current) {\n const el = effectiveScrollElement.current as any\n const startOff = isWeapp ? effectiveStartOffsetRef.current : (startOffsetRef.current ?? 0)\n const scrollTarget = scrollOffset + startOff\n if (isH5) {\n el.scrollTo({ top: scrollTarget })\n } else if (isWeapp) {\n const scrollViewId = el.id || `_wf_${contentId}`\n if (!el.id) el.id = scrollViewId\n getScrollViewContextNode(`#${scrollViewId}`).then((node: any) => {\n node?.scrollTo?.({ top: scrollTarget, animated: true, duration: 300 })\n })\n }\n root.setStateBatch({ scrollOffset, isScrolling: true })\n return\n }\n getScrollViewContextNode(`#${root.id}`).then((node: any) => {\n node.scrollTo({\n animated: true,\n duration: 300,\n top: scrollOffset,\n })\n })\n })\n\n const resetScrolling = useMemoizedFn(() => {\n root.setStateIn('isScrolling', false)\n })\n\n const debouncedResetScrolling = debounce(resetScrolling)\n\n useEffect(() => {\n debouncedResetScrolling()\n }, [isScrolling$])\n\n /**\n * 处理滚动阈值\n * root 需入参:autoFind 从 pending→found 时 root 会重建,必须对新 root 重新订阅\n */\n useEffect(() => {\n const disposers = [\n root.sub(\n RootEvents.ReachUpperThreshold,\n debounce(() => {\n onScrollToUpper?.(refEventOrig.current!)\n })\n ),\n root.sub(\n RootEvents.ReachLowerThreshold,\n debounce(() => {\n onScrollToLower?.(refEventOrig.current!)\n })\n ),\n ]\n return () => {\n disposers.forEach((disposer) => {\n disposer()\n })\n }\n }, [root, onScrollToUpper, onScrollToLower])\n\n /**\n * 处理 scrollIntoView\n * 竞态:快速切换目标时,取消前一次滚动,避免后发先至\n */\n useEffect(() => {\n let cancelled = false\n handleScrollIntoView()\n async function handleScrollIntoView() {\n if (!scrollIntoView) return\n const targetNode = root.findNode(scrollIntoView)\n if (!targetNode) {\n nextTick(() => { if (!cancelled) onScrollIntoViewComplete?.() })\n return\n }\n const targetSection = targetNode.section\n const doScroll = () => {\n if (cancelled) return\n scrollTo(targetNode.getState().scrollTop)\n if (cancelled) return\n nextTick(() => { if (!cancelled) onScrollIntoViewComplete?.() })\n }\n if (!targetSection.getState().layouted) {\n const order = targetSection.order\n root.setStateIn('renderRange', [\n Math.min(renderRange$[0], order),\n Math.max(renderRange$[1], order),\n ])\n nextTick(async () => {\n await targetNode.section.layoutedSignal.promise\n if (cancelled) return\n doScroll()\n })\n return\n }\n await targetSection.layoutedSignal.promise\n if (cancelled) return\n doScroll()\n }\n return () => { cancelled = true }\n }, [scrollIntoView, renderRange$[0], renderRange$[1], onScrollIntoViewComplete])\n\n // scrollElement 模式下监听外部滚动,更新 root.scrollOffset;effectiveStartOffset 变化时重新同步;内嵌时 scrollRef 可能尚未就绪,需重试\n useEffect(() => {\n if (!useScrollElementMode || !effectiveScrollElement) return\n\n let cancelled = false\n let teardown: (() => void) | null = null\n const maxRetries = 20\n\n const tryAttach = (retryCount = 0) => {\n if (cancelled) return\n const target = effectiveScrollElement.current as any\n if (!target) {\n if (retryCount < maxRetries) {\n setTimeout(() => tryAttach(retryCount + 1), 50)\n }\n return\n }\n\n const getStartOffset = () => (isWeapp ? effectiveStartOffsetRef.current : (startOffsetRef.current ?? 0))\n\n const handler = (e?: any) => {\n const scrollTop = isWeapp\n ? (e?.target?.scrollTop ?? e?.mpEvent?.detail?.scrollTop ?? 0)\n : target.scrollTop\n const offset = scrollTop - getStartOffset()\n const effectiveOffset = Math.max(0, offset)\n const prevOffset = root.getState().scrollOffset\n const scrollDirection: ScrollDirection = prevOffset < effectiveOffset ? 'forward' : 'backward'\n\n nodeCacheCtlRef.current?.onScrollSample(effectiveOffset)\n root.setStateBatch({\n scrollDirection,\n scrollOffset: effectiveOffset,\n isScrolling: true,\n })\n }\n\n if (isWeapp) {\n if (!target.id) target.id = `_wf_${contentId}`\n const scrollViewId = target.id\n const instance = Taro.getCurrentInstance()\n const query = instance?.page\n ? Taro.createSelectorQuery().in(instance.page as any)\n : Taro.createSelectorQuery()\n query.select(`#${scrollViewId}`).scrollOffset().exec((res) => {\n if (cancelled) return\n const info = res?.[0]\n if (info) {\n const scrollTopVal = info.scrollTop ?? 0\n const initialOffset = Math.max(0, scrollTopVal - getStartOffset())\n root.setStateBatch({ scrollOffset: initialOffset, isScrolling: true })\n }\n })\n } else {\n const initialOffset = Math.max(0, target.scrollTop - getStartOffset())\n root.setStateBatch({ scrollOffset: initialOffset, isScrolling: true })\n }\n\n target.addEventListener('scroll', handler, isWeapp ? undefined : { passive: true })\n teardown = () => target.removeEventListener('scroll', handler)\n }\n\n tryAttach()\n return () => {\n cancelled = true\n teardown?.()\n }\n }, [useScrollElementMode, effectiveScrollElement, root, effectiveStartOffset, contentId])\n\n // scrollHeight 变化时回调(props 优先,其次从 Context),便于 List 动高联动;防抖 150ms 上报\n const reportHeight = onScrollHeightChange ?? scrollElementCtx?.reportNestedHeightChange\n useEffect(() => {\n if (!reportHeight || scrollHeight$ <= 0) return\n const timer = setTimeout(() => {\n if (Math.abs(lastReportedHeightRef.current - scrollHeight$) < 1) return\n lastReportedHeightRef.current = scrollHeight$\n reportHeight(scrollHeight$)\n }, 150)\n return () => clearTimeout(timer)\n }, [scrollHeight$, reportHeight])\n\n // scrollElement 模式下监听容器尺寸:H5 用 ResizeObserver,小程序用 createSelectorQuery 轮询\n useEffect(() => {\n if (!useScrollElementMode || !effectiveScrollElement) return\n const el = effectiveScrollElement.current as any\n if (!el) return\n\n if (isWeapp) {\n if (!el.id) el.id = `_wf_${contentId}`\n const scrollViewId = el.id\n const measure = () => {\n const instance = Taro.getCurrentInstance()\n const query = instance?.page\n ? Taro.createSelectorQuery().in(instance.page as any)\n : Taro.createSelectorQuery()\n query.select(`#${scrollViewId}`).boundingClientRect().exec((res) => {\n const rect = res?.[0]\n if (rect && rect.height > 0 && rect.width > 0) {\n const height = containerHeightRef.current ?? rect.height\n root.setStateIn('containerSize', { width: rect.width, height })\n }\n })\n }\n measure()\n const interval = setInterval(measure, 150)\n return () => clearInterval(interval)\n }\n\n if (typeof ResizeObserver === 'undefined') return\n const update = () => {\n const height = containerHeightRef.current ?? el.clientHeight\n const width = el.clientWidth\n if (height > 0 && width > 0) {\n root.setStateIn('containerSize', { width, height })\n }\n }\n update()\n const ro = new ResizeObserver(update)\n ro.observe(el)\n return () => ro.disconnect()\n }, [useScrollElementMode, effectiveScrollElement, root, effectiveContainerHeight, contentId])\n\n // scrollElement 模式下只渲染内容 View(不渲染 ScrollView);内容高度须为 scrollHeight 以支持父级滚动;needAutoFind 且 pending 时 probe 渲染以便查找父容器\n const renderView =\n useScrollElementMode || (!!needAutoFind && autoFindStatus === 'pending')\n if (renderView) {\n return createElement(\n View,\n {\n ref: setContainerRef as any,\n id: root.id,\n style: {\n ...style,\n width: '100%',\n position: 'relative',\n height: scrollHeight$,\n pointerEvents: isScrolling$ ? 'none' : 'auto',\n },\n className,\n },\n sections\n )\n }\n\n return createElement(\n ScrollView,\n {\n id: root.id,\n style: {\n WebkitOverflowScrolling: 'touch',\n overflow: 'auto',\n ...style,\n },\n className,\n scrollY: true,\n onScroll: handleScroll,\n ...rest,\n },\n createElement(\n View,\n {\n ref: setContainerRef as any,\n id: 'waterflow-root',\n style: {\n width: '100%',\n position: 'relative',\n height: scrollHeight$,\n pointerEvents: isScrolling$ ? 'none' : 'auto',\n },\n },\n sections\n )\n )\n}\n\nexport const WaterFlow = forwardRef<HTMLElement, PropsWithChildren<WaterFlowProps>>(InnerWaterFlow)\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"water-flow.js","sources":["../../../src/components/water-flow/water-flow.ts"],"sourcesContent":["import { BaseEventOrig, ScrollView, ScrollViewProps, View } from '@tarojs/components'\nimport Taro, { nextTick } from '@tarojs/taro'\nimport {\n Children,\n cloneElement,\n createElement,\n forwardRef,\n PropsWithChildren,\n ReactElement,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react'\n\nimport { debounce, getScrollViewContextNode, weappScope } from '../../utils'\nimport {\n type ScrollElementContextValueShape,\n ScrollElementContextOrFallback,\n} from '../../utils/scrollElementContext'\nimport { useMeasureStartOffset } from '../list/hooks/useMeasureStartOffset'\nimport { useMeasureStartOffsetWeapp } from '../list/hooks/useMeasureStartOffsetWeapp'\nimport { useScrollParentAutoFind } from '../list/hooks/useScrollParentAutoFind'\nimport { _FlowSectionProps } from './flow-section'\nimport { Root, RootEvents } from './root'\nimport { Section } from './section'\nimport { useMemoizedFn } from './use-memoized-fn'\nimport { useObservedAttr } from './use-observed-attr'\nimport { getSysInfo, isH5, isWeapp } from './utils'\nimport { createWaterFlowNodeCacheControl } from './water-flow-node-cache'\n\nimport type { ScrollDirection, WaterFlowProps } from './interface'\n\ngetSysInfo()\n\nconst InnerWaterFlow = (\n { children, ...props }: PropsWithChildren<WaterFlowProps>,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const {\n id,\n style = {},\n className,\n cacheCount = 1,\n onScrollToUpper,\n onScrollToLower,\n upperThresholdCount,\n lowerThresholdCount,\n scrollIntoView,\n nestedScroll,\n scrollElement,\n startOffset,\n containerHeight,\n onScrollHeightChange,\n onScrollIntoViewComplete,\n ...rest\n } = props\n const flowType = nestedScroll === true ? 'nested' : 'default'\n // 从 ScrollElementContext 获取 scrollRef(List/ScrollView 内嵌时提供);无 Context 时兜底为 fallback\n const scrollElementCtx = useContext(ScrollElementContextOrFallback) as ScrollElementContextValueShape | null\n const contentWrapperRef = useRef<HTMLDivElement>(null)\n const setContainerRef = useCallback(\n (el: HTMLElement | null) => {\n (contentWrapperRef as React.MutableRefObject<HTMLElement | null>).current = el\n if (typeof ref === 'function') ref(el)\n else if (ref) (ref as React.MutableRefObject<HTMLElement | null>).current = el\n },\n [ref]\n )\n const defaultId = useId().replace(/:/g, '')\n /** 仅在原有 id 后追加同一实例内共享的随机数尾缀,不替换原 id 串 */\n const instanceIdSuffixRef = useRef<string | null>(null)\n if (instanceIdSuffixRef.current === null) {\n instanceIdSuffixRef.current = String(Math.floor(Math.random() * 1e9))\n }\n const instanceSuffix = instanceIdSuffixRef.current\n const contentId = useMemo(\n () => `${id ?? defaultId}_${instanceSuffix}`,\n [id, defaultId, instanceSuffix]\n )\n const needAutoFind =\n flowType === 'nested' &&\n !scrollElement &&\n !scrollElementCtx?.scrollRef &&\n (isH5 || isWeapp)\n const { scrollParentRef: autoFoundRef, status: autoFindStatus } = useScrollParentAutoFind(\n contentWrapperRef,\n { enabled: !!needAutoFind, isHorizontal: false, contentId: isWeapp ? contentId : undefined }\n )\n const effectiveScrollElement =\n scrollElement ??\n scrollElementCtx?.scrollRef ??\n (needAutoFind && autoFindStatus === 'found' ? autoFoundRef : null)\n const ctxStart = scrollElementCtx?.startOffset\n const hasExplicitStartOffset = ctxStart != null && ctxStart > 0\n const needMeasureStartOffset =\n flowType === 'nested' &&\n effectiveScrollElement &&\n isH5 &&\n startOffset == null &&\n !hasExplicitStartOffset\n const needMeasureStartOffsetWeapp =\n flowType === 'nested' &&\n effectiveScrollElement &&\n isWeapp &&\n startOffset == null &&\n !hasExplicitStartOffset\n const measuredStartOffset = useMeasureStartOffset(\n effectiveScrollElement ?? { current: null },\n contentWrapperRef,\n { enabled: !!needMeasureStartOffset, isHorizontal: false }\n )\n const effectiveStartOffsetRef = useRef(0)\n const measuredStartOffsetWeapp = useMeasureStartOffsetWeapp(\n effectiveScrollElement ?? { current: null },\n contentId,\n { enabled: !!needMeasureStartOffsetWeapp, isHorizontal: false, startOffsetRef: effectiveStartOffsetRef }\n )\n const effectiveStartOffset =\n startOffset ??\n (ctxStart != null && ctxStart > 0 ? ctxStart : null) ??\n measuredStartOffset ??\n measuredStartOffsetWeapp ??\n 0\n\n const effectiveContainerHeight = containerHeight ?? scrollElementCtx?.containerHeight\n\n const startOffsetRef = useRef(effectiveStartOffset)\n const containerHeightRef = useRef(effectiveContainerHeight)\n const lastReportedHeightRef = useRef<number>(0)\n startOffsetRef.current = effectiveStartOffset\n if (!needMeasureStartOffsetWeapp) {\n effectiveStartOffsetRef.current = effectiveStartOffset\n }\n containerHeightRef.current = effectiveContainerHeight\n\n const useScrollElementMode =\n flowType === 'nested' && !!(effectiveScrollElement && (isH5 || isWeapp))\n const renderView =\n useScrollElementMode || (!!needAutoFind && autoFindStatus === 'pending')\n const scrollViewShellRef = useRef<HTMLElement | null>(null)\n if (flowType === 'nested' && !effectiveScrollElement && (isH5 || isWeapp) && autoFindStatus === 'not-found') {\n // eslint-disable-next-line no-console\n console.warn('[WaterFlow] nestedScroll 模式但无 scrollElement(props/Context/自动查找),回退为 default,将渲染自有 ScrollView')\n }\n /**\n * 初始化数据模型\n */\n const root = useMemo(() => {\n return new Root({\n id: contentId,\n cacheCount,\n upperThresholdCount,\n lowerThresholdCount,\n skipContainerMeasure: useScrollElementMode || (!!needAutoFind && autoFindStatus === 'pending'),\n })\n }, [contentId, upperThresholdCount, lowerThresholdCount, useScrollElementMode, needAutoFind, autoFindStatus])\n\n /** props 动态修改 cacheCount 时同步到 Root,避免重建 Root;并收敛快滑单边放大到新的基线 */\n useLayoutEffect(() => {\n root.cacheCount = cacheCount\n root.setNodeCacheRange(cacheCount, cacheCount)\n }, [root, cacheCount])\n const isScrolling$ = useObservedAttr(root, 'isScrolling')\n const scrollHeight$ = useObservedAttr(root, 'scrollHeight')\n const renderRange$ = useObservedAttr(root, 'renderRange')\n const refEventOrig = useRef<BaseEventOrig>()\n const nodeCacheCtlRef = useRef<ReturnType<typeof createWaterFlowNodeCacheControl> | null>(null)\n\n useLayoutEffect(() => {\n if (root.skipContainerMeasure) return\n const shell = renderView ? contentWrapperRef.current : scrollViewShellRef.current\n root.measureContainerSize(shell as HTMLElement | null).catch(() => {})\n }, [root, renderView, needAutoFind, autoFindStatus])\n\n useEffect(() => {\n const ctl = createWaterFlowNodeCacheControl(root, () => root.cacheCount)\n nodeCacheCtlRef.current = ctl\n return () => {\n ctl.dispose()\n nodeCacheCtlRef.current = null\n }\n }, [root])\n\n /**\n * 滚动事件\n */\n const handleScroll = useMemoizedFn((ev: BaseEventOrig<ScrollViewProps.onScrollDetail>) => {\n refEventOrig.current = ev\n const { scrollTop } = ev.detail\n nodeCacheCtlRef.current?.onScrollSample(scrollTop)\n const scrollDirection: ScrollDirection = root.getState().scrollOffset < scrollTop ? 'forward' : 'backward'\n root.setStateBatch({\n scrollDirection: scrollDirection,\n scrollOffset: scrollTop,\n isScrolling: true,\n })\n })\n\n const sections = useMemo(() => {\n const [start, end] = renderRange$\n return Children.map(children, (child: ReactElement<PropsWithChildren<_FlowSectionProps>>, order) => {\n if (Object.is(child, null)) {\n return null\n }\n const sectionProps = child.props\n const sectionId = sectionProps.id || `section-${order}`\n const childCount = Children.count(sectionProps.children)\n let section = root.findSection(sectionId)\n if (section) {\n const originalCount = section.count\n if (childCount > originalCount) {\n section.pushNodesStructuralOnly(childCount - originalCount)\n }\n } else {\n section = new Section(root, {\n id: sectionId,\n order,\n col: sectionProps.column ?? 1,\n rowGap: sectionProps.rowGap || 0,\n columnGap: sectionProps.columnGap || 0,\n count: Children.count(sectionProps.children),\n })\n }\n\n return cloneElement(child, { section, key: `${props.id}-${order}` })\n })?.slice(start, end + 1)\n }, [renderRange$[0], renderRange$[1], children, root, props.id])\n\n /** 配对 pushNodesStructuralOnly:在 layout 阶段完成 Section 状态,避免 useMemo 内 setState 告警 */\n useLayoutEffect(() => {\n Children.forEach(children, (child: ReactElement<PropsWithChildren<_FlowSectionProps>>, order) => {\n if (Object.is(child, null)) {\n return\n }\n const sectionProps = child.props\n const sectionId = sectionProps.id || `section-${order}`\n root.findSection(sectionId)?.finalizePushNodesStateIfNeeded()\n })\n }, [children, root])\n\n const scrollTo = useMemoizedFn((scrollOffset = 0) => {\n scrollOffset = Math.max(0, scrollOffset)\n if (root.getState().scrollOffset === scrollOffset) return\n if (useScrollElementMode && effectiveScrollElement?.current) {\n const el = effectiveScrollElement.current as any\n const startOff = isWeapp ? effectiveStartOffsetRef.current : (startOffsetRef.current ?? 0)\n const scrollTarget = scrollOffset + startOff\n if (isH5) {\n el.scrollTo({ top: scrollTarget })\n } else if (isWeapp) {\n const scrollViewId = el.id || `_wf_${contentId}`\n if (!el.id) el.id = scrollViewId\n getScrollViewContextNode(`#${scrollViewId}`).then((node: any) => {\n node?.scrollTo?.({ top: scrollTarget, animated: true, duration: 300 })\n })\n }\n root.setStateBatch({ scrollOffset, isScrolling: true })\n return\n }\n getScrollViewContextNode(`#${root.id}`).then((node: any) => {\n node.scrollTo({\n animated: true,\n duration: 300,\n top: scrollOffset,\n })\n })\n })\n\n const resetScrolling = useMemoizedFn(() => {\n root.setStateIn('isScrolling', false)\n })\n\n const debouncedResetScrolling = debounce(resetScrolling)\n\n useEffect(() => {\n debouncedResetScrolling()\n }, [isScrolling$])\n\n /**\n * 处理滚动阈值\n * root 需入参:autoFind 从 pending→found 时 root 会重建,必须对新 root 重新订阅\n */\n useEffect(() => {\n const disposers = [\n root.sub(\n RootEvents.ReachUpperThreshold,\n debounce(() => {\n onScrollToUpper?.(refEventOrig.current!)\n })\n ),\n root.sub(\n RootEvents.ReachLowerThreshold,\n debounce(() => {\n onScrollToLower?.(refEventOrig.current!)\n })\n ),\n ]\n return () => {\n disposers.forEach((disposer) => {\n disposer()\n })\n }\n }, [root, onScrollToUpper, onScrollToLower])\n\n /**\n * 处理 scrollIntoView\n * 竞态:快速切换目标时,取消前一次滚动,避免后发先至\n */\n useEffect(() => {\n let cancelled = false\n handleScrollIntoView()\n async function handleScrollIntoView() {\n if (!scrollIntoView) return\n const targetNode = root.findNode(scrollIntoView)\n if (!targetNode) {\n nextTick(() => { if (!cancelled) onScrollIntoViewComplete?.() })\n return\n }\n const targetSection = targetNode.section\n const doScroll = () => {\n if (cancelled) return\n scrollTo(targetNode.getState().scrollTop)\n if (cancelled) return\n nextTick(() => { if (!cancelled) onScrollIntoViewComplete?.() })\n }\n if (!targetSection.getState().layouted) {\n const order = targetSection.order\n root.setStateIn('renderRange', [\n Math.min(renderRange$[0], order),\n Math.max(renderRange$[1], order),\n ])\n nextTick(async () => {\n await targetNode.section.layoutedSignal.promise\n if (cancelled) return\n doScroll()\n })\n return\n }\n await targetSection.layoutedSignal.promise\n if (cancelled) return\n doScroll()\n }\n return () => { cancelled = true }\n }, [scrollIntoView, renderRange$[0], renderRange$[1], onScrollIntoViewComplete])\n\n // scrollElement 模式下监听外部滚动,更新 root.scrollOffset;effectiveStartOffset 变化时重新同步;内嵌时 scrollRef 可能尚未就绪,需重试\n useEffect(() => {\n if (!useScrollElementMode || !effectiveScrollElement) return\n\n let cancelled = false\n let teardown: (() => void) | null = null\n const maxRetries = 20\n\n const tryAttach = (retryCount = 0) => {\n if (cancelled) return\n const target = effectiveScrollElement.current as any\n if (!target) {\n if (retryCount < maxRetries) {\n setTimeout(() => tryAttach(retryCount + 1), 50)\n }\n return\n }\n\n const getStartOffset = () => (isWeapp ? effectiveStartOffsetRef.current : (startOffsetRef.current ?? 0))\n\n const handler = (e?: any) => {\n const scrollTop = isWeapp\n ? (e?.target?.scrollTop ?? e?.mpEvent?.detail?.scrollTop ?? 0)\n : target.scrollTop\n const offset = scrollTop - getStartOffset()\n const effectiveOffset = Math.max(0, offset)\n const prevOffset = root.getState().scrollOffset\n const scrollDirection: ScrollDirection = prevOffset < effectiveOffset ? 'forward' : 'backward'\n\n nodeCacheCtlRef.current?.onScrollSample(effectiveOffset)\n root.setStateBatch({\n scrollDirection,\n scrollOffset: effectiveOffset,\n isScrolling: true,\n })\n }\n\n if (isWeapp) {\n if (!target.id) target.id = `_wf_${contentId}`\n const scrollViewId = target.id\n const scope = weappScope({ current: target })\n const query = scope != null\n ? Taro.createSelectorQuery().in(scope as any)\n : Taro.createSelectorQuery()\n query.select(`#${scrollViewId}`).scrollOffset().exec((res) => {\n if (cancelled) return\n const info = res?.[0]\n if (info) {\n const scrollTopVal = info.scrollTop ?? 0\n const initialOffset = Math.max(0, scrollTopVal - getStartOffset())\n root.setStateBatch({ scrollOffset: initialOffset, isScrolling: true })\n }\n })\n } else {\n const initialOffset = Math.max(0, target.scrollTop - getStartOffset())\n root.setStateBatch({ scrollOffset: initialOffset, isScrolling: true })\n }\n\n target.addEventListener('scroll', handler, isWeapp ? undefined : { passive: true })\n teardown = () => target.removeEventListener('scroll', handler)\n }\n\n tryAttach()\n return () => {\n cancelled = true\n teardown?.()\n }\n }, [useScrollElementMode, effectiveScrollElement, root, effectiveStartOffset, contentId])\n\n // scrollHeight 变化时回调(props 优先,其次从 Context),便于 List 动高联动;防抖 150ms 上报\n const reportHeight = onScrollHeightChange ?? scrollElementCtx?.reportNestedHeightChange\n useEffect(() => {\n if (!reportHeight || scrollHeight$ <= 0) return\n const timer = setTimeout(() => {\n if (Math.abs(lastReportedHeightRef.current - scrollHeight$) < 1) return\n lastReportedHeightRef.current = scrollHeight$\n reportHeight(scrollHeight$)\n }, 150)\n return () => clearTimeout(timer)\n }, [scrollHeight$, reportHeight])\n\n // scrollElement 模式下监听容器尺寸:H5 用 ResizeObserver,小程序用 createSelectorQuery 轮询\n useEffect(() => {\n if (!useScrollElementMode || !effectiveScrollElement) return\n const el = effectiveScrollElement.current as any\n if (!el) return\n\n if (isWeapp) {\n if (!el.id) el.id = `_wf_${contentId}`\n const scrollViewId = el.id\n const measure = () => {\n const scope = weappScope({ current: el })\n const query = scope != null\n ? Taro.createSelectorQuery().in(scope as any)\n : Taro.createSelectorQuery()\n query.select(`#${scrollViewId}`).boundingClientRect().exec((res) => {\n const rect = res?.[0]\n if (rect && rect.height > 0 && rect.width > 0) {\n const height = containerHeightRef.current ?? rect.height\n root.setStateIn('containerSize', { width: rect.width, height })\n }\n })\n }\n measure()\n const interval = setInterval(measure, 150)\n return () => clearInterval(interval)\n }\n\n if (typeof ResizeObserver === 'undefined') return\n const update = () => {\n const height = containerHeightRef.current ?? el.clientHeight\n const width = el.clientWidth\n if (height > 0 && width > 0) {\n root.setStateIn('containerSize', { width, height })\n }\n }\n update()\n const ro = new ResizeObserver(update)\n ro.observe(el)\n return () => ro.disconnect()\n }, [useScrollElementMode, effectiveScrollElement, root, effectiveContainerHeight, contentId])\n\n if (renderView) {\n return createElement(\n View,\n {\n ref: setContainerRef as any,\n id: root.id,\n style: {\n ...style,\n width: '100%',\n position: 'relative',\n height: scrollHeight$,\n pointerEvents: isScrolling$ ? 'none' : 'auto',\n },\n className,\n },\n sections\n )\n }\n\n return createElement(\n ScrollView,\n {\n id: root.id,\n ref: (el: any) => {\n scrollViewShellRef.current = el\n },\n style: {\n WebkitOverflowScrolling: 'touch',\n overflow: 'auto',\n ...style,\n },\n className,\n scrollY: true,\n onScroll: handleScroll,\n ...rest,\n },\n createElement(\n View,\n {\n ref: setContainerRef as any,\n id: `waterflow-root_${instanceSuffix}`,\n style: {\n width: '100%',\n position: 'relative',\n height: scrollHeight$,\n pointerEvents: isScrolling$ ? 'none' : 'auto',\n },\n },\n sections\n )\n )\n}\n\nexport const WaterFlow = forwardRef<HTMLElement, PropsWithChildren<WaterFlowProps>>(InnerWaterFlow)\n"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -18,4 +18,5 @@ export { debounce, omit, throttle } from './utils/lodash.js';
18
18
  export { getMiddleNumber, isCosDistributing } from './utils/math.js';
19
19
  export { findScrollParent, findScrollParentTaro, isScrollableElement } from './utils/scrollParent.js';
20
20
  export { cancelTimeout, requestTimeout } from './utils/timer.js';
21
+ export { weappScope } from './utils/weapp-scope.js';
21
22
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,5 @@
1
- export declare function getRectSize(id: string, success?: TFunc, fail?: TFunc, retryMs?: number): void;
2
- export declare function getRectSizeSync(id: string, retryMs?: number, retryTimes?: number): Promise<{
1
+ export declare function getRectSize(id: string, success?: TFunc, fail?: TFunc, retryMs?: number, scope?: object): void;
2
+ export declare function getRectSizeSync(id: string, retryMs?: number, retryTimes?: number, scope?: object): Promise<{
3
3
  width?: number;
4
4
  height?: number;
5
5
  }>;
package/dist/utils/dom.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { createSelectorQuery } from '@tarojs/taro';
2
2
 
3
- function getRectSize(id, success, fail, retryMs = 500) {
4
- const query = createSelectorQuery();
3
+ function getRectSize(id, success, fail, retryMs = 500, scope) {
4
+ const rootQuery = createSelectorQuery();
5
+ const query = scope != null ? rootQuery.in(scope) : rootQuery;
5
6
  try {
6
7
  query.select(id).boundingClientRect((res) => {
7
8
  if (res instanceof Array ? res.length > 0 : res) {
@@ -14,18 +15,18 @@ function getRectSize(id, success, fail, retryMs = 500) {
14
15
  }
15
16
  catch (err) {
16
17
  setTimeout(() => {
17
- getRectSize(id, success, fail, retryMs);
18
+ getRectSize(id, success, fail, retryMs, scope);
18
19
  }, retryMs);
19
20
  }
20
21
  }
21
- function getRectSizeSync(id, retryMs = 500, retryTimes = 5) {
22
+ function getRectSizeSync(id, retryMs = 500, retryTimes = 5, scope) {
22
23
  return new Promise((resolve) => {
23
24
  function retry() {
24
25
  if (retryTimes <= 0)
25
26
  return;
26
27
  setTimeout(async () => {
27
28
  try {
28
- const res = await getRectSizeSync(id, retryMs, --retryTimes);
29
+ const res = await getRectSizeSync(id, retryMs, --retryTimes, scope);
29
30
  resolve(res);
30
31
  }
31
32
  catch (err) {
@@ -33,7 +34,7 @@ function getRectSizeSync(id, retryMs = 500, retryTimes = 5) {
33
34
  }
34
35
  }, retryMs);
35
36
  }
36
- getRectSize(id, resolve, retry, retryMs);
37
+ getRectSize(id, resolve, retry, retryMs, scope);
37
38
  });
38
39
  }
39
40
  async function getScrollViewContextNode(id) {
@@ -1 +1 @@
1
- {"version":3,"file":"dom.js","sources":["../../src/utils/dom.ts"],"sourcesContent":["import { createSelectorQuery } from '@tarojs/taro'\n\nexport function getRectSize (id: string, success?: TFunc, fail?: TFunc, retryMs = 500) {\n const query = createSelectorQuery()\n try {\n query.select(id).boundingClientRect((res) => {\n if (res instanceof Array ? res.length > 0 : res) {\n success?.(res)\n } else {\n fail?.()\n }\n }).exec()\n } catch (err) {\n setTimeout(() => {\n getRectSize(id, success, fail, retryMs)\n }, retryMs)\n }\n}\n\nexport function getRectSizeSync (id: string, retryMs = 500, retryTimes = 5) {\n return new Promise<{ width?: number, height?: number }>((resolve) => {\n function retry () {\n if (retryTimes <= 0) return\n setTimeout(async () => {\n try {\n const res = await getRectSizeSync(id, retryMs, --retryTimes)\n resolve(res)\n } catch (err) {\n retry()\n }\n }, retryMs)\n }\n getRectSize(id, resolve, retry, retryMs)\n })\n}\n\nexport async function getScrollViewContextNode (id: string) {\n const query = createSelectorQuery()\n return new Promise((resolve) => query.select(id).node(({ node }) => resolve(node)).exec())\n}\n"],"names":[],"mappings":";;AAEM,SAAU,WAAW,CAAE,EAAU,EAAE,OAAe,EAAE,IAAY,EAAE,OAAO,GAAG,GAAG,EAAA;AACnF,IAAA,MAAM,KAAK,GAAG,mBAAmB,EAAE;AACnC,IAAA,IAAI;QACF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,KAAI;AAC1C,YAAA,IAAI,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,EAAE;AAC/C,gBAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAG,GAAG,CAAC;;iBACT;AACL,gBAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,EAAI;;AAEZ,SAAC,CAAC,CAAC,IAAI,EAAE;;IACT,OAAO,GAAG,EAAE;QACZ,UAAU,CAAC,MAAK;YACd,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC;SACxC,EAAE,OAAO,CAAC;;AAEf;AAEM,SAAU,eAAe,CAAE,EAAU,EAAE,OAAO,GAAG,GAAG,EAAE,UAAU,GAAG,CAAC,EAAA;AACxE,IAAA,OAAO,IAAI,OAAO,CAAsC,CAAC,OAAO,KAAI;AAClE,QAAA,SAAS,KAAK,GAAA;YACZ,IAAI,UAAU,IAAI,CAAC;gBAAE;YACrB,UAAU,CAAC,YAAW;AACpB,gBAAA,IAAI;AACF,oBAAA,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,CAAC;oBAC5D,OAAO,CAAC,GAAG,CAAC;;gBACZ,OAAO,GAAG,EAAE;AACZ,oBAAA,KAAK,EAAE;;aAEV,EAAE,OAAO,CAAC;;QAEb,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC;AAC1C,KAAC,CAAC;AACJ;AAEO,eAAe,wBAAwB,CAAE,EAAU,EAAA;AACxD,IAAA,MAAM,KAAK,GAAG,mBAAmB,EAAE;AACnC,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5F;;;;"}
1
+ {"version":3,"file":"dom.js","sources":["../../src/utils/dom.ts"],"sourcesContent":["import { createSelectorQuery } from '@tarojs/taro'\n\nexport function getRectSize (\n id: string,\n success?: TFunc,\n fail?: TFunc,\n retryMs = 500,\n scope?: object\n) {\n const rootQuery = createSelectorQuery()\n const query = scope != null ? rootQuery.in(scope as any) : rootQuery\n try {\n query.select(id).boundingClientRect((res) => {\n if (res instanceof Array ? res.length > 0 : res) {\n success?.(res)\n } else {\n fail?.()\n }\n }).exec()\n } catch (err) {\n setTimeout(() => {\n getRectSize(id, success, fail, retryMs, scope)\n }, retryMs)\n }\n}\n\nexport function getRectSizeSync (id: string, retryMs = 500, retryTimes = 5, scope?: object) {\n return new Promise<{ width?: number, height?: number }>((resolve) => {\n function retry () {\n if (retryTimes <= 0) return\n setTimeout(async () => {\n try {\n const res = await getRectSizeSync(id, retryMs, --retryTimes, scope)\n resolve(res)\n } catch (err) {\n retry()\n }\n }, retryMs)\n }\n getRectSize(id, resolve, retry, retryMs, scope)\n })\n}\n\nexport async function getScrollViewContextNode (id: string) {\n const query = createSelectorQuery()\n return new Promise((resolve) => query.select(id).node(({ node }) => resolve(node)).exec())\n}\n"],"names":[],"mappings":";;AAEgB,SAAA,WAAW,CACzB,EAAU,EACV,OAAe,EACf,IAAY,EACZ,OAAO,GAAG,GAAG,EACb,KAAc,EAAA;AAEd,IAAA,MAAM,SAAS,GAAG,mBAAmB,EAAE;AACvC,IAAA,MAAM,KAAK,GAAG,KAAK,IAAI,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,KAAY,CAAC,GAAG,SAAS;AACpE,IAAA,IAAI;QACF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,KAAI;AAC1C,YAAA,IAAI,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,EAAE;AAC/C,gBAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAG,GAAG,CAAC;;iBACT;AACL,gBAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,EAAI;;AAEZ,SAAC,CAAC,CAAC,IAAI,EAAE;;IACT,OAAO,GAAG,EAAE;QACZ,UAAU,CAAC,MAAK;YACd,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC;SAC/C,EAAE,OAAO,CAAC;;AAEf;AAEgB,SAAA,eAAe,CAAE,EAAU,EAAE,OAAO,GAAG,GAAG,EAAE,UAAU,GAAG,CAAC,EAAE,KAAc,EAAA;AACxF,IAAA,OAAO,IAAI,OAAO,CAAsC,CAAC,OAAO,KAAI;AAClE,QAAA,SAAS,KAAK,GAAA;YACZ,IAAI,UAAU,IAAI,CAAC;gBAAE;YACrB,UAAU,CAAC,YAAW;AACpB,gBAAA,IAAI;AACF,oBAAA,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC;oBACnE,OAAO,CAAC,GAAG,CAAC;;gBACZ,OAAO,GAAG,EAAE;AACZ,oBAAA,KAAK,EAAE;;aAEV,EAAE,OAAO,CAAC;;QAEb,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC;AACjD,KAAC,CAAC;AACJ;AAEO,eAAe,wBAAwB,CAAE,EAAU,EAAA;AACxD,IAAA,MAAM,KAAK,GAAG,mBAAmB,EAAE;AACnC,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5F;;;;"}
@@ -5,3 +5,4 @@ export * from './lodash';
5
5
  export * from './math';
6
6
  export * from './scrollParent';
7
7
  export * from './timer';
8
+ export * from './weapp-scope';
@@ -5,4 +5,5 @@ export { debounce, omit, throttle } from './lodash.js';
5
5
  export { getMiddleNumber, isCosDistributing } from './math.js';
6
6
  export { findScrollParent, findScrollParentTaro, isScrollableElement } from './scrollParent.js';
7
7
  export { cancelTimeout, requestTimeout } from './timer.js';
8
+ export { weappScope } from './weapp-scope.js';
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 微信小程序:从 Taro 节点 ref 取 SelectorQuery.in 所需作用域(`ref.current._scope`)。
3
+ * 与运行时 TaroNode._scope(getNearestCtx)一致;非小程序恒为 undefined。
4
+ */
5
+ export declare function weappScope(ref: {
6
+ current: any;
7
+ } | null | undefined): object | undefined;
@@ -0,0 +1,20 @@
1
+ const IS_TARO_WEAPP = process.env.TARO_ENV === 'weapp';
2
+ /**
3
+ * 微信小程序:从 Taro 节点 ref 取 SelectorQuery.in 所需作用域(`ref.current._scope`)。
4
+ * 与运行时 TaroNode._scope(getNearestCtx)一致;非小程序恒为 undefined。
5
+ */
6
+ function weappScope(ref) {
7
+ if (!IS_TARO_WEAPP || !(ref === null || ref === void 0 ? void 0 : ref.current))
8
+ return undefined;
9
+ const cur = ref.current;
10
+ if (typeof (cur === null || cur === void 0 ? void 0 : cur._scope) === 'function') {
11
+ return cur._scope();
12
+ }
13
+ if ((cur === null || cur === void 0 ? void 0 : cur._scope) != null) {
14
+ return cur._scope;
15
+ }
16
+ return undefined;
17
+ }
18
+
19
+ export { weappScope };
20
+ //# sourceMappingURL=weapp-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weapp-scope.js","sources":["../../src/utils/weapp-scope.ts"],"sourcesContent":["const IS_TARO_WEAPP = process.env.TARO_ENV === 'weapp'\n\n/**\n * 微信小程序:从 Taro 节点 ref 取 SelectorQuery.in 所需作用域(`ref.current._scope`)。\n * 与运行时 TaroNode._scope(getNearestCtx)一致;非小程序恒为 undefined。\n */\nexport function weappScope (\n ref: { current: any } | null | undefined\n): object | undefined {\n if (!IS_TARO_WEAPP || !ref?.current) return undefined\n const cur: any = ref.current\n if (typeof cur?._scope === 'function') {\n return cur._scope()\n }\n if (cur?._scope != null) {\n return cur._scope\n }\n return undefined\n}\n"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO;AAEtD;;;AAGG;AACG,SAAU,UAAU,CACxB,GAAwC,EAAA;AAExC,IAAA,IAAI,CAAC,aAAa,IAAI,EAAC,GAAG,KAAH,IAAA,IAAA,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,OAAO,CAAA;AAAE,QAAA,OAAO,SAAS;AACrD,IAAA,MAAM,GAAG,GAAQ,GAAG,CAAC,OAAO;AAC5B,IAAA,IAAI,QAAO,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAH,GAAG,CAAE,MAAM,CAAA,KAAK,UAAU,EAAE;AACrC,QAAA,OAAO,GAAG,CAAC,MAAM,EAAE;;IAErB,IAAI,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAH,GAAG,CAAE,MAAM,KAAI,IAAI,EAAE;QACvB,OAAO,GAAG,CAAC,MAAM;;AAEnB,IAAA,OAAO,SAAS;AAClB;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tarojs/components-advanced",
3
- "version": "4.1.12-beta.43",
3
+ "version": "4.1.12-beta.45",
4
4
  "description": "",
5
5
  "author": "O2Team",
6
6
  "license": "MIT",
@@ -20,20 +20,20 @@
20
20
  "csstype": "^3.1.1",
21
21
  "memoize-one": "^6.0.0",
22
22
  "tslib": "^2.6.2",
23
- "@tarojs/components": "4.1.12-beta.43",
24
- "@tarojs/components-react": "4.1.12-beta.43"
23
+ "@tarojs/components": "4.1.12-beta.45",
24
+ "@tarojs/components-react": "4.1.12-beta.45"
25
25
  },
26
26
  "devDependencies": {
27
27
  "vue": "3.2.47",
28
- "@tarojs/runtime": "4.1.12-beta.43",
29
- "@tarojs/shared": "4.1.12-beta.43",
30
- "@tarojs/taro": "4.1.12-beta.43"
28
+ "@tarojs/runtime": "4.1.12-beta.45",
29
+ "@tarojs/shared": "4.1.12-beta.45",
30
+ "@tarojs/taro": "4.1.12-beta.45"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "react": ">=18",
34
- "@tarojs/shared": "~4.1.12-beta.43",
35
- "@tarojs/taro": "~4.1.12-beta.43",
36
- "@tarojs/runtime": "~4.1.12-beta.43"
34
+ "@tarojs/taro": "~4.1.12-beta.45",
35
+ "@tarojs/shared": "~4.1.12-beta.45",
36
+ "@tarojs/runtime": "~4.1.12-beta.45"
37
37
  },
38
38
  "peerDependenciesMeta": {
39
39
  "react": {