@space-uy/pulsar-ui 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.
- package/LICENSE +20 -0
- package/README.md +148 -0
- package/lib/module/components/Accordion.js +242 -0
- package/lib/module/components/Accordion.js.map +1 -0
- package/lib/module/components/BottomSheet.js +183 -0
- package/lib/module/components/BottomSheet.js.map +1 -0
- package/lib/module/components/Button.js +64 -0
- package/lib/module/components/Button.js.map +1 -0
- package/lib/module/components/ButtonContainer.js +118 -0
- package/lib/module/components/ButtonContainer.js.map +1 -0
- package/lib/module/components/CalendarPicker.js +374 -0
- package/lib/module/components/CalendarPicker.js.map +1 -0
- package/lib/module/components/Card.js +43 -0
- package/lib/module/components/Card.js.map +1 -0
- package/lib/module/components/Checkbox.js +122 -0
- package/lib/module/components/Checkbox.js.map +1 -0
- package/lib/module/components/Chip.js +50 -0
- package/lib/module/components/Chip.js.map +1 -0
- package/lib/module/components/CopyToClipboard.js +98 -0
- package/lib/module/components/CopyToClipboard.js.map +1 -0
- package/lib/module/components/Dialog.js +232 -0
- package/lib/module/components/Dialog.js.map +1 -0
- package/lib/module/components/Header.js +94 -0
- package/lib/module/components/Header.js.map +1 -0
- package/lib/module/components/Icon.js +22 -0
- package/lib/module/components/Icon.js.map +1 -0
- package/lib/module/components/IconButton.js +57 -0
- package/lib/module/components/IconButton.js.map +1 -0
- package/lib/module/components/Input.js +111 -0
- package/lib/module/components/Input.js.map +1 -0
- package/lib/module/components/InputContainer.js +104 -0
- package/lib/module/components/InputContainer.js.map +1 -0
- package/lib/module/components/LoadingIndicator.js +62 -0
- package/lib/module/components/LoadingIndicator.js.map +1 -0
- package/lib/module/components/OtpInput.js +85 -0
- package/lib/module/components/OtpInput.js.map +1 -0
- package/lib/module/components/OtpInputContainer.js +148 -0
- package/lib/module/components/OtpInputContainer.js.map +1 -0
- package/lib/module/components/Select.js +189 -0
- package/lib/module/components/Select.js.map +1 -0
- package/lib/module/components/Switch.js +74 -0
- package/lib/module/components/Switch.js.map +1 -0
- package/lib/module/components/Tabs.js +99 -0
- package/lib/module/components/Tabs.js.map +1 -0
- package/lib/module/components/Text.js +66 -0
- package/lib/module/components/Text.js.map +1 -0
- package/lib/module/components/TextArea.js +106 -0
- package/lib/module/components/TextArea.js.map +1 -0
- package/lib/module/hooks/useTheme.js +20 -0
- package/lib/module/hooks/useTheme.js.map +1 -0
- package/lib/module/index.js +27 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/store/themeStore.js +50 -0
- package/lib/module/store/themeStore.js.map +1 -0
- package/lib/module/theme/colors.js +25 -0
- package/lib/module/theme/colors.js.map +1 -0
- package/lib/module/theme/meassures.js +10 -0
- package/lib/module/theme/meassures.js.map +1 -0
- package/lib/module/utils/stringUtils.js +12 -0
- package/lib/module/utils/stringUtils.js.map +1 -0
- package/lib/module/utils/uiUtils.js +63 -0
- package/lib/module/utils/uiUtils.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/components/Accordion.d.ts +22 -0
- package/lib/typescript/src/components/Accordion.d.ts.map +1 -0
- package/lib/typescript/src/components/BottomSheet.d.ts +13 -0
- package/lib/typescript/src/components/BottomSheet.d.ts.map +1 -0
- package/lib/typescript/src/components/Button.d.ts +16 -0
- package/lib/typescript/src/components/Button.d.ts.map +1 -0
- package/lib/typescript/src/components/ButtonContainer.d.ts +30 -0
- package/lib/typescript/src/components/ButtonContainer.d.ts.map +1 -0
- package/lib/typescript/src/components/CalendarPicker.d.ts +19 -0
- package/lib/typescript/src/components/CalendarPicker.d.ts.map +1 -0
- package/lib/typescript/src/components/Card.d.ts +7 -0
- package/lib/typescript/src/components/Card.d.ts.map +1 -0
- package/lib/typescript/src/components/Checkbox.d.ts +11 -0
- package/lib/typescript/src/components/Checkbox.d.ts.map +1 -0
- package/lib/typescript/src/components/Chip.d.ts +9 -0
- package/lib/typescript/src/components/Chip.d.ts.map +1 -0
- package/lib/typescript/src/components/CopyToClipboard.d.ts +12 -0
- package/lib/typescript/src/components/CopyToClipboard.d.ts.map +1 -0
- package/lib/typescript/src/components/Dialog.d.ts +40 -0
- package/lib/typescript/src/components/Dialog.d.ts.map +1 -0
- package/lib/typescript/src/components/Header.d.ts +18 -0
- package/lib/typescript/src/components/Header.d.ts.map +1 -0
- package/lib/typescript/src/components/Icon.d.ts +12 -0
- package/lib/typescript/src/components/Icon.d.ts.map +1 -0
- package/lib/typescript/src/components/IconButton.d.ts +13 -0
- package/lib/typescript/src/components/IconButton.d.ts.map +1 -0
- package/lib/typescript/src/components/Input.d.ts +17 -0
- package/lib/typescript/src/components/Input.d.ts.map +1 -0
- package/lib/typescript/src/components/InputContainer.d.ts +22 -0
- package/lib/typescript/src/components/InputContainer.d.ts.map +1 -0
- package/lib/typescript/src/components/LoadingIndicator.d.ts +9 -0
- package/lib/typescript/src/components/LoadingIndicator.d.ts.map +1 -0
- package/lib/typescript/src/components/OtpInput.d.ts +3 -0
- package/lib/typescript/src/components/OtpInput.d.ts.map +1 -0
- package/lib/typescript/src/components/OtpInputContainer.d.ts +17 -0
- package/lib/typescript/src/components/OtpInputContainer.d.ts.map +1 -0
- package/lib/typescript/src/components/Select.d.ts +20 -0
- package/lib/typescript/src/components/Select.d.ts.map +1 -0
- package/lib/typescript/src/components/Switch.d.ts +10 -0
- package/lib/typescript/src/components/Switch.d.ts.map +1 -0
- package/lib/typescript/src/components/Tabs.d.ts +14 -0
- package/lib/typescript/src/components/Tabs.d.ts.map +1 -0
- package/lib/typescript/src/components/Text.d.ts +7 -0
- package/lib/typescript/src/components/Text.d.ts.map +1 -0
- package/lib/typescript/src/components/TextArea.d.ts +16 -0
- package/lib/typescript/src/components/TextArea.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useTheme.d.ts +9 -0
- package/lib/typescript/src/hooks/useTheme.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +27 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/store/themeStore.d.ts +32 -0
- package/lib/typescript/src/store/themeStore.d.ts.map +1 -0
- package/lib/typescript/src/theme/colors.d.ts +14 -0
- package/lib/typescript/src/theme/colors.d.ts.map +1 -0
- package/lib/typescript/src/theme/meassures.d.ts +9 -0
- package/lib/typescript/src/theme/meassures.d.ts.map +1 -0
- package/lib/typescript/src/utils/stringUtils.d.ts +7 -0
- package/lib/typescript/src/utils/stringUtils.d.ts.map +1 -0
- package/lib/typescript/src/utils/uiUtils.d.ts +21 -0
- package/lib/typescript/src/utils/uiUtils.d.ts.map +1 -0
- package/package.json +173 -0
- package/src/components/Accordion.tsx +284 -0
- package/src/components/BottomSheet.tsx +259 -0
- package/src/components/Button.tsx +85 -0
- package/src/components/ButtonContainer.tsx +161 -0
- package/src/components/CalendarPicker.tsx +428 -0
- package/src/components/Card.tsx +55 -0
- package/src/components/Checkbox.tsx +160 -0
- package/src/components/Chip.tsx +58 -0
- package/src/components/CopyToClipboard.tsx +108 -0
- package/src/components/Dialog.tsx +263 -0
- package/src/components/Header.tsx +100 -0
- package/src/components/Icon.tsx +27 -0
- package/src/components/IconButton.tsx +71 -0
- package/src/components/Input.tsx +144 -0
- package/src/components/InputContainer.tsx +134 -0
- package/src/components/LoadingIndicator.tsx +78 -0
- package/src/components/OtpInput.tsx +109 -0
- package/src/components/OtpInputContainer.tsx +196 -0
- package/src/components/Select.tsx +219 -0
- package/src/components/Switch.tsx +104 -0
- package/src/components/Tabs.tsx +117 -0
- package/src/components/Text.tsx +64 -0
- package/src/components/TextArea.tsx +141 -0
- package/src/hooks/useTheme.tsx +23 -0
- package/src/index.tsx +38 -0
- package/src/store/themeStore.ts +57 -0
- package/src/theme/colors.ts +35 -0
- package/src/theme/meassures.ts +7 -0
- package/src/utils/stringUtils.ts +16 -0
- package/src/utils/uiUtils.ts +70 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 chacaa
|
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
in the Software without restriction, including without limitation the rights
|
|
7
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
furnished to do so, subject to the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# @space-uy/pulsar-ui
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+

|
|
7
|
+
[](CONTRIBUTING.md)
|
|
8
|
+
|
|
9
|
+
A modern React Native UI kit for SpaceDev applications, providing a collection of reusable components and utilities.
|
|
10
|
+
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
## ✨ Features
|
|
14
|
+
|
|
15
|
+
- 🎨 Modern and consistent design system
|
|
16
|
+
- 📱 Cross-platform components for iOS, Android and Web
|
|
17
|
+
- 🚀 Built with performance in mind
|
|
18
|
+
- 📦 Easy to integrate and use
|
|
19
|
+
- 🔧 Fully typed with TypeScript
|
|
20
|
+
- 🎯 Comprehensive component library
|
|
21
|
+
- 🌈 Theme support
|
|
22
|
+
- 📖 Well-documented components
|
|
23
|
+
|
|
24
|
+
## 📦 Installation
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
# Using npm
|
|
28
|
+
npm install @space-uy/pulsar-ui
|
|
29
|
+
|
|
30
|
+
# Using yarn
|
|
31
|
+
yarn add @space-uy/pulsar-ui
|
|
32
|
+
|
|
33
|
+
# Using pnpm
|
|
34
|
+
pnpm add @space-uy/pulsar-ui
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Peer Dependencies
|
|
38
|
+
|
|
39
|
+
This library requires the following peer dependencies to be installed in your project:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"@react-navigation/elements": "^2.3.8", // Required for navigation components
|
|
44
|
+
"lucide-react-native": "^0.503.0", // Required for icons
|
|
45
|
+
"react": "*", // Core React dependency
|
|
46
|
+
"react-native": "*", // Core React Native dependency
|
|
47
|
+
"react-native-gesture-handler": "^2.25.0", // Required for gesture interactions
|
|
48
|
+
"react-native-reanimated": "~3.16.1", // Required for animations
|
|
49
|
+
"react-native-svg": "^15.11.2" // Required for SVG support
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
#### Installation
|
|
54
|
+
|
|
55
|
+
You can install all peer dependencies at once using:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
# Using npm
|
|
59
|
+
npm install @react-navigation/elements@^2.3.8 lucide-react-native@^0.503.0 react-native-gesture-handler@^2.25.0 react-native-reanimated@~3.16.1 react-native-svg@^15.11.2
|
|
60
|
+
|
|
61
|
+
# Using yarn
|
|
62
|
+
yarn add @react-navigation/elements@^2.3.8 lucide-react-native@^0.503.0 react-native-gesture-handler@^2.25.0 react-native-reanimated@~3.16.1 react-native-svg@^15.11.2
|
|
63
|
+
|
|
64
|
+
# Using pnpm
|
|
65
|
+
pnpm add @react-navigation/elements@^2.3.8 lucide-react-native@^0.503.0 react-native-gesture-handler@^2.25.0 react-native-reanimated@~3.16.1 react-native-svg@^15.11.2
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Note: `react` and `react-native` are typically already installed in your React Native project, so you don't need to install them separately.
|
|
69
|
+
|
|
70
|
+
## 🚀 Quick Start
|
|
71
|
+
|
|
72
|
+
```jsx
|
|
73
|
+
import { Button } from '@space-uy/pulsar-ui';
|
|
74
|
+
|
|
75
|
+
function MyApp() {
|
|
76
|
+
return (
|
|
77
|
+
<>
|
|
78
|
+
{/* Primary button */}
|
|
79
|
+
<Button text="Click me" onPress={() => console.log('Button pressed!')} />
|
|
80
|
+
|
|
81
|
+
{/* Outline button */}
|
|
82
|
+
<Button
|
|
83
|
+
text="Outline Button"
|
|
84
|
+
variant="outlined"
|
|
85
|
+
onPress={() => console.log('Outline button pressed!')}
|
|
86
|
+
/>
|
|
87
|
+
|
|
88
|
+
{/* Small button with icon */}
|
|
89
|
+
<Button
|
|
90
|
+
text="Small Button"
|
|
91
|
+
size="small"
|
|
92
|
+
iconName="Plus"
|
|
93
|
+
onPress={() => console.log('Small button pressed!')}
|
|
94
|
+
/>
|
|
95
|
+
</>
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## 🛠️ Development
|
|
101
|
+
|
|
102
|
+
### Prerequisites
|
|
103
|
+
|
|
104
|
+
- Node.js (version specified in `.nvmrc`)
|
|
105
|
+
- Yarn (version 3.6.1 or later)
|
|
106
|
+
- React Native development environment set up
|
|
107
|
+
|
|
108
|
+
### Setup
|
|
109
|
+
|
|
110
|
+
1. Clone the repository:
|
|
111
|
+
|
|
112
|
+
```sh
|
|
113
|
+
git clone https://github.com/SpaceUY/pulsar-ui.git
|
|
114
|
+
cd @space-uy/pulsar-ui
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
2. Install dependencies:
|
|
118
|
+
|
|
119
|
+
```sh
|
|
120
|
+
yarn install
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
3. Start the example app:
|
|
124
|
+
|
|
125
|
+
```sh
|
|
126
|
+
yarn example
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Available Scripts
|
|
130
|
+
|
|
131
|
+
- `yarn example` - Run the example app
|
|
132
|
+
- `yarn test` - Run tests
|
|
133
|
+
- `yarn typecheck` - Run TypeScript type checking
|
|
134
|
+
- `yarn lint` - Run ESLint
|
|
135
|
+
- `yarn clean` - Clean build files
|
|
136
|
+
- `yarn prepare` - Build the library
|
|
137
|
+
|
|
138
|
+
## 🤝 Contributing
|
|
139
|
+
|
|
140
|
+
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details on how to submit pull requests, report issues, and more.
|
|
141
|
+
|
|
142
|
+
## 📄 License
|
|
143
|
+
|
|
144
|
+
MIT © [SpaceDev](https://github.com/SpaceUY)
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useState, useMemo, useEffect } from 'react';
|
|
4
|
+
import { View, Pressable, StyleSheet, Platform } from 'react-native';
|
|
5
|
+
import Animated, { useSharedValue, useAnimatedStyle, withTiming, interpolateColor, interpolate } from 'react-native-reanimated';
|
|
6
|
+
import useTheme from "../hooks/useTheme.js";
|
|
7
|
+
import Text from "./Text.js";
|
|
8
|
+
import Icon from "./Icon.js";
|
|
9
|
+
import { convertHexToRgba } from "../utils/uiUtils.js";
|
|
10
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
|
+
export function AccordionItem({
|
|
12
|
+
title,
|
|
13
|
+
children,
|
|
14
|
+
isExpanded = false,
|
|
15
|
+
onToggle,
|
|
16
|
+
style
|
|
17
|
+
}) {
|
|
18
|
+
const {
|
|
19
|
+
colors
|
|
20
|
+
} = useTheme();
|
|
21
|
+
const pressed = useSharedValue(0);
|
|
22
|
+
const rotation = useSharedValue(0);
|
|
23
|
+
const height = useSharedValue(0);
|
|
24
|
+
const opacity = useSharedValue(0);
|
|
25
|
+
const [contentHeight, setContentHeight] = useState(0);
|
|
26
|
+
const itemStyle = useMemo(() => ({
|
|
27
|
+
borderBottomWidth: 1,
|
|
28
|
+
borderBottomColor: colors.border,
|
|
29
|
+
backgroundColor: colors.background
|
|
30
|
+
}), [colors]);
|
|
31
|
+
const pressedColor = convertHexToRgba(colors.border, 0.5);
|
|
32
|
+
const animatedTriggerStyle = useAnimatedStyle(() => {
|
|
33
|
+
return {
|
|
34
|
+
backgroundColor: interpolateColor(pressed.value, [0, 1], [colors.background, pressedColor])
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
const animatedChevronStyle = useAnimatedStyle(() => {
|
|
38
|
+
return {
|
|
39
|
+
transform: [{
|
|
40
|
+
rotate: `${interpolate(rotation.value, [0, 1], [0, 180])}deg`
|
|
41
|
+
}]
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
const animatedContentStyle = useAnimatedStyle(() => {
|
|
45
|
+
return {
|
|
46
|
+
height: height.value,
|
|
47
|
+
opacity: opacity.value
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
const updatePressAnimation = value => {
|
|
51
|
+
pressed.value = withTiming(value, {
|
|
52
|
+
duration: 200
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
const handlePressIn = () => {
|
|
56
|
+
Platform.OS !== 'web' && updatePressAnimation(1);
|
|
57
|
+
};
|
|
58
|
+
const handlePressOut = () => {
|
|
59
|
+
Platform.OS !== 'web' && updatePressAnimation(0);
|
|
60
|
+
};
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
rotation.value = withTiming(isExpanded ? 1 : 0, {
|
|
63
|
+
duration: 200
|
|
64
|
+
});
|
|
65
|
+
}, [isExpanded, rotation]);
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
if (contentHeight > 0) {
|
|
68
|
+
height.value = withTiming(isExpanded ? contentHeight : 0, {
|
|
69
|
+
duration: 250
|
|
70
|
+
});
|
|
71
|
+
opacity.value = withTiming(isExpanded ? 1 : 0, {
|
|
72
|
+
duration: 200
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}, [isExpanded, contentHeight, height, opacity]);
|
|
76
|
+
const handleContentLayout = event => {
|
|
77
|
+
const {
|
|
78
|
+
height: layoutHeight
|
|
79
|
+
} = event.nativeEvent.layout;
|
|
80
|
+
if (layoutHeight > 0 && contentHeight !== layoutHeight) {
|
|
81
|
+
setContentHeight(layoutHeight);
|
|
82
|
+
if (isExpanded) {
|
|
83
|
+
height.value = layoutHeight;
|
|
84
|
+
opacity.value = 1;
|
|
85
|
+
} else {
|
|
86
|
+
height.value = 0;
|
|
87
|
+
opacity.value = 0;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
92
|
+
style: [itemStyle, style],
|
|
93
|
+
children: [/*#__PURE__*/_jsx(Pressable, {
|
|
94
|
+
style: styles.trigger,
|
|
95
|
+
onPress: onToggle,
|
|
96
|
+
onPressIn: handlePressIn,
|
|
97
|
+
onPressOut: handlePressOut,
|
|
98
|
+
onHoverIn: () => updatePressAnimation(1),
|
|
99
|
+
onHoverOut: () => updatePressAnimation(0),
|
|
100
|
+
children: /*#__PURE__*/_jsxs(Animated.View, {
|
|
101
|
+
style: [styles.triggerContent, animatedTriggerStyle],
|
|
102
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
103
|
+
variant: "h4",
|
|
104
|
+
style: [styles.title, {
|
|
105
|
+
color: colors.foreground
|
|
106
|
+
}],
|
|
107
|
+
children: title
|
|
108
|
+
}), /*#__PURE__*/_jsx(Animated.View, {
|
|
109
|
+
style: [styles.chevron, animatedChevronStyle],
|
|
110
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
111
|
+
name: "ChevronDown",
|
|
112
|
+
size: 20,
|
|
113
|
+
color: colors.foreground
|
|
114
|
+
})
|
|
115
|
+
})]
|
|
116
|
+
})
|
|
117
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
118
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
119
|
+
style: styles.hiddenContent,
|
|
120
|
+
onLayout: handleContentLayout,
|
|
121
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
122
|
+
style: styles.content,
|
|
123
|
+
children: children
|
|
124
|
+
})
|
|
125
|
+
}), contentHeight > 0 && /*#__PURE__*/_jsx(Animated.View, {
|
|
126
|
+
style: [styles.contentContainer, animatedContentStyle],
|
|
127
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
128
|
+
style: styles.content,
|
|
129
|
+
children: children
|
|
130
|
+
})
|
|
131
|
+
})]
|
|
132
|
+
})]
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
export default function Accordion({
|
|
136
|
+
type = 'single',
|
|
137
|
+
collapsible = false,
|
|
138
|
+
defaultValue,
|
|
139
|
+
value: controlledValue,
|
|
140
|
+
onValueChange,
|
|
141
|
+
children,
|
|
142
|
+
style
|
|
143
|
+
}) {
|
|
144
|
+
const {
|
|
145
|
+
colors,
|
|
146
|
+
theme
|
|
147
|
+
} = useTheme();
|
|
148
|
+
const getInitialExpandedItems = () => {
|
|
149
|
+
if (controlledValue !== undefined) {
|
|
150
|
+
return new Set(Array.isArray(controlledValue) ? controlledValue : [controlledValue]);
|
|
151
|
+
}
|
|
152
|
+
if (defaultValue !== undefined) {
|
|
153
|
+
return new Set(Array.isArray(defaultValue) ? defaultValue : [defaultValue]);
|
|
154
|
+
}
|
|
155
|
+
return new Set();
|
|
156
|
+
};
|
|
157
|
+
const [expandedItems, setExpandedItems] = useState(getInitialExpandedItems);
|
|
158
|
+
useEffect(() => {
|
|
159
|
+
if (controlledValue !== undefined) {
|
|
160
|
+
setExpandedItems(new Set(Array.isArray(controlledValue) ? controlledValue : [controlledValue]));
|
|
161
|
+
}
|
|
162
|
+
}, [controlledValue]);
|
|
163
|
+
const toggleItem = value => {
|
|
164
|
+
setExpandedItems(prev => {
|
|
165
|
+
const newSet = new Set(prev);
|
|
166
|
+
if (type === 'single') {
|
|
167
|
+
if (newSet.has(value)) {
|
|
168
|
+
if (collapsible) {
|
|
169
|
+
newSet.clear();
|
|
170
|
+
}
|
|
171
|
+
} else {
|
|
172
|
+
newSet.clear();
|
|
173
|
+
newSet.add(value);
|
|
174
|
+
}
|
|
175
|
+
} else if (newSet.has(value)) {
|
|
176
|
+
newSet.delete(value);
|
|
177
|
+
} else {
|
|
178
|
+
newSet.add(value);
|
|
179
|
+
}
|
|
180
|
+
const newValue = type === 'single' ? Array.from(newSet)[0] || '' : Array.from(newSet);
|
|
181
|
+
onValueChange?.(newValue);
|
|
182
|
+
return newSet;
|
|
183
|
+
});
|
|
184
|
+
};
|
|
185
|
+
const accordionStyle = useMemo(() => ({
|
|
186
|
+
backgroundColor: colors.background,
|
|
187
|
+
borderRadius: theme.roundness,
|
|
188
|
+
borderWidth: 1,
|
|
189
|
+
borderColor: colors.border,
|
|
190
|
+
overflow: 'hidden'
|
|
191
|
+
}), [colors, theme]);
|
|
192
|
+
const accordionItems = React.Children.map(children, (child, index) => {
|
|
193
|
+
if (/*#__PURE__*/React.isValidElement(child)) {
|
|
194
|
+
const value = child.props.value || `item-${index}`;
|
|
195
|
+
return /*#__PURE__*/React.cloneElement(child, {
|
|
196
|
+
isExpanded: expandedItems.has(value),
|
|
197
|
+
onToggle: () => toggleItem(value),
|
|
198
|
+
key: value
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
return child;
|
|
202
|
+
});
|
|
203
|
+
return /*#__PURE__*/_jsx(View, {
|
|
204
|
+
style: [accordionStyle, style],
|
|
205
|
+
children: accordionItems
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
const styles = StyleSheet.create({
|
|
209
|
+
trigger: {
|
|
210
|
+
overflow: 'hidden'
|
|
211
|
+
},
|
|
212
|
+
triggerContent: {
|
|
213
|
+
flexDirection: 'row',
|
|
214
|
+
alignItems: 'center',
|
|
215
|
+
justifyContent: 'space-between',
|
|
216
|
+
minHeight: 24,
|
|
217
|
+
paddingVertical: 16,
|
|
218
|
+
paddingHorizontal: 16
|
|
219
|
+
},
|
|
220
|
+
chevron: {
|
|
221
|
+
marginLeft: 8,
|
|
222
|
+
justifyContent: 'center',
|
|
223
|
+
alignItems: 'center'
|
|
224
|
+
},
|
|
225
|
+
content: {
|
|
226
|
+
paddingHorizontal: 16,
|
|
227
|
+
paddingBottom: 16,
|
|
228
|
+
overflow: 'hidden'
|
|
229
|
+
},
|
|
230
|
+
contentContainer: {
|
|
231
|
+
overflow: 'hidden'
|
|
232
|
+
},
|
|
233
|
+
hiddenContent: {
|
|
234
|
+
position: 'absolute',
|
|
235
|
+
opacity: 0,
|
|
236
|
+
zIndex: -1
|
|
237
|
+
},
|
|
238
|
+
title: {
|
|
239
|
+
flex: 1
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
//# sourceMappingURL=Accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useState","useMemo","useEffect","View","Pressable","StyleSheet","Platform","Animated","useSharedValue","useAnimatedStyle","withTiming","interpolateColor","interpolate","useTheme","Text","Icon","convertHexToRgba","jsx","_jsx","jsxs","_jsxs","AccordionItem","title","children","isExpanded","onToggle","style","colors","pressed","rotation","height","opacity","contentHeight","setContentHeight","itemStyle","borderBottomWidth","borderBottomColor","border","backgroundColor","background","pressedColor","animatedTriggerStyle","value","animatedChevronStyle","transform","rotate","animatedContentStyle","updatePressAnimation","duration","handlePressIn","OS","handlePressOut","handleContentLayout","event","layoutHeight","nativeEvent","layout","styles","trigger","onPress","onPressIn","onPressOut","onHoverIn","onHoverOut","triggerContent","variant","color","foreground","chevron","name","size","hiddenContent","onLayout","content","contentContainer","Accordion","type","collapsible","defaultValue","controlledValue","onValueChange","theme","getInitialExpandedItems","undefined","Set","Array","isArray","expandedItems","setExpandedItems","toggleItem","prev","newSet","has","clear","add","delete","newValue","from","accordionStyle","borderRadius","roundness","borderWidth","borderColor","overflow","accordionItems","Children","map","child","index","isValidElement","props","cloneElement","key","create","flexDirection","alignItems","justifyContent","minHeight","paddingVertical","paddingHorizontal","marginLeft","paddingBottom","position","zIndex","flex"],"sourceRoot":"../../../src","sources":["components/Accordion.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
|
|
4
|
+
import { Modal, StyleSheet, TouchableWithoutFeedback, useWindowDimensions, View } from 'react-native';
|
|
5
|
+
import Animated, { Easing, Extrapolation, interpolate, runOnJS, useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
|
|
6
|
+
import { Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
7
|
+
import useTheme from "../hooks/useTheme.js";
|
|
8
|
+
import { convertHexToRgba } from "../utils/uiUtils.js";
|
|
9
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
|
+
const BottomSheet = /*#__PURE__*/forwardRef(({
|
|
11
|
+
onBackdropPress = () => {},
|
|
12
|
+
children,
|
|
13
|
+
fullScreen = false
|
|
14
|
+
}, ref) => {
|
|
15
|
+
const [height, setHeight] = useState(0);
|
|
16
|
+
const [visible, setVisible] = useState(false);
|
|
17
|
+
const contentRef = useRef(null);
|
|
18
|
+
const {
|
|
19
|
+
colors,
|
|
20
|
+
theme
|
|
21
|
+
} = useTheme();
|
|
22
|
+
const {
|
|
23
|
+
width: screenWidth,
|
|
24
|
+
height: screenHeight
|
|
25
|
+
} = useWindowDimensions();
|
|
26
|
+
const offset = useSharedValue(screenHeight);
|
|
27
|
+
const opacity = useSharedValue(0);
|
|
28
|
+
useImperativeHandle(ref, () => ({
|
|
29
|
+
show: () => setVisible(true),
|
|
30
|
+
hide: () => runAnimation(false),
|
|
31
|
+
isActive: visible
|
|
32
|
+
}));
|
|
33
|
+
const transformAnimationStyle = useAnimatedStyle(() => {
|
|
34
|
+
return {
|
|
35
|
+
borderTopRightRadius: interpolate(offset.value, [0, screenHeight * 0.2], [0, 20], Extrapolation.CLAMP),
|
|
36
|
+
borderTopLeftRadius: interpolate(offset.value, [0, theme.insets.top + 150], [0, 20], Extrapolation.CLAMP),
|
|
37
|
+
transform: [{
|
|
38
|
+
translateY: offset.value
|
|
39
|
+
}]
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
const handleContainerAnimStyle = useAnimatedStyle(() => {
|
|
43
|
+
return {
|
|
44
|
+
paddingTop: interpolate(offset.value, [0, 100], [theme.insets.top + 16, 8], Extrapolation.CLAMP)
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
const handleAnimStyle = useAnimatedStyle(() => {
|
|
48
|
+
return {
|
|
49
|
+
width: interpolate(offset.value, [0, 100], [80, 40], Extrapolation.CLAMP)
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
const opacityAnimatedStyle = useAnimatedStyle(() => {
|
|
53
|
+
return {
|
|
54
|
+
opacity: opacity.value
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
const handleLayout = e => {
|
|
58
|
+
setHeight(e.nativeEvent.layout.height);
|
|
59
|
+
};
|
|
60
|
+
const getAnimationValue = (value, easing, closeOnFinish = false) => {
|
|
61
|
+
const config = {
|
|
62
|
+
duration: 300,
|
|
63
|
+
easing
|
|
64
|
+
};
|
|
65
|
+
// If we don't do it like this, the app throw an error regarding de value returned
|
|
66
|
+
if (closeOnFinish) {
|
|
67
|
+
return withTiming(value, config, () => {
|
|
68
|
+
runOnJS(setVisible)(false);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return withTiming(value, config);
|
|
72
|
+
};
|
|
73
|
+
const runAnimation = useCallback(isOpenAnim => {
|
|
74
|
+
const coordY = isOpenAnim ? screenHeight - height : screenHeight;
|
|
75
|
+
const easing = isOpenAnim ? Easing.out(Easing.exp) : Easing.in(Easing.exp);
|
|
76
|
+
offset.value = getAnimationValue(coordY, easing);
|
|
77
|
+
opacity.value = getAnimationValue(isOpenAnim ? 1 : 0, easing, !isOpenAnim);
|
|
78
|
+
}, [height, offset, opacity, screenHeight]);
|
|
79
|
+
const panGesture = Gesture.Pan().onUpdate(event => {
|
|
80
|
+
if (event.translationY > 0) {
|
|
81
|
+
offset.value = screenHeight - height + event.translationY;
|
|
82
|
+
}
|
|
83
|
+
}).onEnd(event => {
|
|
84
|
+
if (event.translationY > height * 0.3) {
|
|
85
|
+
offset.value = withTiming(screenHeight, {
|
|
86
|
+
duration: 300
|
|
87
|
+
}, () => {
|
|
88
|
+
runOnJS(setVisible)(false);
|
|
89
|
+
runOnJS(onBackdropPress)();
|
|
90
|
+
});
|
|
91
|
+
opacity.value = withTiming(0, {
|
|
92
|
+
duration: 300
|
|
93
|
+
});
|
|
94
|
+
} else {
|
|
95
|
+
offset.value = withTiming(screenHeight - height, {
|
|
96
|
+
duration: 300
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
const handleBackdropPress = () => {
|
|
101
|
+
onBackdropPress?.();
|
|
102
|
+
runAnimation(false);
|
|
103
|
+
};
|
|
104
|
+
useEffect(() => {
|
|
105
|
+
if (visible && height > 0) {
|
|
106
|
+
runAnimation(true);
|
|
107
|
+
}
|
|
108
|
+
}, [height, runAnimation, visible]);
|
|
109
|
+
return (
|
|
110
|
+
/*#__PURE__*/
|
|
111
|
+
/*
|
|
112
|
+
Need to wrap the modal with a View because there's a strange behavior in Android currently
|
|
113
|
+
which is not registering onPress events on components inside the modal. It seems to be something
|
|
114
|
+
related to the new architecture implementation on Andoid, change it once the issue is fixed.
|
|
115
|
+
See related issues:
|
|
116
|
+
- https://github.com/react-native-modal/react-native-modal/issues/737
|
|
117
|
+
- https://github.com/facebook/react-native/issues/36710
|
|
118
|
+
- https://github.com/facebook/react-native/issues/44643
|
|
119
|
+
*/
|
|
120
|
+
_jsx(View, {
|
|
121
|
+
children: /*#__PURE__*/_jsx(Modal, {
|
|
122
|
+
transparent: true,
|
|
123
|
+
statusBarTranslucent: true,
|
|
124
|
+
visible: visible,
|
|
125
|
+
onShow: () => runAnimation(true),
|
|
126
|
+
children: /*#__PURE__*/_jsxs(GestureHandlerRootView, {
|
|
127
|
+
children: [/*#__PURE__*/_jsx(TouchableWithoutFeedback, {
|
|
128
|
+
onPress: handleBackdropPress,
|
|
129
|
+
children: /*#__PURE__*/_jsx(Animated.View, {
|
|
130
|
+
style: [StyleSheet.absoluteFill, opacityAnimatedStyle, {
|
|
131
|
+
backgroundColor: convertHexToRgba(colors.foreground, 0.1)
|
|
132
|
+
}]
|
|
133
|
+
})
|
|
134
|
+
}), /*#__PURE__*/_jsx(GestureDetector, {
|
|
135
|
+
gesture: panGesture,
|
|
136
|
+
children: /*#__PURE__*/_jsxs(Animated.View, {
|
|
137
|
+
ref: contentRef,
|
|
138
|
+
onLayout: handleLayout,
|
|
139
|
+
style: [styles.contentContainer, {
|
|
140
|
+
backgroundColor: colors.background,
|
|
141
|
+
width: screenWidth
|
|
142
|
+
}, transformAnimationStyle, fullScreen ? {
|
|
143
|
+
height: screenHeight
|
|
144
|
+
} : {
|
|
145
|
+
maxHeight: screenHeight * 0.8
|
|
146
|
+
}],
|
|
147
|
+
children: [/*#__PURE__*/_jsx(Animated.View, {
|
|
148
|
+
style: [handleContainerAnimStyle, {
|
|
149
|
+
width: screenWidth
|
|
150
|
+
}, styles.handleContainer],
|
|
151
|
+
children: /*#__PURE__*/_jsx(Animated.View, {
|
|
152
|
+
style: [styles.handle, {
|
|
153
|
+
backgroundColor: colors.border
|
|
154
|
+
}, handleAnimStyle]
|
|
155
|
+
})
|
|
156
|
+
}), children]
|
|
157
|
+
})
|
|
158
|
+
})]
|
|
159
|
+
})
|
|
160
|
+
})
|
|
161
|
+
})
|
|
162
|
+
);
|
|
163
|
+
});
|
|
164
|
+
const styles = StyleSheet.create({
|
|
165
|
+
container: {
|
|
166
|
+
flex: 1
|
|
167
|
+
},
|
|
168
|
+
contentContainer: {
|
|
169
|
+
overflow: 'hidden'
|
|
170
|
+
},
|
|
171
|
+
handle: {
|
|
172
|
+
height: 8,
|
|
173
|
+
borderRadius: 8,
|
|
174
|
+
alignSelf: 'center'
|
|
175
|
+
},
|
|
176
|
+
handleContainer: {
|
|
177
|
+
justifyContent: 'flex-end',
|
|
178
|
+
alignItems: 'center',
|
|
179
|
+
paddingBottom: 16
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
export default BottomSheet;
|
|
183
|
+
//# sourceMappingURL=BottomSheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","Modal","StyleSheet","TouchableWithoutFeedback","useWindowDimensions","View","Animated","Easing","Extrapolation","interpolate","runOnJS","useAnimatedStyle","useSharedValue","withTiming","Gesture","GestureDetector","GestureHandlerRootView","useTheme","convertHexToRgba","jsx","_jsx","jsxs","_jsxs","BottomSheet","onBackdropPress","children","fullScreen","ref","height","setHeight","visible","setVisible","contentRef","colors","theme","width","screenWidth","screenHeight","offset","opacity","show","hide","runAnimation","isActive","transformAnimationStyle","borderTopRightRadius","value","CLAMP","borderTopLeftRadius","insets","top","transform","translateY","handleContainerAnimStyle","paddingTop","handleAnimStyle","opacityAnimatedStyle","handleLayout","e","nativeEvent","layout","getAnimationValue","easing","closeOnFinish","config","duration","isOpenAnim","coordY","out","exp","in","panGesture","Pan","onUpdate","event","translationY","onEnd","handleBackdropPress","transparent","statusBarTranslucent","onShow","onPress","style","absoluteFill","backgroundColor","foreground","gesture","onLayout","styles","contentContainer","background","maxHeight","handleContainer","handle","border","create","container","flex","overflow","borderRadius","alignSelf","justifyContent","alignItems","paddingBottom"],"sourceRoot":"../../../src","sources":["components/BottomSheet.tsx"],"mappings":"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","ignoreList":[]}
|