prizmux 1.3.2 → 1.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.
Files changed (42) hide show
  1. package/README.md +25 -175
  2. package/dist/components/Alert/Alert.d.ts +5 -0
  3. package/dist/components/Alert/Alert.d.ts.map +1 -0
  4. package/dist/components/Alert/Alert.js +88 -0
  5. package/dist/components/Alert/Alert.js.map +1 -0
  6. package/dist/components/Alert/Alert.types.d.ts +21 -0
  7. package/dist/components/Alert/Alert.types.d.ts.map +1 -0
  8. package/dist/components/Alert/Alert.types.js +3 -0
  9. package/dist/components/Alert/Alert.types.js.map +1 -0
  10. package/dist/components/Alert/index.d.ts +3 -0
  11. package/dist/components/Alert/index.d.ts.map +1 -0
  12. package/dist/components/Alert/index.js +6 -0
  13. package/dist/components/Alert/index.js.map +1 -0
  14. package/dist/components/Fab/FAB.d.ts +5 -0
  15. package/dist/components/Fab/FAB.d.ts.map +1 -0
  16. package/dist/components/Fab/FAB.js +120 -0
  17. package/dist/components/Fab/FAB.js.map +1 -0
  18. package/dist/components/Fab/FAB.types.d.ts +25 -0
  19. package/dist/components/Fab/FAB.types.d.ts.map +1 -0
  20. package/dist/components/Fab/FAB.types.js +3 -0
  21. package/dist/components/Fab/FAB.types.js.map +1 -0
  22. package/dist/components/Fab/index.d.ts +3 -0
  23. package/dist/components/Fab/index.d.ts.map +1 -0
  24. package/dist/components/Fab/index.js +6 -0
  25. package/dist/components/Fab/index.js.map +1 -0
  26. package/dist/components/Toast/Toast.d.ts +5 -0
  27. package/dist/components/Toast/Toast.d.ts.map +1 -0
  28. package/dist/components/Toast/Toast.js +222 -0
  29. package/dist/components/Toast/Toast.js.map +1 -0
  30. package/dist/components/Toast/Toast.types.d.ts +32 -0
  31. package/dist/components/Toast/Toast.types.d.ts.map +1 -0
  32. package/dist/components/Toast/Toast.types.js +3 -0
  33. package/dist/components/Toast/Toast.types.js.map +1 -0
  34. package/dist/components/Toast/index.d.ts +3 -0
  35. package/dist/components/Toast/index.d.ts.map +1 -0
  36. package/dist/components/Toast/index.js +6 -0
  37. package/dist/components/Toast/index.js.map +1 -0
  38. package/dist/components/index.d.ts +2 -0
  39. package/dist/components/index.d.ts.map +1 -1
  40. package/dist/components/index.js +2 -0
  41. package/dist/components/index.js.map +1 -1
  42. package/package.json +3 -3
package/README.md CHANGED
@@ -6,195 +6,45 @@ A developer-first React Native component system.
6
6
 
7
7
  Prizmux gives you production-ready UI primitives with no bloated dependencies, no locked abstractions, and no fighting the framework. Just clean components you can copy, modify, and ship.
8
8
 
9
- ---
10
-
11
- ## Why Prizmux?
12
-
13
- Most React Native UI libraries are over-opinionated, hard to override, and packed with unnecessary dependencies. Prizmux takes a different approach — lightweight, zero forced dependencies, and fully typed.
14
-
15
- Every component follows the same rule: **bring your own icons, images, and navigation**. The package never pulls in lucide, expo-image, expo-router, or any other third-party library on your behalf.
16
-
17
- ---
18
-
19
- ## Components
20
-
21
- ### Button
22
- Variants, sizes, loading state, icon support (left or right), icon-only mode, and full accessibility out of the box.
23
-
24
- ```tsx
25
- <Button
26
- title="Continue"
27
- variant="filled"
28
- size="medium"
29
- borderRadius={8}
30
- icon={<ArrowRight size={18} color="#fff" />}
31
- iconPosition="right"
32
- onPress={() => {}}
33
- />
34
- ```
35
-
36
- ---
37
-
38
- ### Card
39
- Composable container with shadow and rounded corners. Put anything inside.
40
-
41
- ```tsx
42
- <Card>
43
- <Text>Hello world</Text>
44
- </Card>
45
- ```
46
-
47
- ---
48
-
49
- ### BottomSheet
50
- Swipeable sheet with drag handle, backdrop dismiss, and close button. Bring your own close icon.
51
-
52
- ```tsx
53
- <BottomSheet
54
- visible={visible}
55
- onClose={() => setVisible(false)}
56
- title="Options"
57
- closeIcon={<X size={16} color="#333" />}
58
- >
59
- <Text>Sheet content</Text>
60
- </BottomSheet>
61
- ```
62
-
63
- ---
64
-
65
- ### ImagePreview
66
- Full screen image viewer with single image and gallery support. Bring your own nav icons.
67
-
68
- ```tsx
69
- <ImagePreview
70
- visible={visible}
71
- images={['https://...']}
72
- onClose={() => setVisible(false)}
73
- closeIcon={<X size={24} color="#fff" />}
74
- prevIcon={<ChevronLeft size={32} color="#fff" />}
75
- nextIcon={<ChevronRight size={32} color="#fff" />}
76
- />
77
- ```
78
-
79
- Trigger it by wrapping any image in a `Pressable`:
80
-
81
- ```tsx
82
- <Pressable onPress={() => setVisible(true)}>
83
- <Image source={{ uri: '...' }} style={styles.avatar} />
84
- </Pressable>
85
- ```
9
+ 📖 **Full documentation at [prizmux.vercel.app](https://prizmux.vercel.app)**
86
10
 
87
11
  ---
88
12
 
89
- ### HeaderWithBack
90
- Navigation header with back button, optional avatar, optional title position, and up to 4 right-side action icons with badge support.
91
-
92
- ```tsx
93
- <HeaderWithBack
94
- title="John Doe"
95
- onBackPress={() => router.back()}
96
- avatar={<Image source={{ uri: '...' }} style={{ width: 40, height: 40 }} />}
97
- actions={[
98
- { icon: <Bell size={22} color="#333" />, onPress: () => {}, badge: 3 },
99
- { icon: <Phone size={22} color="#333" />, onPress: () => {} },
100
- ]}
101
- />
102
- ```
13
+ ## Install
103
14
 
104
- ---
105
-
106
- ### EmptyState
107
- Placeholder UI for empty lists or zero-data screens. Bring your own icon and action button.
108
-
109
- ```tsx
110
- <EmptyState
111
- title="No bookings yet"
112
- description="Start by booking a service."
113
- icon={<CalendarX size={80} color="rgba(99,102,241,0.3)" />}
114
- action={
115
- <Button title="Book Now" variant="filled" onPress={() => {}} />
116
- }
117
- />
15
+ ```bash
16
+ npm install prizmux
118
17
  ```
119
18
 
120
19
  ---
121
20
 
122
- ### PhoneInput
123
- International phone number input with a searchable country picker, auto-detection when a full number is pasted, and a clean ISO code fallback when no flag renderer is provided.
124
-
125
- ```tsx
126
- <PhoneInput
127
- label="Phone Number"
128
- defaultCountryCode="UG"
129
- value={phone}
130
- onChange={setPhone}
131
- placeholder="712 345 678"
132
- renderFlag={(country) => (
133
- <CountryFlag isoCode={country.code} size={22} />
134
- )}
135
- />
136
- ```
137
-
138
- `onChange` returns an object with three fields:
139
-
140
- ```ts
141
- {
142
- country: Country; // full country object
143
- number: string; // local number only e.g. "712345678"
144
- full: string; // complete number e.g. "+256712345678"
145
- }
146
- ```
147
-
148
- **Flags** — no flag library is bundled. Pass any renderer via `renderFlag`, or leave it out and the component falls back to a clean ISO code label (`UG`, `US`).
21
+ ## Components
149
22
 
150
- ```bash
151
- # optional — only if you want actual flag images
152
- npm install react-native-country-flag
153
- ```
23
+ | Component | Description |
24
+ |---|---|
25
+ | `Button` | Variants, sizes, loading state, icon support, full accessibility |
26
+ | `Card` | Composable container, put anything inside |
27
+ | `BottomSheet` | Swipeable sheet with drag handle and backdrop dismiss |
28
+ | `ImagePreview` | Full screen image viewer with gallery support |
29
+ | `HeaderWithBack` | Navigation header with back button, avatar, and action icons with badges |
30
+ | `EmptyState` | Placeholder UI for empty lists and zero-data screens |
31
+ | `PhoneInput` | International phone input with searchable country picker and auto-detection |
32
+ | `Toast` | Auto, manual, and swipe-to-dismiss notifications |
33
+ | `FAB` | Floating action button with icon, label, or both |
34
+ | `Alert` | Customizable modal alert — bring your own buttons |
154
35
 
155
36
  ---
156
37
 
157
- ## Architecture
38
+ ## Design Decisions
158
39
 
159
- ```
160
- /components
161
- /Button
162
- Button.tsx
163
- Button.types.ts
164
- index.ts
165
- /Card
166
- Card.tsx
167
- Card.types.ts
168
- index.ts
169
- /BottomSheet
170
- BottomSheet.tsx
171
- BottomSheet.types.ts
172
- index.ts
173
- /ImagePreview
174
- ImagePreview.tsx
175
- ImagePreview.types.ts
176
- index.ts
177
- /HeaderWithBack
178
- HeaderWithBack.tsx
179
- HeaderWithBack.types.ts
180
- index.ts
181
- /EmptyState
182
- EmptyState.tsx
183
- EmptyState.types.ts
184
- index.ts
185
- /PhoneInput
186
- PhoneInput.tsx
187
- PhoneInput.types.ts
188
- countries.ts
189
- index.ts
190
- ```
40
+ - **No icon library required** — every component that needs an icon accepts `ReactNode`.
41
+ - **No navigation dependency** — `HeaderWithBack` requires you to pass `onBackPress`.
42
+ - **No image library required** — image slots accept `ReactNode`.
43
+ - **No flag library required** — `PhoneInput` accepts a `renderFlag` prop with a built-in ISO code fallback.
44
+ - **Fully typed** — every component ships with a `.types.ts` file.
191
45
 
192
46
  ---
193
47
 
194
- ## Design Decisions
48
+ ## License
195
49
 
196
- - **No icon library required** — every component that needs an icon accepts `ReactNode`. Pass lucide, react-native-vector-icons, an SVG, or a plain emoji.
197
- - **No navigation dependency** — `HeaderWithBack` requires you to pass `onBackPress`. Use expo-router, react-navigation, or anything else.
198
- - **No image library required** — `ImagePreview` and `HeaderWithBack` accept `ReactNode` for avatar/image slots. Use expo-image, the built-in RN Image, or anything you want.
199
- - **No flag library required** — `PhoneInput` accepts a `renderFlag` prop. Use `react-native-country-flag`, a custom SVG, or rely on the built-in ISO fallback.
200
- - **Fully typed** — every component ships with a `.types.ts` file.
50
+ MIT
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { AlertProps } from './Alert.types';
3
+ export declare const Alert: React.FC<AlertProps>;
4
+ export default Alert;
5
+ //# sourceMappingURL=Alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../src/components/Alert/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AASjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAiGtC,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Alert = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const react_native_1 = require("react-native");
7
+ const Alert = ({ visible, onClose, title, message, icon, children, dismissOnBackdropPress = true, borderRadius = 16, backgroundColor = '#FFFFFF', overlayColor = 'rgba(0,0,0,0.5)', style, titleStyle, messageStyle, overlayStyle, iconContainerStyle, contentContainerStyle, }) => {
8
+ const scaleAnim = (0, react_1.useRef)(new react_native_1.Animated.Value(0.85)).current;
9
+ const opacityAnim = (0, react_1.useRef)(new react_native_1.Animated.Value(0)).current;
10
+ (0, react_1.useEffect)(() => {
11
+ if (visible) {
12
+ scaleAnim.setValue(0.85);
13
+ opacityAnim.setValue(0);
14
+ react_native_1.Animated.parallel([
15
+ react_native_1.Animated.timing(opacityAnim, {
16
+ toValue: 1,
17
+ duration: 200,
18
+ useNativeDriver: true,
19
+ }),
20
+ react_native_1.Animated.spring(scaleAnim, {
21
+ toValue: 1,
22
+ bounciness: 6,
23
+ useNativeDriver: true,
24
+ }),
25
+ ]).start();
26
+ }
27
+ }, [visible]);
28
+ if (!visible)
29
+ return null;
30
+ return ((0, jsx_runtime_1.jsx)(react_native_1.Modal, { transparent: true, visible: visible, animationType: "none", statusBarTranslucent: true, onRequestClose: dismissOnBackdropPress ? onClose : undefined, children: (0, jsx_runtime_1.jsx)(react_native_1.Pressable, { style: [styles.overlay, { backgroundColor: overlayColor }, overlayStyle], onPress: dismissOnBackdropPress ? onClose : undefined, children: (0, jsx_runtime_1.jsx)(react_native_1.Pressable, { onPress: () => { }, children: (0, jsx_runtime_1.jsxs)(react_native_1.Animated.View, { style: [
31
+ styles.alertBox,
32
+ {
33
+ backgroundColor,
34
+ borderRadius,
35
+ opacity: opacityAnim,
36
+ transform: [{ scale: scaleAnim }],
37
+ },
38
+ style,
39
+ ], children: [icon && ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: [styles.iconContainer, iconContainerStyle], children: icon })), title && ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.title, titleStyle], children: title })), message && ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.message, messageStyle], children: message })), children && ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: [styles.contentContainer, contentContainerStyle], children: children }))] }) }) }) }));
40
+ };
41
+ exports.Alert = Alert;
42
+ exports.default = exports.Alert;
43
+ const styles = react_native_1.StyleSheet.create({
44
+ overlay: {
45
+ flex: 1,
46
+ justifyContent: 'center',
47
+ alignItems: 'center',
48
+ paddingHorizontal: 32,
49
+ },
50
+ alertBox: {
51
+ width: '100%',
52
+ maxWidth: 340,
53
+ paddingTop: 8,
54
+ paddingBottom: 20,
55
+ shadowColor: '#000',
56
+ shadowOffset: { width: 0, height: 8 },
57
+ shadowOpacity: 0.15,
58
+ shadowRadius: 16,
59
+ elevation: 10,
60
+ },
61
+ iconContainer: {
62
+ alignItems: 'center',
63
+ paddingTop: 20,
64
+ paddingBottom: 4,
65
+ },
66
+ title: {
67
+ fontSize: 17,
68
+ fontWeight: '700',
69
+ color: '#111827',
70
+ textAlign: 'center',
71
+ paddingHorizontal: 20,
72
+ paddingTop: 16,
73
+ },
74
+ message: {
75
+ fontSize: 14,
76
+ color: '#6B7280',
77
+ textAlign: 'center',
78
+ lineHeight: 20,
79
+ paddingHorizontal: 20,
80
+ paddingTop: 8,
81
+ },
82
+ contentContainer: {
83
+ paddingHorizontal: 20,
84
+ paddingTop: 16,
85
+ gap: 10,
86
+ },
87
+ });
88
+ //# sourceMappingURL=Alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.js","sourceRoot":"","sources":["../../../src/components/Alert/Alert.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { ReactNode } from 'react';
2
+ import { TextStyle, ViewStyle } from 'react-native';
3
+ export interface AlertProps {
4
+ visible: boolean;
5
+ onClose: () => void;
6
+ title?: string;
7
+ message?: string;
8
+ icon?: ReactNode;
9
+ children?: ReactNode;
10
+ dismissOnBackdropPress?: boolean;
11
+ borderRadius?: number;
12
+ backgroundColor?: string;
13
+ overlayColor?: string;
14
+ style?: ViewStyle;
15
+ titleStyle?: TextStyle;
16
+ messageStyle?: TextStyle;
17
+ overlayStyle?: ViewStyle;
18
+ iconContainerStyle?: ViewStyle;
19
+ contentContainerStyle?: ViewStyle;
20
+ }
21
+ //# sourceMappingURL=Alert.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.types.d.ts","sourceRoot":"","sources":["../../../src/components/Alert/Alert.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IAGpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IAGrB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAGjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,qBAAqB,CAAC,EAAE,SAAS,CAAC;CACnC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Alert.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.types.js","sourceRoot":"","sources":["../../../src/components/Alert/Alert.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export { Alert } from './Alert';
2
+ export type { AlertProps } from './Alert.types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Alert/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Alert = void 0;
4
+ var Alert_1 = require("./Alert");
5
+ Object.defineProperty(exports, "Alert", { enumerable: true, get: function () { return Alert_1.Alert; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Alert/index.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAAvB,8FAAA,KAAK,OAAA"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { FABProps } from './FAB.types';
3
+ export declare const FAB: React.FC<FABProps>;
4
+ export default FAB;
5
+ //# sourceMappingURL=FAB.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FAB.d.ts","sourceRoot":"","sources":["../../../src/components/Fab/FAB.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAStC,OAAO,EAAe,QAAQ,EAAW,MAAM,aAAa,CAAC;AAgC7D,eAAO,MAAM,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAqIlC,CAAC;AAEF,eAAe,GAAG,CAAC"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FAB = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const react_native_1 = require("react-native");
7
+ // Size config
8
+ const SIZE_CONFIG = {
9
+ small: { button: 40, fontSize: 12 },
10
+ medium: { button: 56, fontSize: 14 },
11
+ large: { button: 72, fontSize: 16 },
12
+ };
13
+ // Position config — maps to absolute positioning
14
+ const getPositionStyle = (position, offsetX, offsetY) => {
15
+ switch (position) {
16
+ case 'bottom-right':
17
+ return { bottom: offsetY, right: offsetX };
18
+ case 'bottom-left':
19
+ return { bottom: offsetY, left: offsetX };
20
+ case 'bottom-center':
21
+ return { bottom: offsetY, alignSelf: 'center' };
22
+ case 'top-right':
23
+ return { top: offsetY, right: offsetX };
24
+ case 'top-left':
25
+ return { top: offsetY, left: offsetX };
26
+ case 'top-center':
27
+ return { top: offsetY, alignSelf: 'center' };
28
+ }
29
+ };
30
+ const FAB = ({ onPress, onLongPress, icon, label, labelPosition = 'right', position = 'bottom-right', offsetX = 16, offsetY = 24, size = 'medium', borderRadius, backgroundColor = '#6366F1', iconColor, labelColor = '#FFFFFF', disabled = false, loading = false, style, labelStyle, containerStyle, }) => {
31
+ const scaleAnim = (0, react_1.useRef)(new react_native_1.Animated.Value(1)).current;
32
+ const sizeConfig = SIZE_CONFIG[size];
33
+ const buttonSize = sizeConfig.button;
34
+ // Default to circle (half of size), consumer can override
35
+ const radius = borderRadius ?? buttonSize / 2;
36
+ const handlePressIn = () => {
37
+ react_native_1.Animated.spring(scaleAnim, {
38
+ toValue: 0.92,
39
+ useNativeDriver: true,
40
+ bounciness: 4,
41
+ }).start();
42
+ };
43
+ const handlePressOut = () => {
44
+ react_native_1.Animated.spring(scaleAnim, {
45
+ toValue: 1,
46
+ useNativeDriver: true,
47
+ bounciness: 4,
48
+ }).start();
49
+ };
50
+ const positionStyle = getPositionStyle(position, offsetX, offsetY);
51
+ const hasLabel = !!label;
52
+ const hasIcon = !!icon;
53
+ // When there's a label, the button becomes a pill/row — not a perfect square
54
+ const isExtended = hasLabel && hasIcon;
55
+ const isLabelOnly = hasLabel && !hasIcon;
56
+ // Layout direction based on labelPosition
57
+ const isHorizontal = labelPosition === 'left' || labelPosition === 'right';
58
+ const flexDirection = labelPosition === 'left'
59
+ ? 'row-reverse'
60
+ : labelPosition === 'right'
61
+ ? 'row'
62
+ : labelPosition === 'top'
63
+ ? 'column-reverse'
64
+ : 'column';
65
+ const gap = size === 'small' ? 6 : size === 'medium' ? 8 : 10;
66
+ return ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: [
67
+ styles.container,
68
+ positionStyle,
69
+ containerStyle,
70
+ ], pointerEvents: "box-none", children: (0, jsx_runtime_1.jsx)(react_native_1.Animated.View, { style: { transform: [{ scale: scaleAnim }] }, children: (0, jsx_runtime_1.jsx)(react_native_1.Pressable, { onPress: onPress, onLongPress: onLongPress, onPressIn: handlePressIn, onPressOut: handlePressOut, disabled: disabled || loading, accessibilityRole: "button", accessibilityLabel: label ?? 'FAB', accessibilityState: { disabled: disabled || loading }, style: [
71
+ styles.button,
72
+ {
73
+ backgroundColor: disabled ? '#9CA3AF' : backgroundColor,
74
+ borderRadius: radius,
75
+ // Square dimensions only when icon-only or label-only with no icon
76
+ width: isExtended ? undefined : isLabelOnly ? undefined : buttonSize,
77
+ height: buttonSize,
78
+ paddingHorizontal: isExtended || isLabelOnly ? 20 : 0,
79
+ flexDirection: flexDirection,
80
+ gap: isExtended ? gap : 0,
81
+ },
82
+ style,
83
+ ], children: loading ? ((0, jsx_runtime_1.jsx)(react_native_1.ActivityIndicator, { size: size === 'large' ? 'large' : 'small', color: "#FFFFFF" })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [hasIcon && ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: styles.iconWrapper, children: icon })), hasLabel && ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [
84
+ styles.label,
85
+ {
86
+ fontSize: sizeConfig.fontSize,
87
+ color: disabled ? '#E5E7EB' : labelColor,
88
+ marginTop: !isHorizontal && hasIcon ? gap / 2 : 0,
89
+ marginBottom: labelPosition === 'top' && hasIcon ? gap / 2 : 0,
90
+ },
91
+ labelStyle,
92
+ ], children: label }))] })) }) }) }));
93
+ };
94
+ exports.FAB = FAB;
95
+ exports.default = exports.FAB;
96
+ const styles = react_native_1.StyleSheet.create({
97
+ container: {
98
+ position: 'absolute',
99
+ zIndex: 99,
100
+ alignItems: 'center',
101
+ },
102
+ button: {
103
+ alignItems: 'center',
104
+ justifyContent: 'center',
105
+ shadowColor: '#000',
106
+ shadowOffset: { width: 0, height: 4 },
107
+ shadowOpacity: 0.25,
108
+ shadowRadius: 8,
109
+ elevation: 8,
110
+ },
111
+ iconWrapper: {
112
+ alignItems: 'center',
113
+ justifyContent: 'center',
114
+ },
115
+ label: {
116
+ fontWeight: '600',
117
+ letterSpacing: 0.3,
118
+ },
119
+ });
120
+ //# sourceMappingURL=FAB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FAB.js","sourceRoot":"","sources":["../../../src/components/Fab/FAB.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { ReactNode } from 'react';
2
+ import { TextStyle, ViewStyle } from 'react-native';
3
+ export type FABPosition = 'bottom-right' | 'bottom-left' | 'bottom-center' | 'top-right' | 'top-left' | 'top-center';
4
+ export type FABSize = 'small' | 'medium' | 'large';
5
+ export interface FABProps {
6
+ onPress: () => void;
7
+ onLongPress?: () => void;
8
+ icon?: ReactNode;
9
+ label?: string;
10
+ labelPosition?: 'right' | 'left' | 'bottom' | 'top';
11
+ position?: FABPosition;
12
+ offsetX?: number;
13
+ offsetY?: number;
14
+ size?: FABSize;
15
+ borderRadius?: number;
16
+ backgroundColor?: string;
17
+ iconColor?: string;
18
+ labelColor?: string;
19
+ disabled?: boolean;
20
+ loading?: boolean;
21
+ style?: ViewStyle;
22
+ labelStyle?: TextStyle;
23
+ containerStyle?: ViewStyle;
24
+ }
25
+ //# sourceMappingURL=FAB.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FAB.types.d.ts","sourceRoot":"","sources":["../../../src/components/Fab/FAB.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,MAAM,WAAW,GACnB,cAAc,GACd,aAAa,GACb,eAAe,GACf,WAAW,GACX,UAAU,GACV,YAAY,CAAC;AAEjB,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEnD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAGzB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAGpD,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,cAAc,CAAC,EAAE,SAAS,CAAC;CAC5B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=FAB.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FAB.types.js","sourceRoot":"","sources":["../../../src/components/Fab/FAB.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export { FAB } from './FAB';
2
+ export type { FABProps, FABPosition, FABSize } from './FAB.types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Fab/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FAB = void 0;
4
+ var FAB_1 = require("./FAB");
5
+ Object.defineProperty(exports, "FAB", { enumerable: true, get: function () { return FAB_1.FAB; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Fab/index.ts"],"names":[],"mappings":";;;AAAA,6BAA4B;AAAnB,0FAAA,GAAG,OAAA"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { ToastProps } from './Toast.types';
3
+ export declare const Toast: React.FC<ToastProps>;
4
+ export default Toast;
5
+ //# sourceMappingURL=Toast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../src/components/Toast/Toast.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAW9D,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,eAAe,CAAC;AAe3D,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CA6OtC,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Toast = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const react_native_1 = require("react-native");
7
+ const { width: SCREEN_WIDTH } = react_native_1.Dimensions.get('window');
8
+ const TYPE_COLORS = {
9
+ success: { bg: '#166534', text: '#FFFFFF' },
10
+ error: { bg: '#991B1B', text: '#FFFFFF' },
11
+ warning: { bg: '#92400E', text: '#FFFFFF' },
12
+ info: { bg: '#1E3A8A', text: '#FFFFFF' },
13
+ };
14
+ const DefaultCloseIcon = () => ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.defaultCloseIcon, children: "\u2715" }));
15
+ const Toast = ({ visible, onHide, text, description, type = 'info', position = 'top', dismiss = 'auto', duration = 3000, swipeable = false, swipeDirection = 'horizontal', swipeThreshold = 80, icon, closeIcon, backgroundColor, textColor, descriptionColor, borderRadius = 10, style, textStyle, descriptionStyle, iconContainerStyle, closeButtonStyle, overlayStyle, }) => {
16
+ const slideAnim = (0, react_1.useRef)(new react_native_1.Animated.Value(position === 'top' ? -120 : 120)).current;
17
+ const opacityAnim = (0, react_1.useRef)(new react_native_1.Animated.Value(0)).current;
18
+ const swipeX = (0, react_1.useRef)(new react_native_1.Animated.Value(0)).current;
19
+ const swipeY = (0, react_1.useRef)(new react_native_1.Animated.Value(0)).current;
20
+ const timerRef = (0, react_1.useRef)(null);
21
+ const isAnimatingOut = (0, react_1.useRef)(false);
22
+ const colors = TYPE_COLORS[type];
23
+ const bgColor = backgroundColor ?? colors.bg;
24
+ const txtColor = textColor ?? colors.text;
25
+ const descColor = descriptionColor ?? txtColor;
26
+ const isManualOrBoth = dismiss === 'manual' || dismiss === 'both';
27
+ const animateOut = (0, react_1.useCallback)((direction) => {
28
+ if (isAnimatingOut.current)
29
+ return;
30
+ isAnimatingOut.current = true;
31
+ if (timerRef.current)
32
+ clearTimeout(timerRef.current);
33
+ const swipeAnimations = [];
34
+ if (direction === 'left') {
35
+ swipeAnimations.push(react_native_1.Animated.timing(swipeX, { toValue: -SCREEN_WIDTH, duration: 250, useNativeDriver: true }));
36
+ }
37
+ else if (direction === 'right') {
38
+ swipeAnimations.push(react_native_1.Animated.timing(swipeX, { toValue: SCREEN_WIDTH, duration: 250, useNativeDriver: true }));
39
+ }
40
+ else if (direction === 'up') {
41
+ swipeAnimations.push(react_native_1.Animated.timing(swipeY, { toValue: -300, duration: 250, useNativeDriver: true }));
42
+ }
43
+ else if (direction === 'down') {
44
+ swipeAnimations.push(react_native_1.Animated.timing(swipeY, { toValue: 300, duration: 250, useNativeDriver: true }));
45
+ }
46
+ react_native_1.Animated.parallel([
47
+ ...swipeAnimations,
48
+ react_native_1.Animated.timing(slideAnim, {
49
+ toValue: position === 'top' ? -120 : 120,
50
+ duration: direction ? 0 : 250,
51
+ useNativeDriver: true,
52
+ }),
53
+ react_native_1.Animated.timing(opacityAnim, {
54
+ toValue: 0,
55
+ duration: 250,
56
+ useNativeDriver: true,
57
+ }),
58
+ ]).start(() => {
59
+ isAnimatingOut.current = false;
60
+ swipeX.setValue(0);
61
+ swipeY.setValue(0);
62
+ onHide();
63
+ });
64
+ }, [slideAnim, opacityAnim, swipeX, swipeY, position, onHide]);
65
+ const animateIn = (0, react_1.useCallback)(() => {
66
+ isAnimatingOut.current = false;
67
+ swipeX.setValue(0);
68
+ swipeY.setValue(0);
69
+ slideAnim.setValue(position === 'top' ? -120 : 120);
70
+ opacityAnim.setValue(0);
71
+ react_native_1.Animated.parallel([
72
+ react_native_1.Animated.timing(slideAnim, {
73
+ toValue: 0,
74
+ duration: 300,
75
+ useNativeDriver: true,
76
+ }),
77
+ react_native_1.Animated.timing(opacityAnim, {
78
+ toValue: 1,
79
+ duration: 300,
80
+ useNativeDriver: true,
81
+ }),
82
+ ]).start();
83
+ }, [slideAnim, opacityAnim, swipeX, swipeY, position]);
84
+ (0, react_1.useEffect)(() => {
85
+ if (visible) {
86
+ animateIn();
87
+ if (dismiss === 'auto' || dismiss === 'both') {
88
+ timerRef.current = setTimeout(() => animateOut(), duration);
89
+ }
90
+ }
91
+ else {
92
+ slideAnim.setValue(position === 'top' ? -120 : 120);
93
+ opacityAnim.setValue(0);
94
+ }
95
+ return () => {
96
+ if (timerRef.current)
97
+ clearTimeout(timerRef.current);
98
+ };
99
+ }, [visible, dismiss, duration, position]);
100
+ const panResponder = (0, react_1.useRef)(react_native_1.PanResponder.create({
101
+ onStartShouldSetPanResponder: () => swipeable && isManualOrBoth,
102
+ onMoveShouldSetPanResponder: (_, gs) => {
103
+ if (!swipeable || !isManualOrBoth)
104
+ return false;
105
+ const { dx, dy } = gs;
106
+ if (swipeDirection === 'horizontal')
107
+ return Math.abs(dx) > 5;
108
+ if (swipeDirection === 'vertical')
109
+ return Math.abs(dy) > 5;
110
+ return Math.abs(dx) > 5 || Math.abs(dy) > 5;
111
+ },
112
+ onPanResponderMove: (_, gs) => {
113
+ if (swipeDirection === 'horizontal' || swipeDirection === 'both') {
114
+ swipeX.setValue(gs.dx);
115
+ }
116
+ if (swipeDirection === 'vertical' || swipeDirection === 'both') {
117
+ swipeY.setValue(gs.dy);
118
+ }
119
+ },
120
+ onPanResponderRelease: (_, gs) => {
121
+ const { dx, dy, vx, vy } = gs;
122
+ const swipedH = (swipeDirection === 'horizontal' || swipeDirection === 'both') &&
123
+ (Math.abs(dx) > swipeThreshold || Math.abs(vx) > 0.8);
124
+ const swipedV = (swipeDirection === 'vertical' || swipeDirection === 'both') &&
125
+ (Math.abs(dy) > swipeThreshold || Math.abs(vy) > 0.8);
126
+ if (swipedH) {
127
+ animateOut(dx > 0 ? 'right' : 'left');
128
+ }
129
+ else if (swipedV) {
130
+ animateOut(dy > 0 ? 'down' : 'up');
131
+ }
132
+ else {
133
+ react_native_1.Animated.parallel([
134
+ react_native_1.Animated.spring(swipeX, { toValue: 0, useNativeDriver: true, bounciness: 5 }),
135
+ react_native_1.Animated.spring(swipeY, { toValue: 0, useNativeDriver: true, bounciness: 5 }),
136
+ ]).start();
137
+ }
138
+ },
139
+ })).current;
140
+ if (!visible)
141
+ return null;
142
+ return ((0, jsx_runtime_1.jsx)(react_native_1.Modal, { transparent: true, visible: visible, animationType: "none", statusBarTranslucent: true, onRequestClose: isManualOrBoth ? () => animateOut() : undefined, children: (0, jsx_runtime_1.jsx)(react_native_1.View, { style: [
143
+ styles.overlay,
144
+ position === 'bottom' ? styles.overlayBottom : styles.overlayTop,
145
+ overlayStyle, // ← full overlay override
146
+ ], pointerEvents: "box-none", children: (0, jsx_runtime_1.jsxs)(react_native_1.Animated.View, { style: [
147
+ styles.toast,
148
+ {
149
+ backgroundColor: bgColor,
150
+ borderRadius, // ← from prop
151
+ transform: [
152
+ { translateY: react_native_1.Animated.add(slideAnim, swipeY) },
153
+ { translateX: swipeX },
154
+ ],
155
+ opacity: opacityAnim,
156
+ },
157
+ style, // ← full toast override
158
+ ], ...panResponder.panHandlers, children: [icon && ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: [styles.iconContainer, iconContainerStyle], children: icon })), (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.textContainer, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.text, { color: txtColor }, textStyle], children: text }), description && ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [
159
+ styles.description,
160
+ { color: descColor },
161
+ descriptionStyle,
162
+ ], children: description }))] }), isManualOrBoth && ((0, jsx_runtime_1.jsx)(react_native_1.Pressable, { onPress: () => animateOut(), style: [styles.closeButton, closeButtonStyle], hitSlop: 10, accessibilityLabel: "Dismiss notification", accessibilityRole: "button", children: closeIcon ?? (0, jsx_runtime_1.jsx)(DefaultCloseIcon, {}) }))] }) }) }));
163
+ };
164
+ exports.Toast = Toast;
165
+ exports.default = exports.Toast;
166
+ const styles = react_native_1.StyleSheet.create({
167
+ overlay: {
168
+ flex: 1,
169
+ alignItems: 'center',
170
+ backgroundColor: 'transparent',
171
+ },
172
+ overlayTop: {
173
+ justifyContent: 'flex-start',
174
+ paddingTop: 50,
175
+ },
176
+ overlayBottom: {
177
+ justifyContent: 'flex-end',
178
+ paddingBottom: 50,
179
+ },
180
+ toast: {
181
+ flexDirection: 'row',
182
+ alignItems: 'center',
183
+ paddingHorizontal: 16,
184
+ paddingVertical: 12,
185
+ maxWidth: SCREEN_WIDTH - 40,
186
+ width: SCREEN_WIDTH - 40,
187
+ shadowColor: '#000',
188
+ shadowOffset: { width: 0, height: 4 },
189
+ shadowOpacity: 0.2,
190
+ shadowRadius: 6,
191
+ elevation: 6,
192
+ gap: 10,
193
+ },
194
+ iconContainer: {
195
+ alignItems: 'center',
196
+ justifyContent: 'center',
197
+ },
198
+ textContainer: {
199
+ flex: 1,
200
+ gap: 2,
201
+ },
202
+ text: {
203
+ fontSize: 14,
204
+ fontWeight: '600',
205
+ },
206
+ description: {
207
+ fontSize: 12,
208
+ fontWeight: '400',
209
+ opacity: 0.85,
210
+ },
211
+ closeButton: {
212
+ alignItems: 'center',
213
+ justifyContent: 'center',
214
+ marginLeft: 4,
215
+ },
216
+ defaultCloseIcon: {
217
+ fontSize: 14,
218
+ color: '#FFFFFF',
219
+ fontWeight: '600',
220
+ },
221
+ });
222
+ //# sourceMappingURL=Toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../src/components/Toast/Toast.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { ReactNode } from 'react';
2
+ import { TextStyle, ViewStyle } from 'react-native';
3
+ export type ToastType = 'success' | 'error' | 'info' | 'warning';
4
+ export type ToastPosition = 'top' | 'bottom';
5
+ export type ToastDismiss = 'auto' | 'manual' | 'both';
6
+ export type SwipeDirection = 'horizontal' | 'vertical' | 'both';
7
+ export interface ToastProps {
8
+ visible: boolean;
9
+ onHide: () => void;
10
+ text: string;
11
+ description?: string;
12
+ type?: ToastType;
13
+ position?: ToastPosition;
14
+ dismiss?: ToastDismiss;
15
+ duration?: number;
16
+ swipeable?: boolean;
17
+ swipeDirection?: SwipeDirection;
18
+ swipeThreshold?: number;
19
+ icon?: ReactNode;
20
+ closeIcon?: ReactNode;
21
+ backgroundColor?: string;
22
+ textColor?: string;
23
+ descriptionColor?: string;
24
+ borderRadius?: number;
25
+ style?: ViewStyle;
26
+ textStyle?: TextStyle;
27
+ descriptionStyle?: TextStyle;
28
+ iconContainerStyle?: ViewStyle;
29
+ closeButtonStyle?: ViewStyle;
30
+ overlayStyle?: ViewStyle;
31
+ }
32
+ //# sourceMappingURL=Toast.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.types.d.ts","sourceRoot":"","sources":["../../../src/components/Toast/Toast.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AACjE,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,CAAC;AAC7C,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AACtD,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;AAEhE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IAGtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Toast.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.types.js","sourceRoot":"","sources":["../../../src/components/Toast/Toast.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export { Toast } from './Toast';
2
+ export type { ToastProps, ToastType, ToastPosition, ToastDismiss } from './Toast.types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Toast/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Toast = void 0;
4
+ var Toast_1 = require("./Toast");
5
+ Object.defineProperty(exports, "Toast", { enumerable: true, get: function () { return Toast_1.Toast; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Toast/index.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAAvB,8FAAA,KAAK,OAAA"}
@@ -5,4 +5,6 @@ export * from './ImagePreview';
5
5
  export * from './HeaderWithBack';
6
6
  export * from './EmptyState';
7
7
  export * from './PhoneInput';
8
+ export * from './Toast';
9
+ export * from './Fab';
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC"}
@@ -21,4 +21,6 @@ __exportStar(require("./ImagePreview"), exports);
21
21
  __exportStar(require("./HeaderWithBack"), exports);
22
22
  __exportStar(require("./EmptyState"), exports);
23
23
  __exportStar(require("./PhoneInput"), exports);
24
+ __exportStar(require("./Toast"), exports);
25
+ __exportStar(require("./Fab"), exports);
24
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,yCAAuB;AACvB,gDAA8B;AAC9B,iDAA+B;AAC/B,mDAAgC;AAChC,+CAA6B;AAC7B,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,yCAAuB;AACvB,gDAA8B;AAC9B,iDAA+B;AAC/B,mDAAgC;AAChC,+CAA6B;AAC7B,+CAA6B;AAC7B,0CAAwB;AACxB,wCAAsB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prizmux",
3
- "version": "1.3.02",
3
+ "version": "1.4.01",
4
4
  "description": "A smooth and modern UI component library for React Native",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -71,10 +71,10 @@
71
71
  "prizmux"
72
72
  ],
73
73
  "author": "Lukwago Joel Jr",
74
- "license": "MIT",
74
+ "license": "MIT",
75
75
  "repository": {
76
76
  "type": "git",
77
- "url": "https://github.com/contecfy/prizmux"
77
+ "url": "git+https://github.com/contecfy/prizmux.git"
78
78
  },
79
79
  "peerDependencies": {
80
80
  "react": ">=16.8.0",