react-native-app-onboard 0.1.9 → 0.2.0
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/README.md +89 -7
- package/lib/commonjs/components/CustomPages.js +31 -55
- package/lib/commonjs/components/CustomPages.js.map +1 -1
- package/lib/commonjs/components/OnboardingPages.js +59 -74
- package/lib/commonjs/components/OnboardingPages.js.map +1 -1
- package/lib/commonjs/components/Page.js +8 -3
- package/lib/commonjs/components/Page.js.map +1 -1
- package/lib/commonjs/components/Pagination.js +75 -13
- package/lib/commonjs/components/Pagination.js.map +1 -1
- package/lib/commonjs/components/Swiper.js +58 -85
- package/lib/commonjs/components/Swiper.js.map +1 -1
- package/lib/commonjs/components/button.js +3 -1
- package/lib/commonjs/components/button.js.map +1 -1
- package/lib/commonjs/context/OnboardingContext.js +101 -21
- package/lib/commonjs/context/OnboardingContext.js.map +1 -1
- package/lib/commonjs/hooks/useOnboarding.js +1 -1
- package/lib/commonjs/hooks/useOnboarding.js.map +1 -1
- package/lib/commonjs/index.js +33 -2
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/persistence.js +51 -0
- package/lib/commonjs/utils/persistence.js.map +1 -0
- package/lib/module/components/CustomPages.js +31 -55
- package/lib/module/components/CustomPages.js.map +1 -1
- package/lib/module/components/OnboardingPages.js +60 -75
- package/lib/module/components/OnboardingPages.js.map +1 -1
- package/lib/module/components/Page.js +8 -3
- package/lib/module/components/Page.js.map +1 -1
- package/lib/module/components/Pagination.js +76 -14
- package/lib/module/components/Pagination.js.map +1 -1
- package/lib/module/components/Swiper.js +59 -86
- package/lib/module/components/Swiper.js.map +1 -1
- package/lib/module/components/button.js +3 -1
- package/lib/module/components/button.js.map +1 -1
- package/lib/module/context/OnboardingContext.js +102 -22
- package/lib/module/context/OnboardingContext.js.map +1 -1
- package/lib/module/hooks/useOnboarding.js +1 -1
- package/lib/module/hooks/useOnboarding.js.map +1 -1
- package/lib/module/index.js +8 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/persistence.js +42 -0
- package/lib/module/utils/persistence.js.map +1 -0
- package/lib/typescript/src/components/CustomPages.d.ts +6 -2
- package/lib/typescript/src/components/CustomPages.d.ts.map +1 -1
- package/lib/typescript/src/components/OnboardingPages.d.ts +6 -2
- package/lib/typescript/src/components/OnboardingPages.d.ts.map +1 -1
- package/lib/typescript/src/components/Page.d.ts +2 -0
- package/lib/typescript/src/components/Page.d.ts.map +1 -1
- package/lib/typescript/src/components/Pagination.d.ts +9 -0
- package/lib/typescript/src/components/Pagination.d.ts.map +1 -1
- package/lib/typescript/src/components/Swiper.d.ts.map +1 -1
- package/lib/typescript/src/components/button.d.ts.map +1 -1
- package/lib/typescript/src/context/OnboardingContext.d.ts +9 -0
- package/lib/typescript/src/context/OnboardingContext.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useOnboarding.d.ts +3 -0
- package/lib/typescript/src/hooks/useOnboarding.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +4 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +13 -0
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/persistence.d.ts +31 -0
- package/lib/typescript/src/utils/persistence.d.ts.map +1 -0
- package/package.json +13 -3
- package/src/components/CustomPages.tsx +62 -69
- package/src/components/OnboardingPages.tsx +79 -82
- package/src/components/Page.tsx +8 -2
- package/src/components/Pagination.tsx +121 -29
- package/src/components/Swiper.tsx +65 -87
- package/src/components/button.tsx +6 -1
- package/src/context/OnboardingContext.tsx +145 -26
- package/src/hooks/useOnboarding.tsx +1 -3
- package/src/index.tsx +16 -1
- package/src/types/index.ts +13 -0
- package/src/utils/persistence.ts +58 -0
|
@@ -3,7 +3,7 @@ import { OnboardingContext } from '../context/OnboardingContext';
|
|
|
3
3
|
export const useOnboarding = () => {
|
|
4
4
|
const context = React.useContext(OnboardingContext);
|
|
5
5
|
if (!context) {
|
|
6
|
-
throw new Error('
|
|
6
|
+
throw new Error('useOnboarding must be used within an OnboardingProvider');
|
|
7
7
|
}
|
|
8
8
|
return context;
|
|
9
9
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","OnboardingContext","useOnboarding","context","useContext","Error"],"sourceRoot":"../../../src","sources":["hooks/useOnboarding.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,iBAAiB,QAAQ,8BAA8B;AAEhE,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAAM;EACjC,MAAMC,OAAO,GAAGH,KAAK,CAACI,UAAU,CAACH,iBAAiB,CAAC;EACnD,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIE,KAAK,
|
|
1
|
+
{"version":3,"names":["React","OnboardingContext","useOnboarding","context","useContext","Error"],"sourceRoot":"../../../src","sources":["hooks/useOnboarding.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,iBAAiB,QAAQ,8BAA8B;AAEhE,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAAM;EACjC,MAAMC,OAAO,GAAGH,KAAK,CAACI,UAAU,CAACH,iBAAiB,CAAC;EACnD,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIE,KAAK,CAAC,yDAAyD,CAAC;EAC5E;EACA,OAAOF,OAAO;AAChB,CAAC","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Swiper } from './components
|
|
2
|
+
import { Swiper } from './components';
|
|
3
3
|
import { OnboardingProvider } from './context/OnboardingContext';
|
|
4
4
|
export { useOnboarding } from './hooks/useOnboarding';
|
|
5
|
+
export { createOnboardingStorage, hasCompletedOnboarding, markOnboardingComplete, resetOnboarding } from './utils/persistence';
|
|
5
6
|
export function Onboarding(props) {
|
|
6
7
|
var _props$pages;
|
|
7
8
|
const numberOfScreens = React.Children.count(props.children);
|
|
8
9
|
return /*#__PURE__*/React.createElement(OnboardingProvider, {
|
|
10
|
+
width: props.width,
|
|
9
11
|
scrollEnabled: props.scrollEnabled,
|
|
12
|
+
onPageChange: props.onPageChange,
|
|
13
|
+
scrollAnimationDuration: props.scrollAnimationDuration,
|
|
14
|
+
autoPlay: props.autoPlay,
|
|
15
|
+
autoPlayInterval: props.autoPlayInterval,
|
|
16
|
+
loop: props.loop,
|
|
10
17
|
numberOfScreens: numberOfScreens || ((_props$pages = props.pages) === null || _props$pages === void 0 ? void 0 : _props$pages.length) || 0
|
|
11
18
|
}, /*#__PURE__*/React.createElement(Swiper, props, props.children));
|
|
12
19
|
}
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Swiper","OnboardingProvider","useOnboarding","Onboarding","props","_props$pages","numberOfScreens","Children","count","children","createElement","scrollEnabled","pages","length"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"names":["React","Swiper","OnboardingProvider","useOnboarding","createOnboardingStorage","hasCompletedOnboarding","markOnboardingComplete","resetOnboarding","Onboarding","props","_props$pages","numberOfScreens","Children","count","children","createElement","width","scrollEnabled","onPageChange","scrollAnimationDuration","autoPlay","autoPlayInterval","loop","pages","length"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,MAAM,QAAQ,cAAc;AACrC,SAASC,kBAAkB,QAAQ,6BAA6B;AAGhE,SAASC,aAAa,QAAQ,uBAAuB;AAGrD,SACEC,uBAAuB,EACvBC,sBAAsB,EACtBC,sBAAsB,EACtBC,eAAe,QACV,qBAAqB;AAG5B,OAAO,SAASC,UAAUA,CAACC,KAAsB,EAAE;EAAA,IAAAC,YAAA;EACjD,MAAMC,eAAe,GAAGX,KAAK,CAACY,QAAQ,CAACC,KAAK,CAACJ,KAAK,CAACK,QAAQ,CAAC;EAC5D,oBACEd,KAAA,CAAAe,aAAA,CAACb,kBAAkB;IACjBc,KAAK,EAAEP,KAAK,CAACO,KAAM;IACnBC,aAAa,EAAER,KAAK,CAACQ,aAAc;IACnCC,YAAY,EAAET,KAAK,CAACS,YAAa;IACjCC,uBAAuB,EAAEV,KAAK,CAACU,uBAAwB;IACvDC,QAAQ,EAAEX,KAAK,CAACW,QAAS;IACzBC,gBAAgB,EAAEZ,KAAK,CAACY,gBAAiB;IACzCC,IAAI,EAAEb,KAAK,CAACa,IAAK;IACjBX,eAAe,EAAEA,eAAe,MAAAD,YAAA,GAAID,KAAK,CAACc,KAAK,cAAAb,YAAA,uBAAXA,YAAA,CAAac,MAAM,KAAI;EAAE,gBAE7DxB,KAAA,CAAAe,aAAA,CAACd,MAAM,EAAKQ,KAAK,EAAGA,KAAK,CAACK,QAAiB,CACzB,CAAC;AAEzB","ignoreList":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal AsyncStorage-compatible interface. Any storage that implements these
|
|
3
|
+
* three methods works (e.g. @react-native-async-storage/async-storage,
|
|
4
|
+
* expo-secure-store wrappers, or an in-memory mock in tests). Keeping the
|
|
5
|
+
* dependency injected means this library does not have to ship a storage peer
|
|
6
|
+
* dependency of its own.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
const DEFAULT_KEY = '@react-native-app-onboard/completed';
|
|
10
|
+
const COMPLETED_VALUE = 'true';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Returns whether the user has previously completed onboarding stored under
|
|
14
|
+
* `key`. Defaults to a namespaced key so callers usually only pass the storage.
|
|
15
|
+
*/
|
|
16
|
+
export async function hasCompletedOnboarding(storage, key = DEFAULT_KEY) {
|
|
17
|
+
const value = await storage.getItem(key);
|
|
18
|
+
return value === COMPLETED_VALUE;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Marks onboarding as completed so it can be skipped on subsequent launches. */
|
|
22
|
+
export async function markOnboardingComplete(storage, key = DEFAULT_KEY) {
|
|
23
|
+
await storage.setItem(key, COMPLETED_VALUE);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Clears the stored completion flag (useful for "replay onboarding" actions). */
|
|
27
|
+
export async function resetOnboarding(storage, key = DEFAULT_KEY) {
|
|
28
|
+
await storage.removeItem(key);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Convenience factory that binds a storage adapter (and optional key) once and
|
|
33
|
+
* returns ready-to-call helpers, so app code doesn't repeat the storage arg.
|
|
34
|
+
*/
|
|
35
|
+
export function createOnboardingStorage(storage, key = DEFAULT_KEY) {
|
|
36
|
+
return {
|
|
37
|
+
hasCompleted: () => hasCompletedOnboarding(storage, key),
|
|
38
|
+
markComplete: () => markOnboardingComplete(storage, key),
|
|
39
|
+
reset: () => resetOnboarding(storage, key)
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DEFAULT_KEY","COMPLETED_VALUE","hasCompletedOnboarding","storage","key","value","getItem","markOnboardingComplete","setItem","resetOnboarding","removeItem","createOnboardingStorage","hasCompleted","markComplete","reset"],"sourceRoot":"../../../src","sources":["utils/persistence.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA,MAAMA,WAAW,GAAG,qCAAqC;AACzD,MAAMC,eAAe,GAAG,MAAM;;AAE9B;AACA;AACA;AACA;AACA,OAAO,eAAeC,sBAAsBA,CAC1CC,OAAiC,EACjCC,GAAW,GAAGJ,WAAW,EACP;EAClB,MAAMK,KAAK,GAAG,MAAMF,OAAO,CAACG,OAAO,CAACF,GAAG,CAAC;EACxC,OAAOC,KAAK,KAAKJ,eAAe;AAClC;;AAEA;AACA,OAAO,eAAeM,sBAAsBA,CAC1CJ,OAAiC,EACjCC,GAAW,GAAGJ,WAAW,EACV;EACf,MAAMG,OAAO,CAACK,OAAO,CAACJ,GAAG,EAAEH,eAAe,CAAC;AAC7C;;AAEA;AACA,OAAO,eAAeQ,eAAeA,CACnCN,OAAiC,EACjCC,GAAW,GAAGJ,WAAW,EACV;EACf,MAAMG,OAAO,CAACO,UAAU,CAACN,GAAG,CAAC;AAC/B;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASO,uBAAuBA,CACrCR,OAAiC,EACjCC,GAAW,GAAGJ,WAAW,EACzB;EACA,OAAO;IACLY,YAAY,EAAEA,CAAA,KAAMV,sBAAsB,CAACC,OAAO,EAAEC,GAAG,CAAC;IACxDS,YAAY,EAAEA,CAAA,KAAMN,sBAAsB,CAACJ,OAAO,EAAEC,GAAG,CAAC;IACxDU,KAAK,EAAEA,CAAA,KAAML,eAAe,CAACN,OAAO,EAAEC,GAAG;EAC3C,CAAC;AACH","ignoreList":[]}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import { Animated, FlatList } from 'react-native';
|
|
1
|
+
import { Animated, FlatList, type NativeSyntheticEvent, type NativeScrollEvent } from 'react-native';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import type { OnboardingProps } from '../types';
|
|
4
4
|
type CustomPagesProps = OnboardingProps & {
|
|
5
5
|
children?: React.ReactNode[];
|
|
6
6
|
currentPage: number;
|
|
7
7
|
setPage: (newPageIndex: number) => void;
|
|
8
|
-
|
|
8
|
+
setFlatListRef: (node: FlatList | null) => void;
|
|
9
9
|
scrollX: Animated.Value;
|
|
10
|
+
dotsAnimatedValue: Animated.Value;
|
|
11
|
+
onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
|
|
12
|
+
onScrollBeginDrag: () => void;
|
|
10
13
|
nextPage: () => void;
|
|
11
14
|
numberOfScreens: number;
|
|
15
|
+
mirror?: boolean;
|
|
12
16
|
};
|
|
13
17
|
export type SliderProps = {
|
|
14
18
|
index?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomPages.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomPages.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"CustomPages.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomPages.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,QAAQ,EAER,QAAQ,EACR,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAKhD,KAAK,gBAAgB,GAAG,eAAe,GAAG;IACxC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,cAAc,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;IACxB,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACnE,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IAGxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,WAAW,2CAIrB,gBAAgB,sBAiGlB,CAAC"}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Animated, FlatList } from 'react-native';
|
|
2
|
+
import { Animated, FlatList, type NativeSyntheticEvent, type NativeScrollEvent } from 'react-native';
|
|
3
3
|
import { type Page } from './Page';
|
|
4
4
|
import type { OnboardingProps } from '../types';
|
|
5
5
|
type Props = OnboardingProps & {
|
|
6
6
|
pages: Page[];
|
|
7
7
|
currentPage: number;
|
|
8
8
|
setPage: (newPageIndex: number) => void;
|
|
9
|
-
|
|
9
|
+
setFlatListRef: (node: FlatList | null) => void;
|
|
10
10
|
scrollX: Animated.Value;
|
|
11
|
+
dotsAnimatedValue: Animated.Value;
|
|
12
|
+
onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
|
|
13
|
+
onScrollBeginDrag: () => void;
|
|
11
14
|
nextPage: () => void;
|
|
15
|
+
mirror?: boolean;
|
|
12
16
|
};
|
|
13
17
|
export declare const OnboardingPages: ({ showPagination, showNext, ...props }: Props) => React.JSX.Element;
|
|
14
18
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OnboardingPages.d.ts","sourceRoot":"","sources":["../../../../src/components/OnboardingPages.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"OnboardingPages.d.ts","sourceRoot":"","sources":["../../../../src/components/OnboardingPages.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,EACL,QAAQ,EAGR,QAAQ,EACR,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAkB,KAAK,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAKhD,KAAK,KAAK,GAAG,eAAe,GAAG;IAC7B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,cAAc,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;IACxB,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACnE,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,eAAe,2CAIzB,KAAK,sBAmIP,CAAC"}
|
|
@@ -13,6 +13,8 @@ export type Page = {
|
|
|
13
13
|
titleStyle?: StyleProp<TextStyle>;
|
|
14
14
|
subtitleStyle?: StyleProp<TextStyle>;
|
|
15
15
|
swap?: boolean;
|
|
16
|
+
/** Internal: counter-flips page content when the slider is mirrored for RTL. */
|
|
17
|
+
mirror?: boolean;
|
|
16
18
|
};
|
|
17
19
|
export declare function OnboardingPage(props: Page): React.JSX.Element;
|
|
18
20
|
//# sourceMappingURL=Page.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Page.d.ts","sourceRoot":"","sources":["../../../../src/components/Page.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,IAAI,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,mBAAmB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,mBAAmB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,UAAU,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Page.d.ts","sourceRoot":"","sources":["../../../../src/components/Page.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,IAAI,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,mBAAmB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,mBAAmB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,UAAU,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gFAAgF;IAChF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAKF,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,qBAwCzC"}
|
|
@@ -9,9 +9,11 @@ type FooterProps = {
|
|
|
9
9
|
showDone?: boolean;
|
|
10
10
|
showSkip?: boolean;
|
|
11
11
|
showNext?: boolean;
|
|
12
|
+
showPrevious?: boolean;
|
|
12
13
|
nextLabel?: string | React.ReactNode;
|
|
13
14
|
skipLabel?: string | React.ReactNode;
|
|
14
15
|
doneLabel?: string | React.ReactNode;
|
|
16
|
+
previousLabel?: string | React.ReactNode;
|
|
15
17
|
paginationContainerStyle?: StyleProp<ViewStyle>;
|
|
16
18
|
buttonRightContainerStyle?: StyleProp<ViewStyle>;
|
|
17
19
|
buttonLeftContainerStyle?: StyleProp<ViewStyle>;
|
|
@@ -19,11 +21,18 @@ type FooterProps = {
|
|
|
19
21
|
doneLabelStyle?: StyleProp<TextStyle>;
|
|
20
22
|
hasSkipPosition?: boolean;
|
|
21
23
|
skipLabelStyle?: StyleProp<TextStyle>;
|
|
24
|
+
previousLabelStyle?: StyleProp<TextStyle>;
|
|
22
25
|
skipButtonContainerStyle?: StyleProp<ViewStyle>;
|
|
23
26
|
nextButtonContainerStyle?: StyleProp<ViewStyle>;
|
|
24
27
|
doneButtonContainerStyle?: StyleProp<ViewStyle>;
|
|
28
|
+
previousButtonContainerStyle?: StyleProp<ViewStyle>;
|
|
25
29
|
nextLabelStyle?: StyleProp<TextStyle>;
|
|
26
30
|
paginationPosition?: 'top' | 'bottom';
|
|
31
|
+
paginationStyle?: 'dots' | 'progress';
|
|
32
|
+
progressBarStyle?: StyleProp<ViewStyle>;
|
|
33
|
+
progressBarFillStyle?: StyleProp<ViewStyle>;
|
|
34
|
+
dotsAreTappable?: boolean;
|
|
35
|
+
mirror?: boolean;
|
|
27
36
|
onDone?: () => void;
|
|
28
37
|
onSkip?: () => void;
|
|
29
38
|
onNext?: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../../src/components/Pagination.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../../src/components/Pagination.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,QAAQ,EAER,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,KAAK,WAAW,GAAG;IACjB,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IACzC,wBAAwB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChD,yBAAyB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjD,wBAAwB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChD,kBAAkB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,kBAAkB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,wBAAwB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChD,wBAAwB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChD,wBAAwB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChD,4BAA4B,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACpD,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,kBAAkB,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IACtC,gBAAgB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACxC,oBAAoB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,qBAmJ5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Swiper.d.ts","sourceRoot":"","sources":["../../../../src/components/Swiper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Swiper.d.ts","sourceRoot":"","sources":["../../../../src/components/Swiper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA0E5C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../../src/components/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,KAAK,WAAW,GAAG;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACnC,eAAe,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,MAAM,UAAW,WAAW,
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../../src/components/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,KAAK,WAAW,GAAG;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACnC,eAAe,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,MAAM,UAAW,WAAW,wFAuBxC,CAAC;AAEF,eAAO,MAAM,UAAU,UACd,WAAW,GAAG;IACnB,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;CACrC,sBAiBF,CAAC"}
|
|
@@ -4,23 +4,32 @@ export type SliderProps = {
|
|
|
4
4
|
currentPage: number;
|
|
5
5
|
numberOfScreens: number;
|
|
6
6
|
nextPage: (animated?: boolean) => void;
|
|
7
|
+
previousPage: (animated?: boolean) => void;
|
|
7
8
|
scrollTo: (index: number, animated?: boolean) => void;
|
|
8
9
|
};
|
|
9
10
|
type OnboardingContextType = SliderProps & {
|
|
10
11
|
setCurrentPage: (index: number) => void;
|
|
11
12
|
flatListRef: React.RefObject<FlatList>;
|
|
13
|
+
setFlatListRef: (node: FlatList | null) => void;
|
|
12
14
|
width?: number;
|
|
13
15
|
numberOfScreens: number;
|
|
14
16
|
progress: number;
|
|
15
17
|
scrollEnabled?: boolean;
|
|
16
18
|
enableScroll: React.Dispatch<React.SetStateAction<boolean | undefined>>;
|
|
17
19
|
isDone: boolean;
|
|
20
|
+
pauseAutoPlay: () => void;
|
|
21
|
+
resumeAutoPlay: () => void;
|
|
18
22
|
};
|
|
19
23
|
type OnboardingProviderProps = {
|
|
20
24
|
children: React.ReactNode;
|
|
21
25
|
width?: number;
|
|
22
26
|
numberOfScreens: number;
|
|
23
27
|
scrollEnabled?: boolean;
|
|
28
|
+
onPageChange?: (index: number) => void;
|
|
29
|
+
scrollAnimationDuration?: number;
|
|
30
|
+
autoPlay?: boolean;
|
|
31
|
+
autoPlayInterval?: number;
|
|
32
|
+
loop?: boolean;
|
|
24
33
|
};
|
|
25
34
|
export declare const OnboardingContext: React.Context<OnboardingContextType | undefined>;
|
|
26
35
|
export declare const OnboardingProvider: React.FC<OnboardingProviderProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OnboardingContext.d.ts","sourceRoot":"","sources":["../../../../src/context/OnboardingContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"OnboardingContext.d.ts","sourceRoot":"","sources":["../../../../src/context/OnboardingContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAIL,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,YAAY,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACvD,CAAC;AAEF,KAAK,qBAAqB,GAAG,WAAW,GAAG;IACzC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAKvC,cAAc,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;IACxE,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,iBAAiB,kDAElB,CAAC;AAEb,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAmKhE,CAAC"}
|
|
@@ -2,11 +2,14 @@ import React from 'react';
|
|
|
2
2
|
export declare const useOnboarding: () => import("../context/OnboardingContext").SliderProps & {
|
|
3
3
|
setCurrentPage: (index: number) => void;
|
|
4
4
|
flatListRef: React.RefObject<import("react-native").FlatList<any>>;
|
|
5
|
+
setFlatListRef: (node: import("react-native").FlatList<any> | null) => void;
|
|
5
6
|
width?: number | undefined;
|
|
6
7
|
numberOfScreens: number;
|
|
7
8
|
progress: number;
|
|
8
9
|
scrollEnabled?: boolean | undefined;
|
|
9
10
|
enableScroll: React.Dispatch<React.SetStateAction<boolean | undefined>>;
|
|
10
11
|
isDone: boolean;
|
|
12
|
+
pauseAutoPlay: () => void;
|
|
13
|
+
resumeAutoPlay: () => void;
|
|
11
14
|
};
|
|
12
15
|
//# sourceMappingURL=useOnboarding.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOnboarding.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useOnboarding.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"useOnboarding.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useOnboarding.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAO,MAAM,aAAa;;;;;;;;;;;;CAMzB,CAAC"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { OnboardingProps } from './types';
|
|
3
3
|
export { useOnboarding } from './hooks/useOnboarding';
|
|
4
|
+
export type { Page } from './components/Page';
|
|
5
|
+
export type { OnboardingProps } from './types';
|
|
6
|
+
export { createOnboardingStorage, hasCompletedOnboarding, markOnboardingComplete, resetOnboarding, } from './utils/persistence';
|
|
7
|
+
export type { OnboardingStorageAdapter } from './utils/persistence';
|
|
4
8
|
export declare function Onboarding(props: OnboardingProps): React.JSX.Element;
|
|
5
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEpE,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,qBAgBhD"}
|
|
@@ -6,13 +6,19 @@ export type OnboardingProps = {
|
|
|
6
6
|
nextLabel?: string | React.ReactNode;
|
|
7
7
|
skipLabel?: string | React.ReactNode;
|
|
8
8
|
doneLabel?: string | React.ReactNode;
|
|
9
|
+
previousLabel?: string | React.ReactNode;
|
|
9
10
|
showSkip?: boolean;
|
|
10
11
|
showNext?: boolean;
|
|
11
12
|
showDone?: boolean;
|
|
13
|
+
showPrevious?: boolean;
|
|
12
14
|
onDone?: () => void;
|
|
13
15
|
onSkip?: () => void;
|
|
16
|
+
onPageChange?: (index: number) => void;
|
|
14
17
|
showPagination?: boolean;
|
|
15
18
|
scrollEnabled?: boolean;
|
|
19
|
+
autoPlay?: boolean;
|
|
20
|
+
autoPlayInterval?: number;
|
|
21
|
+
loop?: boolean;
|
|
16
22
|
customFooter?: (props: {
|
|
17
23
|
nextPage: () => void;
|
|
18
24
|
}) => React.ReactNode;
|
|
@@ -22,9 +28,11 @@ export type OnboardingProps = {
|
|
|
22
28
|
dotsContainerStyle?: StyleProp<ViewStyle>;
|
|
23
29
|
doneLabelStyle?: StyleProp<TextStyle>;
|
|
24
30
|
skipLabelStyle?: StyleProp<TextStyle>;
|
|
31
|
+
previousLabelStyle?: StyleProp<TextStyle>;
|
|
25
32
|
skipButtonContainerStyle?: StyleProp<ViewStyle>;
|
|
26
33
|
nextButtonContainerStyle?: StyleProp<ViewStyle>;
|
|
27
34
|
doneButtonContainerStyle?: StyleProp<ViewStyle>;
|
|
35
|
+
previousButtonContainerStyle?: StyleProp<ViewStyle>;
|
|
28
36
|
skipButtonPosition?: 'top-left' | 'top-right';
|
|
29
37
|
nextLabelStyle?: StyleProp<TextStyle>;
|
|
30
38
|
containerStyle?: StyleProp<ViewStyle>;
|
|
@@ -33,8 +41,13 @@ export type OnboardingProps = {
|
|
|
33
41
|
titleStyle?: StyleProp<TextStyle>;
|
|
34
42
|
subtitleStyle?: StyleProp<TextStyle>;
|
|
35
43
|
paginationPosition?: 'top' | 'bottom';
|
|
44
|
+
paginationStyle?: 'dots' | 'progress';
|
|
45
|
+
progressBarStyle?: StyleProp<ViewStyle>;
|
|
46
|
+
progressBarFillStyle?: StyleProp<ViewStyle>;
|
|
47
|
+
dotsAreTappable?: boolean;
|
|
36
48
|
scrollAnimationDuration?: number;
|
|
37
49
|
useNativeDriver?: boolean;
|
|
50
|
+
rtl?: boolean;
|
|
38
51
|
width?: number;
|
|
39
52
|
color?: string;
|
|
40
53
|
pages?: Page[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAC;IACpE,wBAAwB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChD,yBAAyB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjD,wBAAwB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChD,kBAAkB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,wBAAwB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChD,wBAAwB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChD,wBAAwB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChD,kBAAkB,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IAC9C,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,mBAAmB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,mBAAmB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,UAAU,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,kBAAkB,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACtC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,CACA;IACE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;CAC9B,GACD;IAAE,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CACpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal AsyncStorage-compatible interface. Any storage that implements these
|
|
3
|
+
* three methods works (e.g. @react-native-async-storage/async-storage,
|
|
4
|
+
* expo-secure-store wrappers, or an in-memory mock in tests). Keeping the
|
|
5
|
+
* dependency injected means this library does not have to ship a storage peer
|
|
6
|
+
* dependency of its own.
|
|
7
|
+
*/
|
|
8
|
+
export type OnboardingStorageAdapter = {
|
|
9
|
+
getItem: (key: string) => Promise<string | null>;
|
|
10
|
+
setItem: (key: string, value: string) => Promise<void>;
|
|
11
|
+
removeItem: (key: string) => Promise<void>;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Returns whether the user has previously completed onboarding stored under
|
|
15
|
+
* `key`. Defaults to a namespaced key so callers usually only pass the storage.
|
|
16
|
+
*/
|
|
17
|
+
export declare function hasCompletedOnboarding(storage: OnboardingStorageAdapter, key?: string): Promise<boolean>;
|
|
18
|
+
/** Marks onboarding as completed so it can be skipped on subsequent launches. */
|
|
19
|
+
export declare function markOnboardingComplete(storage: OnboardingStorageAdapter, key?: string): Promise<void>;
|
|
20
|
+
/** Clears the stored completion flag (useful for "replay onboarding" actions). */
|
|
21
|
+
export declare function resetOnboarding(storage: OnboardingStorageAdapter, key?: string): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Convenience factory that binds a storage adapter (and optional key) once and
|
|
24
|
+
* returns ready-to-call helpers, so app code doesn't repeat the storage arg.
|
|
25
|
+
*/
|
|
26
|
+
export declare function createOnboardingStorage(storage: OnboardingStorageAdapter, key?: string): {
|
|
27
|
+
hasCompleted: () => Promise<boolean>;
|
|
28
|
+
markComplete: () => Promise<void>;
|
|
29
|
+
reset: () => Promise<void>;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=persistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../../src/utils/persistence.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACjD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C,CAAC;AAKF;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,wBAAwB,EACjC,GAAG,GAAE,MAAoB,GACxB,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED,iFAAiF;AACjF,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,wBAAwB,EACjC,GAAG,GAAE,MAAoB,GACxB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,kFAAkF;AAClF,wBAAsB,eAAe,CACnC,OAAO,EAAE,wBAAwB,EACjC,GAAG,GAAE,MAAoB,GACxB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,wBAAwB,EACjC,GAAG,GAAE,MAAoB;;;;EAO1B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-app-onboard",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "React Native App Onboard is a customizable, easy-to-use, and efficient library for creating compelling onboarding experiences for your React Native applications. It provides smooth, fluid transitions and animations, with a focus on simplicity and usability.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"!**/.*"
|
|
27
27
|
],
|
|
28
28
|
"scripts": {
|
|
29
|
-
"example": "yarn workspace react-native-app-onboard-example",
|
|
29
|
+
"example": "yarn workspace react-native-app-onboard-example start",
|
|
30
30
|
"test": "jest",
|
|
31
31
|
"typecheck": "tsc --noEmit",
|
|
32
32
|
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
@@ -66,11 +66,14 @@
|
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@commitlint/config-conventional": "^17.0.2",
|
|
68
68
|
"@evilmartians/lefthook": "^1.5.0",
|
|
69
|
+
"@react-native/babel-preset": "0.74.84",
|
|
69
70
|
"@react-native/eslint-config": "^0.73.1",
|
|
70
71
|
"@release-it/conventional-changelog": "^5.0.0",
|
|
71
72
|
"@types/jest": "^29.5.5",
|
|
72
73
|
"@types/react": "^18.2.44",
|
|
74
|
+
"@types/react-test-renderer": "^18.0.0",
|
|
73
75
|
"@types/tinycolor2": "^1.4.6",
|
|
76
|
+
"@typescript/native-preview": "^7.0.0-dev.20260606.1",
|
|
74
77
|
"commitlint": "^17.0.2",
|
|
75
78
|
"del-cli": "^5.1.0",
|
|
76
79
|
"eslint": "^8.51.0",
|
|
@@ -81,6 +84,7 @@
|
|
|
81
84
|
"react": "18.2.0",
|
|
82
85
|
"react-native": "0.74.2",
|
|
83
86
|
"react-native-builder-bob": "^0.20.0",
|
|
87
|
+
"react-test-renderer": "18.2.0",
|
|
84
88
|
"release-it": "^15.0.0",
|
|
85
89
|
"typescript": "^5.2.2"
|
|
86
90
|
},
|
|
@@ -94,6 +98,9 @@
|
|
|
94
98
|
"packageManager": "yarn@3.6.1",
|
|
95
99
|
"jest": {
|
|
96
100
|
"preset": "react-native",
|
|
101
|
+
"moduleNameMapper": {
|
|
102
|
+
"^react-native-app-onboard$": "<rootDir>/src/index"
|
|
103
|
+
},
|
|
97
104
|
"modulePathIgnorePatterns": [
|
|
98
105
|
"<rootDir>/example/node_modules",
|
|
99
106
|
"<rootDir>/lib/"
|
|
@@ -167,5 +174,8 @@
|
|
|
167
174
|
},
|
|
168
175
|
"dependencies": {
|
|
169
176
|
"tinycolor2": "^1.6.0"
|
|
170
|
-
}
|
|
177
|
+
},
|
|
178
|
+
"workspaces": [
|
|
179
|
+
"example"
|
|
180
|
+
]
|
|
171
181
|
}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
View,
|
|
3
|
+
Dimensions,
|
|
4
|
+
Animated,
|
|
5
|
+
StyleSheet,
|
|
6
|
+
FlatList,
|
|
7
|
+
type NativeSyntheticEvent,
|
|
8
|
+
type NativeScrollEvent,
|
|
9
|
+
} from 'react-native';
|
|
2
10
|
import React from 'react';
|
|
3
11
|
import { Pagination } from './Pagination';
|
|
4
12
|
import type { OnboardingProps } from '../types';
|
|
@@ -10,10 +18,16 @@ type CustomPagesProps = OnboardingProps & {
|
|
|
10
18
|
children?: React.ReactNode[];
|
|
11
19
|
currentPage: number;
|
|
12
20
|
setPage: (newPageIndex: number) => void;
|
|
13
|
-
|
|
21
|
+
setFlatListRef: (node: FlatList | null) => void;
|
|
14
22
|
scrollX: Animated.Value;
|
|
23
|
+
dotsAnimatedValue: Animated.Value;
|
|
24
|
+
onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
|
|
25
|
+
onScrollBeginDrag: () => void;
|
|
15
26
|
nextPage: () => void;
|
|
16
27
|
numberOfScreens: number;
|
|
28
|
+
// Accepted for prop-spread compatibility. Forced-`rtl` mirroring applies to
|
|
29
|
+
// the declarative `pages` API; custom children follow the device direction.
|
|
30
|
+
mirror?: boolean;
|
|
17
31
|
};
|
|
18
32
|
|
|
19
33
|
export type SliderProps = {
|
|
@@ -28,6 +42,45 @@ export const CustomPages = ({
|
|
|
28
42
|
showNext = true,
|
|
29
43
|
...props
|
|
30
44
|
}: CustomPagesProps) => {
|
|
45
|
+
const pageWidth = props.width || width;
|
|
46
|
+
|
|
47
|
+
const paginationProps = {
|
|
48
|
+
color: '#fff',
|
|
49
|
+
backgroundColor: '#333',
|
|
50
|
+
width: pageWidth,
|
|
51
|
+
onNext: props.nextPage,
|
|
52
|
+
onSkip: props.onSkip,
|
|
53
|
+
onDone: props.onDone,
|
|
54
|
+
showDone: props.showDone,
|
|
55
|
+
showPrevious: props.showPrevious,
|
|
56
|
+
animatedValue: props.dotsAnimatedValue,
|
|
57
|
+
showSkip: props.showSkip,
|
|
58
|
+
numberOfScreens: props.numberOfScreens,
|
|
59
|
+
skipLabel: props.skipLabel,
|
|
60
|
+
showNext,
|
|
61
|
+
nextLabel: props.nextLabel,
|
|
62
|
+
previousLabel: props.previousLabel,
|
|
63
|
+
doneLabel: props.doneLabel,
|
|
64
|
+
hasSkipPosition: !!props.skipButtonPosition,
|
|
65
|
+
paginationStyle: props.paginationStyle,
|
|
66
|
+
progressBarStyle: props.progressBarStyle,
|
|
67
|
+
progressBarFillStyle: props.progressBarFillStyle,
|
|
68
|
+
dotsAreTappable: props.dotsAreTappable,
|
|
69
|
+
paginationContainerStyle: props.paginationContainerStyle,
|
|
70
|
+
buttonRightContainerStyle: props.buttonRightContainerStyle,
|
|
71
|
+
buttonLeftContainerStyle: props.buttonLeftContainerStyle,
|
|
72
|
+
dotsContainerStyle: props.dotsContainerStyle,
|
|
73
|
+
doneLabelStyle: props.doneLabelStyle,
|
|
74
|
+
skipButtonContainerStyle: props.skipButtonContainerStyle,
|
|
75
|
+
nextButtonContainerStyle: props.nextButtonContainerStyle,
|
|
76
|
+
doneButtonContainerStyle: props.doneButtonContainerStyle,
|
|
77
|
+
previousButtonContainerStyle: props.previousButtonContainerStyle,
|
|
78
|
+
skipLabelStyle: props.skipLabelStyle,
|
|
79
|
+
previousLabelStyle: props.previousLabelStyle,
|
|
80
|
+
nextLabelStyle: props.nextLabelStyle,
|
|
81
|
+
paginationPosition: props.paginationPosition,
|
|
82
|
+
};
|
|
83
|
+
|
|
31
84
|
return (
|
|
32
85
|
<View style={[styles.container]}>
|
|
33
86
|
{props.skipButtonPosition && props.showSkip && (
|
|
@@ -43,53 +96,22 @@ export const CustomPages = ({
|
|
|
43
96
|
<>
|
|
44
97
|
{props.customFooter &&
|
|
45
98
|
props.customFooter({ nextPage: props.nextPage })}
|
|
46
|
-
{!props.customFooter &&
|
|
47
|
-
<Pagination
|
|
48
|
-
color={'#fff'}
|
|
49
|
-
backgroundColor={'#333'}
|
|
50
|
-
width={width}
|
|
51
|
-
onNext={props.nextPage}
|
|
52
|
-
onSkip={props.onSkip}
|
|
53
|
-
onDone={props.onDone}
|
|
54
|
-
showDone={props.showDone}
|
|
55
|
-
animatedValue={props.scrollX}
|
|
56
|
-
showSkip={props.showSkip}
|
|
57
|
-
numberOfScreens={props.numberOfScreens}
|
|
58
|
-
skipLabel={props.skipLabel}
|
|
59
|
-
showNext={showNext}
|
|
60
|
-
nextLabel={props.nextLabel}
|
|
61
|
-
doneLabel={props.doneLabel}
|
|
62
|
-
hasSkipPosition={!!props.skipButtonPosition}
|
|
63
|
-
paginationContainerStyle={props.paginationContainerStyle}
|
|
64
|
-
buttonRightContainerStyle={props.buttonRightContainerStyle}
|
|
65
|
-
buttonLeftContainerStyle={props.buttonLeftContainerStyle}
|
|
66
|
-
dotsContainerStyle={props.dotsContainerStyle}
|
|
67
|
-
doneLabelStyle={props.doneLabelStyle}
|
|
68
|
-
skipButtonContainerStyle={props.skipButtonContainerStyle}
|
|
69
|
-
nextButtonContainerStyle={props.nextButtonContainerStyle}
|
|
70
|
-
doneButtonContainerStyle={props.doneButtonContainerStyle}
|
|
71
|
-
skipLabelStyle={props.skipLabelStyle}
|
|
72
|
-
nextLabelStyle={props.nextLabelStyle}
|
|
73
|
-
paginationPosition={props.paginationPosition}
|
|
74
|
-
/>
|
|
75
|
-
)}
|
|
99
|
+
{!props.customFooter && <Pagination {...paginationProps} />}
|
|
76
100
|
</>
|
|
77
101
|
)}
|
|
78
102
|
<Animated.FlatList
|
|
79
|
-
ref={props.
|
|
103
|
+
ref={(node) => props.setFlatListRef(node as FlatList | null)}
|
|
80
104
|
data={React.Children.toArray(props.children)}
|
|
81
105
|
horizontal
|
|
82
106
|
pagingEnabled
|
|
83
107
|
showsHorizontalScrollIndicator={false}
|
|
84
108
|
scrollEnabled={props.scrollEnabled}
|
|
85
|
-
onScroll={
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
)}
|
|
89
|
-
scrollEventThrottle={1}
|
|
109
|
+
onScroll={props.onScroll}
|
|
110
|
+
onScrollBeginDrag={props.onScrollBeginDrag}
|
|
111
|
+
scrollEventThrottle={16}
|
|
90
112
|
onMomentumScrollEnd={(event) => {
|
|
91
113
|
const pageIndex = Math.round(
|
|
92
|
-
event.nativeEvent.contentOffset.x /
|
|
114
|
+
event.nativeEvent.contentOffset.x / pageWidth
|
|
93
115
|
);
|
|
94
116
|
props.setPage(pageIndex || 0);
|
|
95
117
|
}}
|
|
@@ -111,36 +133,7 @@ export const CustomPages = ({
|
|
|
111
133
|
<>
|
|
112
134
|
{props.customFooter &&
|
|
113
135
|
props.customFooter({ nextPage: props.nextPage })}
|
|
114
|
-
{!props.customFooter &&
|
|
115
|
-
<Pagination
|
|
116
|
-
color={'#fff'}
|
|
117
|
-
backgroundColor={'#333'}
|
|
118
|
-
width={width}
|
|
119
|
-
onNext={props.nextPage}
|
|
120
|
-
onSkip={props.onSkip}
|
|
121
|
-
onDone={props.onDone}
|
|
122
|
-
showDone={props.showDone}
|
|
123
|
-
animatedValue={props.scrollX}
|
|
124
|
-
showSkip={props.showSkip}
|
|
125
|
-
numberOfScreens={props.numberOfScreens}
|
|
126
|
-
skipLabel={props.skipLabel}
|
|
127
|
-
nextLabel={props.nextLabel}
|
|
128
|
-
showNext={showNext}
|
|
129
|
-
doneLabel={props.doneLabel}
|
|
130
|
-
paginationContainerStyle={props.paginationContainerStyle}
|
|
131
|
-
buttonRightContainerStyle={props.buttonRightContainerStyle}
|
|
132
|
-
buttonLeftContainerStyle={props.buttonLeftContainerStyle}
|
|
133
|
-
dotsContainerStyle={props.dotsContainerStyle}
|
|
134
|
-
doneLabelStyle={props.doneLabelStyle}
|
|
135
|
-
skipButtonContainerStyle={props.skipButtonContainerStyle}
|
|
136
|
-
nextButtonContainerStyle={props.nextButtonContainerStyle}
|
|
137
|
-
doneButtonContainerStyle={props.doneButtonContainerStyle}
|
|
138
|
-
skipLabelStyle={props.skipLabelStyle}
|
|
139
|
-
hasSkipPosition={!!props.skipButtonPosition}
|
|
140
|
-
paginationPosition={props.paginationPosition}
|
|
141
|
-
nextLabelStyle={props.nextLabelStyle}
|
|
142
|
-
/>
|
|
143
|
-
)}
|
|
136
|
+
{!props.customFooter && <Pagination {...paginationProps} />}
|
|
144
137
|
</>
|
|
145
138
|
)}
|
|
146
139
|
</View>
|