@rubixscript/react-native-onboarding 1.0.0 → 1.1.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 (59) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +383 -383
  3. package/dist/components/NavigationButtons.d.ts +23 -0
  4. package/dist/components/NavigationButtons.d.ts.map +1 -0
  5. package/dist/components/NavigationButtons.js +106 -0
  6. package/dist/components/Onboarding.d.ts +11 -0
  7. package/dist/components/Onboarding.d.ts.map +1 -0
  8. package/dist/components/Onboarding.js +219 -0
  9. package/dist/components/Pagination.d.ts +5 -0
  10. package/dist/components/Pagination.d.ts.map +1 -0
  11. package/dist/components/Pagination.js +269 -0
  12. package/dist/components/SimpleOnboardingScreen.d.ts +54 -0
  13. package/dist/components/SimpleOnboardingScreen.d.ts.map +1 -0
  14. package/dist/components/SimpleOnboardingScreen.js +184 -0
  15. package/dist/components/index.d.ts +7 -0
  16. package/dist/components/index.d.ts.map +1 -0
  17. package/dist/components/index.js +5 -0
  18. package/dist/index.d.ts +9 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +12 -0
  21. package/dist/presets/index.d.ts +27 -0
  22. package/dist/presets/index.d.ts.map +1 -0
  23. package/dist/presets/index.js +370 -0
  24. package/dist/slides/FormSlide.d.ts +12 -0
  25. package/dist/slides/FormSlide.d.ts.map +1 -0
  26. package/dist/slides/FormSlide.js +227 -0
  27. package/dist/slides/IconSlide.d.ts +10 -0
  28. package/dist/slides/IconSlide.d.ts.map +1 -0
  29. package/dist/slides/IconSlide.js +133 -0
  30. package/dist/slides/ImageSlide.d.ts +10 -0
  31. package/dist/slides/ImageSlide.d.ts.map +1 -0
  32. package/dist/slides/ImageSlide.js +99 -0
  33. package/dist/slides/VideoSlide.d.ts +10 -0
  34. package/dist/slides/VideoSlide.d.ts.map +1 -0
  35. package/dist/slides/VideoSlide.js +101 -0
  36. package/dist/slides/index.d.ts +14 -0
  37. package/dist/slides/index.d.ts.map +1 -0
  38. package/dist/slides/index.js +25 -0
  39. package/dist/themes/index.d.ts +35 -0
  40. package/dist/themes/index.d.ts.map +1 -0
  41. package/dist/themes/index.js +547 -0
  42. package/dist/types/index.d.ts +191 -0
  43. package/dist/types/index.d.ts.map +1 -0
  44. package/dist/types/index.js +1 -0
  45. package/package.json +73 -60
  46. package/src/components/NavigationButtons.tsx +198 -198
  47. package/src/components/Onboarding.tsx +337 -340
  48. package/src/components/Pagination.tsx +337 -337
  49. package/src/components/SimpleOnboardingScreen.tsx +266 -0
  50. package/src/components/index.ts +7 -5
  51. package/src/index.ts +69 -65
  52. package/src/presets/index.ts +391 -394
  53. package/src/slides/FormSlide.tsx +314 -314
  54. package/src/slides/IconSlide.tsx +166 -166
  55. package/src/slides/ImageSlide.tsx +132 -132
  56. package/src/slides/VideoSlide.tsx +146 -146
  57. package/src/slides/{index.ts → index.tsx} +37 -44
  58. package/src/themes/index.ts +576 -574
  59. package/src/types/index.ts +247 -247
@@ -0,0 +1,54 @@
1
+ /** METADATA
2
+ * @component SimpleOnboardingScreen
3
+ * @description A simple, beautiful onboarding screen with customizable slides, colors, and styling
4
+ *
5
+ * @props
6
+ * - onComplete: () => void - Handler called when onboarding is finished
7
+ * - slides: SimpleSlide[] - Array of slides to display (optional, has default)
8
+ * - primaryColor: string - Primary color for buttons and active dots (default: '#FF6B6B')
9
+ * - backgroundColor: string - Background color of the screen (default: '#F6F6F6')
10
+ * - iconBackgroundColor: string - Background color for icon container (default: 'rgba(255, 107, 107, 0.1)')
11
+ * - textColor: string - Color for titles (default: '#000000')
12
+ * - descriptionColor: string - Color for descriptions (default: '#666666')
13
+ * - buttonTextNext: string - Text for next button (default: 'Next')
14
+ * - buttonTextDone: string - Text for done button (default: 'Get Started')
15
+ * - testID?: string - Test identifier for testing
16
+ *
17
+ * @states
18
+ * - currentIndex: number - Current onboarding screen index
19
+ *
20
+ * @features
21
+ * - Step-by-step app introduction
22
+ * - Interactive animations
23
+ * - Feature highlights
24
+ * - Progress indication
25
+ * - Fully customizable styling
26
+ *
27
+ * @dependencies
28
+ * - react-native-reanimated: For animations
29
+ * - @expo/vector-icons: For UI icons
30
+ * - react-native components
31
+ */
32
+ import React from 'react';
33
+ import { MaterialCommunityIcons } from '@expo/vector-icons';
34
+ export interface SimpleSlide {
35
+ id: string;
36
+ title: string;
37
+ description: string;
38
+ icon: keyof typeof MaterialCommunityIcons.glyphMap;
39
+ }
40
+ interface SimpleOnboardingScreenProps {
41
+ onComplete: () => Promise<void>;
42
+ slides?: SimpleSlide[];
43
+ primaryColor?: string;
44
+ backgroundColor?: string;
45
+ iconBackgroundColor?: string;
46
+ textColor?: string;
47
+ descriptionColor?: string;
48
+ buttonTextNext?: string;
49
+ buttonTextDone?: string;
50
+ testID?: string;
51
+ }
52
+ export default function SimpleOnboardingScreen({ onComplete, slides, primaryColor, backgroundColor, iconBackgroundColor, textColor, descriptionColor, buttonTextNext, buttonTextDone, testID, }: SimpleOnboardingScreenProps): React.JSX.Element;
53
+ export {};
54
+ //# sourceMappingURL=SimpleOnboardingScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleOnboardingScreen.d.ts","sourceRoot":"","sources":["../../src/components/SimpleOnboardingScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAA2B,MAAM,OAAO,CAAC;AAahD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAK5D,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,OAAO,sBAAsB,CAAC,QAAQ,CAAC;CACpD;AAuBD,UAAU,2BAA2B;IACnC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAC7C,UAAU,EACV,MAAsB,EACtB,YAAwB,EACxB,eAA2B,EAC3B,mBAAgD,EAChD,SAAqB,EACrB,gBAA4B,EAC5B,cAAuB,EACvB,cAA8B,EAC9B,MAAM,GACP,EAAE,2BAA2B,qBAuF7B"}
@@ -0,0 +1,184 @@
1
+ /** METADATA
2
+ * @component SimpleOnboardingScreen
3
+ * @description A simple, beautiful onboarding screen with customizable slides, colors, and styling
4
+ *
5
+ * @props
6
+ * - onComplete: () => void - Handler called when onboarding is finished
7
+ * - slides: SimpleSlide[] - Array of slides to display (optional, has default)
8
+ * - primaryColor: string - Primary color for buttons and active dots (default: '#FF6B6B')
9
+ * - backgroundColor: string - Background color of the screen (default: '#F6F6F6')
10
+ * - iconBackgroundColor: string - Background color for icon container (default: 'rgba(255, 107, 107, 0.1)')
11
+ * - textColor: string - Color for titles (default: '#000000')
12
+ * - descriptionColor: string - Color for descriptions (default: '#666666')
13
+ * - buttonTextNext: string - Text for next button (default: 'Next')
14
+ * - buttonTextDone: string - Text for done button (default: 'Get Started')
15
+ * - testID?: string - Test identifier for testing
16
+ *
17
+ * @states
18
+ * - currentIndex: number - Current onboarding screen index
19
+ *
20
+ * @features
21
+ * - Step-by-step app introduction
22
+ * - Interactive animations
23
+ * - Feature highlights
24
+ * - Progress indication
25
+ * - Fully customizable styling
26
+ *
27
+ * @dependencies
28
+ * - react-native-reanimated: For animations
29
+ * - @expo/vector-icons: For UI icons
30
+ * - react-native components
31
+ */
32
+ import React, { useRef, useState } from 'react';
33
+ import { View, Text, StyleSheet, Dimensions, TouchableOpacity, FlatList, Platform, StatusBar, } from 'react-native';
34
+ import { SafeAreaView } from 'react-native-safe-area-context';
35
+ import { BlurView } from 'expo-blur';
36
+ import { MaterialCommunityIcons } from '@expo/vector-icons';
37
+ import Animated, { FadeIn } from 'react-native-reanimated';
38
+ const { width } = Dimensions.get('window');
39
+ const defaultSlides = [
40
+ {
41
+ id: '1',
42
+ title: 'Focus Timer',
43
+ description: 'Stay productive with our Pomodoro timer. Work in focused intervals for better results.',
44
+ icon: 'timer-outline',
45
+ },
46
+ {
47
+ id: '2',
48
+ title: 'Task Management',
49
+ description: 'Organize your tasks efficiently. Track progress and set priorities with ease.',
50
+ icon: 'checkbox-marked-circle-outline',
51
+ },
52
+ {
53
+ id: '3',
54
+ title: 'Statistics',
55
+ description: 'Monitor your productivity with detailed statistics and insights.',
56
+ icon: 'chart-line',
57
+ },
58
+ ];
59
+ export default function SimpleOnboardingScreen({ onComplete, slides = defaultSlides, primaryColor = '#FF6B6B', backgroundColor = '#F6F6F6', iconBackgroundColor = 'rgba(255, 107, 107, 0.1)', textColor = '#000000', descriptionColor = '#666666', buttonTextNext = 'Next', buttonTextDone = 'Get Started', testID, }) {
60
+ const [currentIndex, setCurrentIndex] = useState(0);
61
+ const flatListRef = useRef(null);
62
+ const renderSlide = ({ item }) => (<View style={styles.slide}>
63
+ <Animated.View entering={FadeIn.duration(500)} style={[styles.iconContainer, { backgroundColor: iconBackgroundColor }]}>
64
+ <MaterialCommunityIcons name={item.icon} size={80} color={textColor}/>
65
+ </Animated.View>
66
+ <Text style={[styles.title, { color: textColor }]}>
67
+ {item.title}
68
+ </Text>
69
+ <Text style={[styles.description, { color: descriptionColor }]}>
70
+ {item.description}
71
+ </Text>
72
+ </View>);
73
+ const handleNext = () => {
74
+ if (currentIndex < slides.length - 1) {
75
+ flatListRef.current?.scrollToIndex({
76
+ index: currentIndex + 1,
77
+ animated: true,
78
+ });
79
+ setCurrentIndex(currentIndex + 1);
80
+ }
81
+ else {
82
+ onComplete();
83
+ }
84
+ };
85
+ return (<SafeAreaView testID={testID} style={[styles.container, { backgroundColor }]} edges={['top', 'bottom']}>
86
+ <StatusBar barStyle="dark-content" backgroundColor="transparent" translucent/>
87
+
88
+ <FlatList ref={flatListRef} data={slides} renderItem={renderSlide} horizontal pagingEnabled showsHorizontalScrollIndicator={false} onMomentumScrollEnd={(event) => {
89
+ const index = Math.round(event.nativeEvent.contentOffset.x / width);
90
+ setCurrentIndex(index);
91
+ }}/>
92
+
93
+ <BlurView intensity={80} tint="light" style={styles.footer}>
94
+ <View style={styles.pagination}>
95
+ {slides.map((_, index) => (<View key={index} style={[
96
+ styles.paginationDot,
97
+ index === currentIndex && styles.paginationDotActive,
98
+ index === currentIndex && { backgroundColor: primaryColor },
99
+ ]}/>))}
100
+ </View>
101
+
102
+ <TouchableOpacity style={[styles.button, { backgroundColor: primaryColor }]} onPress={handleNext}>
103
+ <Text style={styles.buttonText}>
104
+ {currentIndex === slides.length - 1 ? buttonTextDone : buttonTextNext}
105
+ </Text>
106
+ </TouchableOpacity>
107
+ </BlurView>
108
+ </SafeAreaView>);
109
+ }
110
+ const styles = StyleSheet.create({
111
+ container: {
112
+ flex: 1,
113
+ },
114
+ slide: {
115
+ width,
116
+ alignItems: 'center',
117
+ justifyContent: 'center',
118
+ paddingHorizontal: 40,
119
+ },
120
+ iconContainer: {
121
+ width: 160,
122
+ height: 160,
123
+ borderRadius: 80,
124
+ alignItems: 'center',
125
+ justifyContent: 'center',
126
+ marginBottom: 40,
127
+ },
128
+ title: {
129
+ fontSize: 28,
130
+ fontWeight: '700',
131
+ marginBottom: 16,
132
+ textAlign: 'center',
133
+ },
134
+ description: {
135
+ fontSize: 17,
136
+ textAlign: 'center',
137
+ lineHeight: 24,
138
+ },
139
+ footer: {
140
+ position: 'absolute',
141
+ bottom: 0,
142
+ left: 0,
143
+ right: 0,
144
+ paddingHorizontal: 20,
145
+ paddingVertical: 20,
146
+ flexDirection: 'row',
147
+ justifyContent: 'space-between',
148
+ alignItems: 'center',
149
+ },
150
+ pagination: {
151
+ flexDirection: 'row',
152
+ gap: 8,
153
+ },
154
+ paginationDot: {
155
+ width: 8,
156
+ height: 8,
157
+ borderRadius: 4,
158
+ backgroundColor: 'rgba(0, 0, 0, 0.2)',
159
+ },
160
+ paginationDotActive: {
161
+ width: 20,
162
+ },
163
+ button: {
164
+ paddingHorizontal: 32,
165
+ paddingVertical: 16,
166
+ borderRadius: 24,
167
+ ...Platform.select({
168
+ ios: {
169
+ shadowColor: '#000',
170
+ shadowOffset: { width: 0, height: 8 },
171
+ shadowOpacity: 0.15,
172
+ shadowRadius: 12,
173
+ },
174
+ android: {
175
+ elevation: 8,
176
+ },
177
+ }),
178
+ },
179
+ buttonText: {
180
+ color: '#FFFFFF',
181
+ fontSize: 17,
182
+ fontWeight: '600',
183
+ },
184
+ });
@@ -0,0 +1,7 @@
1
+ export { Pagination } from './Pagination';
2
+ export { NavigationButton, NavigationButtons } from './NavigationButtons';
3
+ export { Onboarding, useOnboarding } from './Onboarding';
4
+ export { default as SimpleOnboardingScreen } from './SimpleOnboardingScreen';
5
+ export type { SimpleSlide } from './SimpleOnboardingScreen';
6
+ export { default } from './Onboarding';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { Pagination } from './Pagination';
2
+ export { NavigationButton, NavigationButtons } from './NavigationButtons';
3
+ export { Onboarding, useOnboarding } from './Onboarding';
4
+ export { default as SimpleOnboardingScreen } from './SimpleOnboardingScreen';
5
+ export { default } from './Onboarding';
@@ -0,0 +1,9 @@
1
+ export { Onboarding, useOnboarding } from './components/Onboarding';
2
+ export { SimpleOnboardingScreen } from './components';
3
+ export type { SimpleSlide } from './components';
4
+ export { ImageSlide, IconSlide, FormSlide, VideoSlide, SlideRenderer, } from './slides';
5
+ export { Pagination, NavigationButton, NavigationButtons, } from './components';
6
+ export { onepageTheme, zaprecipeTheme, pomodoTheme, modernTheme, minimalTheme, gradientTheme, onepagePreset, zaprecipePreset, pomodoPreset, modernPreset, minimalPreset, gradientPreset, getTheme, getPreset, mergeTheme, } from './themes';
7
+ export type { SlideType, BaseSlideData, ImageSlideData, IconSlideData, FormSlideData, VideoSlideData, CustomSlideData, SlideData, OnboardingTheme, NavigationStyle, NavigationConfig, AnimationType, AnimationConfig, StorageConfig, OnboardingConfig, OnboardingProps, FormSlideCustomProps, PaginationProps, NavigationButtonProps, OnboardingPreset, PresetConfig, } from './types';
8
+ export { default } from './components/Onboarding';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,aAAa,GACd,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,aAAa,EACb,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,SAAS,EACT,UAAU,GACX,MAAM,UAAU,CAAC;AAGlB,YAAY,EACV,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,GACb,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ // Main Component
2
+ export { Onboarding, useOnboarding } from './components/Onboarding';
3
+ // Simple Onboarding Screen - A simple, customizable onboarding component
4
+ export { SimpleOnboardingScreen } from './components';
5
+ // Slide Components
6
+ export { ImageSlide, IconSlide, FormSlide, VideoSlide, SlideRenderer, } from './slides';
7
+ // UI Components
8
+ export { Pagination, NavigationButton, NavigationButtons, } from './components';
9
+ // Themes & Presets
10
+ export { onepageTheme, zaprecipeTheme, pomodoTheme, modernTheme, minimalTheme, gradientTheme, onepagePreset, zaprecipePreset, pomodoPreset, modernPreset, minimalPreset, gradientPreset, getTheme, getPreset, mergeTheme, } from './themes';
11
+ // Default export
12
+ export { default } from './components/Onboarding';
@@ -0,0 +1,27 @@
1
+ import { SlideData, OnboardingConfig } from '../types';
2
+ export declare const onepageSlides: SlideData[];
3
+ export declare const zaprecipeSlides: SlideData[];
4
+ export declare const pomodoSlides: SlideData[];
5
+ export declare const modernSlides: SlideData[];
6
+ export declare const minimalSlides: SlideData[];
7
+ export declare const gradientSlides: SlideData[];
8
+ export declare const getPresetSlides: (preset: string) => SlideData[];
9
+ export declare const getPresetConfig: (preset: string) => Partial<OnboardingConfig>;
10
+ export declare const onepageConfig: OnboardingConfig;
11
+ export declare const zaprecipeConfig: OnboardingConfig;
12
+ export declare const pomodoConfig: OnboardingConfig;
13
+ declare const _default: {
14
+ onepageSlides: SlideData[];
15
+ zaprecipeSlides: SlideData[];
16
+ pomodoSlides: SlideData[];
17
+ modernSlides: SlideData[];
18
+ minimalSlides: SlideData[];
19
+ gradientSlides: SlideData[];
20
+ getPresetSlides: (preset: string) => SlideData[];
21
+ getPresetConfig: (preset: string) => Partial<OnboardingConfig>;
22
+ onepageConfig: OnboardingConfig;
23
+ zaprecipeConfig: OnboardingConfig;
24
+ pomodoConfig: OnboardingConfig;
25
+ };
26
+ export default _default;
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/presets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAMvD,eAAO,MAAM,aAAa,EAAE,SAAS,EAuEpC,CAAC;AAMF,eAAO,MAAM,eAAe,EAAE,SAAS,EAqEtC,CAAC;AAMF,eAAO,MAAM,YAAY,EAAE,SAAS,EA8CnC,CAAC;AAMF,eAAO,MAAM,YAAY,EAAE,SAAS,EA2CnC,CAAC;AAMF,eAAO,MAAM,aAAa,EAAE,SAAS,EA2CpC,CAAC;AAMF,eAAO,MAAM,cAAc,EAAE,SAAS,EAyBrC,CAAC;AAMF,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,SAAS,EAUzD,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAKxE,CAAC;AAMF,eAAO,MAAM,aAAa,EAAE,gBAG3B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,gBAG7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,gBAI1B,CAAC;;;;;;;;8BArCsC,MAAM,KAAG,SAAS,EAAE;8BAYpB,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAAC;;;;;AA2B1E,wBAYE"}