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.
Files changed (73) hide show
  1. package/README.md +89 -7
  2. package/lib/commonjs/components/CustomPages.js +31 -55
  3. package/lib/commonjs/components/CustomPages.js.map +1 -1
  4. package/lib/commonjs/components/OnboardingPages.js +59 -74
  5. package/lib/commonjs/components/OnboardingPages.js.map +1 -1
  6. package/lib/commonjs/components/Page.js +8 -3
  7. package/lib/commonjs/components/Page.js.map +1 -1
  8. package/lib/commonjs/components/Pagination.js +75 -13
  9. package/lib/commonjs/components/Pagination.js.map +1 -1
  10. package/lib/commonjs/components/Swiper.js +58 -85
  11. package/lib/commonjs/components/Swiper.js.map +1 -1
  12. package/lib/commonjs/components/button.js +3 -1
  13. package/lib/commonjs/components/button.js.map +1 -1
  14. package/lib/commonjs/context/OnboardingContext.js +101 -21
  15. package/lib/commonjs/context/OnboardingContext.js.map +1 -1
  16. package/lib/commonjs/hooks/useOnboarding.js +1 -1
  17. package/lib/commonjs/hooks/useOnboarding.js.map +1 -1
  18. package/lib/commonjs/index.js +33 -2
  19. package/lib/commonjs/index.js.map +1 -1
  20. package/lib/commonjs/utils/persistence.js +51 -0
  21. package/lib/commonjs/utils/persistence.js.map +1 -0
  22. package/lib/module/components/CustomPages.js +31 -55
  23. package/lib/module/components/CustomPages.js.map +1 -1
  24. package/lib/module/components/OnboardingPages.js +60 -75
  25. package/lib/module/components/OnboardingPages.js.map +1 -1
  26. package/lib/module/components/Page.js +8 -3
  27. package/lib/module/components/Page.js.map +1 -1
  28. package/lib/module/components/Pagination.js +76 -14
  29. package/lib/module/components/Pagination.js.map +1 -1
  30. package/lib/module/components/Swiper.js +59 -86
  31. package/lib/module/components/Swiper.js.map +1 -1
  32. package/lib/module/components/button.js +3 -1
  33. package/lib/module/components/button.js.map +1 -1
  34. package/lib/module/context/OnboardingContext.js +102 -22
  35. package/lib/module/context/OnboardingContext.js.map +1 -1
  36. package/lib/module/hooks/useOnboarding.js +1 -1
  37. package/lib/module/hooks/useOnboarding.js.map +1 -1
  38. package/lib/module/index.js +8 -1
  39. package/lib/module/index.js.map +1 -1
  40. package/lib/module/utils/persistence.js +42 -0
  41. package/lib/module/utils/persistence.js.map +1 -0
  42. package/lib/typescript/src/components/CustomPages.d.ts +6 -2
  43. package/lib/typescript/src/components/CustomPages.d.ts.map +1 -1
  44. package/lib/typescript/src/components/OnboardingPages.d.ts +6 -2
  45. package/lib/typescript/src/components/OnboardingPages.d.ts.map +1 -1
  46. package/lib/typescript/src/components/Page.d.ts +2 -0
  47. package/lib/typescript/src/components/Page.d.ts.map +1 -1
  48. package/lib/typescript/src/components/Pagination.d.ts +9 -0
  49. package/lib/typescript/src/components/Pagination.d.ts.map +1 -1
  50. package/lib/typescript/src/components/Swiper.d.ts.map +1 -1
  51. package/lib/typescript/src/components/button.d.ts.map +1 -1
  52. package/lib/typescript/src/context/OnboardingContext.d.ts +9 -0
  53. package/lib/typescript/src/context/OnboardingContext.d.ts.map +1 -1
  54. package/lib/typescript/src/hooks/useOnboarding.d.ts +3 -0
  55. package/lib/typescript/src/hooks/useOnboarding.d.ts.map +1 -1
  56. package/lib/typescript/src/index.d.ts +4 -0
  57. package/lib/typescript/src/index.d.ts.map +1 -1
  58. package/lib/typescript/src/types/index.d.ts +13 -0
  59. package/lib/typescript/src/types/index.d.ts.map +1 -1
  60. package/lib/typescript/src/utils/persistence.d.ts +31 -0
  61. package/lib/typescript/src/utils/persistence.d.ts.map +1 -0
  62. package/package.json +13 -3
  63. package/src/components/CustomPages.tsx +62 -69
  64. package/src/components/OnboardingPages.tsx +79 -82
  65. package/src/components/Page.tsx +8 -2
  66. package/src/components/Pagination.tsx +121 -29
  67. package/src/components/Swiper.tsx +65 -87
  68. package/src/components/button.tsx +6 -1
  69. package/src/context/OnboardingContext.tsx +145 -26
  70. package/src/hooks/useOnboarding.tsx +1 -3
  71. package/src/index.tsx +16 -1
  72. package/src/types/index.ts +13 -0
  73. 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('useOnboardingContext must be used within an OnboardingProvider');
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,CACb,gEACF,CAAC;EACH;EACA,OAAOF,OAAO;AAChB,CAAC","ignoreList":[]}
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":[]}
@@ -1,12 +1,19 @@
1
1
  import React from 'react';
2
- import { Swiper } from './components/Swiper';
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
  }
@@ -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,qBAAqB;AAC5C,SAASC,kBAAkB,QAAQ,6BAA6B;AAGhE,SAASC,aAAa,QAAQ,uBAAuB;AAErD,OAAO,SAASC,UAAUA,CAACC,KAAsB,EAAE;EAAA,IAAAC,YAAA;EACjD,MAAMC,eAAe,GAAGP,KAAK,CAACQ,QAAQ,CAACC,KAAK,CAACJ,KAAK,CAACK,QAAQ,CAAC;EAC5D,oBACEV,KAAA,CAAAW,aAAA,CAACT,kBAAkB;IACjBU,aAAa,EAAEP,KAAK,CAACO,aAAc;IACnCL,eAAe,EAAEA,eAAe,MAAAD,YAAA,GAAID,KAAK,CAACQ,KAAK,cAAAP,YAAA,uBAAXA,YAAA,CAAaQ,MAAM,KAAI;EAAE,gBAE7Dd,KAAA,CAAAW,aAAA,CAACV,MAAM,EAAKI,KAAK,EAAGA,KAAK,CAACK,QAAiB,CACzB,CAAC;AAEzB","ignoreList":[]}
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
- flatListRef: React.RefObject<FlatList>;
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,EAAoB,QAAQ,EAAc,QAAQ,EAAE,MAAM,cAAc,CAAC;AAChF,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,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;IACxB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB,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,sBAsHlB,CAAC"}
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
- flatListRef: React.RefObject<FlatList>;
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,KAAiB,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAA0B,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE1E,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,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;IACxB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,eAAe,2CAIzB,KAAK,sBAoJP,CAAC"}
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;CAChB,CAAC;AAKF,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,qBAuCzC"}
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,EAEL,QAAQ,EAER,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,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,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,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,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,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,kBAAkB,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACtC,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,qBA+E5C"}
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;AAK1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAqG5C,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,wFAkBxC,CAAC;AAEF,eAAO,MAAM,UAAU,UACd,WAAW,GAAG;IACnB,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;CACrC,sBAiBF,CAAC"}
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,EAAc,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEzD,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,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;IACvC,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;CACjB,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;CACzB,CAAC;AAEF,eAAO,MAAM,iBAAiB,kDAElB,CAAC;AAEb,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA8DhE,CAAC"}
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;;;;;;;;;CAQzB,CAAC"}
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;AAEtD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,qBAUhD"}
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.1.9",
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 { View, Dimensions, Animated, StyleSheet, FlatList } from 'react-native';
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
- flatListRef: React.RefObject<FlatList>;
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.flatListRef}
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={Animated.event(
86
- [{ nativeEvent: { contentOffset: { x: props.scrollX } } }],
87
- { useNativeDriver: false }
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 / width
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>