aport-tools 4.3.6 → 4.4.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.
@@ -7,9 +7,17 @@ interface FormContextProps {
7
7
  handleSubmit: () => void;
8
8
  }
9
9
  export declare const useFormContext: () => FormContextProps;
10
+ interface StepperProps {
11
+ steps: string[];
12
+ presseable?: boolean;
13
+ onPress?: (stepIndex: number) => void;
14
+ step: number;
15
+ totalSteps: number;
16
+ }
10
17
  interface FormProps {
11
18
  children: ReactNode;
12
19
  onSubmit: (values: Record<string, any>) => Promise<Record<string, string[]>>;
20
+ stepper?: StepperProps;
13
21
  }
14
22
  export declare const Form: React.FC<FormProps>;
15
23
  export {};
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ interface StepperProps {
3
+ steps?: string[];
4
+ currentStep: number;
5
+ presseable?: boolean;
6
+ onPress?: (stepIndex: number) => void;
7
+ stepStyle?: "circular" | "square";
8
+ totalSteps: number;
9
+ }
10
+ declare const Stepper: React.FC<StepperProps>;
11
+ export default Stepper;
package/dist/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
- /*! aport-tools v4.3.6 | ISC */
1
+ /*! aport-tools v4.4.1 | ISC */
2
2
  import React, { useContext, useState, createContext, useCallback, useMemo } from 'react';
3
- import { StyleSheet, Text as Text$1, View, TextInput, TouchableOpacity, Modal, Pressable, FlatList, Keyboard, Platform, Image, Alert, ActivityIndicator } from 'react-native';
3
+ import { StyleSheet, Animated, View, TouchableOpacity, Text as Text$1, TextInput, Modal, Pressable, FlatList, Keyboard, Platform, Image, Alert, ActivityIndicator } from 'react-native';
4
4
  import { ThemeContext } from 'aport-themes';
5
5
  import * as ImagePicker from 'expo-image-picker';
6
6
 
@@ -97,6 +97,119 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
97
97
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
98
98
  };
99
99
 
100
+ var Stepper = function Stepper(_a) {
101
+ var steps = _a.steps,
102
+ currentStep = _a.currentStep,
103
+ _b = _a.presseable,
104
+ presseable = _b === void 0 ? false : _b,
105
+ _onPress = _a.onPress,
106
+ _c = _a.stepStyle,
107
+ stepStyle = _c === void 0 ? "circular" : _c,
108
+ totalSteps = _a.totalSteps;
109
+ var progressAnim = React.useRef(new Animated.Value(0)).current;
110
+ React.useEffect(function () {
111
+ Animated.timing(progressAnim, {
112
+ toValue: currentStep,
113
+ duration: 300,
114
+ useNativeDriver: false
115
+ }).start();
116
+ }, [currentStep]);
117
+ var getSeparatorWidth = function getSeparatorWidth(index) {
118
+ if (currentStep > index && currentStep < index + 1) {
119
+ // Return the fractional percentage for odd steps
120
+ return "".concat(((currentStep - index) * 100).toFixed(0), "%");
121
+ }
122
+ return currentStep > index ? "100%" : "0%";
123
+ };
124
+ return /*#__PURE__*/React.createElement(View, {
125
+ style: styles$9.container
126
+ }, Array.from({
127
+ length: totalSteps
128
+ }, function (_, index) {
129
+ return /*#__PURE__*/React.createElement(React.Fragment, {
130
+ key: index
131
+ }, /*#__PURE__*/React.createElement(TouchableOpacity, {
132
+ style: [styles$9.stepContainer, presseable && {
133
+ cursor: "pointer"
134
+ }],
135
+ disabled: !presseable,
136
+ onPress: function onPress() {
137
+ return _onPress && _onPress(index);
138
+ }
139
+ }, /*#__PURE__*/React.createElement(View, {
140
+ style: [styles$9.step, stepStyle === "square" && styles$9.squareStep, currentStep >= index && styles$9.activeStep]
141
+ }, /*#__PURE__*/React.createElement(Text$1, {
142
+ style: styles$9.stepLabel
143
+ }, index + 1)), steps && /*#__PURE__*/React.createElement(Text$1, {
144
+ style: styles$9.stepText
145
+ }, steps[index])), index < totalSteps - 1 && (/*#__PURE__*/React.createElement(View, {
146
+ style: styles$9.separatorContainer
147
+ }, /*#__PURE__*/React.createElement(View, {
148
+ style: styles$9.separatorBackground
149
+ }), /*#__PURE__*/React.createElement(Animated.View, {
150
+ style: [styles$9.separatorProgress, {
151
+ width: getSeparatorWidth(index)
152
+ }]
153
+ }))));
154
+ }));
155
+ };
156
+ var styles$9 = StyleSheet.create({
157
+ container: {
158
+ flexDirection: "row",
159
+ alignItems: "center",
160
+ justifyContent: "space-between",
161
+ marginBottom: 16
162
+ },
163
+ stepContainer: {
164
+ alignItems: "center",
165
+ flex: 1
166
+ },
167
+ step: {
168
+ width: 30,
169
+ height: 30,
170
+ borderRadius: 15,
171
+ // Default to circular
172
+ backgroundColor: "#aaaaaa",
173
+ alignItems: "center",
174
+ justifyContent: "center",
175
+ marginBottom: 4
176
+ },
177
+ squareStep: {
178
+ borderRadius: 5 // Square shape
179
+ },
180
+ activeStep: {
181
+ backgroundColor: "#3498db"
182
+ },
183
+ stepLabel: {
184
+ color: "#ffffff",
185
+ fontWeight: "bold"
186
+ },
187
+ stepText: {
188
+ fontSize: 12,
189
+ textAlign: "center",
190
+ marginTop: 4
191
+ },
192
+ separatorContainer: {
193
+ flex: 1,
194
+ height: 4,
195
+ marginHorizontal: 8,
196
+ position: "relative"
197
+ },
198
+ separatorBackground: {
199
+ position: "absolute",
200
+ width: "100%",
201
+ height: "100%",
202
+ backgroundColor: "#aaaaaa",
203
+ borderRadius: 2
204
+ },
205
+ separatorProgress: {
206
+ position: "absolute",
207
+ height: "100%",
208
+ backgroundColor: "#3498db",
209
+ borderRadius: 2
210
+ }
211
+ });
212
+
100
213
  // src/forms/FormContext.tsx
101
214
  var FormContext = /*#__PURE__*/createContext(undefined);
102
215
  var useFormContext = function useFormContext() {
@@ -108,7 +221,8 @@ var useFormContext = function useFormContext() {
108
221
  };
109
222
  var Form = function Form(_a) {
110
223
  var children = _a.children,
111
- onSubmit = _a.onSubmit;
224
+ onSubmit = _a.onSubmit,
225
+ stepper = _a.stepper;
112
226
  var _b = useState({}),
113
227
  formValues = _b[0],
114
228
  setFormValues = _b[1];
@@ -149,7 +263,13 @@ var Form = function Form(_a) {
149
263
  setErrors: setErrors,
150
264
  handleSubmit: handleSubmit
151
265
  }
152
- }, children);
266
+ }, stepper && (/*#__PURE__*/React.createElement(Stepper, {
267
+ steps: stepper.steps,
268
+ currentStep: stepper.step,
269
+ presseable: stepper.presseable,
270
+ onPress: stepper.onPress,
271
+ totalSteps: stepper.totalSteps
272
+ })), children);
153
273
  };
154
274
 
155
275
  // src/fonts/Text.tsx