@wavemaker-ai/app-rn-runtime 12.0.2-rc.647771 → 12.1.0-rc.347
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/advanced/webview/webview.component.js +1 -1
- package/components/advanced/webview/webview.component.js.map +1 -1
- package/components/basic/bottomsheet/bottomsheet.component.js +1 -1
- package/components/basic/bottomsheet/bottomsheet.component.js.map +1 -1
- package/components/basic/label/label.component.js +2 -2
- package/components/basic/label/label.component.js.map +1 -1
- package/components/chart/bubble-chart/bubble-chart.component.js.map +1 -1
- package/components/container/tabs/tabheader/tabheader.component.js +10 -3
- package/components/container/tabs/tabheader/tabheader.component.js.map +1 -1
- package/components/data/form/form-field/form-field.component.js +5 -0
- package/components/data/form/form-field/form-field.component.js.map +1 -1
- package/components/data/form/form.component.js +12 -8
- package/components/data/form/form.component.js.map +1 -1
- package/components/data/list/list.component.js +5 -2
- package/components/data/list/list.component.js.map +1 -1
- package/components/dialogs/dialog/dialog.component.js +1 -1
- package/components/dialogs/dialog/dialog.component.js.map +1 -1
- package/components/input/chips/chips.component.js +1 -1
- package/components/input/chips/chips.component.js.map +1 -1
- package/components/input/chips/chips.props.js +1 -0
- package/components/input/chips/chips.props.js.map +1 -1
- package/components/input/textarea/textarea.component.js +1 -1
- package/components/input/textarea/textarea.component.js.map +1 -1
- package/components/page/page-content/page-content.component.js +152 -17
- package/components/page/page-content/page-content.component.js.map +1 -1
- package/components/page/page-content/page-content.props.js +5 -0
- package/components/page/page-content/page-content.props.js.map +1 -1
- package/components/page/page-content/pull-to-refresh.component.js +288 -0
- package/components/page/page-content/pull-to-refresh.component.js.map +1 -0
- package/core/AppConfig.js.map +1 -1
- package/core/base.component.js +14 -0
- package/core/base.component.js.map +1 -1
- package/core/sticky-wrapper.js +37 -34
- package/core/sticky-wrapper.js.map +1 -1
- package/gestures/carousel-swipe.animation.js +1 -0
- package/gestures/carousel-swipe.animation.js.map +1 -1
- package/npm-shrinkwrap.json +1285 -570
- package/package-lock.json +1285 -570
- package/package.json +3 -3
- package/runtime/App.js +52 -36
- package/runtime/App.js.map +1 -1
- package/runtime/App.navigator.js +4 -1
- package/runtime/App.navigator.js.map +1 -1
- package/runtime/base-fragment.component.js +1 -0
- package/runtime/base-fragment.component.js.map +1 -1
- package/runtime/services/app-security.service.js +40 -19
- package/runtime/services/app-security.service.js.map +1 -1
- package/runtime/services/browser.constants.js +3 -0
- package/runtime/services/browser.constants.js.map +1 -0
- package/runtime/services/browser.service.js +321 -0
- package/runtime/services/browser.service.js.map +1 -0
- package/runtime/services/external-auth-callback.service.js +44 -0
- package/runtime/services/external-auth-callback.service.js.map +1 -0
- package/runtime/services/webprocess.service.js +8 -3
- package/runtime/services/webprocess.service.js.map +1 -1
- package/styles/background.component.js +61 -2
- package/styles/background.component.js.map +1 -1
- package/styles/style-prop.validator.js +4 -0
- package/styles/style-prop.validator.js.map +1 -1
- package/styles/style-props.js +2 -0
- package/styles/style-props.js.map +1 -1
- package/styles/theme.js +52 -11
- package/styles/theme.js.map +1 -1
- package/components-prism/basic/search/search.component.js +0 -208
- package/components-prism/basic/search/search.component.js.map +0 -1
- package/components-prism/basic/search/search.props.js +0 -16
- package/components-prism/basic/search/search.props.js.map +0 -1
- package/components-prism/basic/search/search.styles.js +0 -127
- package/components-prism/basic/search/search.styles.js.map +0 -1
- package/core/outside-press-handler.js +0 -65
- package/core/outside-press-handler.js.map +0 -1
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
3
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
4
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
5
|
+
import axios from 'axios';
|
|
6
|
+
import { requireNativeViewManager, requireOptionalNativeModule } from 'expo-modules-core';
|
|
7
|
+
import * as React from 'react';
|
|
8
|
+
import { Platform, StyleSheet, View } from 'react-native';
|
|
9
|
+
import Animated, { runOnJS, useAnimatedScrollHandler, useAnimatedStyle, useSharedValue } from 'react-native-reanimated';
|
|
10
|
+
|
|
11
|
+
// Native side lives in the expo-pull-to-refresh plugin: Android ports the drag gesture, iOS attaches a hidden UIRefreshControl.
|
|
12
|
+
|
|
13
|
+
const spinnerAspectRatioCache = new Map();
|
|
14
|
+
export function getSpinnerAspectRatio(loadAsset, source) {
|
|
15
|
+
if (!loadAsset || !source) {
|
|
16
|
+
return Promise.resolve(undefined);
|
|
17
|
+
}
|
|
18
|
+
if (!spinnerAspectRatioCache.has(source)) {
|
|
19
|
+
const asset = loadAsset(source);
|
|
20
|
+
const animationData = typeof asset === 'string' ? axios.get(asset).then(({
|
|
21
|
+
data
|
|
22
|
+
}) => data) : Promise.resolve(asset);
|
|
23
|
+
spinnerAspectRatioCache.set(source, animationData.then(data => data !== null && data !== void 0 && data.w && data !== null && data !== void 0 && data.h ? data.w / data.h : undefined).catch(() => {
|
|
24
|
+
spinnerAspectRatioCache.delete(source);
|
|
25
|
+
return undefined;
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
return spinnerAspectRatioCache.get(source);
|
|
29
|
+
}
|
|
30
|
+
function getSpinnerBoxSize(spinnerAspectRatio) {
|
|
31
|
+
const ratio = spinnerAspectRatio || SPINNER_BOX_WIDTH / SPINNER_BOX_HEIGHT;
|
|
32
|
+
return {
|
|
33
|
+
width: SPINNER_BOX_HEIGHT * ratio,
|
|
34
|
+
height: SPINNER_BOX_HEIGHT
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const SPINNER_SIZE = 64;
|
|
38
|
+
const SPINNER_BOX_WIDTH = 140;
|
|
39
|
+
const SPINNER_BOX_HEIGHT = 70;
|
|
40
|
+
const SPINNER_RESTING_TOP = 16;
|
|
41
|
+
const isAndroidPluginAvailable = Platform.OS === 'android' && !!requireOptionalNativeModule('ExpoPullToRefresh');
|
|
42
|
+
const NativeExpoPullToRefreshView = isAndroidPluginAvailable ? requireNativeViewManager('ExpoPullToRefresh') : null;
|
|
43
|
+
const NativePullToRefreshControl = Platform.OS === 'ios' && requireOptionalNativeModule('ExpoPullToRefreshControl') ? requireNativeViewManager('ExpoPullToRefreshControl') : null;
|
|
44
|
+
export class WmPullToRefreshView extends React.Component {
|
|
45
|
+
constructor(...args) {
|
|
46
|
+
super(...args);
|
|
47
|
+
_defineProperty(this, "state", {
|
|
48
|
+
progress: 0
|
|
49
|
+
});
|
|
50
|
+
_defineProperty(this, "handlePullProgress", event => {
|
|
51
|
+
var _ref, _event$nativeEvent$pr, _event$nativeEvent;
|
|
52
|
+
const value = (_ref = (_event$nativeEvent$pr = event === null || event === void 0 || (_event$nativeEvent = event.nativeEvent) === null || _event$nativeEvent === void 0 ? void 0 : _event$nativeEvent.progress) !== null && _event$nativeEvent$pr !== void 0 ? _event$nativeEvent$pr : event === null || event === void 0 ? void 0 : event.progress) !== null && _ref !== void 0 ? _ref : 0;
|
|
53
|
+
this.setState({
|
|
54
|
+
progress: value
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
_defineProperty(this, "handleRefresh", () => {
|
|
58
|
+
var _this$props$onRefresh, _this$props;
|
|
59
|
+
this.setState({
|
|
60
|
+
progress: 1
|
|
61
|
+
});
|
|
62
|
+
(_this$props$onRefresh = (_this$props = this.props).onRefresh) === null || _this$props$onRefresh === void 0 || _this$props$onRefresh.call(_this$props);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
componentDidUpdate(prevProps) {
|
|
66
|
+
if (prevProps.refreshing && !this.props.refreshing) {
|
|
67
|
+
this.setState({
|
|
68
|
+
progress: 0
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
render() {
|
|
73
|
+
const {
|
|
74
|
+
spinner,
|
|
75
|
+
children,
|
|
76
|
+
onRefresh,
|
|
77
|
+
refreshing,
|
|
78
|
+
topOffset = 0,
|
|
79
|
+
spinnerAspectRatio,
|
|
80
|
+
style,
|
|
81
|
+
...rest
|
|
82
|
+
} = this.props;
|
|
83
|
+
if (!NativeExpoPullToRefreshView) {
|
|
84
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, children);
|
|
85
|
+
}
|
|
86
|
+
const raw = refreshing ? 1 : this.state.progress;
|
|
87
|
+
const clamped = Math.min(1, Math.max(0, raw));
|
|
88
|
+
return /*#__PURE__*/React.createElement(NativeExpoPullToRefreshView, _extends({}, rest, {
|
|
89
|
+
refreshing: refreshing,
|
|
90
|
+
style: [styles.native, style],
|
|
91
|
+
onPullProgress: this.handlePullProgress,
|
|
92
|
+
onRefresh: this.handleRefresh
|
|
93
|
+
}), /*#__PURE__*/React.createElement(View, {
|
|
94
|
+
style: styles.wrapper,
|
|
95
|
+
collapsable: false
|
|
96
|
+
}, children, /*#__PURE__*/React.createElement(View, {
|
|
97
|
+
style: [styles.spinnerOverlay, {
|
|
98
|
+
top: topOffset,
|
|
99
|
+
opacity: clamped,
|
|
100
|
+
transform: [{
|
|
101
|
+
translateY: -SPINNER_SIZE + clamped * (SPINNER_SIZE + SPINNER_RESTING_TOP)
|
|
102
|
+
}, {
|
|
103
|
+
scale: 0.4 + clamped * 0.6
|
|
104
|
+
}]
|
|
105
|
+
}],
|
|
106
|
+
pointerEvents: "none"
|
|
107
|
+
}, /*#__PURE__*/React.createElement(View, {
|
|
108
|
+
style: getSpinnerBoxSize(spinnerAspectRatio)
|
|
109
|
+
}, clamped > 0 ? spinner : null))));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const PULL_TO_REFRESH_THRESHOLD = SPINNER_SIZE;
|
|
113
|
+
const IOS_REFRESH_GAP = 60;
|
|
114
|
+
const IOS_SPINNER_FULL_SIZE_GAP = IOS_REFRESH_GAP - 5;
|
|
115
|
+
const PullToRefreshSpinnerLayer = ({
|
|
116
|
+
spinner,
|
|
117
|
+
pullDistance,
|
|
118
|
+
pulled,
|
|
119
|
+
refreshing,
|
|
120
|
+
mounted,
|
|
121
|
+
topOffset,
|
|
122
|
+
spinnerAspectRatio,
|
|
123
|
+
threshold = PULL_TO_REFRESH_THRESHOLD
|
|
124
|
+
}) => {
|
|
125
|
+
const animatedStyle = useAnimatedStyle(() => {
|
|
126
|
+
const gapScale = Math.min(1, Math.max(0, pullDistance.value / IOS_SPINNER_FULL_SIZE_GAP));
|
|
127
|
+
if (refreshing) {
|
|
128
|
+
return {
|
|
129
|
+
opacity: 1,
|
|
130
|
+
transform: [{
|
|
131
|
+
scale: gapScale
|
|
132
|
+
}]
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
const progress = pulled.value ? Math.min(1, Math.max(0, pullDistance.value / threshold)) : 0;
|
|
136
|
+
return {
|
|
137
|
+
opacity: progress,
|
|
138
|
+
transform: [{
|
|
139
|
+
scale: gapScale
|
|
140
|
+
}]
|
|
141
|
+
};
|
|
142
|
+
}, [refreshing, threshold]);
|
|
143
|
+
return /*#__PURE__*/React.createElement(Animated.View, {
|
|
144
|
+
pointerEvents: "none",
|
|
145
|
+
style: [styles.iosSpinnerLayer, {
|
|
146
|
+
top: topOffset + (IOS_REFRESH_GAP - SPINNER_BOX_HEIGHT) / 2
|
|
147
|
+
}, animatedStyle]
|
|
148
|
+
}, /*#__PURE__*/React.createElement(View, {
|
|
149
|
+
style: getSpinnerBoxSize(spinnerAspectRatio)
|
|
150
|
+
}, mounted ? spinner : null));
|
|
151
|
+
};
|
|
152
|
+
export const WmPullToRefreshScrollView = /*#__PURE__*/React.forwardRef(({
|
|
153
|
+
scrollViewProps,
|
|
154
|
+
spinner,
|
|
155
|
+
refreshing,
|
|
156
|
+
onRefresh,
|
|
157
|
+
stickyOnScrollWorklet,
|
|
158
|
+
topOffset = 0,
|
|
159
|
+
spinnerAspectRatio,
|
|
160
|
+
children
|
|
161
|
+
}, ref) => {
|
|
162
|
+
const pullDistance = useSharedValue(0);
|
|
163
|
+
const isDragging = useSharedValue(false);
|
|
164
|
+
const [spinnerMounted, setSpinnerMounted] = React.useState(false);
|
|
165
|
+
const mountRequested = useSharedValue(false);
|
|
166
|
+
const unmountSpinner = React.useCallback(() => {
|
|
167
|
+
mountRequested.value = false;
|
|
168
|
+
setSpinnerMounted(false);
|
|
169
|
+
}, [mountRequested]);
|
|
170
|
+
const nativeRefreshing = React.useRef(false);
|
|
171
|
+
const [closing, setClosing] = React.useState(false);
|
|
172
|
+
const handleNativeRefresh = React.useCallback(() => {
|
|
173
|
+
nativeRefreshing.current = true;
|
|
174
|
+
mountRequested.value = true;
|
|
175
|
+
setSpinnerMounted(true);
|
|
176
|
+
onRefresh === null || onRefresh === void 0 || onRefresh();
|
|
177
|
+
}, [onRefresh, mountRequested]);
|
|
178
|
+
React.useEffect(() => {
|
|
179
|
+
if (refreshing || !nativeRefreshing.current) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
nativeRefreshing.current = false;
|
|
183
|
+
setClosing(true);
|
|
184
|
+
const timer = setTimeout(() => {
|
|
185
|
+
setClosing(false);
|
|
186
|
+
if (!isDragging.value) {
|
|
187
|
+
unmountSpinner();
|
|
188
|
+
}
|
|
189
|
+
}, 350);
|
|
190
|
+
return () => clearTimeout(timer);
|
|
191
|
+
}, [refreshing, isDragging, unmountSpinner]);
|
|
192
|
+
const scrollHandler = useAnimatedScrollHandler({
|
|
193
|
+
onScroll: event => {
|
|
194
|
+
const offsetY = event.contentOffset.y;
|
|
195
|
+
pullDistance.value = Math.max(0, -offsetY);
|
|
196
|
+
if (offsetY < 0 && isDragging.value && !mountRequested.value) {
|
|
197
|
+
mountRequested.value = true;
|
|
198
|
+
runOnJS(setSpinnerMounted)(true);
|
|
199
|
+
} else if (offsetY >= 0 && !isDragging.value && mountRequested.value) {
|
|
200
|
+
mountRequested.value = false;
|
|
201
|
+
runOnJS(setSpinnerMounted)(false);
|
|
202
|
+
}
|
|
203
|
+
if (stickyOnScrollWorklet && offsetY >= 0) {
|
|
204
|
+
stickyOnScrollWorklet(event);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
const handleScrollBeginDrag = React.useCallback(event => {
|
|
209
|
+
var _scrollViewProps$onSc;
|
|
210
|
+
isDragging.value = true;
|
|
211
|
+
scrollViewProps === null || scrollViewProps === void 0 || (_scrollViewProps$onSc = scrollViewProps.onScrollBeginDrag) === null || _scrollViewProps$onSc === void 0 || _scrollViewProps$onSc.call(scrollViewProps, event);
|
|
212
|
+
}, [scrollViewProps, isDragging]);
|
|
213
|
+
const handleScrollEndDrag = React.useCallback(event => {
|
|
214
|
+
var _event$nativeEvent$co, _event$nativeEvent2, _scrollViewProps$onSc2;
|
|
215
|
+
isDragging.value = false;
|
|
216
|
+
const offsetY = (_event$nativeEvent$co = event === null || event === void 0 || (_event$nativeEvent2 = event.nativeEvent) === null || _event$nativeEvent2 === void 0 || (_event$nativeEvent2 = _event$nativeEvent2.contentOffset) === null || _event$nativeEvent2 === void 0 ? void 0 : _event$nativeEvent2.y) !== null && _event$nativeEvent$co !== void 0 ? _event$nativeEvent$co : 0;
|
|
217
|
+
if (!NativePullToRefreshControl && !refreshing && -offsetY >= PULL_TO_REFRESH_THRESHOLD) {
|
|
218
|
+
handleNativeRefresh();
|
|
219
|
+
}
|
|
220
|
+
if (!refreshing && !nativeRefreshing.current && pullDistance.value <= 0) {
|
|
221
|
+
unmountSpinner();
|
|
222
|
+
}
|
|
223
|
+
scrollViewProps === null || scrollViewProps === void 0 || (_scrollViewProps$onSc2 = scrollViewProps.onScrollEndDrag) === null || _scrollViewProps$onSc2 === void 0 || _scrollViewProps$onSc2.call(scrollViewProps, event);
|
|
224
|
+
}, [refreshing, scrollViewProps, isDragging, pullDistance, unmountSpinner, handleNativeRefresh]);
|
|
225
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
226
|
+
style: styles.iosHost,
|
|
227
|
+
collapsable: false
|
|
228
|
+
}, /*#__PURE__*/React.createElement(PullToRefreshSpinnerLayer, {
|
|
229
|
+
pullDistance: pullDistance,
|
|
230
|
+
pulled: mountRequested,
|
|
231
|
+
refreshing: refreshing || closing,
|
|
232
|
+
mounted: spinnerMounted,
|
|
233
|
+
topOffset: topOffset,
|
|
234
|
+
spinner: spinner,
|
|
235
|
+
spinnerAspectRatio: spinnerAspectRatio
|
|
236
|
+
}), /*#__PURE__*/React.createElement(Animated.ScrollView, _extends({
|
|
237
|
+
ref: ref
|
|
238
|
+
}, scrollViewProps, {
|
|
239
|
+
onScroll: scrollHandler,
|
|
240
|
+
scrollEventThrottle: 16,
|
|
241
|
+
onScrollBeginDrag: handleScrollBeginDrag,
|
|
242
|
+
onScrollEndDrag: handleScrollEndDrag,
|
|
243
|
+
contentInset: !NativePullToRefreshControl && refreshing ? {
|
|
244
|
+
top: PULL_TO_REFRESH_THRESHOLD
|
|
245
|
+
} : undefined
|
|
246
|
+
}), children), NativePullToRefreshControl ? /*#__PURE__*/React.createElement(NativePullToRefreshControl, {
|
|
247
|
+
style: styles.iosRefreshControl,
|
|
248
|
+
refreshing: refreshing,
|
|
249
|
+
onRefresh: handleNativeRefresh
|
|
250
|
+
}) : null);
|
|
251
|
+
});
|
|
252
|
+
WmPullToRefreshScrollView.displayName = 'WmPullToRefreshScrollView';
|
|
253
|
+
const styles = StyleSheet.create({
|
|
254
|
+
native: {
|
|
255
|
+
flex: 1
|
|
256
|
+
},
|
|
257
|
+
wrapper: {
|
|
258
|
+
flex: 1
|
|
259
|
+
},
|
|
260
|
+
spinnerOverlay: {
|
|
261
|
+
position: 'absolute',
|
|
262
|
+
left: 0,
|
|
263
|
+
right: 0,
|
|
264
|
+
alignItems: 'center',
|
|
265
|
+
justifyContent: 'center',
|
|
266
|
+
zIndex: 10,
|
|
267
|
+
elevation: 10
|
|
268
|
+
},
|
|
269
|
+
iosHost: {
|
|
270
|
+
flex: 1,
|
|
271
|
+
width: '100%'
|
|
272
|
+
},
|
|
273
|
+
iosRefreshControl: {
|
|
274
|
+
position: 'absolute',
|
|
275
|
+
width: 0,
|
|
276
|
+
height: 0
|
|
277
|
+
},
|
|
278
|
+
iosSpinnerLayer: {
|
|
279
|
+
position: 'absolute',
|
|
280
|
+
transformOrigin: 'top',
|
|
281
|
+
left: 0,
|
|
282
|
+
right: 0,
|
|
283
|
+
height: SPINNER_BOX_HEIGHT,
|
|
284
|
+
alignItems: 'center',
|
|
285
|
+
justifyContent: 'center'
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
//# sourceMappingURL=pull-to-refresh.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["axios","requireNativeViewManager","requireOptionalNativeModule","React","Platform","StyleSheet","View","Animated","runOnJS","useAnimatedScrollHandler","useAnimatedStyle","useSharedValue","spinnerAspectRatioCache","Map","getSpinnerAspectRatio","loadAsset","source","Promise","resolve","undefined","has","asset","animationData","get","then","data","set","w","h","catch","delete","getSpinnerBoxSize","spinnerAspectRatio","ratio","SPINNER_BOX_WIDTH","SPINNER_BOX_HEIGHT","width","height","SPINNER_SIZE","SPINNER_RESTING_TOP","isAndroidPluginAvailable","OS","NativeExpoPullToRefreshView","NativePullToRefreshControl","WmPullToRefreshView","Component","constructor","args","_defineProperty","progress","event","_ref","_event$nativeEvent$pr","_event$nativeEvent","value","nativeEvent","setState","_this$props$onRefresh","_this$props","props","onRefresh","call","componentDidUpdate","prevProps","refreshing","render","spinner","children","topOffset","style","rest","createElement","Fragment","raw","state","clamped","Math","min","max","_extends","styles","native","onPullProgress","handlePullProgress","handleRefresh","wrapper","collapsable","spinnerOverlay","top","opacity","transform","translateY","scale","pointerEvents","PULL_TO_REFRESH_THRESHOLD","IOS_REFRESH_GAP","IOS_SPINNER_FULL_SIZE_GAP","PullToRefreshSpinnerLayer","pullDistance","pulled","mounted","threshold","animatedStyle","gapScale","iosSpinnerLayer","WmPullToRefreshScrollView","forwardRef","scrollViewProps","stickyOnScrollWorklet","ref","isDragging","spinnerMounted","setSpinnerMounted","useState","mountRequested","unmountSpinner","useCallback","nativeRefreshing","useRef","closing","setClosing","handleNativeRefresh","current","useEffect","timer","setTimeout","clearTimeout","scrollHandler","onScroll","offsetY","contentOffset","y","handleScrollBeginDrag","_scrollViewProps$onSc","onScrollBeginDrag","handleScrollEndDrag","_event$nativeEvent$co","_event$nativeEvent2","_scrollViewProps$onSc2","onScrollEndDrag","iosHost","ScrollView","scrollEventThrottle","contentInset","iosRefreshControl","displayName","create","flex","position","left","right","alignItems","justifyContent","zIndex","elevation","transformOrigin"],"sources":["pull-to-refresh.component.tsx"],"sourcesContent":["import axios from 'axios';\nimport { requireNativeViewManager, requireOptionalNativeModule } from 'expo-modules-core';\nimport * as React from 'react';\nimport { Platform, StyleSheet, View, ViewProps } from 'react-native';\nimport Animated, { runOnJS, SharedValue, useAnimatedScrollHandler, useAnimatedStyle, useSharedValue } from 'react-native-reanimated';\n\n// Native side lives in the expo-pull-to-refresh plugin: Android ports the drag gesture, iOS attaches a hidden UIRefreshControl.\n\nexport interface WmPullToRefreshViewProps extends ViewProps {\n spinner: React.ReactElement;\n refreshing: boolean;\n onRefresh?: () => void;\n topOffset?: number;\n spinnerAspectRatio?: number;\n children?: React.ReactNode;\n}\n\nconst spinnerAspectRatioCache = new Map<string, Promise<number | undefined>>();\n\nexport function getSpinnerAspectRatio(\n loadAsset: ((path: string) => number | string) | undefined,\n source: string | undefined\n): Promise<number | undefined> {\n if (!loadAsset || !source) {\n return Promise.resolve(undefined);\n }\n if (!spinnerAspectRatioCache.has(source)) {\n const asset: any = loadAsset(source);\n const animationData = typeof asset === 'string' ? axios.get(asset).then(({ data }) => data) : Promise.resolve(asset);\n spinnerAspectRatioCache.set(source, animationData\n .then((data) => (data?.w && data?.h) ? data.w / data.h : undefined)\n .catch(() => {\n spinnerAspectRatioCache.delete(source);\n return undefined;\n }));\n }\n return spinnerAspectRatioCache.get(source)!;\n}\n\nfunction getSpinnerBoxSize(spinnerAspectRatio?: number) {\n const ratio = spinnerAspectRatio || SPINNER_BOX_WIDTH / SPINNER_BOX_HEIGHT;\n return { width: SPINNER_BOX_HEIGHT * ratio, height: SPINNER_BOX_HEIGHT };\n}\n\ninterface WmPullToRefreshState {\n progress: number;\n}\n\nconst SPINNER_SIZE = 64;\nconst SPINNER_BOX_WIDTH = 140;\nconst SPINNER_BOX_HEIGHT = 70;\nconst SPINNER_RESTING_TOP = 16;\n\nconst isAndroidPluginAvailable =\n Platform.OS === 'android' && !!requireOptionalNativeModule('ExpoPullToRefresh');\n\nconst NativeExpoPullToRefreshView: any =\n isAndroidPluginAvailable ? requireNativeViewManager('ExpoPullToRefresh') : null;\n\nconst NativePullToRefreshControl: any =\n Platform.OS === 'ios' && requireOptionalNativeModule('ExpoPullToRefreshControl')\n ? requireNativeViewManager('ExpoPullToRefreshControl')\n : null;\n\nexport class WmPullToRefreshView extends React.Component<\n WmPullToRefreshViewProps,\n WmPullToRefreshState\n> {\n state: WmPullToRefreshState = { progress: 0 };\n\n componentDidUpdate(prevProps: WmPullToRefreshViewProps) {\n if (prevProps.refreshing && !this.props.refreshing) {\n this.setState({ progress: 0 });\n }\n }\n\n private handlePullProgress = (event: any) => {\n const value = event?.nativeEvent?.progress ?? event?.progress ?? 0;\n this.setState({ progress: value });\n };\n\n private handleRefresh = () => {\n this.setState({ progress: 1 });\n this.props.onRefresh?.();\n };\n\n render() {\n const {\n spinner,\n children,\n onRefresh,\n refreshing,\n topOffset = 0,\n spinnerAspectRatio,\n style,\n ...rest\n } = this.props;\n\n if (!NativeExpoPullToRefreshView) {\n return <>{children}</>;\n }\n\n const raw = refreshing ? 1 : this.state.progress;\n const clamped = Math.min(1, Math.max(0, raw));\n\n return (\n <NativeExpoPullToRefreshView\n {...rest}\n refreshing={refreshing}\n style={[styles.native, style]}\n onPullProgress={this.handlePullProgress}\n onRefresh={this.handleRefresh}\n >\n <View style={styles.wrapper} collapsable={false}>\n {children}\n <View\n style={[\n styles.spinnerOverlay,\n {\n top: topOffset,\n opacity: clamped,\n transform: [\n { translateY: -SPINNER_SIZE + clamped * (SPINNER_SIZE + SPINNER_RESTING_TOP) },\n { scale: 0.4 + clamped * 0.6 },\n ],\n },\n ]}\n pointerEvents=\"none\"\n >\n <View style={getSpinnerBoxSize(spinnerAspectRatio)}>{clamped > 0 ? spinner : null}</View>\n </View>\n </View>\n </NativeExpoPullToRefreshView>\n );\n }\n}\n\nconst PULL_TO_REFRESH_THRESHOLD = SPINNER_SIZE;\n\nconst IOS_REFRESH_GAP = 60;\n\nconst IOS_SPINNER_FULL_SIZE_GAP = IOS_REFRESH_GAP - 5;\n\nconst PullToRefreshSpinnerLayer: React.FC<{\n spinner: React.ReactElement;\n pullDistance: SharedValue<number>;\n pulled: SharedValue<boolean>;\n refreshing: boolean;\n mounted: boolean;\n topOffset: number;\n spinnerAspectRatio?: number;\n threshold?: number;\n}> = ({ spinner, pullDistance, pulled, refreshing, mounted, topOffset, spinnerAspectRatio, threshold = PULL_TO_REFRESH_THRESHOLD }) => {\n const animatedStyle = useAnimatedStyle(() => {\n const gapScale = Math.min(1, Math.max(0, pullDistance.value / IOS_SPINNER_FULL_SIZE_GAP));\n if (refreshing) {\n return { opacity: 1, transform: [{ scale: gapScale }] };\n }\n const progress = pulled.value ? Math.min(1, Math.max(0, pullDistance.value / threshold)) : 0;\n return {\n opacity: progress,\n transform: [{ scale: gapScale }],\n };\n }, [refreshing, threshold]);\n\n return (\n <Animated.View\n pointerEvents=\"none\"\n style={[\n styles.iosSpinnerLayer,\n { top: topOffset + (IOS_REFRESH_GAP - SPINNER_BOX_HEIGHT) / 2 },\n animatedStyle,\n ]}\n >\n <View style={getSpinnerBoxSize(spinnerAspectRatio)}>{mounted ? spinner : null}</View>\n </Animated.View>\n );\n};\n\nexport interface WmPullToRefreshScrollViewProps {\n scrollViewProps: any;\n spinner: React.ReactElement;\n refreshing: boolean;\n onRefresh?: () => void;\n stickyOnScrollWorklet?: (event: any) => void;\n topOffset?: number;\n spinnerAspectRatio?: number;\n children?: React.ReactNode;\n}\n\nexport const WmPullToRefreshScrollView = React.forwardRef<any, WmPullToRefreshScrollViewProps>(\n ({ scrollViewProps, spinner, refreshing, onRefresh, stickyOnScrollWorklet, topOffset = 0, spinnerAspectRatio, children }, ref) => {\n const pullDistance = useSharedValue(0);\n const isDragging = useSharedValue(false);\n\n const [spinnerMounted, setSpinnerMounted] = React.useState(false);\n const mountRequested = useSharedValue(false);\n\n const unmountSpinner = React.useCallback(() => {\n mountRequested.value = false;\n setSpinnerMounted(false);\n }, [mountRequested]);\n\n const nativeRefreshing = React.useRef(false);\n const [closing, setClosing] = React.useState(false);\n\n const handleNativeRefresh = React.useCallback(() => {\n nativeRefreshing.current = true;\n mountRequested.value = true;\n setSpinnerMounted(true);\n onRefresh?.();\n }, [onRefresh, mountRequested]);\n\n React.useEffect(() => {\n if (refreshing || !nativeRefreshing.current) {\n return;\n }\n nativeRefreshing.current = false;\n setClosing(true);\n const timer = setTimeout(() => {\n setClosing(false);\n if (!isDragging.value) {\n unmountSpinner();\n }\n }, 350);\n return () => clearTimeout(timer);\n }, [refreshing, isDragging, unmountSpinner]);\n\n const scrollHandler = useAnimatedScrollHandler({\n onScroll: (event: any) => {\n const offsetY = event.contentOffset.y;\n pullDistance.value = Math.max(0, -offsetY);\n if (offsetY < 0 && isDragging.value && !mountRequested.value) {\n mountRequested.value = true;\n runOnJS(setSpinnerMounted)(true);\n } else if (offsetY >= 0 && !isDragging.value && mountRequested.value) {\n mountRequested.value = false;\n runOnJS(setSpinnerMounted)(false);\n }\n if (stickyOnScrollWorklet && offsetY >= 0) {\n stickyOnScrollWorklet(event);\n }\n },\n });\n\n const handleScrollBeginDrag = React.useCallback(\n (event: any) => {\n isDragging.value = true;\n scrollViewProps?.onScrollBeginDrag?.(event);\n },\n [scrollViewProps, isDragging]\n );\n\n const handleScrollEndDrag = React.useCallback(\n (event: any) => {\n isDragging.value = false;\n const offsetY = event?.nativeEvent?.contentOffset?.y ?? 0;\n if (!NativePullToRefreshControl && !refreshing && -offsetY >= PULL_TO_REFRESH_THRESHOLD) {\n handleNativeRefresh();\n }\n if (!refreshing && !nativeRefreshing.current && pullDistance.value <= 0) {\n unmountSpinner();\n }\n scrollViewProps?.onScrollEndDrag?.(event);\n },\n [refreshing, scrollViewProps, isDragging, pullDistance, unmountSpinner, handleNativeRefresh]\n );\n\n return (\n <View style={styles.iosHost} collapsable={false}>\n <PullToRefreshSpinnerLayer\n pullDistance={pullDistance}\n pulled={mountRequested}\n refreshing={refreshing || closing}\n mounted={spinnerMounted}\n topOffset={topOffset}\n spinner={spinner}\n spinnerAspectRatio={spinnerAspectRatio}\n />\n <Animated.ScrollView\n ref={ref}\n {...scrollViewProps}\n onScroll={scrollHandler}\n scrollEventThrottle={16}\n onScrollBeginDrag={handleScrollBeginDrag}\n onScrollEndDrag={handleScrollEndDrag}\n contentInset={!NativePullToRefreshControl && refreshing ? { top: PULL_TO_REFRESH_THRESHOLD } : undefined}\n >\n {children}\n </Animated.ScrollView>\n {NativePullToRefreshControl ? (\n <NativePullToRefreshControl\n style={styles.iosRefreshControl}\n refreshing={refreshing}\n onRefresh={handleNativeRefresh}\n />\n ) : null}\n </View>\n );\n }\n);\nWmPullToRefreshScrollView.displayName = 'WmPullToRefreshScrollView';\n\nconst styles = StyleSheet.create({\n native: {\n flex: 1,\n },\n wrapper: {\n flex: 1,\n },\n spinnerOverlay: {\n position: 'absolute',\n left: 0,\n right: 0,\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10,\n elevation: 10,\n },\n iosHost: {\n flex: 1,\n width: '100%',\n },\n iosRefreshControl: {\n position: 'absolute',\n width: 0,\n height: 0,\n },\n iosSpinnerLayer: {\n position: 'absolute',\n transformOrigin: 'top',\n left: 0,\n right: 0,\n height: SPINNER_BOX_HEIGHT,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
package/core/AppConfig.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["AppConfig.ts"],"sourcesContent":["export interface Drawer {\n setContent: (c: React.ReactNode) => void;\n getContent: () => React.ReactNode;\n setAnimation: (animation: string) => void;\n getAnimation: () => string;\n}\n\nexport default interface AppConfig {\n appId: string;\n assets: any;\n appProperties: any;\n appLocale: any;\n url: string;\n leftNavWidth: any;\n loadApp: boolean;\n refresh: (complete?: boolean) => void,\n currentPage?: any;\n pages?: any[];\n landingPage: string;\n partials?: any[];\n drawer: Drawer;\n app: any;\n spinner: any;\n setDrawerContent: any;\n theme: any;\n drawerType: any;\n /**\n * Application preferences that can include:\n * - enableGlobalErrorHandler (boolean): Master switch for all error handling. Default: false (disabled)\n * - enableRenderErrors (boolean): Enable React ErrorBoundary for component errors. Default: true\n * - enableJsSyncErrors (boolean): Enable synchronous JavaScript error handling. Default: true\n * - enableJsAsyncErrors (boolean): Enable asynchronous/promise rejection error handling. Default: true\n * - showDefaultErrorFallback (boolean): Show default error fallback UI when errors occur. Default: true\n * - Other app-specific preferences...\n */\n preferences:any;\n getServiceDefinitions: any;\n loggedInUser: any;\n selectedLocale: string;\n revertLayoutToExpo50: boolean,\n diagnostics: {\n appStartTime: number,\n appReadyTime: number,\n pageStartTime: number,\n pageReadyTime: number\n }, \n edgeToEdgeConfig:any;\n prefabs?: {\n partials?: any[]\n },\n screenCaptureProtection: {\n enabled: boolean\n },\n disableNavigationAnimation:boolean,\n pageTransitionAnimation?: string,\n detachInactiveScreens:boolean,\n isLegacyTappable: boolean,\n enablePageCache:boolean,\n}"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["AppConfig.ts"],"sourcesContent":["export interface Drawer {\n setContent: (c: React.ReactNode) => void;\n getContent: () => React.ReactNode;\n setAnimation: (animation: string) => void;\n getAnimation: () => string;\n}\n\nexport default interface AppConfig {\n appId: string;\n assets: any;\n appProperties: any;\n appLocale: any;\n url: string;\n leftNavWidth: any;\n loadApp: boolean;\n refresh: (complete?: boolean) => void,\n currentPage?: any;\n pages?: any[];\n landingPage: string;\n partials?: any[];\n drawer: Drawer;\n app: any;\n spinner: any;\n setDrawerContent: any;\n theme: any;\n drawerType: any;\n /**\n * Application preferences that can include:\n * - enableGlobalErrorHandler (boolean): Master switch for all error handling. Default: false (disabled)\n * - enableRenderErrors (boolean): Enable React ErrorBoundary for component errors. Default: true\n * - enableJsSyncErrors (boolean): Enable synchronous JavaScript error handling. Default: true\n * - enableJsAsyncErrors (boolean): Enable asynchronous/promise rejection error handling. Default: true\n * - showDefaultErrorFallback (boolean): Show default error fallback UI when errors occur. Default: true\n * - Other app-specific preferences...\n */\n preferences:any;\n getServiceDefinitions: any;\n loggedInUser: any;\n selectedLocale: string;\n revertLayoutToExpo50: boolean,\n diagnostics: {\n appStartTime: number,\n appReadyTime: number,\n pageStartTime: number,\n pageReadyTime: number\n }, \n edgeToEdgeConfig:any;\n pulltorefreshsource: string;\n pulltorefreshclass?: string;\n /**\n * How native SSO login and http(s) links open. Defaults: incognito in-app WebView\n * for SSO, Custom Tabs for anchors. `auth_session` only works once the WM server\n * completion step redirects to `{appId}://services/webprocess/{process}?process_output=...`.\n */\n browserConfig?: {\n defaultLinkMode?: 'custom_tabs' | 'external' | 'in_app_webview';\n authMode?: 'in_app_webview_private' | 'in_app_webview_persistent' | 'auth_session';\n shareAuthSessionWithLinks?: boolean;\n /** Keys are friendly names for the widget's Target property: newWindow (_blank), sameWindow (_self), topWindow (_top), parentWindow (_parent). */\n targetMapping?: Partial<Record<'newWindow' | 'sameWindow' | 'topWindow' | 'parentWindow', 'custom_tabs' | 'external' | 'in_app_webview'>>;\n /** How long the external-browser auth_session flow waits for its callback before giving up. Defaults to 120000 (2 minutes). */\n authTimeoutMs?: number;\n };\n prefabs?: {\n partials?: any[]\n },\n screenCaptureProtection: {\n enabled: boolean\n },\n disableNavigationAnimation:boolean,\n pageTransitionAnimation?: string,\n detachInactiveScreens:boolean,\n isLegacyTappable: boolean,\n enablePageCache:boolean,\n}"],"mappings":"","ignoreList":[]}
|
package/core/base.component.js
CHANGED
|
@@ -503,13 +503,27 @@ export class BaseComponent extends React.Component {
|
|
|
503
503
|
}, this.state.animatableProps), n);
|
|
504
504
|
}
|
|
505
505
|
setBackground() {
|
|
506
|
+
var _this$styles$root;
|
|
506
507
|
const bgStyle = this.styles.root;
|
|
508
|
+
const blurValue = (_this$styles$root = this.styles.root) === null || _this$styles$root === void 0 ? void 0 : _this$styles$root.backdropFilter;
|
|
509
|
+
delete this.styles.root['backdropFilter'];
|
|
510
|
+
// Parse backdrop-filter CSS value to extract blur intensity
|
|
511
|
+
let blur = 0;
|
|
512
|
+
if (blurValue && typeof blurValue === 'string') {
|
|
513
|
+
const blurMatch = blurValue.match(/blur\((\d+)px\)/);
|
|
514
|
+
if (blurMatch && blurMatch[1]) {
|
|
515
|
+
const parsedValue = parseInt(blurMatch[1], 10);
|
|
516
|
+
// Clamp blur between 0 and 100
|
|
517
|
+
blur = Math.min(100, Math.max(0, parsedValue));
|
|
518
|
+
}
|
|
519
|
+
}
|
|
507
520
|
this._background = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(BackgroundComponent, {
|
|
508
521
|
image: bgStyle.backgroundImage,
|
|
509
522
|
position: bgStyle.backgroundPosition,
|
|
510
523
|
size: bgStyle.backgroundSize,
|
|
511
524
|
repeat: bgStyle.backgroundRepeat,
|
|
512
525
|
resizeMode: bgStyle.backgroundResizeMode,
|
|
526
|
+
blur: blur,
|
|
513
527
|
style: {
|
|
514
528
|
borderRadius: this.styles.root.borderRadius
|
|
515
529
|
}
|