@tarojs/components-advanced 4.2.1-beta.0 → 4.2.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/components/index.js +2 -0
  2. package/dist/components/index.js.map +1 -1
  3. package/dist/components/list/NoMore.d.ts +30 -0
  4. package/dist/components/list/NoMore.js +10 -0
  5. package/dist/components/list/NoMore.js.map +1 -0
  6. package/dist/components/list/hooks/useItemSizeCache.d.ts +13 -0
  7. package/dist/components/list/hooks/useItemSizeCache.js +40 -0
  8. package/dist/components/list/hooks/useItemSizeCache.js.map +1 -0
  9. package/dist/components/list/hooks/useListNestedScroll.d.ts +18 -0
  10. package/dist/components/list/hooks/useListNestedScroll.js +61 -0
  11. package/dist/components/list/hooks/useListNestedScroll.js.map +1 -0
  12. package/dist/components/list/hooks/useListScrollElementAttach.d.ts +25 -0
  13. package/dist/components/list/hooks/useListScrollElementAttach.js +88 -0
  14. package/dist/components/list/hooks/useListScrollElementAttach.js.map +1 -0
  15. package/dist/components/list/hooks/useListScrollElementAttachWeapp.d.ts +15 -0
  16. package/dist/components/list/hooks/useListScrollElementAttachWeapp.js +135 -0
  17. package/dist/components/list/hooks/useListScrollElementAttachWeapp.js.map +1 -0
  18. package/dist/components/list/hooks/useMeasureStartOffset.d.ts +12 -0
  19. package/dist/components/list/hooks/useMeasureStartOffset.js +84 -0
  20. package/dist/components/list/hooks/useMeasureStartOffset.js.map +1 -0
  21. package/dist/components/list/hooks/useMeasureStartOffsetWeapp.d.ts +14 -0
  22. package/dist/components/list/hooks/useMeasureStartOffsetWeapp.js +87 -0
  23. package/dist/components/list/hooks/useMeasureStartOffsetWeapp.js.map +1 -0
  24. package/dist/components/list/hooks/useRefresher.d.ts +80 -0
  25. package/dist/components/list/hooks/useRefresher.js +561 -0
  26. package/dist/components/list/hooks/useRefresher.js.map +1 -0
  27. package/dist/components/list/hooks/useResizeObserver.d.ts +29 -0
  28. package/dist/components/list/hooks/useResizeObserver.js +153 -0
  29. package/dist/components/list/hooks/useResizeObserver.js.map +1 -0
  30. package/dist/components/list/hooks/useScrollCorrection.d.ts +19 -0
  31. package/dist/components/list/hooks/useScrollCorrection.js +74 -0
  32. package/dist/components/list/hooks/useScrollCorrection.js.map +1 -0
  33. package/dist/components/list/hooks/useScrollParentAutoFind.d.ts +20 -0
  34. package/dist/components/list/hooks/useScrollParentAutoFind.js +81 -0
  35. package/dist/components/list/hooks/useScrollParentAutoFind.js.map +1 -0
  36. package/dist/components/list/index.d.ts +64 -7
  37. package/dist/components/list/index.js +1081 -162
  38. package/dist/components/list/index.js.map +1 -1
  39. package/dist/components/list/utils.d.ts +28 -0
  40. package/dist/components/list/utils.js +41 -0
  41. package/dist/components/list/utils.js.map +1 -0
  42. package/dist/components/virtual-list/vue/list.d.ts +12 -12
  43. package/dist/components/virtual-waterfall/vue/waterfall.d.ts +11 -11
  44. package/dist/components/water-flow/flow-item.js +18 -11
  45. package/dist/components/water-flow/flow-item.js.map +1 -1
  46. package/dist/components/water-flow/flow-section.js +1 -1
  47. package/dist/components/water-flow/flow-section.js.map +1 -1
  48. package/dist/components/water-flow/index.d.ts +1 -1
  49. package/dist/components/water-flow/interface.d.ts +32 -2
  50. package/dist/components/water-flow/node.d.ts +3 -0
  51. package/dist/components/water-flow/node.js +34 -1
  52. package/dist/components/water-flow/node.js.map +1 -1
  53. package/dist/components/water-flow/root.d.ts +39 -4
  54. package/dist/components/water-flow/root.js +144 -44
  55. package/dist/components/water-flow/root.js.map +1 -1
  56. package/dist/components/water-flow/section.d.ts +11 -1
  57. package/dist/components/water-flow/section.js +81 -19
  58. package/dist/components/water-flow/section.js.map +1 -1
  59. package/dist/components/water-flow/utils.d.ts +4 -0
  60. package/dist/components/water-flow/utils.js +5 -1
  61. package/dist/components/water-flow/utils.js.map +1 -1
  62. package/dist/components/water-flow/water-flow-node-cache.d.ts +24 -0
  63. package/dist/components/water-flow/water-flow-node-cache.js +161 -0
  64. package/dist/components/water-flow/water-flow-node-cache.js.map +1 -0
  65. package/dist/components/water-flow/water-flow.d.ts +2 -3
  66. package/dist/components/water-flow/water-flow.js +316 -36
  67. package/dist/components/water-flow/water-flow.js.map +1 -1
  68. package/dist/index.js +4 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/utils/dom.d.ts +2 -2
  71. package/dist/utils/dom.js +7 -6
  72. package/dist/utils/dom.js.map +1 -1
  73. package/dist/utils/index.d.ts +2 -0
  74. package/dist/utils/index.js +2 -0
  75. package/dist/utils/index.js.map +1 -1
  76. package/dist/utils/scrollElementContext.d.ts +15 -0
  77. package/dist/utils/scrollElementContext.js +14 -0
  78. package/dist/utils/scrollElementContext.js.map +1 -0
  79. package/dist/utils/scrollParent.d.ts +33 -0
  80. package/dist/utils/scrollParent.js +88 -0
  81. package/dist/utils/scrollParent.js.map +1 -0
  82. package/dist/utils/weapp-scope.d.ts +7 -0
  83. package/dist/utils/weapp-scope.js +20 -0
  84. package/dist/utils/weapp-scope.js.map +1 -0
  85. package/package.json +9 -8
@@ -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;;;;"}
@@ -3,4 +3,6 @@ export * from './dom';
3
3
  export * from './helper';
4
4
  export * from './lodash';
5
5
  export * from './math';
6
+ export * from './scrollParent';
6
7
  export * from './timer';
8
+ export * from './weapp-scope';
@@ -3,5 +3,7 @@ export { getRectSize, getRectSizeSync, getScrollViewContextNode } from './dom.js
3
3
  export { defaultItemKey, getOffsetForIndexAndAlignment } from './helper.js';
4
4
  export { debounce, omit, throttle } from './lodash.js';
5
5
  export { getMiddleNumber, isCosDistributing } from './math.js';
6
+ export { findScrollParent, findScrollParentTaro, isScrollableElement } from './scrollParent.js';
6
7
  export { cancelTimeout, requestTimeout } from './timer.js';
8
+ export { weappScope } from './weapp-scope.js';
7
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,15 @@
1
+ import type { MutableRefObject } from 'react';
2
+ /** 与 ScrollElementContextValue 同构,components-react 未导出时兜底 */
3
+ export interface ScrollElementContextValueShape {
4
+ scrollRef: MutableRefObject<HTMLElement | null>;
5
+ containerHeight: number;
6
+ startOffset: number;
7
+ reportNestedHeightChange?: (scrollHeight: number) => void;
8
+ }
9
+ /**
10
+ * 当 @tarojs/components-react 未导出 ScrollElementContext 时(版本过旧)兜底,
11
+ * 避免 useContext(undefined) 报错。等效于无 Context,useContext 返回 null。
12
+ */
13
+ export declare const FALLBACK_SCROLL_ELEMENT_CTX: import("react").Context<ScrollElementContextValueShape>;
14
+ /** 安全获取 ScrollElementContext:存在则用原版,否则用兜底 */
15
+ export declare const ScrollElementContextOrFallback: import("react").Context<ScrollElementContextValueShape>;
@@ -0,0 +1,14 @@
1
+ import * as ComponentsReact from '@tarojs/components-react';
2
+ import { createContext } from 'react';
3
+
4
+ var _a;
5
+ /**
6
+ * 当 @tarojs/components-react 未导出 ScrollElementContext 时(版本过旧)兜底,
7
+ * 避免 useContext(undefined) 报错。等效于无 Context,useContext 返回 null。
8
+ */
9
+ const FALLBACK_SCROLL_ELEMENT_CTX = createContext(null);
10
+ /** 安全获取 ScrollElementContext:存在则用原版,否则用兜底 */
11
+ const ScrollElementContextOrFallback = (_a = ComponentsReact.ScrollElementContext) !== null && _a !== void 0 ? _a : FALLBACK_SCROLL_ELEMENT_CTX;
12
+
13
+ export { FALLBACK_SCROLL_ELEMENT_CTX, ScrollElementContextOrFallback };
14
+ //# sourceMappingURL=scrollElementContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollElementContext.js","sources":["../../src/utils/scrollElementContext.ts"],"sourcesContent":["import * as ComponentsReact from '@tarojs/components-react'\nimport { createContext } from 'react'\n\nimport type { MutableRefObject } from 'react'\n\n/** 与 ScrollElementContextValue 同构,components-react 未导出时兜底 */\nexport interface ScrollElementContextValueShape {\n scrollRef: MutableRefObject<HTMLElement | null>\n containerHeight: number\n startOffset: number\n reportNestedHeightChange?: (scrollHeight: number) => void\n}\n\n/**\n * 当 @tarojs/components-react 未导出 ScrollElementContext 时(版本过旧)兜底,\n * 避免 useContext(undefined) 报错。等效于无 Context,useContext 返回 null。\n */\nexport const FALLBACK_SCROLL_ELEMENT_CTX =\n createContext<ScrollElementContextValueShape | null>(null)\n\n/** 安全获取 ScrollElementContext:存在则用原版,否则用兜底 */\nexport const ScrollElementContextOrFallback =\n (ComponentsReact as { ScrollElementContext?: typeof FALLBACK_SCROLL_ELEMENT_CTX }).ScrollElementContext ??\n FALLBACK_SCROLL_ELEMENT_CTX\n"],"names":[],"mappings":";;;;AAaA;;;AAGG;MACU,2BAA2B,GACtC,aAAa,CAAwC,IAAI;AAE3D;AACa,MAAA,8BAA8B,GACzC,CAAA,EAAA,GAAC,eAAiF,CAAC,oBAAoB,MACvG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA;;;;"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * 查找元素的真实滚动父节点。
3
+ * 用于 nestedScroll 模式下无 props/Context 时自动获取 scrollElement。
4
+ *
5
+ * 策略:
6
+ * 1. 优先命中 Taro ScrollView 类名 .taro-scroll
7
+ * 2. 回退:向上遍历找通用可滚动祖先
8
+ *
9
+ * 严格条件(均需满足):
10
+ * - overflow 为 auto | scroll | overlay
11
+ * - scrollHeight > clientHeight(纵向)或 scrollWidth > clientWidth(横向)
12
+ * - 在 document.body 前停止
13
+ */
14
+ import type { TaroElement } from '@tarojs/runtime';
15
+ /**
16
+ * 判断元素是否可滚动(严格:overflow 可滚动 + 实际有溢出)
17
+ */
18
+ export declare function isScrollableElement(el: HTMLElement | null, vertical?: boolean): el is HTMLElement;
19
+ /**
20
+ * 从给定元素向上查找最近的滚动父节点。
21
+ * 优先匹配 .taro-scroll,未命中则按通用可滚动条件查找。
22
+ */
23
+ export declare function findScrollParent(el: HTMLElement | null, vertical?: boolean): HTMLElement | null;
24
+ /**
25
+ * 小程序端:基于 Taro 虚拟 DOM 查找父级 scroll-view。
26
+ * 从 contentId 对应节点沿 parentNode 向上遍历,找到 nodeName === 'scroll-view' 的节点。
27
+ *
28
+ * 仅用于小程序环境,H5 请使用 findScrollParent。
29
+ *
30
+ * @param contentId - content 节点的 id(需在 eventSource 中已注册)
31
+ * @returns 找到的 TaroElement(scroll-view)或 null
32
+ */
33
+ export declare function findScrollParentTaro(contentId: string): TaroElement | null;
@@ -0,0 +1,88 @@
1
+ import { document as document$1 } from '@tarojs/runtime';
2
+
3
+ /**
4
+ * 查找元素的真实滚动父节点。
5
+ * 用于 nestedScroll 模式下无 props/Context 时自动获取 scrollElement。
6
+ *
7
+ * 策略:
8
+ * 1. 优先命中 Taro ScrollView 类名 .taro-scroll
9
+ * 2. 回退:向上遍历找通用可滚动祖先
10
+ *
11
+ * 严格条件(均需满足):
12
+ * - overflow 为 auto | scroll | overlay
13
+ * - scrollHeight > clientHeight(纵向)或 scrollWidth > clientWidth(横向)
14
+ * - 在 document.body 前停止
15
+ */
16
+ const SCROLLABLE_OVERFLOW = ['auto', 'scroll', 'overlay'];
17
+ /** 小程序端 scroll-view 的 nodeName(Taro 虚拟 DOM) */
18
+ const SCROLL_VIEW_NODE_NAME = 'scroll-view';
19
+ /**
20
+ * 判断元素是否可滚动(严格:overflow 可滚动 + 实际有溢出)
21
+ */
22
+ function isScrollableElement(el, vertical = true) {
23
+ if (!el || el === document.body)
24
+ return false;
25
+ const style = getComputedStyle(el);
26
+ const overflow = vertical ? style.overflowY : style.overflowX;
27
+ if (!SCROLLABLE_OVERFLOW.includes(overflow))
28
+ return false;
29
+ const hasOverflow = vertical
30
+ ? el.scrollHeight > el.clientHeight
31
+ : el.scrollWidth > el.clientWidth;
32
+ return hasOverflow;
33
+ }
34
+ /**
35
+ * 从给定元素向上查找最近的滚动父节点。
36
+ * 优先匹配 .taro-scroll,未命中则按通用可滚动条件查找。
37
+ */
38
+ function findScrollParent(el, vertical = true) {
39
+ var _a;
40
+ if (!el)
41
+ return null;
42
+ // 1. 优先:Taro ScrollView 的 div(.taro-scroll)
43
+ const taroScroll = (_a = el.closest) === null || _a === void 0 ? void 0 : _a.call(el, '.taro-scroll');
44
+ if (taroScroll && taroScroll !== document.body && isScrollableElement(taroScroll, vertical)) {
45
+ return taroScroll;
46
+ }
47
+ // 2. 回退:通用可滚动祖先
48
+ let parent = el.parentElement;
49
+ while (parent !== null && parent !== document.body) {
50
+ if (isScrollableElement(parent, vertical))
51
+ return parent;
52
+ parent = parent.parentElement;
53
+ }
54
+ return null;
55
+ }
56
+ /**
57
+ * 小程序端:基于 Taro 虚拟 DOM 查找父级 scroll-view。
58
+ * 从 contentId 对应节点沿 parentNode 向上遍历,找到 nodeName === 'scroll-view' 的节点。
59
+ *
60
+ * 仅用于小程序环境,H5 请使用 findScrollParent。
61
+ *
62
+ * @param contentId - content 节点的 id(需在 eventSource 中已注册)
63
+ * @returns 找到的 TaroElement(scroll-view)或 null
64
+ */
65
+ function findScrollParentTaro(contentId) {
66
+ var _a;
67
+ if (!contentId)
68
+ return null;
69
+ const doc = document$1;
70
+ const el = (_a = doc.getElementById) === null || _a === void 0 ? void 0 : _a.call(doc, contentId);
71
+ if (!el || !el.parentNode)
72
+ return null;
73
+ let node = el;
74
+ while (node) {
75
+ const parent = node.parentNode;
76
+ if (!parent)
77
+ break;
78
+ // NodeType.ELEMENT_NODE === 1
79
+ if (parent.nodeType === 1 && parent.nodeName === SCROLL_VIEW_NODE_NAME) {
80
+ return parent;
81
+ }
82
+ node = parent;
83
+ }
84
+ return null;
85
+ }
86
+
87
+ export { findScrollParent, findScrollParentTaro, isScrollableElement };
88
+ //# sourceMappingURL=scrollParent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollParent.js","sources":["../../src/utils/scrollParent.ts"],"sourcesContent":["/**\n * 查找元素的真实滚动父节点。\n * 用于 nestedScroll 模式下无 props/Context 时自动获取 scrollElement。\n *\n * 策略:\n * 1. 优先命中 Taro ScrollView 类名 .taro-scroll\n * 2. 回退:向上遍历找通用可滚动祖先\n *\n * 严格条件(均需满足):\n * - overflow 为 auto | scroll | overlay\n * - scrollHeight > clientHeight(纵向)或 scrollWidth > clientWidth(横向)\n * - 在 document.body 前停止\n */\n\nimport { document as taroDocument } from '@tarojs/runtime'\n\nimport type { TaroElement, TaroNode } from '@tarojs/runtime'\n\nconst SCROLLABLE_OVERFLOW = ['auto', 'scroll', 'overlay'] as const\n\n/** 小程序端 scroll-view 的 nodeName(Taro 虚拟 DOM) */\nconst SCROLL_VIEW_NODE_NAME = 'scroll-view'\n\n/**\n * 判断元素是否可滚动(严格:overflow 可滚动 + 实际有溢出)\n */\nexport function isScrollableElement(\n el: HTMLElement | null,\n vertical = true\n): el is HTMLElement {\n if (!el || el === document.body) return false\n const style = getComputedStyle(el)\n const overflow = vertical ? style.overflowY : style.overflowX\n if (!SCROLLABLE_OVERFLOW.includes(overflow as any)) return false\n const hasOverflow = vertical\n ? el.scrollHeight > el.clientHeight\n : el.scrollWidth > el.clientWidth\n return hasOverflow\n}\n\n/**\n * 从给定元素向上查找最近的滚动父节点。\n * 优先匹配 .taro-scroll,未命中则按通用可滚动条件查找。\n */\nexport function findScrollParent(\n el: HTMLElement | null,\n vertical = true\n): HTMLElement | null {\n if (!el) return null\n\n // 1. 优先:Taro ScrollView 的 div(.taro-scroll)\n const taroScroll = el.closest?.('.taro-scroll')\n if (taroScroll && taroScroll !== document.body && isScrollableElement(taroScroll as HTMLElement, vertical)) {\n return taroScroll as HTMLElement\n }\n\n // 2. 回退:通用可滚动祖先\n let parent: HTMLElement | null = el.parentElement\n while (parent !== null && parent !== document.body) {\n if (isScrollableElement(parent, vertical)) return parent\n parent = (parent as HTMLElement).parentElement\n }\n return null\n}\n\n/**\n * 小程序端:基于 Taro 虚拟 DOM 查找父级 scroll-view。\n * 从 contentId 对应节点沿 parentNode 向上遍历,找到 nodeName === 'scroll-view' 的节点。\n *\n * 仅用于小程序环境,H5 请使用 findScrollParent。\n *\n * @param contentId - content 节点的 id(需在 eventSource 中已注册)\n * @returns 找到的 TaroElement(scroll-view)或 null\n */\nexport function findScrollParentTaro (contentId: string): TaroElement | null {\n if (!contentId) return null\n const doc = taroDocument as { getElementById: (id: string) => TaroElement | null }\n const el = doc.getElementById?.(contentId)\n if (!el || !el.parentNode) return null\n\n let node: TaroNode | null = el\n while (node) {\n const parent = node.parentNode\n if (!parent) break\n // NodeType.ELEMENT_NODE === 1\n if (parent.nodeType === 1 && (parent as TaroElement).nodeName === SCROLL_VIEW_NODE_NAME) {\n return parent as TaroElement\n }\n node = parent\n }\n return null\n}\n\n"],"names":["taroDocument"],"mappings":";;AAAA;;;;;;;;;;;;AAYG;AAMH,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAU;AAElE;AACA,MAAM,qBAAqB,GAAG,aAAa;AAE3C;;AAEG;SACa,mBAAmB,CACjC,EAAsB,EACtB,QAAQ,GAAG,IAAI,EAAA;AAEf,IAAA,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI;AAAE,QAAA,OAAO,KAAK;AAC7C,IAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC;AAClC,IAAA,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;AAC7D,IAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAe,CAAC;AAAE,QAAA,OAAO,KAAK;IAChE,MAAM,WAAW,GAAG;AAClB,UAAE,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC;UACrB,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW;AACnC,IAAA,OAAO,WAAW;AACpB;AAEA;;;AAGG;SACa,gBAAgB,CAC9B,EAAsB,EACtB,QAAQ,GAAG,IAAI,EAAA;;AAEf,IAAA,IAAI,CAAC,EAAE;AAAE,QAAA,OAAO,IAAI;;IAGpB,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,EAAE,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,cAAc,CAAC;AAC/C,IAAA,IAAI,UAAU,IAAI,UAAU,KAAK,QAAQ,CAAC,IAAI,IAAI,mBAAmB,CAAC,UAAyB,EAAE,QAAQ,CAAC,EAAE;AAC1G,QAAA,OAAO,UAAyB;;;AAIlC,IAAA,IAAI,MAAM,GAAuB,EAAE,CAAC,aAAa;IACjD,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,QAAQ,CAAC,IAAI,EAAE;AAClD,QAAA,IAAI,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC;AAAE,YAAA,OAAO,MAAM;AACxD,QAAA,MAAM,GAAI,MAAsB,CAAC,aAAa;;AAEhD,IAAA,OAAO,IAAI;AACb;AAEA;;;;;;;;AAQG;AACG,SAAU,oBAAoB,CAAE,SAAiB,EAAA;;AACrD,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,IAAI;IAC3B,MAAM,GAAG,GAAGA,UAAsE;IAClF,MAAM,EAAE,GAAG,CAAA,EAAA,GAAA,GAAG,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,GAAA,EAAG,SAAS,CAAC;AAC1C,IAAA,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU;AAAE,QAAA,OAAO,IAAI;IAEtC,IAAI,IAAI,GAAoB,EAAE;IAC9B,OAAO,IAAI,EAAE;AACX,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU;AAC9B,QAAA,IAAI,CAAC,MAAM;YAAE;;AAEb,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAK,MAAsB,CAAC,QAAQ,KAAK,qBAAqB,EAAE;AACvF,YAAA,OAAO,MAAqB;;QAE9B,IAAI,GAAG,MAAM;;AAEf,IAAA,OAAO,IAAI;AACb;;;;"}
@@ -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.2.1-beta.0",
3
+ "version": "4.2.1-beta.1",
4
4
  "description": "",
5
5
  "author": "O2Team",
6
6
  "license": "MIT",
@@ -20,19 +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.2.1-beta.0"
23
+ "@tarojs/components-react": "4.2.1-beta.1",
24
+ "@tarojs/components": "4.2.1-beta.1"
24
25
  },
25
26
  "devDependencies": {
26
27
  "vue": "3.2.47",
27
- "@tarojs/runtime": "4.2.1-beta.0",
28
- "@tarojs/taro": "4.2.1-beta.0",
29
- "@tarojs/shared": "4.2.1-beta.0"
28
+ "@tarojs/runtime": "4.2.1-beta.1",
29
+ "@tarojs/shared": "4.2.1-beta.1",
30
+ "@tarojs/taro": "4.2.1-beta.1"
30
31
  },
31
32
  "peerDependencies": {
32
33
  "react": ">=18",
33
- "@tarojs/runtime": "~4.2.1-beta.0",
34
- "@tarojs/shared": "~4.2.1-beta.0",
35
- "@tarojs/taro": "~4.2.1-beta.0"
34
+ "@tarojs/runtime": "~4.2.1-beta.1",
35
+ "@tarojs/shared": "~4.2.1-beta.1",
36
+ "@tarojs/taro": "~4.2.1-beta.1"
36
37
  },
37
38
  "peerDependenciesMeta": {
38
39
  "react": {