@tamagui/scroll-view 2.7.7 → 3.0.0-beta.1091.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 (62) hide show
  1. package/dist/cjs/ScrollView.cjs +20 -31
  2. package/dist/cjs/ScrollView.native.cjs +47 -0
  3. package/dist/cjs/ScrollView.native.js +35 -32
  4. package/dist/cjs/ScrollView.native.js.map +1 -1
  5. package/dist/cjs/WebScrollView.cjs +236 -0
  6. package/dist/cjs/WebScrollView.native.cjs +274 -0
  7. package/dist/cjs/WebScrollView.native.js +276 -0
  8. package/dist/cjs/WebScrollView.native.js.map +1 -0
  9. package/dist/cjs/index.cjs +9 -11
  10. package/dist/cjs/index.native.cjs +20 -0
  11. package/dist/cjs/index.native.js +9 -10
  12. package/dist/cjs/index.native.js.map +1 -1
  13. package/dist/cjs/web.cjs +24 -0
  14. package/dist/esm/ScrollView.mjs +8 -13
  15. package/dist/esm/ScrollView.mjs.map +1 -1
  16. package/dist/esm/ScrollView.native.js +17 -15
  17. package/dist/esm/ScrollView.native.js.map +1 -1
  18. package/dist/esm/WebScrollView.mjs +211 -0
  19. package/dist/esm/WebScrollView.mjs.map +1 -0
  20. package/dist/esm/WebScrollView.native.js +247 -0
  21. package/dist/esm/WebScrollView.native.js.map +1 -0
  22. package/dist/esm/index.js +1 -2
  23. package/dist/esm/index.mjs +1 -2
  24. package/dist/esm/index.native.js +1 -2
  25. package/dist/esm/web.mjs +3 -0
  26. package/dist/jsx/ScrollView.mjs +8 -13
  27. package/dist/jsx/ScrollView.mjs.map +1 -1
  28. package/dist/jsx/ScrollView.native.cjs +47 -0
  29. package/dist/jsx/ScrollView.native.js +35 -32
  30. package/dist/jsx/ScrollView.native.js.map +1 -1
  31. package/dist/jsx/WebScrollView.mjs +211 -0
  32. package/dist/jsx/WebScrollView.mjs.map +1 -0
  33. package/dist/jsx/WebScrollView.native.cjs +274 -0
  34. package/dist/jsx/WebScrollView.native.js +276 -0
  35. package/dist/jsx/WebScrollView.native.js.map +1 -0
  36. package/dist/jsx/index.js +1 -2
  37. package/dist/jsx/index.mjs +1 -2
  38. package/dist/jsx/index.native.cjs +20 -0
  39. package/dist/jsx/index.native.js +9 -10
  40. package/dist/jsx/index.native.js.map +1 -1
  41. package/dist/jsx/web.mjs +3 -0
  42. package/package.json +15 -6
  43. package/src/ScrollView.native.tsx +45 -0
  44. package/src/ScrollView.tsx +12 -15
  45. package/src/WebScrollView.tsx +332 -0
  46. package/src/index.ts +1 -0
  47. package/src/web.ts +8 -0
  48. package/types/ScrollView.d.ts +18 -16
  49. package/types/ScrollView.d.ts.map +1 -1
  50. package/types/ScrollView.native.d.ts +25 -0
  51. package/types/ScrollView.native.d.ts.map +1 -0
  52. package/types/WebScrollView.d.ts +25 -0
  53. package/types/WebScrollView.d.ts.map +1 -0
  54. package/types/index.d.ts +1 -0
  55. package/types/index.d.ts.map +1 -1
  56. package/types/web.d.ts +4 -0
  57. package/types/web.d.ts.map +1 -0
  58. package/dist/esm/index.js.map +0 -1
  59. package/dist/esm/index.mjs.map +0 -1
  60. package/dist/esm/index.native.js.map +0 -1
  61. package/dist/jsx/index.js.map +0 -1
  62. package/dist/jsx/index.mjs.map +0 -1
@@ -0,0 +1,24 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all) __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true
9
+ });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+ var web_exports = {};
22
+ __export(web_exports, { ScrollView: () => import_ScrollView.ScrollView });
23
+ module.exports = __toCommonJS(web_exports);
24
+ var import_ScrollView = require("./ScrollView.cjs");
@@ -1,18 +1,13 @@
1
- import { fullscreenStyle } from "@tamagui/stacks";
2
1
  import { styled } from "@tamagui/web";
3
- import { ScrollView as ScrollViewNative } from "react-native-web";
4
- const ScrollView = styled(ScrollViewNative, {
5
- name: "ScrollView",
6
- scrollEnabled: true,
7
- variants: {
8
- fullscreen: {
9
- true: fullscreenStyle
10
- }
11
- }
2
+ import { WebScrollView } from "./WebScrollView.mjs";
3
+
4
+ const ScrollView = styled(WebScrollView, {
5
+ displayName: "ScrollView",
6
+ scrollEnabled: true
12
7
  }, {
13
- accept: {
14
- contentContainerStyle: "style"
15
- }
8
+ acceptsClassName: true,
9
+ neverFlatten: true
16
10
  });
11
+
17
12
  export { ScrollView };
18
13
  //# sourceMappingURL=ScrollView.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["fullscreenStyle","styled","ScrollView","ScrollViewNative","name","scrollEnabled","variants","fullscreen","true","accept","contentContainerStyle"],"sources":["../../src/ScrollView.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,eAAA,QAAuB;AAEhC,SAASC,MAAA,QAAc;AACvB,SAASC,UAAA,IAAcC,gBAAA,QAAwB;AAExC,MAAMD,UAAA,GAAaD,MAAA,CACxBE,gBAAA,EACA;EACEC,IAAA,EAAM;EACNC,aAAA,EAAe;EAEfC,QAAA,EAAU;IACRC,UAAA,EAAY;MACVC,IAAA,EAAMR;IACR;EACF;AACF,GACA;EACES,MAAA,EAAQ;IACNC,qBAAA,EAAuB;EACzB;AACF,CACF","ignoreList":[]}
1
+ {"version":3,"file":"ScrollView.js","names":[],"sources":["esm/ScrollView.js"],"sourcesContent":["import { styled } from \"@tamagui/web\";\nimport { WebScrollView } from \"./WebScrollView\";\nconst ScrollView = styled(\n WebScrollView,\n {\n displayName: \"ScrollView\",\n scrollEnabled: true\n },\n {\n acceptsClassName: true,\n neverFlatten: true\n }\n);\nexport {\n ScrollView\n};\n//# sourceMappingURL=ScrollView.js.map\n"],"mappings":";;;;AAEA,MAAM,aAAa,OACjB,eACA;CACE,aAAa;CACb,eAAe;AACjB,GACA;CACE,kBAAkB;CAClB,cAAc;AAChB,CACF"}
@@ -1,18 +1,20 @@
1
- import { fullscreenStyle } from "@tamagui/stacks";
2
- import { styled } from "@tamagui/web";
3
- import { ScrollView as ScrollViewNative } from "react-native";
4
- var ScrollView = styled(ScrollViewNative, {
5
- name: "ScrollView",
6
- scrollEnabled: true,
7
- variants: {
8
- fullscreen: {
9
- true: fullscreenStyle
10
- }
11
- }
12
- }, {
13
- accept: {
14
- contentContainerStyle: "style"
15
- }
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { styled, useStyle } from "@tamagui/web";
3
+ import React from "react";
4
+ import { ScrollView as ScrollView$1 } from "react-native";
5
+
6
+ var ScrollViewNative = /* @__PURE__ */ React.forwardRef(function(param, ref) {
7
+ var { contentContainerStyle, ...props } = param;
8
+ return /* @__PURE__ */ jsx(ScrollView$1, {
9
+ ...props,
10
+ ref,
11
+ contentContainerStyle: useStyle(contentContainerStyle)
12
+ });
16
13
  });
14
+ var ScrollView = styled(ScrollViewNative, {
15
+ displayName: "ScrollView",
16
+ scrollEnabled: true
17
+ }, { neverFlatten: true });
18
+
17
19
  export { ScrollView };
18
20
  //# sourceMappingURL=ScrollView.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["fullscreenStyle","styled","ScrollView","ScrollViewNative","name","scrollEnabled","variants","fullscreen","true","accept","contentContainerStyle"],"sources":["../../src/ScrollView.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,eAAA,QAAuB;AAEhC,SAASC,MAAA,QAAc;AACvB,SAASC,UAAA,IAAcC,gBAAA,QAAwB;AAExC,IAAAD,UAAM,GAAAD,MAAa,CAAAE,gBAAA;EACxBC,IAAA;EACAC,aAAA;EAAAC,QACQ;IACNC,UAAA;MAEAC,IAAA,EAAAR;IAAU;EACI;AACJ;EACRS,MACF;IACFC,qBAAA;EACA;AAAA;AACU,SACiBR,UACzB","ignoreList":[]}
1
+ {"version":3,"file":"ScrollView.native.js","names":["ReactNativeScrollView"],"sources":["esm/ScrollView.native.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { styled, useStyle } from \"@tamagui/web\";\nimport React from \"react\";\nimport { ScrollView as ReactNativeScrollView } from \"react-native\";\nvar ScrollViewNative = /* @__PURE__ */ React.forwardRef(function(param, ref) {\n var { contentContainerStyle, ...props } = param;\n return /* @__PURE__ */ _jsx(ReactNativeScrollView, {\n ...props,\n ref,\n contentContainerStyle: useStyle(contentContainerStyle)\n });\n});\nvar ScrollView = styled(ScrollViewNative, {\n displayName: \"ScrollView\",\n scrollEnabled: true\n}, {\n neverFlatten: true\n});\nexport {\n ScrollView\n};\n//# sourceMappingURL=ScrollView.native.js.map\n"],"mappings":";;;;;;AAIA,IAAI,mBAAmC,sBAAM,WAAW,SAAS,OAAO,KAAK;CAC3E,IAAI,EAAE,uBAAuB,GAAG,UAAU;CAC1C,OAAuB,oBAAKA,cAAuB;EACjD,GAAG;EACH;EACA,uBAAuB,SAAS,qBAAqB;CACvD,CAAC;AACH,CAAC;AACD,IAAI,aAAa,OAAO,kBAAkB;CACxC,aAAa;CACb,eAAe;AACjB,GAAG,EACD,cAAc,KAChB,CAAC"}
@@ -0,0 +1,211 @@
1
+ import { View } from "@tamagui/web";
2
+ import * as React from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+
5
+ const View$1 = View;
6
+ function mergeRefs(...refs) {
7
+ return (node) => {
8
+ for (const ref of refs) {
9
+ if (!ref) continue;
10
+ if (typeof ref === "function") ref(node);
11
+ else ref.current = node;
12
+ }
13
+ };
14
+ }
15
+ function normalizeScrollEvent(e) {
16
+ const target = e.target;
17
+ return {
18
+ nativeEvent: {
19
+ contentOffset: {
20
+ get x() {
21
+ return target.scrollLeft;
22
+ },
23
+ get y() {
24
+ return target.scrollTop;
25
+ }
26
+ },
27
+ contentSize: {
28
+ get height() {
29
+ return target.scrollHeight;
30
+ },
31
+ get width() {
32
+ return target.scrollWidth;
33
+ }
34
+ },
35
+ layoutMeasurement: {
36
+ get height() {
37
+ return target.offsetHeight;
38
+ },
39
+ get width() {
40
+ return target.offsetWidth;
41
+ }
42
+ }
43
+ },
44
+ timeStamp: Date.now()
45
+ };
46
+ }
47
+ function shouldEmitScrollEvent(lastTick, eventThrottle) {
48
+ const timeSinceLastTick = Date.now() - lastTick;
49
+ return eventThrottle > 0 && timeSinceLastTick >= eventThrottle;
50
+ }
51
+ function resolveStyles(...inputs) {
52
+ return inputs.flat(Infinity).filter(Boolean);
53
+ }
54
+ function joinClassNames(...parts) {
55
+ const joined = parts.filter(Boolean).join(" ").trim();
56
+ return joined || void 0;
57
+ }
58
+ const commonStyle = {
59
+ flexGrow: 1,
60
+ flexShrink: 1
61
+ };
62
+ const styles = {
63
+ baseVertical: {
64
+ ...commonStyle,
65
+ flexDirection: "column",
66
+ overflowX: "hidden",
67
+ overflowY: "auto"
68
+ },
69
+ baseHorizontal: {
70
+ ...commonStyle,
71
+ flexDirection: "row",
72
+ overflowX: "auto",
73
+ overflowY: "hidden"
74
+ },
75
+ contentContainerHorizontal: { flexDirection: "row" },
76
+ contentContainerCenterContent: {
77
+ justifyContent: "center",
78
+ flexGrow: 1
79
+ },
80
+ stickyHeader: {
81
+ position: "sticky",
82
+ top: 0,
83
+ zIndex: 10
84
+ },
85
+ pagingEnabledHorizontal: { scrollSnapType: "x mandatory" },
86
+ pagingEnabledVertical: { scrollSnapType: "y mandatory" },
87
+ pagingEnabledChild: { scrollSnapAlign: "start" },
88
+ scrollDisabled: {
89
+ overflowX: "hidden",
90
+ overflowY: "hidden",
91
+ touchAction: "none"
92
+ }
93
+ };
94
+ const WebScrollView = React.forwardRef((props, forwardedRef) => {
95
+ const { children, contentContainerStyle, horizontal, onContentSizeChange, onScroll, refreshControl, stickyHeaderIndices, pagingEnabled, centerContent, scrollEnabled = true, scrollEventThrottle = 0, showsHorizontalScrollIndicator, showsVerticalScrollIndicator, style, keyboardShouldPersistTaps, keyboardDismissMode, contentOffset, contentInset, contentInsetAdjustmentBehavior, decelerationRate, directionalLockEnabled, disableIntervalMomentum, disableScrollViewPanResponder, endFillColor, fadingEdgeLength, indicatorStyle, invertStickyHeaders, maintainVisibleContentPosition, maximumZoomScale, minimumZoomScale, nestedScrollEnabled, onScrollToTop, overScrollMode, pinchGestureEnabled, removeClippedSubviews, scrollIndicatorInsets, scrollPerfTag, scrollToOverflowEnabled, snapToAlignment, snapToEnd, snapToInterval, snapToOffsets, snapToStart, bounces, ...rest } = props;
96
+ const scrollNodeRef = React.useRef(null);
97
+ const innerViewRef = React.useRef(null);
98
+ const scrollState = React.useRef({
99
+ isScrolling: false,
100
+ scrollLastTick: 0
101
+ });
102
+ const scrollTimeout = React.useRef(null);
103
+ const scrollTo = (options) => {
104
+ const node = scrollNodeRef.current;
105
+ if (node == null) return;
106
+ const { x = 0, y = 0, animated = true } = options || {};
107
+ if (typeof node.scroll === "function") {
108
+ node.scroll({
109
+ top: y,
110
+ left: x,
111
+ behavior: animated ? "smooth" : "auto"
112
+ });
113
+ } else {
114
+ node.scrollLeft = x;
115
+ node.scrollTop = y;
116
+ }
117
+ };
118
+ const scrollToEnd = (options) => {
119
+ const node = scrollNodeRef.current;
120
+ if (node == null) return;
121
+ const animated = (options && options.animated) !== false;
122
+ const x = horizontal ? node.scrollWidth : 0;
123
+ const y = horizontal ? 0 : node.scrollHeight;
124
+ scrollTo({
125
+ x,
126
+ y,
127
+ animated
128
+ });
129
+ };
130
+ const setScrollNodeRef = React.useCallback((node) => {
131
+ scrollNodeRef.current = node;
132
+ if (node != null) {
133
+ node.getScrollResponder = () => node;
134
+ node.getScrollableNode = () => node;
135
+ node.getInnerViewNode = () => innerViewRef.current;
136
+ node.getInnerViewRef = () => innerViewRef.current;
137
+ node.getNativeScrollRef = () => node;
138
+ node.scrollTo = scrollTo;
139
+ node.scrollToEnd = scrollToEnd;
140
+ node.flashScrollIndicators = () => {};
141
+ }
142
+ mergeRefs(forwardedRef)(node);
143
+ }, [forwardedRef, horizontal]);
144
+ function handleScroll(e) {
145
+ e.stopPropagation();
146
+ if (e.target !== scrollNodeRef.current) return;
147
+ if (scrollTimeout.current != null) {
148
+ clearTimeout(scrollTimeout.current);
149
+ }
150
+ scrollTimeout.current = setTimeout(() => {
151
+ scrollState.current.isScrolling = false;
152
+ onScroll?.(normalizeScrollEvent(e));
153
+ }, 100);
154
+ if (scrollState.current.isScrolling) {
155
+ if (shouldEmitScrollEvent(scrollState.current.scrollLastTick, scrollEventThrottle)) {
156
+ scrollState.current.scrollLastTick = Date.now();
157
+ onScroll?.(normalizeScrollEvent(e));
158
+ }
159
+ } else {
160
+ scrollState.current.isScrolling = true;
161
+ scrollState.current.scrollLastTick = Date.now();
162
+ onScroll?.(normalizeScrollEvent(e));
163
+ }
164
+ }
165
+ const handleContentLayout = onContentSizeChange ? (e) => {
166
+ const { width, height } = e.nativeEvent.layout;
167
+ onContentSizeChange(width, height);
168
+ } : void 0;
169
+ const hasStickyHeaderIndices = !horizontal && Array.isArray(stickyHeaderIndices);
170
+ const renderedChildren = hasStickyHeaderIndices || pagingEnabled ? React.Children.map(children, (child, i) => {
171
+ const isSticky = hasStickyHeaderIndices && stickyHeaderIndices.indexOf(i) > -1;
172
+ if (child != null && (isSticky || pagingEnabled)) {
173
+ const resolvedStyle = resolveStyles(isSticky && styles.stickyHeader, pagingEnabled && styles.pagingEnabledChild);
174
+ return /* @__PURE__ */ jsx(View$1, {
175
+ style: resolvedStyle,
176
+ children: child
177
+ });
178
+ }
179
+ return child;
180
+ }) : children;
181
+ const contentStyle = resolveStyles(horizontal && styles.contentContainerHorizontal, centerContent && styles.contentContainerCenterContent, contentContainerStyle);
182
+ const contentContainer = /* @__PURE__ */ jsx(View$1, {
183
+ ref: innerViewRef,
184
+ onLayout: handleContentLayout,
185
+ style: contentStyle,
186
+ children: renderedChildren
187
+ });
188
+ const baseStyle = horizontal ? styles.baseHorizontal : styles.baseVertical;
189
+ const pagingEnabledStyle = horizontal ? styles.pagingEnabledHorizontal : styles.pagingEnabledVertical;
190
+ const hideHorizontalScrollbar = showsHorizontalScrollIndicator === false;
191
+ const hideVerticalScrollbar = showsVerticalScrollIndicator === false;
192
+ const extraClassName = (hideHorizontalScrollbar ? " _hsb-x" : "") + (hideVerticalScrollbar ? " _hsb-y" : "");
193
+ const scrollStyle = resolveStyles(baseStyle, pagingEnabled && pagingEnabledStyle, style, !scrollEnabled && styles.scrollDisabled);
194
+ const scrollView = /* @__PURE__ */ jsx(View$1, {
195
+ ...rest,
196
+ className: joinClassNames(rest.className, extraClassName),
197
+ ref: setScrollNodeRef,
198
+ onScroll: handleScroll,
199
+ style: scrollStyle,
200
+ children: contentContainer
201
+ });
202
+ if (refreshControl) {
203
+ const refreshStyle = resolveStyles(baseStyle, style);
204
+ return React.cloneElement(refreshControl, { style: refreshStyle }, scrollView);
205
+ }
206
+ return scrollView;
207
+ });
208
+ WebScrollView.displayName = "ScrollView";
209
+
210
+ export { WebScrollView };
211
+ //# sourceMappingURL=WebScrollView.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebScrollView.js","names":["View","TamaguiView"],"sources":["esm/WebScrollView.js"],"sourcesContent":["import { View as TamaguiView } from \"@tamagui/web\";\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nconst View = TamaguiView;\nfunction mergeRefs(...refs) {\n return (node) => {\n for (const ref of refs) {\n if (!ref) continue;\n if (typeof ref === \"function\") ref(node);\n else ref.current = node;\n }\n };\n}\nfunction normalizeScrollEvent(e) {\n const target = e.target;\n return {\n nativeEvent: {\n contentOffset: {\n get x() {\n return target.scrollLeft;\n },\n get y() {\n return target.scrollTop;\n }\n },\n contentSize: {\n get height() {\n return target.scrollHeight;\n },\n get width() {\n return target.scrollWidth;\n }\n },\n layoutMeasurement: {\n get height() {\n return target.offsetHeight;\n },\n get width() {\n return target.offsetWidth;\n }\n }\n },\n timeStamp: Date.now()\n };\n}\nfunction shouldEmitScrollEvent(lastTick, eventThrottle) {\n const timeSinceLastTick = Date.now() - lastTick;\n return eventThrottle > 0 && timeSinceLastTick >= eventThrottle;\n}\nfunction resolveStyles(...inputs) {\n return inputs.flat(Infinity).filter(Boolean);\n}\nfunction joinClassNames(...parts) {\n const joined = parts.filter(Boolean).join(\" \").trim();\n return joined || void 0;\n}\nconst commonStyle = {\n flexGrow: 1,\n flexShrink: 1\n};\nconst styles = {\n baseVertical: {\n ...commonStyle,\n flexDirection: \"column\",\n overflowX: \"hidden\",\n overflowY: \"auto\"\n },\n baseHorizontal: {\n ...commonStyle,\n flexDirection: \"row\",\n overflowX: \"auto\",\n overflowY: \"hidden\"\n },\n contentContainerHorizontal: {\n flexDirection: \"row\"\n },\n contentContainerCenterContent: {\n justifyContent: \"center\",\n flexGrow: 1\n },\n stickyHeader: {\n position: \"sticky\",\n top: 0,\n zIndex: 10\n },\n pagingEnabledHorizontal: {\n scrollSnapType: \"x mandatory\"\n },\n pagingEnabledVertical: {\n scrollSnapType: \"y mandatory\"\n },\n pagingEnabledChild: {\n scrollSnapAlign: \"start\"\n },\n scrollDisabled: {\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n touchAction: \"none\"\n }\n};\nconst WebScrollView = React.forwardRef(\n (props, forwardedRef) => {\n const {\n children,\n contentContainerStyle,\n horizontal,\n onContentSizeChange,\n onScroll,\n refreshControl,\n stickyHeaderIndices,\n pagingEnabled,\n centerContent,\n scrollEnabled = true,\n scrollEventThrottle = 0,\n showsHorizontalScrollIndicator,\n showsVerticalScrollIndicator,\n style,\n // strip react-native-only props that shouldn't reach the DOM\n keyboardShouldPersistTaps,\n keyboardDismissMode,\n contentOffset,\n contentInset,\n contentInsetAdjustmentBehavior,\n decelerationRate,\n directionalLockEnabled,\n disableIntervalMomentum,\n disableScrollViewPanResponder,\n endFillColor,\n fadingEdgeLength,\n indicatorStyle,\n invertStickyHeaders,\n maintainVisibleContentPosition,\n maximumZoomScale,\n minimumZoomScale,\n nestedScrollEnabled,\n onScrollToTop,\n overScrollMode,\n pinchGestureEnabled,\n removeClippedSubviews,\n scrollIndicatorInsets,\n scrollPerfTag,\n scrollToOverflowEnabled,\n snapToAlignment,\n snapToEnd,\n snapToInterval,\n snapToOffsets,\n snapToStart,\n bounces,\n ...rest\n } = props;\n const scrollNodeRef = React.useRef(null);\n const innerViewRef = React.useRef(null);\n const scrollState = React.useRef({ isScrolling: false, scrollLastTick: 0 });\n const scrollTimeout = React.useRef(null);\n const scrollTo = (options) => {\n const node = scrollNodeRef.current;\n if (node == null) return;\n const { x = 0, y = 0, animated = true } = options || {};\n if (typeof node.scroll === \"function\") {\n node.scroll({ top: y, left: x, behavior: animated ? \"smooth\" : \"auto\" });\n } else {\n node.scrollLeft = x;\n node.scrollTop = y;\n }\n };\n const scrollToEnd = (options) => {\n const node = scrollNodeRef.current;\n if (node == null) return;\n const animated = (options && options.animated) !== false;\n const x = horizontal ? node.scrollWidth : 0;\n const y = horizontal ? 0 : node.scrollHeight;\n scrollTo({ x, y, animated });\n };\n const setScrollNodeRef = React.useCallback(\n (node) => {\n scrollNodeRef.current = node;\n if (node != null) {\n node.getScrollResponder = () => node;\n node.getScrollableNode = () => node;\n node.getInnerViewNode = () => innerViewRef.current;\n node.getInnerViewRef = () => innerViewRef.current;\n node.getNativeScrollRef = () => node;\n node.scrollTo = scrollTo;\n node.scrollToEnd = scrollToEnd;\n node.flashScrollIndicators = () => {\n };\n }\n mergeRefs(forwardedRef)(node);\n },\n [forwardedRef, horizontal]\n );\n function handleScroll(e) {\n e.stopPropagation();\n if (e.target !== scrollNodeRef.current) return;\n if (scrollTimeout.current != null) {\n clearTimeout(scrollTimeout.current);\n }\n scrollTimeout.current = setTimeout(() => {\n scrollState.current.isScrolling = false;\n onScroll?.(normalizeScrollEvent(e));\n }, 100);\n if (scrollState.current.isScrolling) {\n if (shouldEmitScrollEvent(scrollState.current.scrollLastTick, scrollEventThrottle)) {\n scrollState.current.scrollLastTick = Date.now();\n onScroll?.(normalizeScrollEvent(e));\n }\n } else {\n scrollState.current.isScrolling = true;\n scrollState.current.scrollLastTick = Date.now();\n onScroll?.(normalizeScrollEvent(e));\n }\n }\n const handleContentLayout = onContentSizeChange ? (e) => {\n const { width, height } = e.nativeEvent.layout;\n onContentSizeChange(width, height);\n } : void 0;\n const hasStickyHeaderIndices = !horizontal && Array.isArray(stickyHeaderIndices);\n const renderedChildren = hasStickyHeaderIndices || pagingEnabled ? React.Children.map(children, (child, i) => {\n const isSticky = hasStickyHeaderIndices && stickyHeaderIndices.indexOf(i) > -1;\n if (child != null && (isSticky || pagingEnabled)) {\n const resolvedStyle = resolveStyles(\n isSticky && styles.stickyHeader,\n pagingEnabled && styles.pagingEnabledChild\n );\n return /* @__PURE__ */ jsx(View, { style: resolvedStyle, children: child });\n }\n return child;\n }) : children;\n const contentStyle = resolveStyles(\n horizontal && styles.contentContainerHorizontal,\n centerContent && styles.contentContainerCenterContent,\n contentContainerStyle\n );\n const contentContainer = /* @__PURE__ */ jsx(View, { ref: innerViewRef, onLayout: handleContentLayout, style: contentStyle, children: renderedChildren });\n const baseStyle = horizontal ? styles.baseHorizontal : styles.baseVertical;\n const pagingEnabledStyle = horizontal ? styles.pagingEnabledHorizontal : styles.pagingEnabledVertical;\n const hideHorizontalScrollbar = showsHorizontalScrollIndicator === false;\n const hideVerticalScrollbar = showsVerticalScrollIndicator === false;\n const extraClassName = (hideHorizontalScrollbar ? \" _hsb-x\" : \"\") + (hideVerticalScrollbar ? \" _hsb-y\" : \"\");\n const scrollStyle = resolveStyles(\n baseStyle,\n pagingEnabled && pagingEnabledStyle,\n style,\n !scrollEnabled && styles.scrollDisabled\n );\n const scrollView = /* @__PURE__ */ jsx(\n View,\n {\n ...rest,\n className: joinClassNames(rest.className, extraClassName),\n ref: setScrollNodeRef,\n onScroll: handleScroll,\n style: scrollStyle,\n children: contentContainer\n }\n );\n if (refreshControl) {\n const refreshStyle = resolveStyles(baseStyle, style);\n return React.cloneElement(\n refreshControl,\n {\n style: refreshStyle\n },\n scrollView\n );\n }\n return scrollView;\n }\n);\nWebScrollView.displayName = \"ScrollView\";\nexport {\n WebScrollView\n};\n//# sourceMappingURL=WebScrollView.js.map\n"],"mappings":";;;;;AAGA,MAAMA,SAAOC;AACb,SAAS,UAAU,GAAG,MAAM;CAC1B,QAAQ,SAAS;EACf,KAAK,MAAM,OAAO,MAAM;GACtB,IAAI,CAAC,KAAK;GACV,IAAI,OAAO,QAAQ,YAAY,IAAI,IAAI;QAClC,IAAI,UAAU;EACrB;CACF;AACF;AACA,SAAS,qBAAqB,GAAG;CAC/B,MAAM,SAAS,EAAE;CACjB,OAAO;EACL,aAAa;GACX,eAAe;IACb,IAAI,IAAI;KACN,OAAO,OAAO;IAChB;IACA,IAAI,IAAI;KACN,OAAO,OAAO;IAChB;GACF;GACA,aAAa;IACX,IAAI,SAAS;KACX,OAAO,OAAO;IAChB;IACA,IAAI,QAAQ;KACV,OAAO,OAAO;IAChB;GACF;GACA,mBAAmB;IACjB,IAAI,SAAS;KACX,OAAO,OAAO;IAChB;IACA,IAAI,QAAQ;KACV,OAAO,OAAO;IAChB;GACF;EACF;EACA,WAAW,KAAK,IAAI;CACtB;AACF;AACA,SAAS,sBAAsB,UAAU,eAAe;CACtD,MAAM,oBAAoB,KAAK,IAAI,IAAI;CACvC,OAAO,gBAAgB,KAAK,qBAAqB;AACnD;AACA,SAAS,cAAc,GAAG,QAAQ;CAChC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,OAAO,OAAO;AAC7C;AACA,SAAS,eAAe,GAAG,OAAO;CAChC,MAAM,SAAS,MAAM,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;CACpD,OAAO,UAAU,KAAK;AACxB;AACA,MAAM,cAAc;CAClB,UAAU;CACV,YAAY;AACd;AACA,MAAM,SAAS;CACb,cAAc;EACZ,GAAG;EACH,eAAe;EACf,WAAW;EACX,WAAW;CACb;CACA,gBAAgB;EACd,GAAG;EACH,eAAe;EACf,WAAW;EACX,WAAW;CACb;CACA,4BAA4B,EAC1B,eAAe,MACjB;CACA,+BAA+B;EAC7B,gBAAgB;EAChB,UAAU;CACZ;CACA,cAAc;EACZ,UAAU;EACV,KAAK;EACL,QAAQ;CACV;CACA,yBAAyB,EACvB,gBAAgB,cAClB;CACA,uBAAuB,EACrB,gBAAgB,cAClB;CACA,oBAAoB,EAClB,iBAAiB,QACnB;CACA,gBAAgB;EACd,WAAW;EACX,WAAW;EACX,aAAa;CACf;AACF;AACA,MAAM,gBAAgB,MAAM,YACzB,OAAO,iBAAiB;CACvB,MAAM,EACJ,UACA,uBACA,YACA,qBACA,UACA,gBACA,qBACA,eACA,eACA,gBAAgB,MAChB,sBAAsB,GACtB,gCACA,8BACA,OAEA,2BACA,qBACA,eACA,cACA,gCACA,kBACA,wBACA,yBACA,+BACA,cACA,kBACA,gBACA,qBACA,gCACA,kBACA,kBACA,qBACA,eACA,gBACA,qBACA,uBACA,uBACA,eACA,yBACA,iBACA,WACA,gBACA,eACA,aACA,SACA,GAAG,SACD;CACJ,MAAM,gBAAgB,MAAM,OAAO,IAAI;CACvC,MAAM,eAAe,MAAM,OAAO,IAAI;CACtC,MAAM,cAAc,MAAM,OAAO;EAAE,aAAa;EAAO,gBAAgB;CAAE,CAAC;CAC1E,MAAM,gBAAgB,MAAM,OAAO,IAAI;CACvC,MAAM,YAAY,YAAY;EAC5B,MAAM,OAAO,cAAc;EAC3B,IAAI,QAAQ,MAAM;EAClB,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,WAAW,SAAS,WAAW,CAAC;EACtD,IAAI,OAAO,KAAK,WAAW,YAAY;GACrC,KAAK,OAAO;IAAE,KAAK;IAAG,MAAM;IAAG,UAAU,WAAW,WAAW;GAAO,CAAC;EACzE,OAAO;GACL,KAAK,aAAa;GAClB,KAAK,YAAY;EACnB;CACF;CACA,MAAM,eAAe,YAAY;EAC/B,MAAM,OAAO,cAAc;EAC3B,IAAI,QAAQ,MAAM;EAClB,MAAM,YAAY,WAAW,QAAQ,cAAc;EACnD,MAAM,IAAI,aAAa,KAAK,cAAc;EAC1C,MAAM,IAAI,aAAa,IAAI,KAAK;EAChC,SAAS;GAAE;GAAG;GAAG;EAAS,CAAC;CAC7B;CACA,MAAM,mBAAmB,MAAM,aAC5B,SAAS;EACR,cAAc,UAAU;EACxB,IAAI,QAAQ,MAAM;GAChB,KAAK,2BAA2B;GAChC,KAAK,0BAA0B;GAC/B,KAAK,yBAAyB,aAAa;GAC3C,KAAK,wBAAwB,aAAa;GAC1C,KAAK,2BAA2B;GAChC,KAAK,WAAW;GAChB,KAAK,cAAc;GACnB,KAAK,8BAA8B,CACnC;EACF;EACA,UAAU,YAAY,CAAC,CAAC,IAAI;CAC9B,GACA,CAAC,cAAc,UAAU,CAC3B;CACA,SAAS,aAAa,GAAG;EACvB,EAAE,gBAAgB;EAClB,IAAI,EAAE,WAAW,cAAc,SAAS;EACxC,IAAI,cAAc,WAAW,MAAM;GACjC,aAAa,cAAc,OAAO;EACpC;EACA,cAAc,UAAU,iBAAiB;GACvC,YAAY,QAAQ,cAAc;GAClC,WAAW,qBAAqB,CAAC,CAAC;EACpC,GAAG,GAAG;EACN,IAAI,YAAY,QAAQ,aAAa;GACnC,IAAI,sBAAsB,YAAY,QAAQ,gBAAgB,mBAAmB,GAAG;IAClF,YAAY,QAAQ,iBAAiB,KAAK,IAAI;IAC9C,WAAW,qBAAqB,CAAC,CAAC;GACpC;EACF,OAAO;GACL,YAAY,QAAQ,cAAc;GAClC,YAAY,QAAQ,iBAAiB,KAAK,IAAI;GAC9C,WAAW,qBAAqB,CAAC,CAAC;EACpC;CACF;CACA,MAAM,sBAAsB,uBAAuB,MAAM;EACvD,MAAM,EAAE,OAAO,WAAW,EAAE,YAAY;EACxC,oBAAoB,OAAO,MAAM;CACnC,IAAI,KAAK;CACT,MAAM,yBAAyB,CAAC,cAAc,MAAM,QAAQ,mBAAmB;CAC/E,MAAM,mBAAmB,0BAA0B,gBAAgB,MAAM,SAAS,IAAI,WAAW,OAAO,MAAM;EAC5G,MAAM,WAAW,0BAA0B,oBAAoB,QAAQ,CAAC,IAAI,CAAC;EAC7E,IAAI,SAAS,SAAS,YAAY,gBAAgB;GAChD,MAAM,gBAAgB,cACpB,YAAY,OAAO,cACnB,iBAAiB,OAAO,kBAC1B;GACA,OAAuB,oBAAID,QAAM;IAAE,OAAO;IAAe,UAAU;GAAM,CAAC;EAC5E;EACA,OAAO;CACT,CAAC,IAAI;CACL,MAAM,eAAe,cACnB,cAAc,OAAO,4BACrB,iBAAiB,OAAO,+BACxB,qBACF;CACA,MAAM,mBAAmC,oBAAIA,QAAM;EAAE,KAAK;EAAc,UAAU;EAAqB,OAAO;EAAc,UAAU;CAAiB,CAAC;CACxJ,MAAM,YAAY,aAAa,OAAO,iBAAiB,OAAO;CAC9D,MAAM,qBAAqB,aAAa,OAAO,0BAA0B,OAAO;CAChF,MAAM,0BAA0B,mCAAmC;CACnE,MAAM,wBAAwB,iCAAiC;CAC/D,MAAM,kBAAkB,0BAA0B,YAAY,OAAO,wBAAwB,YAAY;CACzG,MAAM,cAAc,cAClB,WACA,iBAAiB,oBACjB,OACA,CAAC,iBAAiB,OAAO,cAC3B;CACA,MAAM,aAA6B,oBACjCA,QACA;EACE,GAAG;EACH,WAAW,eAAe,KAAK,WAAW,cAAc;EACxD,KAAK;EACL,UAAU;EACV,OAAO;EACP,UAAU;CACZ,CACF;CACA,IAAI,gBAAgB;EAClB,MAAM,eAAe,cAAc,WAAW,KAAK;EACnD,OAAO,MAAM,aACX,gBACA,EACE,OAAO,aACT,GACA,UACF;CACF;CACA,OAAO;AACT,CACF;AACA,cAAc,cAAc"}
@@ -0,0 +1,247 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { View } from "@tamagui/web";
3
+ import * as React from "react";
4
+
5
+ var View$1 = View;
6
+ function mergeRefs() {
7
+ for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
8
+ refs[_key] = arguments[_key];
9
+ }
10
+ return function(node) {
11
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
12
+ try {
13
+ for (var _iterator = refs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
14
+ var ref = _step.value;
15
+ if (!ref) continue;
16
+ if (typeof ref === "function") ref(node);
17
+ else ref.current = node;
18
+ }
19
+ } catch (err) {
20
+ _didIteratorError = true;
21
+ _iteratorError = err;
22
+ } finally {
23
+ try {
24
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
25
+ _iterator.return();
26
+ }
27
+ } finally {
28
+ if (_didIteratorError) {
29
+ throw _iteratorError;
30
+ }
31
+ }
32
+ }
33
+ };
34
+ }
35
+ function normalizeScrollEvent(e) {
36
+ var target = e.target;
37
+ return {
38
+ nativeEvent: {
39
+ contentOffset: {
40
+ get x() {
41
+ return target.scrollLeft;
42
+ },
43
+ get y() {
44
+ return target.scrollTop;
45
+ }
46
+ },
47
+ contentSize: {
48
+ get height() {
49
+ return target.scrollHeight;
50
+ },
51
+ get width() {
52
+ return target.scrollWidth;
53
+ }
54
+ },
55
+ layoutMeasurement: {
56
+ get height() {
57
+ return target.offsetHeight;
58
+ },
59
+ get width() {
60
+ return target.offsetWidth;
61
+ }
62
+ }
63
+ },
64
+ timeStamp: Date.now()
65
+ };
66
+ }
67
+ function shouldEmitScrollEvent(lastTick, eventThrottle) {
68
+ var timeSinceLastTick = Date.now() - lastTick;
69
+ return eventThrottle > 0 && timeSinceLastTick >= eventThrottle;
70
+ }
71
+ function resolveStyles() {
72
+ for (var _len = arguments.length, inputs = new Array(_len), _key = 0; _key < _len; _key++) {
73
+ inputs[_key] = arguments[_key];
74
+ }
75
+ return inputs.flat(Infinity).filter(Boolean);
76
+ }
77
+ function joinClassNames() {
78
+ for (var _len = arguments.length, parts = new Array(_len), _key = 0; _key < _len; _key++) {
79
+ parts[_key] = arguments[_key];
80
+ }
81
+ var joined = parts.filter(Boolean).join(" ").trim();
82
+ return joined || void 0;
83
+ }
84
+ var commonStyle = {
85
+ flexGrow: 1,
86
+ flexShrink: 1
87
+ };
88
+ var styles = {
89
+ baseVertical: {
90
+ ...commonStyle,
91
+ flexDirection: "column",
92
+ overflowX: "hidden",
93
+ overflowY: "auto"
94
+ },
95
+ baseHorizontal: {
96
+ ...commonStyle,
97
+ flexDirection: "row",
98
+ overflowX: "auto",
99
+ overflowY: "hidden"
100
+ },
101
+ contentContainerHorizontal: { flexDirection: "row" },
102
+ contentContainerCenterContent: {
103
+ justifyContent: "center",
104
+ flexGrow: 1
105
+ },
106
+ stickyHeader: {
107
+ position: "sticky",
108
+ top: 0,
109
+ zIndex: 10
110
+ },
111
+ pagingEnabledHorizontal: { scrollSnapType: "x mandatory" },
112
+ pagingEnabledVertical: { scrollSnapType: "y mandatory" },
113
+ pagingEnabledChild: { scrollSnapAlign: "start" },
114
+ scrollDisabled: {
115
+ overflowX: "hidden",
116
+ overflowY: "hidden",
117
+ touchAction: "none"
118
+ }
119
+ };
120
+ var WebScrollView = /* @__PURE__ */ React.forwardRef(function(props, forwardedRef) {
121
+ var { children, contentContainerStyle, horizontal, onContentSizeChange, onScroll, refreshControl, stickyHeaderIndices, pagingEnabled, centerContent, scrollEnabled = true, scrollEventThrottle = 0, showsHorizontalScrollIndicator, showsVerticalScrollIndicator, style, keyboardShouldPersistTaps, keyboardDismissMode, contentOffset, contentInset, contentInsetAdjustmentBehavior, decelerationRate, directionalLockEnabled, disableIntervalMomentum, disableScrollViewPanResponder, endFillColor, fadingEdgeLength, indicatorStyle, invertStickyHeaders, maintainVisibleContentPosition, maximumZoomScale, minimumZoomScale, nestedScrollEnabled, onScrollToTop, overScrollMode, pinchGestureEnabled, removeClippedSubviews, scrollIndicatorInsets, scrollPerfTag, scrollToOverflowEnabled, snapToAlignment, snapToEnd, snapToInterval, snapToOffsets, snapToStart, bounces, ...rest } = props;
122
+ var scrollNodeRef = React.useRef(null);
123
+ var innerViewRef = React.useRef(null);
124
+ var scrollState = React.useRef({
125
+ isScrolling: false,
126
+ scrollLastTick: 0
127
+ });
128
+ var scrollTimeout = React.useRef(null);
129
+ var scrollTo = function(options) {
130
+ var node = scrollNodeRef.current;
131
+ if (node == null) return;
132
+ var { x = 0, y = 0, animated = true } = options || {};
133
+ if (typeof node.scroll === "function") {
134
+ node.scroll({
135
+ top: y,
136
+ left: x,
137
+ behavior: animated ? "smooth" : "auto"
138
+ });
139
+ } else {
140
+ node.scrollLeft = x;
141
+ node.scrollTop = y;
142
+ }
143
+ };
144
+ var scrollToEnd = function(options) {
145
+ var node = scrollNodeRef.current;
146
+ if (node == null) return;
147
+ var animated = (options && options.animated) !== false;
148
+ var x = horizontal ? node.scrollWidth : 0;
149
+ var y = horizontal ? 0 : node.scrollHeight;
150
+ scrollTo({
151
+ x,
152
+ y,
153
+ animated
154
+ });
155
+ };
156
+ var setScrollNodeRef = React.useCallback(function(node) {
157
+ scrollNodeRef.current = node;
158
+ if (node != null) {
159
+ node.getScrollResponder = function() {
160
+ return node;
161
+ };
162
+ node.getScrollableNode = function() {
163
+ return node;
164
+ };
165
+ node.getInnerViewNode = function() {
166
+ return innerViewRef.current;
167
+ };
168
+ node.getInnerViewRef = function() {
169
+ return innerViewRef.current;
170
+ };
171
+ node.getNativeScrollRef = function() {
172
+ return node;
173
+ };
174
+ node.scrollTo = scrollTo;
175
+ node.scrollToEnd = scrollToEnd;
176
+ node.flashScrollIndicators = function() {};
177
+ }
178
+ mergeRefs(forwardedRef)(node);
179
+ }, [forwardedRef, horizontal]);
180
+ function handleScroll(e) {
181
+ e.stopPropagation();
182
+ if (e.target !== scrollNodeRef.current) return;
183
+ if (scrollTimeout.current != null) {
184
+ clearTimeout(scrollTimeout.current);
185
+ }
186
+ scrollTimeout.current = setTimeout(function() {
187
+ scrollState.current.isScrolling = false;
188
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll(normalizeScrollEvent(e));
189
+ }, 100);
190
+ if (scrollState.current.isScrolling) {
191
+ if (shouldEmitScrollEvent(scrollState.current.scrollLastTick, scrollEventThrottle)) {
192
+ scrollState.current.scrollLastTick = Date.now();
193
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll(normalizeScrollEvent(e));
194
+ }
195
+ } else {
196
+ scrollState.current.isScrolling = true;
197
+ scrollState.current.scrollLastTick = Date.now();
198
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll(normalizeScrollEvent(e));
199
+ }
200
+ }
201
+ var handleContentLayout = onContentSizeChange ? function(e) {
202
+ var { width, height } = e.nativeEvent.layout;
203
+ onContentSizeChange(width, height);
204
+ } : void 0;
205
+ var hasStickyHeaderIndices = !horizontal && Array.isArray(stickyHeaderIndices);
206
+ var renderedChildren = hasStickyHeaderIndices || pagingEnabled ? React.Children.map(children, function(child, i) {
207
+ var isSticky = hasStickyHeaderIndices && stickyHeaderIndices.indexOf(i) > -1;
208
+ if (child != null && (isSticky || pagingEnabled)) {
209
+ var resolvedStyle = resolveStyles(isSticky && styles.stickyHeader, pagingEnabled && styles.pagingEnabledChild);
210
+ return /* @__PURE__ */ jsx(View$1, {
211
+ style: resolvedStyle,
212
+ children: child
213
+ });
214
+ }
215
+ return child;
216
+ }) : children;
217
+ var contentStyle = resolveStyles(horizontal && styles.contentContainerHorizontal, centerContent && styles.contentContainerCenterContent, contentContainerStyle);
218
+ var contentContainer = /* @__PURE__ */ jsx(View$1, {
219
+ ref: innerViewRef,
220
+ onLayout: handleContentLayout,
221
+ style: contentStyle,
222
+ children: renderedChildren
223
+ });
224
+ var baseStyle = horizontal ? styles.baseHorizontal : styles.baseVertical;
225
+ var pagingEnabledStyle = horizontal ? styles.pagingEnabledHorizontal : styles.pagingEnabledVertical;
226
+ var hideHorizontalScrollbar = showsHorizontalScrollIndicator === false;
227
+ var hideVerticalScrollbar = showsVerticalScrollIndicator === false;
228
+ var extraClassName = (hideHorizontalScrollbar ? " _hsb-x" : "") + (hideVerticalScrollbar ? " _hsb-y" : "");
229
+ var scrollStyle = resolveStyles(baseStyle, pagingEnabled && pagingEnabledStyle, style, !scrollEnabled && styles.scrollDisabled);
230
+ var scrollView = /* @__PURE__ */ jsx(View$1, {
231
+ ...rest,
232
+ className: joinClassNames(rest.className, extraClassName),
233
+ ref: setScrollNodeRef,
234
+ onScroll: handleScroll,
235
+ style: scrollStyle,
236
+ children: contentContainer
237
+ });
238
+ if (refreshControl) {
239
+ var refreshStyle = resolveStyles(baseStyle, style);
240
+ return /* @__PURE__ */ React.cloneElement(refreshControl, { style: refreshStyle }, scrollView);
241
+ }
242
+ return scrollView;
243
+ });
244
+ WebScrollView.displayName = "ScrollView";
245
+
246
+ export { WebScrollView };
247
+ //# sourceMappingURL=WebScrollView.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebScrollView.native.js","names":["View","TamaguiView"],"sources":["esm/WebScrollView.native.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { View as TamaguiView } from \"@tamagui/web\";\nimport * as React from \"react\";\nvar View = TamaguiView;\nfunction mergeRefs() {\n for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n refs[_key] = arguments[_key];\n }\n return function(node) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = refs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var ref = _step.value;\n if (!ref) continue;\n if (typeof ref === \"function\") ref(node);\n else ref.current = node;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n };\n}\nfunction normalizeScrollEvent(e) {\n var target = e.target;\n return {\n nativeEvent: {\n contentOffset: {\n get x() {\n return target.scrollLeft;\n },\n get y() {\n return target.scrollTop;\n }\n },\n contentSize: {\n get height() {\n return target.scrollHeight;\n },\n get width() {\n return target.scrollWidth;\n }\n },\n layoutMeasurement: {\n get height() {\n return target.offsetHeight;\n },\n get width() {\n return target.offsetWidth;\n }\n }\n },\n timeStamp: Date.now()\n };\n}\nfunction shouldEmitScrollEvent(lastTick, eventThrottle) {\n var timeSinceLastTick = Date.now() - lastTick;\n return eventThrottle > 0 && timeSinceLastTick >= eventThrottle;\n}\nfunction resolveStyles() {\n for (var _len = arguments.length, inputs = new Array(_len), _key = 0; _key < _len; _key++) {\n inputs[_key] = arguments[_key];\n }\n return inputs.flat(Infinity).filter(Boolean);\n}\nfunction joinClassNames() {\n for (var _len = arguments.length, parts = new Array(_len), _key = 0; _key < _len; _key++) {\n parts[_key] = arguments[_key];\n }\n var joined = parts.filter(Boolean).join(\" \").trim();\n return joined || void 0;\n}\nvar commonStyle = {\n flexGrow: 1,\n flexShrink: 1\n};\nvar styles = {\n baseVertical: {\n ...commonStyle,\n flexDirection: \"column\",\n overflowX: \"hidden\",\n overflowY: \"auto\"\n },\n baseHorizontal: {\n ...commonStyle,\n flexDirection: \"row\",\n overflowX: \"auto\",\n overflowY: \"hidden\"\n },\n contentContainerHorizontal: {\n flexDirection: \"row\"\n },\n contentContainerCenterContent: {\n justifyContent: \"center\",\n flexGrow: 1\n },\n stickyHeader: {\n position: \"sticky\",\n top: 0,\n zIndex: 10\n },\n pagingEnabledHorizontal: {\n scrollSnapType: \"x mandatory\"\n },\n pagingEnabledVertical: {\n scrollSnapType: \"y mandatory\"\n },\n pagingEnabledChild: {\n scrollSnapAlign: \"start\"\n },\n scrollDisabled: {\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n touchAction: \"none\"\n }\n};\nvar WebScrollView = /* @__PURE__ */ React.forwardRef(function(props, forwardedRef) {\n var {\n children,\n contentContainerStyle,\n horizontal,\n onContentSizeChange,\n onScroll,\n refreshControl,\n stickyHeaderIndices,\n pagingEnabled,\n centerContent,\n scrollEnabled = true,\n scrollEventThrottle = 0,\n showsHorizontalScrollIndicator,\n showsVerticalScrollIndicator,\n style,\n // strip react-native-only props that shouldn't reach the DOM\n keyboardShouldPersistTaps,\n keyboardDismissMode,\n contentOffset,\n contentInset,\n contentInsetAdjustmentBehavior,\n decelerationRate,\n directionalLockEnabled,\n disableIntervalMomentum,\n disableScrollViewPanResponder,\n endFillColor,\n fadingEdgeLength,\n indicatorStyle,\n invertStickyHeaders,\n maintainVisibleContentPosition,\n maximumZoomScale,\n minimumZoomScale,\n nestedScrollEnabled,\n onScrollToTop,\n overScrollMode,\n pinchGestureEnabled,\n removeClippedSubviews,\n scrollIndicatorInsets,\n scrollPerfTag,\n scrollToOverflowEnabled,\n snapToAlignment,\n snapToEnd,\n snapToInterval,\n snapToOffsets,\n snapToStart,\n bounces,\n ...rest\n } = props;\n var scrollNodeRef = React.useRef(null);\n var innerViewRef = React.useRef(null);\n var scrollState = React.useRef({\n isScrolling: false,\n scrollLastTick: 0\n });\n var scrollTimeout = React.useRef(null);\n var scrollTo = function(options) {\n var node = scrollNodeRef.current;\n if (node == null) return;\n var { x = 0, y = 0, animated = true } = options || {};\n if (typeof node.scroll === \"function\") {\n node.scroll({\n top: y,\n left: x,\n behavior: animated ? \"smooth\" : \"auto\"\n });\n } else {\n node.scrollLeft = x;\n node.scrollTop = y;\n }\n };\n var scrollToEnd = function(options) {\n var node = scrollNodeRef.current;\n if (node == null) return;\n var animated = (options && options.animated) !== false;\n var x = horizontal ? node.scrollWidth : 0;\n var y = horizontal ? 0 : node.scrollHeight;\n scrollTo({\n x,\n y,\n animated\n });\n };\n var setScrollNodeRef = React.useCallback(function(node) {\n scrollNodeRef.current = node;\n if (node != null) {\n node.getScrollResponder = function() {\n return node;\n };\n node.getScrollableNode = function() {\n return node;\n };\n node.getInnerViewNode = function() {\n return innerViewRef.current;\n };\n node.getInnerViewRef = function() {\n return innerViewRef.current;\n };\n node.getNativeScrollRef = function() {\n return node;\n };\n node.scrollTo = scrollTo;\n node.scrollToEnd = scrollToEnd;\n node.flashScrollIndicators = function() {\n };\n }\n mergeRefs(forwardedRef)(node);\n }, [\n forwardedRef,\n horizontal\n ]);\n function handleScroll(e) {\n e.stopPropagation();\n if (e.target !== scrollNodeRef.current) return;\n if (scrollTimeout.current != null) {\n clearTimeout(scrollTimeout.current);\n }\n scrollTimeout.current = setTimeout(function() {\n scrollState.current.isScrolling = false;\n onScroll === null || onScroll === void 0 ? void 0 : onScroll(normalizeScrollEvent(e));\n }, 100);\n if (scrollState.current.isScrolling) {\n if (shouldEmitScrollEvent(scrollState.current.scrollLastTick, scrollEventThrottle)) {\n scrollState.current.scrollLastTick = Date.now();\n onScroll === null || onScroll === void 0 ? void 0 : onScroll(normalizeScrollEvent(e));\n }\n } else {\n scrollState.current.isScrolling = true;\n scrollState.current.scrollLastTick = Date.now();\n onScroll === null || onScroll === void 0 ? void 0 : onScroll(normalizeScrollEvent(e));\n }\n }\n var handleContentLayout = onContentSizeChange ? function(e) {\n var { width, height } = e.nativeEvent.layout;\n onContentSizeChange(width, height);\n } : void 0;\n var hasStickyHeaderIndices = !horizontal && Array.isArray(stickyHeaderIndices);\n var renderedChildren = hasStickyHeaderIndices || pagingEnabled ? React.Children.map(children, function(child, i) {\n var isSticky = hasStickyHeaderIndices && stickyHeaderIndices.indexOf(i) > -1;\n if (child != null && (isSticky || pagingEnabled)) {\n var resolvedStyle = resolveStyles(isSticky && styles.stickyHeader, pagingEnabled && styles.pagingEnabledChild);\n return /* @__PURE__ */ _jsx(View, {\n style: resolvedStyle,\n children: child\n });\n }\n return child;\n }) : children;\n var contentStyle = resolveStyles(horizontal && styles.contentContainerHorizontal, centerContent && styles.contentContainerCenterContent, contentContainerStyle);\n var contentContainer = /* @__PURE__ */ _jsx(View, {\n ref: innerViewRef,\n onLayout: handleContentLayout,\n style: contentStyle,\n children: renderedChildren\n });\n var baseStyle = horizontal ? styles.baseHorizontal : styles.baseVertical;\n var pagingEnabledStyle = horizontal ? styles.pagingEnabledHorizontal : styles.pagingEnabledVertical;\n var hideHorizontalScrollbar = showsHorizontalScrollIndicator === false;\n var hideVerticalScrollbar = showsVerticalScrollIndicator === false;\n var extraClassName = (hideHorizontalScrollbar ? \" _hsb-x\" : \"\") + (hideVerticalScrollbar ? \" _hsb-y\" : \"\");\n var scrollStyle = resolveStyles(baseStyle, pagingEnabled && pagingEnabledStyle, style, !scrollEnabled && styles.scrollDisabled);\n var scrollView = /* @__PURE__ */ _jsx(View, {\n ...rest,\n className: joinClassNames(rest.className, extraClassName),\n ref: setScrollNodeRef,\n onScroll: handleScroll,\n style: scrollStyle,\n children: contentContainer\n });\n if (refreshControl) {\n var refreshStyle = resolveStyles(baseStyle, style);\n return /* @__PURE__ */ React.cloneElement(refreshControl, {\n style: refreshStyle\n }, scrollView);\n }\n return scrollView;\n});\nWebScrollView.displayName = \"ScrollView\";\nexport {\n WebScrollView\n};\n//# sourceMappingURL=WebScrollView.js.map\n"],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -1,2 +1 @@
1
- export * from "./ScrollView.mjs";
2
- //# sourceMappingURL=index.js.map
1
+ export * from "./ScrollView.mjs"
@@ -1,2 +1 @@
1
- export * from "./ScrollView.mjs";
2
- //# sourceMappingURL=index.mjs.map
1
+ export * from "./ScrollView.mjs"
@@ -1,2 +1 @@
1
- export * from "./ScrollView.native.js";
2
- //# sourceMappingURL=index.native.js.map
1
+ export * from "./ScrollView.native.js"
@@ -0,0 +1,3 @@
1
+ import { ScrollView } from "./ScrollView.mjs";
2
+
3
+ export { ScrollView };