@rubixscript/react-native-onboarding 1.0.1 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +383 -383
  3. package/dist/components/NavigationButtons.js +17 -17
  4. package/dist/components/Onboarding.js +16 -16
  5. package/dist/components/Pagination.js +30 -30
  6. package/dist/components/SimpleOnboardingScreen.d.ts +54 -0
  7. package/dist/components/SimpleOnboardingScreen.d.ts.map +1 -0
  8. package/dist/components/SimpleOnboardingScreen.js +184 -0
  9. package/dist/components/index.d.ts +2 -0
  10. package/dist/components/index.d.ts.map +1 -1
  11. package/dist/components/index.js +1 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +2 -0
  15. package/dist/presets/index.d.ts.map +1 -1
  16. package/dist/presets/index.js +24 -27
  17. package/dist/slides/FormSlide.js +37 -37
  18. package/dist/slides/IconSlide.js +24 -24
  19. package/dist/slides/ImageSlide.js +20 -20
  20. package/dist/slides/VideoSlide.js +20 -20
  21. package/dist/themes/index.d.ts.map +1 -1
  22. package/dist/themes/index.js +9 -7
  23. package/package.json +71 -66
  24. package/src/components/NavigationButtons.tsx +198 -198
  25. package/src/components/Onboarding.tsx +337 -337
  26. package/src/components/Pagination.tsx +337 -337
  27. package/src/components/SimpleOnboardingScreen.tsx +266 -0
  28. package/src/components/index.ts +7 -5
  29. package/src/index.ts +69 -65
  30. package/src/presets/index.ts +391 -394
  31. package/src/slides/FormSlide.tsx +314 -314
  32. package/src/slides/IconSlide.tsx +166 -166
  33. package/src/slides/ImageSlide.tsx +132 -132
  34. package/src/slides/VideoSlide.tsx +146 -146
  35. package/src/slides/index.tsx +37 -37
  36. package/src/themes/index.ts +576 -574
  37. package/src/types/index.ts +247 -247
@@ -61,33 +61,33 @@ export const FormSlide = ({ data, theme, onSubmit, darkMode, isSubmitting = fals
61
61
  const value = formData[field.key];
62
62
  const error = errors[field.key];
63
63
  if (field.type === 'select') {
64
- return (<View key={field.key} style={styles.fieldContainer}>
65
- <Text style={styles.label}>{field.label}</Text>
66
- <View style={styles.optionsContainer}>
64
+ return (<View key={field.key} style={styles.fieldContainer}>
65
+ <Text style={styles.label}>{field.label}</Text>
66
+ <View style={styles.optionsContainer}>
67
67
  {field.options?.map(option => (<TouchableOpacity key={option.value} style={[
68
68
  styles.optionCard,
69
69
  value === option.value && styles.optionCardActive,
70
70
  { borderColor: theme.colors.border },
71
- ]} onPress={() => updateField(field.key, option.value)}>
72
- {option.icon && (<Ionicons name={option.icon} size={20} color={value === option.value ? theme.colors.text.inverse : theme.colors.text.secondary} style={{ marginRight: 8 }}/>)}
71
+ ]} onPress={() => updateField(field.key, option.value)}>
72
+ {option.icon && (<Ionicons name={option.icon} size={20} color={value === option.value ? theme.colors.text.inverse : theme.colors.text.secondary} style={{ marginRight: 8 }}/>)}
73
73
  <Text style={[
74
74
  styles.optionLabel,
75
75
  value === option.value && { color: theme.colors.text.inverse },
76
- ]}>
77
- {option.label}
78
- </Text>
79
- </TouchableOpacity>))}
80
- </View>
81
- {error && <Text style={styles.errorText}>{error}</Text>}
76
+ ]}>
77
+ {option.label}
78
+ </Text>
79
+ </TouchableOpacity>))}
80
+ </View>
81
+ {error && <Text style={styles.errorText}>{error}</Text>}
82
82
  </View>);
83
83
  }
84
- return (<View key={field.key} style={styles.fieldContainer}>
85
- <Text style={styles.label}>{field.label}</Text>
84
+ return (<View key={field.key} style={styles.fieldContainer}>
85
+ <Text style={styles.label}>{field.label}</Text>
86
86
  <TextInput style={[
87
87
  styles.input,
88
88
  { borderColor: error ? theme.colors.text.secondary : theme.colors.border },
89
- ]} placeholder={field.placeholder} placeholderTextColor={theme.colors.text.secondary} value={value} onChangeText={text => updateField(field.key, text)} keyboardType={field.type === 'number' ? 'numeric' : field.type === 'email' ? 'email-address' : 'default'} secureTextEntry={field.type === 'password'} multiline={field.multiline} numberOfLines={field.numberOfLines}/>
90
- {error && <Text style={styles.errorText}>{error}</Text>}
89
+ ]} placeholder={field.placeholder} placeholderTextColor={theme.colors.text.secondary} value={value} onChangeText={text => updateField(field.key, text)} keyboardType={field.type === 'number' ? 'numeric' : field.type === 'email' ? 'email-address' : 'default'} secureTextEntry={field.type === 'password'} multiline={field.multiline} numberOfLines={field.numberOfLines}/>
90
+ {error && <Text style={styles.errorText}>{error}</Text>}
91
91
  </View>);
92
92
  };
93
93
  const headerStyle = useMemo(() => ({
@@ -102,30 +102,30 @@ export const FormSlide = ({ data, theme, onSubmit, darkMode, isSubmitting = fals
102
102
  ...styles.description,
103
103
  color: gradientColors?.length ? theme.colors.text.secondary : theme.colors.text.secondary,
104
104
  }), [gradientColors, theme]);
105
- const content = (<KeyboardAvoidingView style={styles.keyboardContainer} behavior={Platform.OS === 'ios' ? 'padding' : 'height'} keyboardVerticalOffset={Platform.OS === 'ios' ? 0 : 20}>
106
- <ScrollView style={styles.scrollView} contentContainerStyle={styles.scrollContent} showsVerticalScrollIndicator={false}>
107
- {/* Header */}
108
- <Animated.View entering={FadeIn.duration(300)} style={headerStyle}>
109
- {title && <Text style={titleStyle}>{title}</Text>}
110
- {description && <Text style={descriptionStyle}>{description}</Text>}
111
- </Animated.View>
112
-
113
- {/* Form Fields */}
114
- <View style={styles.formContainer}>
115
- {fields.map(renderField)}
116
- </View>
117
-
118
- {/* Submit Button */}
119
- <Animated.View entering={FadeIn.delay(300).duration(300)} style={styles.buttonContainer}>
120
- <TouchableOpacity style={[styles.submitButton, { backgroundColor: theme.colors.primary }]} onPress={handleSubmit} disabled={isSubmitting} activeOpacity={0.8}>
121
- <Text style={styles.submitButtonText}>{isSubmitting ? 'Submitting...' : submitLabel}</Text>
122
- </TouchableOpacity>
123
- </Animated.View>
124
- </ScrollView>
105
+ const content = (<KeyboardAvoidingView style={styles.keyboardContainer} behavior={Platform.OS === 'ios' ? 'padding' : 'height'} keyboardVerticalOffset={Platform.OS === 'ios' ? 0 : 20}>
106
+ <ScrollView style={styles.scrollView} contentContainerStyle={styles.scrollContent} showsVerticalScrollIndicator={false}>
107
+ {/* Header */}
108
+ <Animated.View entering={FadeIn.duration(300)} style={headerStyle}>
109
+ {title && <Text style={titleStyle}>{title}</Text>}
110
+ {description && <Text style={descriptionStyle}>{description}</Text>}
111
+ </Animated.View>
112
+
113
+ {/* Form Fields */}
114
+ <View style={styles.formContainer}>
115
+ {fields.map(renderField)}
116
+ </View>
117
+
118
+ {/* Submit Button */}
119
+ <Animated.View entering={FadeIn.delay(300).duration(300)} style={styles.buttonContainer}>
120
+ <TouchableOpacity style={[styles.submitButton, { backgroundColor: theme.colors.primary }]} onPress={handleSubmit} disabled={isSubmitting} activeOpacity={0.8}>
121
+ <Text style={styles.submitButtonText}>{isSubmitting ? 'Submitting...' : submitLabel}</Text>
122
+ </TouchableOpacity>
123
+ </Animated.View>
124
+ </ScrollView>
125
125
  </KeyboardAvoidingView>);
126
126
  if (gradientColors && gradientColors.length > 0) {
127
- return (<LinearGradient colors={gradientColors} style={StyleSheet.absoluteFillObject}>
128
- <View style={containerStyle}>{content}</View>
127
+ return (<LinearGradient colors={gradientColors} style={StyleSheet.absoluteFillObject}>
128
+ <View style={containerStyle}>{content}</View>
129
129
  </LinearGradient>);
130
130
  }
131
131
  return <View style={containerStyle}>{content}</View>;
@@ -78,32 +78,32 @@ export const IconSlide = ({ data, theme, darkMode }) => {
78
78
  ...styles.description,
79
79
  color: gradientColors?.length ? theme.colors.text.secondary : theme.colors.text.secondary,
80
80
  }), [gradientColors, theme]);
81
- const content = (<>
82
- {/* Icon */}
83
- <Animated.View style={iconAnimatedStyle}>
84
- <View style={iconContainerStyle}>
85
- {renderIcon()}
86
- </View>
87
- </Animated.View>
88
-
89
- {/* Title */}
90
- {title && (<Animated.Text entering={FadeInDown.delay(100).springify()} style={titleStyle}>
91
- {title}
92
- </Animated.Text>)}
93
-
94
- {/* Subtitle */}
95
- {subtitle && (<Animated.Text entering={FadeInDown.delay(200).springify()} style={subtitleStyle}>
96
- {subtitle}
97
- </Animated.Text>)}
98
-
99
- {/* Description */}
100
- {description && (<Animated.Text entering={FadeInDown.delay(300).springify()} style={descriptionStyle}>
101
- {description}
102
- </Animated.Text>)}
81
+ const content = (<>
82
+ {/* Icon */}
83
+ <Animated.View style={iconAnimatedStyle}>
84
+ <View style={iconContainerStyle}>
85
+ {renderIcon()}
86
+ </View>
87
+ </Animated.View>
88
+
89
+ {/* Title */}
90
+ {title && (<Animated.Text entering={FadeInDown.delay(100).springify()} style={titleStyle}>
91
+ {title}
92
+ </Animated.Text>)}
93
+
94
+ {/* Subtitle */}
95
+ {subtitle && (<Animated.Text entering={FadeInDown.delay(200).springify()} style={subtitleStyle}>
96
+ {subtitle}
97
+ </Animated.Text>)}
98
+
99
+ {/* Description */}
100
+ {description && (<Animated.Text entering={FadeInDown.delay(300).springify()} style={descriptionStyle}>
101
+ {description}
102
+ </Animated.Text>)}
103
103
  </>);
104
104
  if (gradientColors && gradientColors.length > 0) {
105
- return (<LinearGradient colors={gradientColors} style={StyleSheet.absoluteFillObject}>
106
- <View style={containerStyle}>{content}</View>
105
+ return (<LinearGradient colors={gradientColors} style={StyleSheet.absoluteFillObject}>
106
+ <View style={containerStyle}>{content}</View>
107
107
  </LinearGradient>);
108
108
  }
109
109
  return <View style={containerStyle}>{content}</View>;
@@ -43,28 +43,28 @@ export const ImageSlide = ({ data, theme, darkMode }) => {
43
43
  ...styles.description,
44
44
  color: gradientColors?.length ? theme.colors.text.secondary : theme.colors.text.secondary,
45
45
  }), [gradientColors, theme]);
46
- const content = (<>
47
- {/* Image with optional overlay icon */}
48
- <Animated.View entering={FadeIn.duration(400).springify()} style={imageContainerStyle}>
49
- <Image source={image} style={baseImageStyle}/>
50
- {overlayIcon && (<View style={styles.overlayIcon}>
51
- <Ionicons name={overlayIcon.name} size={overlayIcon.size || 48} color={overlayIcon.color || '#FFFFFF'}/>
52
- </View>)}
53
- </Animated.View>
54
-
55
- {/* Title */}
56
- {title && (<Animated.Text entering={FadeInDown.delay(100).springify()} style={titleStyle}>
57
- {title}
58
- </Animated.Text>)}
59
-
60
- {/* Description */}
61
- {description && (<Animated.Text entering={FadeInDown.delay(200).springify()} style={descriptionStyle}>
62
- {description}
63
- </Animated.Text>)}
46
+ const content = (<>
47
+ {/* Image with optional overlay icon */}
48
+ <Animated.View entering={FadeIn.duration(400).springify()} style={imageContainerStyle}>
49
+ <Image source={image} style={baseImageStyle}/>
50
+ {overlayIcon && (<View style={styles.overlayIcon}>
51
+ <Ionicons name={overlayIcon.name} size={overlayIcon.size || 48} color={overlayIcon.color || '#FFFFFF'}/>
52
+ </View>)}
53
+ </Animated.View>
54
+
55
+ {/* Title */}
56
+ {title && (<Animated.Text entering={FadeInDown.delay(100).springify()} style={titleStyle}>
57
+ {title}
58
+ </Animated.Text>)}
59
+
60
+ {/* Description */}
61
+ {description && (<Animated.Text entering={FadeInDown.delay(200).springify()} style={descriptionStyle}>
62
+ {description}
63
+ </Animated.Text>)}
64
64
  </>);
65
65
  if (gradientColors && gradientColors.length > 0) {
66
- return (<LinearGradient colors={gradientColors} style={StyleSheet.absoluteFillObject}>
67
- <View style={containerStyle}>{content}</View>
66
+ return (<LinearGradient colors={gradientColors} style={StyleSheet.absoluteFillObject}>
67
+ <View style={containerStyle}>{content}</View>
68
68
  </LinearGradient>);
69
69
  }
70
70
  return <View style={containerStyle}>{content}</View>;
@@ -52,28 +52,28 @@ export const VideoSlide = ({ data, theme, darkMode }) => {
52
52
  color: gradientColors?.length ? theme.colors.text.secondary : theme.colors.text.secondary,
53
53
  }), [gradientColors, theme]);
54
54
  const videoSourceUri = typeof videoSource === 'string' ? { uri: videoSource } : videoSource;
55
- const content = (<>
56
- {/* Video */}
57
- <Animated.View entering={FadeIn.duration(400)} style={videoContainerStyle}>
58
- <View style={videoStyle}>
59
- <Video ref={videoRef} source={videoSourceUri} style={StyleSheet.absoluteFillObject} useNativeControls={false} resizeMode={ResizeMode.CONTAIN} shouldPlay={autoPlay} isLooping={loop} isMuted={muted} onLoad={handleVideoLoad}/>
60
- {!isReady && poster && (<Animated.Image source={poster} style={StyleSheet.absoluteFillObject} resizeMode="cover"/>)}
61
- </View>
62
- </Animated.View>
63
-
64
- {/* Title */}
65
- {title && (<Animated.Text entering={FadeInDown.delay(100).springify()} style={titleStyle}>
66
- {title}
67
- </Animated.Text>)}
68
-
69
- {/* Description */}
70
- {description && (<Animated.Text entering={FadeInDown.delay(200).springify()} style={descriptionStyle}>
71
- {description}
72
- </Animated.Text>)}
55
+ const content = (<>
56
+ {/* Video */}
57
+ <Animated.View entering={FadeIn.duration(400)} style={videoContainerStyle}>
58
+ <View style={videoStyle}>
59
+ <Video ref={videoRef} source={videoSourceUri} style={StyleSheet.absoluteFillObject} useNativeControls={false} resizeMode={ResizeMode.CONTAIN} shouldPlay={autoPlay} isLooping={loop} isMuted={muted} onLoad={handleVideoLoad}/>
60
+ {!isReady && poster && (<Animated.Image source={poster} style={StyleSheet.absoluteFillObject} resizeMode="cover"/>)}
61
+ </View>
62
+ </Animated.View>
63
+
64
+ {/* Title */}
65
+ {title && (<Animated.Text entering={FadeInDown.delay(100).springify()} style={titleStyle}>
66
+ {title}
67
+ </Animated.Text>)}
68
+
69
+ {/* Description */}
70
+ {description && (<Animated.Text entering={FadeInDown.delay(200).springify()} style={descriptionStyle}>
71
+ {description}
72
+ </Animated.Text>)}
73
73
  </>);
74
74
  if (gradientColors && gradientColors.length > 0) {
75
- return (<LinearGradient colors={gradientColors} style={StyleSheet.absoluteFillObject}>
76
- <View style={containerStyle}>{content}</View>
75
+ return (<LinearGradient colors={gradientColors} style={StyleSheet.absoluteFillObject}>
76
+ <View style={containerStyle}>{content}</View>
77
77
  </LinearGradient>);
78
78
  }
79
79
  return <View style={containerStyle}>{content}</View>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/themes/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAsEzD,eAAO,MAAM,YAAY,EAAE,eAuC1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,YAmC3B,CAAC;AAMF,eAAO,MAAM,cAAc,EAAE,eAuC5B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,YAmC7B,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,eAkCzB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,YAoC1B,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,eAkCzB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,YA2B1B,CAAC;AAMF,eAAO,MAAM,YAAY,EAAE,eAiC1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,YA0B3B,CAAC;AAMF,eAAO,MAAM,aAAa,EAAE,eAkC3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,YA8B5B,CAAC;AAMF,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,KAAG,eAUzC,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,YAU1C,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,eAAe,EAAE,SAAS,OAAO,CAAC,eAAe,CAAC,KAAG,eAUrF,CAAC;;;;;;;;;;;;;;uBAlC+B,MAAM,KAAG,eAAe;wBAYvB,MAAM,KAAG,YAAY;uBAYtB,eAAe,WAAW,OAAO,CAAC,eAAe,CAAC,KAAG,eAAe;;AAYrG,wBAgBE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/themes/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAsEzD,eAAO,MAAM,YAAY,EAAE,eAuC1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,YAmC3B,CAAC;AAMF,eAAO,MAAM,cAAc,EAAE,eAuC5B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,YAmC7B,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,eAkCzB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,YAsC1B,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,eAkCzB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,YA2B1B,CAAC;AAMF,eAAO,MAAM,YAAY,EAAE,eAiC1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,YA0B3B,CAAC;AAMF,eAAO,MAAM,aAAa,EAAE,eAkC3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,YA8B5B,CAAC;AAMF,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,KAAG,eAUzC,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,YAU1C,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,eAAe,EAAE,SAAS,OAAO,CAAC,eAAe,CAAC,KAAG,eAUrF,CAAC;;;;;;;;;;;;;;uBAlC+B,MAAM,KAAG,eAAe;wBAYvB,MAAM,KAAG,YAAY;uBAYtB,eAAe,WAAW,OAAO,CAAC,eAAe,CAAC,KAAG,eAAe;;AAYrG,wBAgBE"}
@@ -275,19 +275,21 @@ export const pomodoPreset = {
275
275
  borderRadius: 80,
276
276
  justifyContent: 'center',
277
277
  alignItems: 'center',
278
- marginBottom: 24,
278
+ marginBottom: 40,
279
279
  },
280
280
  title: {
281
- fontSize: 22,
282
- marginBottom: 12,
281
+ fontSize: 28,
282
+ marginBottom: 16,
283
283
  textAlign: 'center',
284
- fontWeight: '600',
284
+ fontWeight: '700',
285
+ color: '#000000',
285
286
  },
286
287
  description: {
287
- fontSize: 14,
288
+ fontSize: 17,
288
289
  textAlign: 'center',
289
- paddingHorizontal: 32,
290
- lineHeight: 20,
290
+ paddingHorizontal: 40,
291
+ lineHeight: 24,
292
+ color: '#666666',
291
293
  },
292
294
  },
293
295
  };
package/package.json CHANGED
@@ -1,66 +1,71 @@
1
- {
2
- "name": "@rubixscript/react-native-onboarding",
3
- "version": "1.0.1",
4
- "description": "A comprehensive React Native onboarding library with customizable slide types, animations, and themes",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "scripts": {
8
- "build": "tsc",
9
- "prepublishOnly": "npm run build",
10
- "test": "jest",
11
- "lint": "eslint src --ext .ts,.tsx",
12
- "type-check": "tsc --noEmit"
13
- },
14
- "keywords": [
15
- "react-native",
16
- "onboarding",
17
- "walkthrough",
18
- "tutorial",
19
- "user-onboarding",
20
- "expo",
21
- "react",
22
- "slides",
23
- "carousel"
24
- ],
25
- "author": "RubixScript Team",
26
- "license": "MIT",
27
- "repository": {
28
- "type": "git",
29
- "url": "https://github.com/rubixscript/react-native-onboarding.git"
30
- },
31
- "peerDependencies": {
32
- "expo": ">=48.0.0",
33
- "react": ">=18.0.0",
34
- "react-native": ">=0.70.0",
35
- "react-native-reanimated": ">=3.0.0"
36
- },
37
- "dependencies": {
38
- "@expo/vector-icons": "^15.0.2",
39
- "@react-native-async-storage/async-storage": ">=1.19.0",
40
- "expo-av": "~15.0.0",
41
- "expo-blur": "~15.0.7",
42
- "expo-linear-gradient": "~15.0.7",
43
- "react-native-reanimated": ">=3.0.0",
44
- "react-native-safe-area-context": "~5.0.0"
45
- },
46
- "devDependencies": {
47
- "@testing-library/react-native": "^12.0.0",
48
- "@types/jest": "^29.5.0",
49
- "@types/react": "~19.1.10",
50
- "@types/react-native": "^0.73.0",
51
- "@typescript-eslint/eslint-plugin": "^6.0.0",
52
- "@typescript-eslint/parser": "^6.0.0",
53
- "eslint": "^8.0.0",
54
- "jest": "^29.0.0",
55
- "typescript": "~5.9.2"
56
- },
57
- "files": [
58
- "dist",
59
- "src",
60
- "README.md",
61
- "LICENSE"
62
- ],
63
- "engines": {
64
- "node": ">=16.0.0"
65
- }
66
- }
1
+ {
2
+ "name": "@rubixscript/react-native-onboarding",
3
+ "version": "1.1.1",
4
+ "description": "A comprehensive React Native onboarding library with customizable slide types, animations, and themes",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "build:rollup": "rollup -c",
10
+ "prepublishOnly": "npm run build",
11
+ "test": "jest",
12
+ "lint": "eslint src --ext .ts,.tsx",
13
+ "type-check": "tsc --noEmit"
14
+ },
15
+ "keywords": [
16
+ "react-native",
17
+ "onboarding",
18
+ "walkthrough",
19
+ "tutorial",
20
+ "user-onboarding",
21
+ "expo",
22
+ "react",
23
+ "slides",
24
+ "carousel"
25
+ ],
26
+ "author": "RubixScript Team",
27
+ "license": "MIT",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "https://github.com/rubixscript/react-native-onboarding.git"
31
+ },
32
+ "peerDependencies": {
33
+ "@expo/vector-icons": "^15.0.2",
34
+ "@react-native-async-storage/async-storage": ">=1.19.0",
35
+ "expo": ">=48.0.0",
36
+ "expo-av": "~15.0.0",
37
+ "expo-blur": "~15.0.7",
38
+ "expo-linear-gradient": "~15.0.7",
39
+ "react": ">=18.0.0",
40
+ "react-native": ">=0.70.0",
41
+ "react-native-reanimated": ">=3.0.0",
42
+ "react-native-safe-area-context": "~5.0.0"
43
+ },
44
+ "dependencies": {},
45
+ "devDependencies": {
46
+ "@rollup/plugin-commonjs": "^28.0.0",
47
+ "@rollup/plugin-node-resolve": "^15.3.0",
48
+ "@rollup/plugin-typescript": "^12.1.0",
49
+ "@testing-library/react-native": "^12.0.0",
50
+ "@types/jest": "^29.5.0",
51
+ "@types/react": "~19.1.10",
52
+ "@types/react-native": "^0.73.0",
53
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
54
+ "@typescript-eslint/parser": "^6.0.0",
55
+ "eslint": "^8.0.0",
56
+ "jest": "^29.0.0",
57
+ "rollup": "^4.28.0",
58
+ "rollup-plugin-peer-deps-external": "^2.2.4",
59
+ "tslib": "^2.8.1",
60
+ "typescript": "~5.9.2"
61
+ },
62
+ "files": [
63
+ "dist",
64
+ "src",
65
+ "README.md",
66
+ "LICENSE"
67
+ ],
68
+ "engines": {
69
+ "node": ">=16.0.0"
70
+ }
71
+ }