@react-native-ohos/react-native-pager-view 6.7.2-rc.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.
- package/LICENSE +21 -0
- package/README.OpenSource +11 -0
- package/README.md +15 -0
- package/harmony/pager_view/LICENSE +21 -0
- package/harmony/pager_view/NOTICE +33 -0
- package/harmony/pager_view/OAT.xml +38 -0
- package/harmony/pager_view/README.OpenSource +11 -0
- package/harmony/pager_view/README.md +236 -0
- package/harmony/pager_view/build-profile.json5 +9 -0
- package/harmony/pager_view/consumer-rules.txt +0 -0
- package/harmony/pager_view/hvigorfile.ts +6 -0
- package/harmony/pager_view/index.ets +25 -0
- package/harmony/pager_view/obfuscation-rules.txt +18 -0
- package/harmony/pager_view/oh-package.json5 +21 -0
- package/harmony/pager_view/src/main/cpp/CMakeLists.txt +9 -0
- package/harmony/pager_view/src/main/cpp/RNCViewPagerTurbomodule.cpp +42 -0
- package/harmony/pager_view/src/main/cpp/RNCViewPagerTurbomodule.h +37 -0
- package/harmony/pager_view/src/main/cpp/SwiperNode.cpp +375 -0
- package/harmony/pager_view/src/main/cpp/SwiperNode.h +123 -0
- package/harmony/pager_view/src/main/cpp/ViewPagerComponentInstance.cpp +224 -0
- package/harmony/pager_view/src/main/cpp/ViewPagerComponentInstance.h +104 -0
- package/harmony/pager_view/src/main/cpp/ViewPagerPackage.h +61 -0
- package/harmony/pager_view/src/main/cpp/generated/RNOH/generated/BaseReactNativePagerViewPackage.h +65 -0
- package/harmony/pager_view/src/main/cpp/generated/RNOH/generated/components/BaseRNCViewPagerComponentInstance.h +17 -0
- package/harmony/pager_view/src/main/cpp/generated/RNOH/generated/components/RNCViewPagerJSIBinder.h +38 -0
- package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/ComponentDescriptors.h +22 -0
- package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/EventEmitters.cpp +45 -0
- package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/EventEmitters.h +54 -0
- package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/Props.cpp +35 -0
- package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/Props.h +100 -0
- package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/ShadowNodes.cpp +19 -0
- package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/ShadowNodes.h +34 -0
- package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/States.cpp +18 -0
- package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/States.h +36 -0
- package/harmony/pager_view/src/main/ets/Logger.ets +64 -0
- package/harmony/pager_view/src/main/ets/RNCViewPager.ets +281 -0
- package/harmony/pager_view/src/main/ets/RNCViewPagerManager.ets +58 -0
- package/harmony/pager_view/src/main/ets/ViewPagerModule.ts +34 -0
- package/harmony/pager_view/src/main/ets/ViewPagerPackage.ts +46 -0
- package/harmony/pager_view/src/main/module.json5 +7 -0
- package/harmony/pager_view/src/main/resources/base/element/string.json +8 -0
- package/harmony/pager_view/src/main/resources/en_US/element/string.json +8 -0
- package/harmony/pager_view/src/main/resources/zh_CN/element/string.json +8 -0
- package/harmony/pager_view/ts.ts +26 -0
- package/harmony/pager_view.har +0 -0
- package/lib/commonjs/PagerView.js +145 -0
- package/lib/commonjs/PagerView.js.map +1 -0
- package/lib/commonjs/PagerViewNativeComponent.js +14 -0
- package/lib/commonjs/PagerViewNativeComponent.js.map +1 -0
- package/lib/commonjs/index.js +22 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/usePagerView.js +113 -0
- package/lib/commonjs/usePagerView.js.map +1 -0
- package/lib/commonjs/utils.js +28 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/module/PagerView.js +138 -0
- package/lib/module/PagerView.js.map +1 -0
- package/lib/module/PagerViewNativeComponent.js +7 -0
- package/lib/module/PagerViewNativeComponent.js.map +1 -0
- package/lib/module/index.js +4 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/usePagerView.js +107 -0
- package/lib/module/usePagerView.js.map +1 -0
- package/lib/module/utils.js +20 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/typescript/PagerView.d.ts +69 -0
- package/lib/typescript/PagerViewNativeComponent.d.ts +36 -0
- package/lib/typescript/index.d.ts +9 -0
- package/lib/typescript/usePagerView.d.ts +39 -0
- package/lib/typescript/utils.d.ts +2 -0
- package/package.json +139 -0
- package/src/PagerView.tsx +171 -0
- package/src/PagerViewNativeComponent.ts +68 -0
- package/src/index.tsx +27 -0
- package/src/usePagerView.ts +148 -0
- package/src/utils.tsx +19 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Platform","Keyboard","I18nManager","childrenWithOverriddenStyle","PagerViewNativeComponent","Commands","PagerViewNativeCommands","PagerView","Component","constructor","args","_defineProperty","e","props","onPageScroll","OS","keyboardDismissMode","dismiss","onPageScrollStateChanged","isScrolling","nativeEvent","pageScrollState","onPageSelected","selectedPage","pagerView","setPage","setPageWithoutAnimation","scrollEnabled","setScrollEnabledImperatively","deducedLayoutDirection","layoutDirection","isRTL","render","createElement","_extends","ref","style","_onPageScroll","_onPageScrollStateChanged","_onPageSelected","onMoveShouldSetResponderCapture","_onMoveShouldSetResponderCapture","children"],"sources":["PagerView.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Platform, Keyboard } from 'react-native';\r\nimport { I18nManager } from 'react-native';\r\nimport type * as ReactNative from 'react-native';\r\n\r\nimport {\r\n childrenWithOverriddenStyle,\r\n} from './utils';\r\n\r\nimport PagerViewNativeComponent, {\r\n Commands as PagerViewNativeCommands,\r\n OnPageScrollEventData,\r\n OnPageScrollStateChangedEventData,\r\n OnPageSelectedEventData,\r\n NativeProps,\r\n} from './PagerViewNativeComponent';\r\n\r\n\r\n/**\r\n * Container that allows to flip left and right between child views. Each\r\n * child view of the `PagerView` will be treated as a separate page\r\n * and will be stretched to fill the `PagerView`.\r\n *\r\n * It is important all children are `<View>`s and not composite components.\r\n * You can set style properties like `padding` or `backgroundColor` for each\r\n * child. It is also important that each child have a `key` prop.\r\n *\r\n * Example:\r\n *\r\n * ```\r\n * render: function() {\r\n * return (\r\n * <PagerView\r\n * style={styles.PagerView}\r\n * initialPage={0}>\r\n * <View style={styles.pageStyle} key=\"1\">\r\n * <Text>First page</Text>\r\n * </View>\r\n * <View style={styles.pageStyle} key=\"2\">\r\n * <Text>Second page</Text>\r\n * </View>\r\n * </PagerView>\r\n * );\r\n * }\r\n *\r\n * ...\r\n *\r\n * var styles = {\r\n * ...\r\n * PagerView: {\r\n * flex: 1\r\n * },\r\n * pageStyle: {\r\n * alignItems: 'center',\r\n * padding: 20,\r\n * }\r\n * }\r\n * ```\r\n */\r\n\r\nexport class PagerView extends React.Component<NativeProps> {\r\n private isScrolling = false;\r\n pagerView: React.ElementRef<typeof PagerViewNativeComponent> | null = null;\r\n\r\n\r\n private get deducedLayoutDirection() {\r\n if (\r\n !this.props.layoutDirection ||\r\n //@ts-ignore fix it\r\n this.props.layoutDirection === 'locale'\r\n ) {\r\n return I18nManager.isRTL ? 'rtl' : 'ltr';\r\n } else {\r\n return this.props.layoutDirection;\r\n }\r\n }\r\n\r\n private _onPageScroll = (\r\n e: ReactNative.NativeSyntheticEvent<OnPageScrollEventData>\r\n ) => {\r\n if (this.props.onPageScroll) {\r\n this.props.onPageScroll(e);\r\n }\r\n\r\n // Not implemented on iOS yet\r\n // @ts-ignore\r\n if (Platform.OS === 'android' || Platform.OS === 'harmony') {\r\n if (this.props.keyboardDismissMode === 'on-drag') {\r\n Keyboard.dismiss();\r\n }\r\n }\r\n };\r\n\r\n private _onPageScrollStateChanged = (\r\n e: ReactNative.NativeSyntheticEvent<OnPageScrollStateChangedEventData>\r\n ) => {\r\n if (this.props.onPageScrollStateChanged) {\r\n this.props.onPageScrollStateChanged(e);\r\n }\r\n this.isScrolling = e.nativeEvent.pageScrollState === 'dragging';\r\n };\r\n\r\n private _onPageSelected = (\r\n e: ReactNative.NativeSyntheticEvent<OnPageSelectedEventData>\r\n ) => {\r\n if (this.props.onPageSelected) {\r\n this.props.onPageSelected(e);\r\n }\r\n };\r\n\r\n private _onMoveShouldSetResponderCapture = () => {\r\n return this.isScrolling;\r\n };\r\n\r\n /**\r\n * A helper function to scroll to a specific page in the PagerView.\r\n * The transition between pages will be animated.\r\n */\r\n public setPage = (selectedPage: number) => {\r\n if (this.pagerView) {\r\n PagerViewNativeCommands.setPage(this.pagerView, selectedPage);\r\n }\r\n };\r\n\r\n /**\r\n * A helper function to scroll to a specific page in the PagerView.\r\n * The transition between pages will *not* be animated.\r\n */\r\n public setPageWithoutAnimation = (selectedPage: number) => {\r\n if (this.pagerView) {\r\n PagerViewNativeCommands.setPageWithoutAnimation(\r\n this.pagerView,\r\n selectedPage\r\n );\r\n }\r\n };\r\n\r\n /**\r\n * A helper function to enable/disable scroll imperatively\r\n * The recommended way is using the scrollEnabled prop, however, there might be a case where a\r\n * imperative solution is more useful (e.g. for not blocking an animation)\r\n */\r\n public setScrollEnabled = (scrollEnabled: boolean) => {\r\n if (this.pagerView) {\r\n PagerViewNativeCommands.setScrollEnabledImperatively(\r\n this.pagerView,\r\n scrollEnabled\r\n );\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n <PagerViewNativeComponent\r\n {...this.props}\r\n ref={(ref) => {\r\n this.pagerView = ref;\r\n }}\r\n style={this.props.style}\r\n layoutDirection={this.deducedLayoutDirection}\r\n onPageScroll={this._onPageScroll}\r\n onPageScrollStateChanged={this._onPageScrollStateChanged}\r\n onPageSelected={this._onPageSelected}\r\n onMoveShouldSetResponderCapture={\r\n this._onMoveShouldSetResponderCapture\r\n }\r\n children={childrenWithOverriddenStyle(this.props.children)}\r\n />\r\n );\r\n }\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands';
|
|
2
|
+
import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
|
|
3
|
+
export const Commands = codegenNativeCommands({
|
|
4
|
+
supportedCommands: ['setPage', 'setPageWithoutAnimation', 'setScrollEnabledImperatively']
|
|
5
|
+
});
|
|
6
|
+
export default codegenNativeComponent('RNCViewPager');
|
|
7
|
+
//# sourceMappingURL=PagerViewNativeComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["codegenNativeCommands","codegenNativeComponent","Commands","supportedCommands"],"sources":["PagerViewNativeComponent.ts"],"sourcesContent":["import type * as React from 'react';\r\nimport type { HostComponent, ViewProps } from 'react-native';\r\nimport codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands';\r\nimport codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\r\n\r\nimport type {\r\n DirectEventHandler,\r\n Double,\r\n Int32,\r\n WithDefault,\r\n} from 'react-native/Libraries/Types/CodegenTypes';\r\n\r\nexport type OnPageScrollEventData = Readonly<{\r\n position: Double;\r\n offset: Double;\r\n}>;\r\n\r\nexport type OnPageSelectedEventData = Readonly<{\r\n position: Double;\r\n}>;\r\n\r\nexport type OnPageScrollStateChangedEventData = Readonly<{\r\n pageScrollState: 'idle' | 'dragging' | 'settling';\r\n}>;\r\n\r\nexport interface NativeProps extends ViewProps {\r\n scrollEnabled?: WithDefault<boolean, true>;\r\n layoutDirection?: WithDefault<'ltr' | 'rtl', 'ltr'>;\r\n initialPage?: Int32;\r\n orientation?: WithDefault<'horizontal' | 'vertical', 'horizontal'>;\r\n offscreenPageLimit?: Int32;\r\n pageMargin?: Int32;\r\n overScrollMode?: WithDefault<'auto' | 'always' | 'never', 'auto'>;\r\n overdrag?: WithDefault<boolean, false>;\r\n keyboardDismissMode?: WithDefault<'none' | 'on-drag', 'none'>;\r\n onPageScroll?: DirectEventHandler<OnPageScrollEventData>;\r\n onPageSelected?: DirectEventHandler<OnPageSelectedEventData>;\r\n onPageScrollStateChanged?: DirectEventHandler<OnPageScrollStateChangedEventData>;\r\n}\r\n\r\ntype PagerViewViewType = HostComponent<NativeProps>;\r\n\r\nexport interface NativeCommands {\r\n setPage: (\r\n viewRef: React.ElementRef<PagerViewViewType>,\r\n selectedPage: Int32\r\n ) => void;\r\n setPageWithoutAnimation: (\r\n viewRef: React.ElementRef<PagerViewViewType>,\r\n selectedPage: Int32\r\n ) => void;\r\n setScrollEnabledImperatively: (\r\n viewRef: React.ElementRef<PagerViewViewType>,\r\n scrollEnabled: boolean\r\n ) => void;\r\n}\r\n\r\nexport const Commands: NativeCommands = codegenNativeCommands<NativeCommands>({\r\n supportedCommands: [\r\n 'setPage',\r\n 'setPageWithoutAnimation',\r\n 'setScrollEnabledImperatively',\r\n ],\r\n});\r\n\r\nexport default codegenNativeComponent<NativeProps>(\r\n 'RNCViewPager'\r\n) as HostComponent<NativeProps>;\r\n"],"mappings":"AAEA,OAAOA,qBAAqB,MAAM,wDAAwD;AAC1F,OAAOC,sBAAsB,MAAM,yDAAyD;AAsD5F,OAAO,MAAMC,QAAwB,GAAGF,qBAAqB,CAAiB;EAC5EG,iBAAiB,EAAE,CACjB,SAAS,EACT,yBAAyB,EACzB,8BAA8B;AAElC,CAAC,CAAC;AAEF,eAAeF,sBAAsB,CACnC,cACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PagerView"],"sources":["index.tsx"],"sourcesContent":["import type * as ReactNative from 'react-native';\r\nimport { PagerView } from './PagerView';\r\nexport default PagerView;\r\nexport * from './usePagerView';\r\n\r\nimport type {\r\n OnPageScrollEventData as PagerViewOnPageScrollEventData,\r\n OnPageSelectedEventData as PagerViewOnPageSelectedEventData,\r\n OnPageScrollStateChangedEventData as PageScrollStateChangedNativeEventData,\r\n NativeProps,\r\n} from './PagerViewNativeComponent';\r\n\r\nexport type {\r\n PagerViewOnPageScrollEventData,\r\n PagerViewOnPageSelectedEventData,\r\n PageScrollStateChangedNativeEventData,\r\n NativeProps as PagerViewProps,\r\n};\r\n\r\nexport type PagerViewOnPageScrollEvent =\r\n ReactNative.NativeSyntheticEvent<PagerViewOnPageScrollEventData>;\r\n\r\nexport type PagerViewOnPageSelectedEvent =\r\n ReactNative.NativeSyntheticEvent<PagerViewOnPageSelectedEventData>;\r\n\r\nexport type PageScrollStateChangedNativeEvent =\r\n ReactNative.NativeSyntheticEvent<PageScrollStateChangedNativeEventData>;\r\n"],"mappings":"AACA,SAASA,SAAS,QAAQ,aAAa;AACvC,eAAeA,SAAS;AACxB,cAAc,gBAAgB","ignoreList":[]}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { PagerView } from './PagerView';
|
|
2
|
+
import { Animated } from 'react-native';
|
|
3
|
+
import { useCallback, useMemo, useRef, useState } from 'react';
|
|
4
|
+
const AnimatedPagerView = Animated.createAnimatedComponent(PagerView);
|
|
5
|
+
export function usePagerView({
|
|
6
|
+
pagesAmount
|
|
7
|
+
} = {
|
|
8
|
+
pagesAmount: 0
|
|
9
|
+
}) {
|
|
10
|
+
const ref = useRef(null);
|
|
11
|
+
const [pages, setPages] = useState(new Array(pagesAmount).fill('').map((_v, index) => index));
|
|
12
|
+
const [activePage, setActivePage] = useState(0);
|
|
13
|
+
const [isAnimated, setIsAnimated] = useState(true);
|
|
14
|
+
const [overdragEnabled, setOverdragEnabled] = useState(false);
|
|
15
|
+
const [scrollEnabled, setScrollEnabled] = useState(true);
|
|
16
|
+
const [scrollState, setScrollState] = useState('idle');
|
|
17
|
+
const [progress, setProgress] = useState({
|
|
18
|
+
position: 0,
|
|
19
|
+
offset: 0
|
|
20
|
+
});
|
|
21
|
+
const onPageScrollOffset = useRef(new Animated.Value(0)).current;
|
|
22
|
+
const onPageScrollPosition = useRef(new Animated.Value(0)).current;
|
|
23
|
+
const onPageSelectedPosition = useRef(new Animated.Value(0)).current;
|
|
24
|
+
const setPage = useCallback(page => {
|
|
25
|
+
var _ref$current, _ref$current2;
|
|
26
|
+
return isAnimated ? (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.setPage(page) : (_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : _ref$current2.setPageWithoutAnimation(page);
|
|
27
|
+
}, [isAnimated]);
|
|
28
|
+
const addPage = useCallback(() => {
|
|
29
|
+
setPages(prevPages => {
|
|
30
|
+
return [...prevPages, prevPages.length];
|
|
31
|
+
});
|
|
32
|
+
}, []);
|
|
33
|
+
const removePage = useCallback(() => {
|
|
34
|
+
setPages(prevPages => {
|
|
35
|
+
if (prevPages.length === 1) {
|
|
36
|
+
return prevPages;
|
|
37
|
+
}
|
|
38
|
+
return prevPages.slice(0, prevPages.length - 1);
|
|
39
|
+
});
|
|
40
|
+
}, []);
|
|
41
|
+
const toggleAnimation = useCallback(() => setIsAnimated(animated => !animated), []);
|
|
42
|
+
const toggleScroll = useCallback(() => setScrollEnabled(enabled => !enabled), []);
|
|
43
|
+
const toggleOverdrag = useCallback(() => setOverdragEnabled(enabled => !enabled), []);
|
|
44
|
+
const onPageScroll = useMemo(() => Animated.event([{
|
|
45
|
+
nativeEvent: {
|
|
46
|
+
offset: onPageScrollOffset,
|
|
47
|
+
position: onPageScrollPosition
|
|
48
|
+
}
|
|
49
|
+
}], {
|
|
50
|
+
listener: ({
|
|
51
|
+
nativeEvent: {
|
|
52
|
+
offset,
|
|
53
|
+
position
|
|
54
|
+
}
|
|
55
|
+
}) => {
|
|
56
|
+
setProgress({
|
|
57
|
+
position,
|
|
58
|
+
offset
|
|
59
|
+
});
|
|
60
|
+
},
|
|
61
|
+
useNativeDriver: true
|
|
62
|
+
}),
|
|
63
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
64
|
+
[]);
|
|
65
|
+
const onPageSelected = useMemo(() => Animated.event([{
|
|
66
|
+
nativeEvent: {
|
|
67
|
+
position: onPageSelectedPosition
|
|
68
|
+
}
|
|
69
|
+
}], {
|
|
70
|
+
listener: ({
|
|
71
|
+
nativeEvent: {
|
|
72
|
+
position
|
|
73
|
+
}
|
|
74
|
+
}) => {
|
|
75
|
+
setActivePage(position);
|
|
76
|
+
},
|
|
77
|
+
useNativeDriver: true
|
|
78
|
+
}),
|
|
79
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
80
|
+
[]);
|
|
81
|
+
const onPageScrollStateChanged = useCallback(e => {
|
|
82
|
+
setScrollState(e.nativeEvent.pageScrollState);
|
|
83
|
+
}, []);
|
|
84
|
+
return {
|
|
85
|
+
ref,
|
|
86
|
+
activePage,
|
|
87
|
+
isAnimated,
|
|
88
|
+
pages,
|
|
89
|
+
scrollState,
|
|
90
|
+
scrollEnabled,
|
|
91
|
+
progress,
|
|
92
|
+
overdragEnabled,
|
|
93
|
+
setPage,
|
|
94
|
+
addPage,
|
|
95
|
+
removePage,
|
|
96
|
+
toggleScroll,
|
|
97
|
+
toggleAnimation,
|
|
98
|
+
setProgress,
|
|
99
|
+
onPageScroll,
|
|
100
|
+
onPageSelected,
|
|
101
|
+
onPageScrollStateChanged,
|
|
102
|
+
toggleOverdrag,
|
|
103
|
+
AnimatedPagerView,
|
|
104
|
+
PagerView
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=usePagerView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PagerView","Animated","useCallback","useMemo","useRef","useState","AnimatedPagerView","createAnimatedComponent","usePagerView","pagesAmount","ref","pages","setPages","Array","fill","map","_v","index","activePage","setActivePage","isAnimated","setIsAnimated","overdragEnabled","setOverdragEnabled","scrollEnabled","setScrollEnabled","scrollState","setScrollState","progress","setProgress","position","offset","onPageScrollOffset","Value","current","onPageScrollPosition","onPageSelectedPosition","setPage","page","_ref$current","_ref$current2","setPageWithoutAnimation","addPage","prevPages","length","removePage","slice","toggleAnimation","animated","toggleScroll","enabled","toggleOverdrag","onPageScroll","event","nativeEvent","listener","useNativeDriver","onPageSelected","onPageScrollStateChanged","e","pageScrollState"],"sources":["usePagerView.ts"],"sourcesContent":["import type * as ReactNative from 'react-native';\r\nimport type {\r\n OnPageScrollEventData as PagerViewOnPageScrollEventData,\r\n OnPageSelectedEventData as PagerViewOnPageSelectedEventData,\r\n OnPageScrollStateChangedEventData as PageScrollStateChangedNativeEventData,\r\n} from './PagerViewNativeComponent';\r\n\r\ntype PageScrollStateChangedNativeEvent =\r\n ReactNative.NativeSyntheticEvent<PageScrollStateChangedNativeEventData>;\r\n\r\nimport { PagerView } from './PagerView';\r\n\r\nimport { Animated } from 'react-native';\r\nimport { useCallback, useMemo, useRef, useState } from 'react';\r\n\r\nexport type UsePagerViewProps = ReturnType<typeof usePagerView>;\r\n\r\nconst AnimatedPagerView = Animated.createAnimatedComponent(PagerView);\r\n\r\ntype UsePagerViewParams = {\r\n pagesAmount: number;\r\n};\r\n\r\nexport function usePagerView(\r\n { pagesAmount }: UsePagerViewParams = { pagesAmount: 0 }\r\n) {\r\n const ref = useRef<PagerView>(null);\r\n const [pages, setPages] = useState<number[]>(\r\n new Array(pagesAmount).fill('').map((_v, index) => index)\r\n );\r\n const [activePage, setActivePage] = useState(0);\r\n const [isAnimated, setIsAnimated] = useState(true);\r\n const [overdragEnabled, setOverdragEnabled] = useState(false);\r\n const [scrollEnabled, setScrollEnabled] = useState(true);\r\n const [scrollState, setScrollState] = useState('idle');\r\n const [progress, setProgress] = useState({ position: 0, offset: 0 });\r\n const onPageScrollOffset = useRef(new Animated.Value(0)).current;\r\n const onPageScrollPosition = useRef(new Animated.Value(0)).current;\r\n const onPageSelectedPosition = useRef(new Animated.Value(0)).current;\r\n\r\n const setPage = useCallback(\r\n (page: number) =>\r\n isAnimated\r\n ? ref.current?.setPage(page)\r\n : ref.current?.setPageWithoutAnimation(page),\r\n [isAnimated]\r\n );\r\n\r\n const addPage = useCallback(() => {\r\n setPages((prevPages) => {\r\n return [...prevPages, prevPages.length];\r\n });\r\n }, []);\r\n\r\n const removePage = useCallback(() => {\r\n setPages((prevPages) => {\r\n if (prevPages.length === 1) {\r\n return prevPages;\r\n }\r\n return prevPages.slice(0, prevPages.length - 1);\r\n });\r\n }, []);\r\n\r\n const toggleAnimation = useCallback(\r\n () => setIsAnimated((animated) => !animated),\r\n []\r\n );\r\n\r\n const toggleScroll = useCallback(\r\n () => setScrollEnabled((enabled) => !enabled),\r\n []\r\n );\r\n\r\n const toggleOverdrag = useCallback(\r\n () => setOverdragEnabled((enabled) => !enabled),\r\n []\r\n );\r\n\r\n const onPageScroll = useMemo(\r\n () =>\r\n Animated.event<PagerViewOnPageScrollEventData>(\r\n [\r\n {\r\n nativeEvent: {\r\n offset: onPageScrollOffset,\r\n position: onPageScrollPosition,\r\n },\r\n },\r\n ],\r\n {\r\n listener: ({ nativeEvent: { offset, position } }) => {\r\n setProgress({\r\n position,\r\n offset,\r\n });\r\n },\r\n useNativeDriver: true,\r\n }\r\n ),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n []\r\n );\r\n\r\n const onPageSelected = useMemo(\r\n () =>\r\n Animated.event<PagerViewOnPageSelectedEventData>(\r\n [{ nativeEvent: { position: onPageSelectedPosition } }],\r\n {\r\n listener: ({ nativeEvent: { position } }) => {\r\n setActivePage(position);\r\n },\r\n useNativeDriver: true,\r\n }\r\n ),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n []\r\n );\r\n\r\n const onPageScrollStateChanged = useCallback(\r\n (e: PageScrollStateChangedNativeEvent) => {\r\n setScrollState(e.nativeEvent.pageScrollState);\r\n },\r\n []\r\n );\r\n\r\n return {\r\n ref,\r\n activePage,\r\n isAnimated,\r\n pages,\r\n scrollState,\r\n scrollEnabled,\r\n progress,\r\n overdragEnabled,\r\n setPage,\r\n addPage,\r\n removePage,\r\n toggleScroll,\r\n toggleAnimation,\r\n setProgress,\r\n onPageScroll,\r\n onPageSelected,\r\n onPageScrollStateChanged,\r\n toggleOverdrag,\r\n AnimatedPagerView,\r\n PagerView,\r\n };\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React, { Children } from 'react';
|
|
2
|
+
import { StyleSheet, View } from 'react-native';
|
|
3
|
+
export const childrenWithOverriddenStyle = children => {
|
|
4
|
+
return Children.map(children, child => {
|
|
5
|
+
const element = child;
|
|
6
|
+
return (
|
|
7
|
+
/*#__PURE__*/
|
|
8
|
+
// Add a wrapper to ensure layout is calculated correctly
|
|
9
|
+
React.createElement(View, {
|
|
10
|
+
style: StyleSheet.absoluteFill,
|
|
11
|
+
collapsable: false
|
|
12
|
+
}, /*#__PURE__*/React.cloneElement(element, {
|
|
13
|
+
...element.props,
|
|
14
|
+
// Override styles so that each page will fill the parent.
|
|
15
|
+
style: [element.props.style, StyleSheet.absoluteFill]
|
|
16
|
+
}))
|
|
17
|
+
);
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Children","StyleSheet","View","childrenWithOverriddenStyle","children","map","child","element","createElement","style","absoluteFill","collapsable","cloneElement","props"],"sources":["utils.tsx"],"sourcesContent":["import React, { Children, ReactNode } from 'react';\r\nimport { StyleSheet, View } from 'react-native';\r\n\r\nexport const childrenWithOverriddenStyle = (children?: ReactNode) => {\r\n return Children.map(children, (child) => {\r\n const element = child as React.ReactElement;\r\n return (\r\n // Add a wrapper to ensure layout is calculated correctly\r\n <View style={StyleSheet.absoluteFill} collapsable={false}>\r\n {/* @ts-ignore */}\r\n {React.cloneElement(element, {\r\n ...element.props,\r\n // Override styles so that each page will fill the parent.\r\n style: [element.props.style, StyleSheet.absoluteFill],\r\n })}\r\n </View>\r\n );\r\n });\r\n};\r\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAmB,OAAO;AAClD,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAE/C,OAAO,MAAMC,2BAA2B,GAAIC,QAAoB,IAAK;EACnE,OAAOJ,QAAQ,CAACK,GAAG,CAACD,QAAQ,EAAGE,KAAK,IAAK;IACvC,MAAMC,OAAO,GAAGD,KAA2B;IAC3C;MAAA;MACE;MACAP,KAAA,CAAAS,aAAA,CAACN,IAAI;QAACO,KAAK,EAAER,UAAU,CAACS,YAAa;QAACC,WAAW,EAAE;MAAM,gBAEtDZ,KAAK,CAACa,YAAY,CAACL,OAAO,EAAE;QAC3B,GAAGA,OAAO,CAACM,KAAK;QAChB;QACAJ,KAAK,EAAE,CAACF,OAAO,CAACM,KAAK,CAACJ,KAAK,EAAER,UAAU,CAACS,YAAY;MACtD,CAAC,CACG;IAAC;EAEX,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PagerViewNativeComponent, { NativeProps } from './PagerViewNativeComponent';
|
|
3
|
+
/**
|
|
4
|
+
* Container that allows to flip left and right between child views. Each
|
|
5
|
+
* child view of the `PagerView` will be treated as a separate page
|
|
6
|
+
* and will be stretched to fill the `PagerView`.
|
|
7
|
+
*
|
|
8
|
+
* It is important all children are `<View>`s and not composite components.
|
|
9
|
+
* You can set style properties like `padding` or `backgroundColor` for each
|
|
10
|
+
* child. It is also important that each child have a `key` prop.
|
|
11
|
+
*
|
|
12
|
+
* Example:
|
|
13
|
+
*
|
|
14
|
+
* ```
|
|
15
|
+
* render: function() {
|
|
16
|
+
* return (
|
|
17
|
+
* <PagerView
|
|
18
|
+
* style={styles.PagerView}
|
|
19
|
+
* initialPage={0}>
|
|
20
|
+
* <View style={styles.pageStyle} key="1">
|
|
21
|
+
* <Text>First page</Text>
|
|
22
|
+
* </View>
|
|
23
|
+
* <View style={styles.pageStyle} key="2">
|
|
24
|
+
* <Text>Second page</Text>
|
|
25
|
+
* </View>
|
|
26
|
+
* </PagerView>
|
|
27
|
+
* );
|
|
28
|
+
* }
|
|
29
|
+
*
|
|
30
|
+
* ...
|
|
31
|
+
*
|
|
32
|
+
* var styles = {
|
|
33
|
+
* ...
|
|
34
|
+
* PagerView: {
|
|
35
|
+
* flex: 1
|
|
36
|
+
* },
|
|
37
|
+
* pageStyle: {
|
|
38
|
+
* alignItems: 'center',
|
|
39
|
+
* padding: 20,
|
|
40
|
+
* }
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare class PagerView extends React.Component<NativeProps> {
|
|
45
|
+
private isScrolling;
|
|
46
|
+
pagerView: React.ElementRef<typeof PagerViewNativeComponent> | null;
|
|
47
|
+
private get deducedLayoutDirection();
|
|
48
|
+
private _onPageScroll;
|
|
49
|
+
private _onPageScrollStateChanged;
|
|
50
|
+
private _onPageSelected;
|
|
51
|
+
private _onMoveShouldSetResponderCapture;
|
|
52
|
+
/**
|
|
53
|
+
* A helper function to scroll to a specific page in the PagerView.
|
|
54
|
+
* The transition between pages will be animated.
|
|
55
|
+
*/
|
|
56
|
+
setPage: (selectedPage: number) => void;
|
|
57
|
+
/**
|
|
58
|
+
* A helper function to scroll to a specific page in the PagerView.
|
|
59
|
+
* The transition between pages will *not* be animated.
|
|
60
|
+
*/
|
|
61
|
+
setPageWithoutAnimation: (selectedPage: number) => void;
|
|
62
|
+
/**
|
|
63
|
+
* A helper function to enable/disable scroll imperatively
|
|
64
|
+
* The recommended way is using the scrollEnabled prop, however, there might be a case where a
|
|
65
|
+
* imperative solution is more useful (e.g. for not blocking an animation)
|
|
66
|
+
*/
|
|
67
|
+
setScrollEnabled: (scrollEnabled: boolean) => void;
|
|
68
|
+
render(): React.JSX.Element;
|
|
69
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type * as React from 'react';
|
|
2
|
+
import type { HostComponent, ViewProps } from 'react-native';
|
|
3
|
+
import type { DirectEventHandler, Double, Int32, WithDefault } from 'react-native/Libraries/Types/CodegenTypes';
|
|
4
|
+
export type OnPageScrollEventData = Readonly<{
|
|
5
|
+
position: Double;
|
|
6
|
+
offset: Double;
|
|
7
|
+
}>;
|
|
8
|
+
export type OnPageSelectedEventData = Readonly<{
|
|
9
|
+
position: Double;
|
|
10
|
+
}>;
|
|
11
|
+
export type OnPageScrollStateChangedEventData = Readonly<{
|
|
12
|
+
pageScrollState: 'idle' | 'dragging' | 'settling';
|
|
13
|
+
}>;
|
|
14
|
+
export interface NativeProps extends ViewProps {
|
|
15
|
+
scrollEnabled?: WithDefault<boolean, true>;
|
|
16
|
+
layoutDirection?: WithDefault<'ltr' | 'rtl', 'ltr'>;
|
|
17
|
+
initialPage?: Int32;
|
|
18
|
+
orientation?: WithDefault<'horizontal' | 'vertical', 'horizontal'>;
|
|
19
|
+
offscreenPageLimit?: Int32;
|
|
20
|
+
pageMargin?: Int32;
|
|
21
|
+
overScrollMode?: WithDefault<'auto' | 'always' | 'never', 'auto'>;
|
|
22
|
+
overdrag?: WithDefault<boolean, false>;
|
|
23
|
+
keyboardDismissMode?: WithDefault<'none' | 'on-drag', 'none'>;
|
|
24
|
+
onPageScroll?: DirectEventHandler<OnPageScrollEventData>;
|
|
25
|
+
onPageSelected?: DirectEventHandler<OnPageSelectedEventData>;
|
|
26
|
+
onPageScrollStateChanged?: DirectEventHandler<OnPageScrollStateChangedEventData>;
|
|
27
|
+
}
|
|
28
|
+
type PagerViewViewType = HostComponent<NativeProps>;
|
|
29
|
+
export interface NativeCommands {
|
|
30
|
+
setPage: (viewRef: React.ElementRef<PagerViewViewType>, selectedPage: Int32) => void;
|
|
31
|
+
setPageWithoutAnimation: (viewRef: React.ElementRef<PagerViewViewType>, selectedPage: Int32) => void;
|
|
32
|
+
setScrollEnabledImperatively: (viewRef: React.ElementRef<PagerViewViewType>, scrollEnabled: boolean) => void;
|
|
33
|
+
}
|
|
34
|
+
export declare const Commands: NativeCommands;
|
|
35
|
+
declare const _default: HostComponent<NativeProps>;
|
|
36
|
+
export default _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type * as ReactNative from 'react-native';
|
|
2
|
+
import { PagerView } from './PagerView';
|
|
3
|
+
export default PagerView;
|
|
4
|
+
export * from './usePagerView';
|
|
5
|
+
import type { OnPageScrollEventData as PagerViewOnPageScrollEventData, OnPageSelectedEventData as PagerViewOnPageSelectedEventData, OnPageScrollStateChangedEventData as PageScrollStateChangedNativeEventData, NativeProps } from './PagerViewNativeComponent';
|
|
6
|
+
export type { PagerViewOnPageScrollEventData, PagerViewOnPageSelectedEventData, PageScrollStateChangedNativeEventData, NativeProps as PagerViewProps, };
|
|
7
|
+
export type PagerViewOnPageScrollEvent = ReactNative.NativeSyntheticEvent<PagerViewOnPageScrollEventData>;
|
|
8
|
+
export type PagerViewOnPageSelectedEvent = ReactNative.NativeSyntheticEvent<PagerViewOnPageSelectedEventData>;
|
|
9
|
+
export type PageScrollStateChangedNativeEvent = ReactNative.NativeSyntheticEvent<PageScrollStateChangedNativeEventData>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type * as ReactNative from 'react-native';
|
|
3
|
+
import type { OnPageScrollStateChangedEventData as PageScrollStateChangedNativeEventData } from './PagerViewNativeComponent';
|
|
4
|
+
type PageScrollStateChangedNativeEvent = ReactNative.NativeSyntheticEvent<PageScrollStateChangedNativeEventData>;
|
|
5
|
+
import { PagerView } from './PagerView';
|
|
6
|
+
import { Animated } from 'react-native';
|
|
7
|
+
export type UsePagerViewProps = ReturnType<typeof usePagerView>;
|
|
8
|
+
type UsePagerViewParams = {
|
|
9
|
+
pagesAmount: number;
|
|
10
|
+
};
|
|
11
|
+
export declare function usePagerView({ pagesAmount }?: UsePagerViewParams): {
|
|
12
|
+
ref: import("react").RefObject<PagerView>;
|
|
13
|
+
activePage: number;
|
|
14
|
+
isAnimated: boolean;
|
|
15
|
+
pages: number[];
|
|
16
|
+
scrollState: string;
|
|
17
|
+
scrollEnabled: boolean;
|
|
18
|
+
progress: {
|
|
19
|
+
position: number;
|
|
20
|
+
offset: number;
|
|
21
|
+
};
|
|
22
|
+
overdragEnabled: boolean;
|
|
23
|
+
setPage: (page: number) => void;
|
|
24
|
+
addPage: () => void;
|
|
25
|
+
removePage: () => void;
|
|
26
|
+
toggleScroll: () => void;
|
|
27
|
+
toggleAnimation: () => void;
|
|
28
|
+
setProgress: import("react").Dispatch<import("react").SetStateAction<{
|
|
29
|
+
position: number;
|
|
30
|
+
offset: number;
|
|
31
|
+
}>>;
|
|
32
|
+
onPageScroll: (...args: any[]) => void;
|
|
33
|
+
onPageSelected: (...args: any[]) => void;
|
|
34
|
+
onPageScrollStateChanged: (e: PageScrollStateChangedNativeEvent) => void;
|
|
35
|
+
toggleOverdrag: () => void;
|
|
36
|
+
AnimatedPagerView: Animated.AnimatedComponent<typeof PagerView>;
|
|
37
|
+
PagerView: typeof PagerView;
|
|
38
|
+
};
|
|
39
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@react-native-ohos/react-native-pager-view",
|
|
3
|
+
"version": "6.7.2-rc.1",
|
|
4
|
+
"description": "React Native wrapper for Harmony ViewPager",
|
|
5
|
+
"main": "lib/commonjs/index",
|
|
6
|
+
"module": "lib/module/index",
|
|
7
|
+
"types": "lib/typescript/index.d.ts",
|
|
8
|
+
"react-native": "src/index",
|
|
9
|
+
"source": "src/index",
|
|
10
|
+
"harmony": {
|
|
11
|
+
"alias":"react-native-pager-view"
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"src",
|
|
15
|
+
"lib",
|
|
16
|
+
"harmony",
|
|
17
|
+
"!lib/typescript/example",
|
|
18
|
+
"!**/__tests__",
|
|
19
|
+
"!**/__fixtures__",
|
|
20
|
+
"!**/__mocks__",
|
|
21
|
+
"!harmony/oh_modules",
|
|
22
|
+
"!harmony/**/build",
|
|
23
|
+
"!harmony/**/oh_modules"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"test": "jest",
|
|
27
|
+
"typescript": "tsc --noEmit",
|
|
28
|
+
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
29
|
+
"prepare": "bob build",
|
|
30
|
+
"release": "release-it",
|
|
31
|
+
"release:next": "release-it --npm.tag=next --preRelease=rc"
|
|
32
|
+
},
|
|
33
|
+
"keywords": [
|
|
34
|
+
"react-native",
|
|
35
|
+
"harmony"
|
|
36
|
+
],
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/react-native-oh-library/react-native-pager-view.git"
|
|
40
|
+
},
|
|
41
|
+
"author": "troZee <hello@callstack.com> (https://github.com/callstack)",
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"bugs": {
|
|
44
|
+
"url": "https://github.com/callstack/react-native-pager-view/issues"
|
|
45
|
+
},
|
|
46
|
+
"homepage": "https://github.com/callstack/react-native-pager-view#readme",
|
|
47
|
+
"publishConfig": {
|
|
48
|
+
"registry": "https://registry.npmjs.org/",
|
|
49
|
+
"access": "public"
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"react-native-pager-view": "6.7.1"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@babel/eslint-parser": "^7.20.0",
|
|
56
|
+
"@react-native/babel-preset": "0.76.3",
|
|
57
|
+
"@react-native/eslint-config": "0.76.3",
|
|
58
|
+
"@react-native/metro-config": "0.76.3",
|
|
59
|
+
"@react-native/typescript-config": "0.76.3",
|
|
60
|
+
"@react-native-community/cli": "15.0.1",
|
|
61
|
+
"@react-native-community/cli-platform-android": "15.0.1",
|
|
62
|
+
"@react-native-community/cli-platform-ios": "15.0.1",
|
|
63
|
+
"@release-it/conventional-changelog": "^2.0.0",
|
|
64
|
+
"@types/jest": "^29.5.12",
|
|
65
|
+
"@types/react": "^18.2.6",
|
|
66
|
+
"eslint": "^8.19.0",
|
|
67
|
+
"eslint-config-prettier": "^8.5.0",
|
|
68
|
+
"eslint-plugin-ft-flow": "^3.0.1",
|
|
69
|
+
"eslint-plugin-jest": "^28.9.0",
|
|
70
|
+
"eslint-plugin-prettier": "^4.0.0",
|
|
71
|
+
"jest": "^29.6.3",
|
|
72
|
+
"metro-react-native-babel-preset": "^0.77.0",
|
|
73
|
+
"prettier": "^2.4.1",
|
|
74
|
+
"react": "18.3.1",
|
|
75
|
+
"react-native": "0.77.1",
|
|
76
|
+
"react-native-builder-bob": "^0.18.3",
|
|
77
|
+
"release-it": "^14.2.2",
|
|
78
|
+
"typescript": "5.0.4"
|
|
79
|
+
},
|
|
80
|
+
"resolutions": {
|
|
81
|
+
"@types/react": "18.0.29"
|
|
82
|
+
},
|
|
83
|
+
"peerDependencies": {
|
|
84
|
+
"react": "*",
|
|
85
|
+
"react-native": "*"
|
|
86
|
+
},
|
|
87
|
+
"jest": {
|
|
88
|
+
"preset": "react-native",
|
|
89
|
+
"modulePathIgnorePatterns": [
|
|
90
|
+
"<rootDir>/example/node_modules",
|
|
91
|
+
"<rootDir>/lib/"
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"eslintConfig": {
|
|
95
|
+
"root": true,
|
|
96
|
+
"parser": "@babel/eslint-parser",
|
|
97
|
+
"extends": [
|
|
98
|
+
"@react-native-community",
|
|
99
|
+
"prettier"
|
|
100
|
+
],
|
|
101
|
+
"rules": {
|
|
102
|
+
"prettier/prettier": [
|
|
103
|
+
"error",
|
|
104
|
+
{
|
|
105
|
+
"quoteProps": "consistent",
|
|
106
|
+
"singleQuote": true,
|
|
107
|
+
"tabWidth": 2,
|
|
108
|
+
"trailingComma": "es5",
|
|
109
|
+
"useTabs": false
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"eslintIgnore": [
|
|
115
|
+
"node_modules/",
|
|
116
|
+
"lib/"
|
|
117
|
+
],
|
|
118
|
+
"prettier": {
|
|
119
|
+
"quoteProps": "consistent",
|
|
120
|
+
"singleQuote": true,
|
|
121
|
+
"tabWidth": 2,
|
|
122
|
+
"trailingComma": "es5",
|
|
123
|
+
"useTabs": false
|
|
124
|
+
},
|
|
125
|
+
"react-native-builder-bob": {
|
|
126
|
+
"source": "src",
|
|
127
|
+
"output": "lib",
|
|
128
|
+
"targets": [
|
|
129
|
+
"commonjs",
|
|
130
|
+
"module",
|
|
131
|
+
[
|
|
132
|
+
"typescript",
|
|
133
|
+
{
|
|
134
|
+
"project": "tsconfig.build.json"
|
|
135
|
+
}
|
|
136
|
+
]
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
}
|