@herca/rn-kit 0.1.5 → 0.1.7
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/README.md +27 -2
- package/lib/module/Accordion/README.md +14 -6
- package/lib/module/Alert/README.md +1 -1
- package/lib/module/DropDown/DropDown.js +49 -45
- package/lib/module/DropDown/DropDown.js.map +1 -1
- package/lib/module/DropDown/README.md +1 -0
- package/lib/module/List/README.md +49 -0
- package/lib/module/Modal/Modal.js +1 -1
- package/lib/module/Modal/Modal.js.map +1 -1
- package/lib/module/Modal/README.md +39 -0
- package/lib/module/Provider/Provider.js +2 -0
- package/lib/module/Provider/Provider.js.map +1 -1
- package/lib/module/Step/README.md +91 -0
- package/lib/module/Timeline/README.md +80 -0
- package/lib/module/Timeline/Timeline.js +7 -1
- package/lib/module/Timeline/Timeline.js.map +1 -1
- package/lib/module/Timeline/TimelineItem.js +15 -5
- package/lib/module/Timeline/TimelineItem.js.map +1 -1
- package/lib/module/Toast/README.md +71 -0
- package/lib/module/Ui/README_CARD.md +76 -0
- package/lib/module/Ui/README_CONTAINER.md +26 -0
- package/lib/module/index.js +0 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/DropDown/DropDown.d.ts.map +1 -1
- package/lib/typescript/src/DropDown/type.d.ts +1 -1
- package/lib/typescript/src/DropDown/type.d.ts.map +1 -1
- package/lib/typescript/src/Provider/Provider.d.ts +2 -2
- package/lib/typescript/src/Provider/Provider.d.ts.map +1 -1
- package/lib/typescript/src/Provider/type.d.ts +2 -2
- package/lib/typescript/src/Provider/type.d.ts.map +1 -1
- package/lib/typescript/src/Timeline/TimelineItem.d.ts +1 -1
- package/lib/typescript/src/Timeline/TimelineItem.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +0 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Accordion/README.md +14 -6
- package/src/Alert/README.md +1 -1
- package/src/DropDown/DropDown.tsx +54 -58
- package/src/DropDown/README.md +1 -0
- package/src/DropDown/type.tsx +1 -1
- package/src/List/README.md +49 -0
- package/src/Modal/Modal.tsx +2 -2
- package/src/Modal/README.md +39 -0
- package/src/Provider/Provider.tsx +4 -2
- package/src/Provider/type.tsx +2 -2
- package/src/Step/README.md +91 -0
- package/src/Timeline/README.md +80 -0
- package/src/Timeline/Timeline.tsx +8 -2
- package/src/Timeline/TimelineItem.tsx +16 -3
- package/src/Toast/README.md +71 -0
- package/src/Ui/README_CARD.md +76 -0
- package/src/Ui/README_CONTAINER.md +26 -0
- package/src/index.tsx +0 -1
- package/lib/module/SwitchButton/SwitchButton.js +0 -8
- package/lib/module/SwitchButton/SwitchButton.js.map +0 -1
- package/lib/module/TextArea/TextArea.js +0 -2
- package/lib/module/TextArea/TextArea.js.map +0 -1
- package/lib/typescript/src/SwitchButton/SwitchButton.d.ts +0 -2
- package/lib/typescript/src/SwitchButton/SwitchButton.d.ts.map +0 -1
- package/lib/typescript/src/TextArea/TextArea.d.ts +0 -1
- package/lib/typescript/src/TextArea/TextArea.d.ts.map +0 -1
- package/src/SwitchButton/SwitchButton.tsx +0 -5
- package/src/TextArea/TextArea.tsx +0 -0
- /package/lib/module/Input/{Input.md → README_INPUT.md} +0 -0
- /package/src/Input/{Input.md → README_INPUT.md} +0 -0
package/README.md
CHANGED
|
@@ -70,6 +70,19 @@ cd ios
|
|
|
70
70
|
pod install
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
+
Wrap content utama dengan Provider
|
|
74
|
+
|
|
75
|
+
```tsx
|
|
76
|
+
|
|
77
|
+
import {Provider} from '@herca/rn-kit';
|
|
78
|
+
const Stack = createNativeStackNavigator();
|
|
79
|
+
|
|
80
|
+
const App = () => {
|
|
81
|
+
return (
|
|
82
|
+
<Provider>
|
|
83
|
+
<YoyrCode>
|
|
84
|
+
</Provider>
|
|
85
|
+
```
|
|
73
86
|
---
|
|
74
87
|
|
|
75
88
|
## 🚀 Penggunaan
|
|
@@ -88,12 +101,17 @@ import { Button } from '@herca/rn-kit';
|
|
|
88
101
|
|
|
89
102
|
Komponen untuk mengumpulkan input dari pengguna.
|
|
90
103
|
|
|
91
|
-
- [
|
|
104
|
+
- [Button](./src/Button/README.md)
|
|
105
|
+
- [Checkbox](./src/Checkbox/README_CHECKBOX.md)
|
|
106
|
+
- [Checkbox](./src/Checkbox/README_CHECKBOXLIST.md)
|
|
92
107
|
- [Chip-(Select)](./src/Chip/README.md)
|
|
93
108
|
- [DatePicker](./src/DatePicker/README.md)
|
|
94
109
|
- [DropDown](./src/DropDown/README.md)
|
|
95
110
|
- [Input](./src/Input/README.md)
|
|
111
|
+
- [Input Month](./src/InputMonth/README.md)
|
|
96
112
|
- [Input Password](./src/InputPassword/README.md)
|
|
113
|
+
- [Input Time](./src/InputTime/README.md)
|
|
114
|
+
- [Input Year](./src/InputYear/README.md)
|
|
97
115
|
- [Radio Button](./src/RadioButton/README.md)
|
|
98
116
|
- [Select](./src/Select/README.md)
|
|
99
117
|
- [Switch](./src/Switch/README.md)
|
|
@@ -115,6 +133,7 @@ Komponen yang muncul di atas konten utama untuk interaksi sementara.
|
|
|
115
133
|
Komponen untuk menyembunyikan atau menampilkan konten.
|
|
116
134
|
|
|
117
135
|
- [Accordion](./src/Accordion/README.md)
|
|
136
|
+
- [Step](./src/Step/README.md)
|
|
118
137
|
|
|
119
138
|
---
|
|
120
139
|
|
|
@@ -136,13 +155,19 @@ Komponen untuk menampilkan informasi atau elemen visual.
|
|
|
136
155
|
- [AvatarGroup](./src/Alert/README_AVATARGROUP.md)
|
|
137
156
|
- [Calendar](./src/Calendar/README.md)
|
|
138
157
|
- [Color](./src/Color/README.md)
|
|
139
|
-
- [Card](./src/
|
|
158
|
+
- [Card](./src/Ui/README_CARD.md)
|
|
140
159
|
- [Drawing](./src/Drawing/README.md)
|
|
160
|
+
- [Footer](./src/Footer/README.md)
|
|
141
161
|
- [List](./src/List/README.md)
|
|
162
|
+
- [Timeline](./src/Timeline/README.md)
|
|
142
163
|
- [Typography](./src/Typography/README.md)
|
|
143
164
|
|
|
144
165
|
---
|
|
145
166
|
|
|
167
|
+
### Contex
|
|
168
|
+
|
|
169
|
+
- [Provider](./src/Provider/README.md)
|
|
170
|
+
|
|
146
171
|
## 🤝 Kontribusi
|
|
147
172
|
|
|
148
173
|
Silakan baca panduan kontribusi pada [CONTRIBUTING.md](CONTRIBUTING.md) untuk mengetahui alur pengembangan dan kontribusi pada proyek ini.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# 📂 Accordion
|
|
2
2
|
|
|
3
3
|
Komponen **Accordion** digunakan untuk menyembunyikan atau menampilkan konten secara dinamis. Biasanya digunakan untuk struktur seperti FAQ atau daftar konten bertingkat.
|
|
4
|
-
|
|
4
|
+
<img src="../../assets/doc/Accordion/Accordion.gif" alt="Deskripsi Alt" width="200" />
|
|
5
5
|
|
|
6
6
|
## 📦 USAGE
|
|
7
7
|
|
|
@@ -32,12 +32,20 @@ export default function FAQSection() {
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
## Props
|
|
35
|
+
### Accordion
|
|
36
|
+
| Props | Tipe | Wajib | Default | Deskripsi |
|
|
37
|
+
| -------------- | --------------------------- | ----- | ------- | ------------------------------------------------------------------------------- |
|
|
38
|
+
| `children` | `ReactNode` | ✅ | - | Isi Accordion, harus terdiri dari satu atau beberapa `AccordionItem`. |
|
|
39
|
+
| `renderHeader` | `ReactNode \| null` | ❌ | `null` | Komponen untuk menampilkan header. Biasanya berupa `Text` atau komponen kustom. |
|
|
40
|
+
| `isOpen` | `boolean` | ❌ | `true` | Menentukan apakah Accordion terbuka saat pertama kali dirender. |
|
|
41
|
+
| `onCollapse` | `(isOpen: boolean) => void` | ❌ | - | Callback saat status terbuka/tutup berubah. |
|
|
42
|
+
|
|
43
|
+
### AccordionItem
|
|
44
|
+
| Props | Tipe | Wajib | Default | Deskripsi |
|
|
45
|
+
| ---------- | ----------- | ----- | ------- | --------------------------------------------------------------- |
|
|
46
|
+
| `children` | `ReactNode` | ✅ | - | Konten yang akan ditampilkan saat Accordion dibuka. |
|
|
47
|
+
| `index` | `number` | ❌ | - | Untuk pengendalian item tertentu jika diperlukan secara manual. |
|
|
35
48
|
|
|
36
|
-
| props name | mandatory | types | default |
|
|
37
|
-
| -------------------- | --------- | ------- | -------------------------------------------------------- |
|
|
38
|
-
| header | | ReactNode | false |
|
|
39
|
-
| isOpen | | boolean | true |
|
|
40
|
-
| onCollapse | | (isOpen: boolean) => void | true | |
|
|
41
49
|
|
|
42
50
|
## Note
|
|
43
51
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# 📢 Alert Component
|
|
2
2
|
|
|
3
3
|
Komponen `Alert` digunakan untuk menampilkan pesan notifikasi dengan ikon, judul, dan pesan yang dapat dikustomisasi warnanya sesuai konteks (seperti *success*, *info*, *warning*, dll).
|
|
4
|
+
<img src="../../assets/doc/Alert/Alert.png" alt="Deskripsi Alt" width="200" />
|
|
4
5
|
|
|
5
|
-

|
|
6
6
|
## ✨ Fitur
|
|
7
7
|
|
|
8
8
|
- Menampilkan ikon notifikasi
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { useState, useRef } from 'react';
|
|
4
|
-
import { View, Text, TouchableOpacity, StyleSheet, ScrollView, useWindowDimensions, findNodeHandle, UIManager } from 'react-native';
|
|
4
|
+
import { View, Text, TouchableOpacity, Pressable, StyleSheet, ScrollView, useWindowDimensions, findNodeHandle, UIManager, Modal } from 'react-native';
|
|
5
5
|
import Color from "../Color/Color.js";
|
|
6
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
7
7
|
const Dropdown = ({
|
|
8
8
|
options,
|
|
9
9
|
maxHeight = 200,
|
|
@@ -12,16 +12,28 @@ const Dropdown = ({
|
|
|
12
12
|
}) => {
|
|
13
13
|
const [isOpen, setIsOpen] = useState(false);
|
|
14
14
|
const [selected, setSelected] = useState();
|
|
15
|
-
const [
|
|
15
|
+
const [align, setAlign] = useState('left');
|
|
16
|
+
const [buttonLayout, setButtonLayout] = useState({
|
|
17
|
+
x: 0,
|
|
18
|
+
y: 0,
|
|
19
|
+
width: 0,
|
|
20
|
+
height: 0
|
|
21
|
+
});
|
|
16
22
|
const buttonRef = useRef(null);
|
|
17
23
|
const windowWidth = useWindowDimensions().width;
|
|
18
24
|
const handleToggle = () => {
|
|
19
25
|
if (!isOpen) {
|
|
20
26
|
const handle = findNodeHandle(buttonRef.current);
|
|
21
27
|
if (handle) {
|
|
22
|
-
UIManager.measureInWindow(handle, (x,
|
|
28
|
+
UIManager.measureInWindow(handle, (x, y, width, height) => {
|
|
23
29
|
const middle = windowWidth / 2;
|
|
24
|
-
|
|
30
|
+
setAlign(x + width / 2 > middle ? 'right' : 'left');
|
|
31
|
+
setButtonLayout({
|
|
32
|
+
x,
|
|
33
|
+
y,
|
|
34
|
+
width,
|
|
35
|
+
height
|
|
36
|
+
});
|
|
25
37
|
setIsOpen(true);
|
|
26
38
|
});
|
|
27
39
|
}
|
|
@@ -34,56 +46,54 @@ const Dropdown = ({
|
|
|
34
46
|
setIsOpen(false);
|
|
35
47
|
onSelect?.(value.value);
|
|
36
48
|
};
|
|
37
|
-
return /*#__PURE__*/_jsxs(
|
|
38
|
-
style: styles.container,
|
|
49
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
39
50
|
children: [/*#__PURE__*/_jsx(TouchableOpacity, {
|
|
40
51
|
ref: buttonRef,
|
|
41
|
-
style: styles.dropdownButton,
|
|
42
52
|
onPress: handleToggle,
|
|
43
|
-
children: renderButton
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
children: /*#__PURE__*/_jsx(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
53
|
+
children: renderButton
|
|
54
|
+
}), isOpen && /*#__PURE__*/_jsxs(Modal, {
|
|
55
|
+
transparent: true,
|
|
56
|
+
animationType: "none",
|
|
57
|
+
visible: true,
|
|
58
|
+
children: [/*#__PURE__*/_jsx(Pressable, {
|
|
59
|
+
style: StyleSheet.absoluteFillObject,
|
|
60
|
+
onPress: () => setIsOpen(false)
|
|
61
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
62
|
+
style: [styles.dropdownList, {
|
|
63
|
+
top: buttonLayout.y + buttonLayout.height,
|
|
64
|
+
left: align === 'left' ? buttonLayout.x : undefined,
|
|
65
|
+
right: align === 'right' ? windowWidth - (buttonLayout.x + buttonLayout.width) : undefined
|
|
66
|
+
}],
|
|
67
|
+
children: /*#__PURE__*/_jsx(ScrollView, {
|
|
68
|
+
nestedScrollEnabled: true,
|
|
69
|
+
style: {
|
|
70
|
+
maxHeight
|
|
71
|
+
},
|
|
72
|
+
children: options.map((item, idx) => /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
73
|
+
onPress: () => handlePressOption(item),
|
|
74
|
+
style: [styles.option, selected === item.value && styles.optionSelected],
|
|
75
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
76
|
+
children: item.label
|
|
77
|
+
})
|
|
78
|
+
}, idx))
|
|
79
|
+
})
|
|
80
|
+
})]
|
|
61
81
|
})]
|
|
62
82
|
});
|
|
63
83
|
};
|
|
64
84
|
export default Dropdown;
|
|
65
85
|
const styles = StyleSheet.create({
|
|
66
|
-
|
|
67
|
-
// width: 200, // or flexible
|
|
68
|
-
},
|
|
69
|
-
dropdownButton: {
|
|
70
|
-
// borderWidth: 1,
|
|
71
|
-
// borderColor: '#ccc',
|
|
72
|
-
// padding: 12,
|
|
73
|
-
// borderRadius: 6,
|
|
74
|
-
// backgroundColor: '#fff',
|
|
75
|
-
},
|
|
86
|
+
button: {},
|
|
76
87
|
dropdownList: {
|
|
77
88
|
position: 'absolute',
|
|
78
|
-
marginTop: 18,
|
|
79
89
|
padding: 8,
|
|
80
|
-
zIndex:
|
|
90
|
+
zIndex: 10,
|
|
81
91
|
gap: 4,
|
|
82
92
|
borderWidth: 1,
|
|
83
93
|
borderColor: Color.gray[50],
|
|
84
94
|
borderRadius: 8,
|
|
85
95
|
backgroundColor: Color.base.white100,
|
|
86
|
-
width:
|
|
96
|
+
width: 120
|
|
87
97
|
},
|
|
88
98
|
option: {
|
|
89
99
|
gap: 8,
|
|
@@ -96,12 +106,6 @@ const styles = StyleSheet.create({
|
|
|
96
106
|
optionSelected: {
|
|
97
107
|
backgroundColor: Color.primary[50],
|
|
98
108
|
borderColor: Color.primary[300]
|
|
99
|
-
},
|
|
100
|
-
left: {
|
|
101
|
-
left: 0
|
|
102
|
-
},
|
|
103
|
-
right: {
|
|
104
|
-
right: 0
|
|
105
109
|
}
|
|
106
110
|
});
|
|
107
111
|
//# sourceMappingURL=DropDown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useState","useRef","View","Text","TouchableOpacity","StyleSheet","ScrollView","useWindowDimensions","findNodeHandle","UIManager","Color","jsx","_jsx","jsxs","_jsxs","Dropdown","options","maxHeight","onSelect","renderButton","isOpen","setIsOpen","selected","setSelected","
|
|
1
|
+
{"version":3,"names":["useState","useRef","View","Text","TouchableOpacity","Pressable","StyleSheet","ScrollView","useWindowDimensions","findNodeHandle","UIManager","Modal","Color","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","Dropdown","options","maxHeight","onSelect","renderButton","isOpen","setIsOpen","selected","setSelected","align","setAlign","buttonLayout","setButtonLayout","x","y","width","height","buttonRef","windowWidth","handleToggle","handle","current","measureInWindow","middle","handlePressOption","value","children","ref","onPress","transparent","animationType","visible","style","absoluteFillObject","styles","dropdownList","top","left","undefined","right","nestedScrollEnabled","map","item","idx","option","optionSelected","label","create","button","position","padding","zIndex","gap","borderWidth","borderColor","gray","borderRadius","backgroundColor","base","white100","paddingVertical","paddingHorizontal","primary"],"sourceRoot":"../../../src","sources":["DropDown/DropDown.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Dropdown
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# 📋 List & ListItem
|
|
2
|
+
List menyajikan kumpulan elemen secara vertikal dengan tampilan kartu (border & radius), sedangkan ListItem mewakili baris individual yang dapat bersifat statis ataupun interaktif (dapat ditekan).
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
## 📦 Contoh Penggunaan
|
|
6
|
+
``` tsx
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import { Text } from 'react-native';
|
|
9
|
+
import List from '@herca/rn-kit/List';
|
|
10
|
+
import ListItem from '@herca/rn-kit/List/ListItem';
|
|
11
|
+
|
|
12
|
+
export default function SettingMenu() {
|
|
13
|
+
const handleProfile = () => console.log('Go to Profile');
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<List>
|
|
17
|
+
<ListItem onPress={handleProfile}>
|
|
18
|
+
<Text>Profil</Text>
|
|
19
|
+
</ListItem>
|
|
20
|
+
|
|
21
|
+
<ListItem onPress={() => console.log('Go to Notifications')}>
|
|
22
|
+
<Text>Notifikasi</Text>
|
|
23
|
+
</ListItem>
|
|
24
|
+
|
|
25
|
+
<ListItem>
|
|
26
|
+
<Text>Tentang Aplikasi</Text>
|
|
27
|
+
</ListItem>
|
|
28
|
+
</List>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 🧩 API Reference
|
|
35
|
+
|
|
36
|
+
### List
|
|
37
|
+
| Prop | Type | Wajib | Default | Deskripsi |
|
|
38
|
+
| ---------- | ----------- | ----- | ------- | ------------------------------ |
|
|
39
|
+
| `children` | `ReactNode` | ✅ | — | Satu atau beberapa `ListItem`. |
|
|
40
|
+
| `style` | `ViewStyle` | ❌ | — | Gaya tambahan untuk container. |
|
|
41
|
+
|
|
42
|
+
### ListItem
|
|
43
|
+
| Prop | Type | Wajib | Default | Deskripsi |
|
|
44
|
+
| ---------- | ---------------------- | ----- | ------- | ------------------------------------------------------------------------- |
|
|
45
|
+
| `children` | `ReactNode` | ✅ | — | Konten baris, bebas teks, ikon, atau komponen lain. |
|
|
46
|
+
| `onPress` | `() => void` | ❌ | — | Jika diisi, baris menjadi dapat diklik (`TouchableOpacity`). |
|
|
47
|
+
| `style` | `StyleProp<ViewStyle>` | ❌ | — | Gaya tambahan untuk baris. |
|
|
48
|
+
| `isLast` | `boolean` | 🚫 | — | Diisi otomatis oleh `List` untuk menghapus border bawah pada baris akhir. |
|
|
49
|
+
| `index` | `number` | 🚫 | — | Tidak digunakan—disediakan untuk extensibility. |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useState","useEffect","useCallback","View","StyleSheet","Modal","TouchableOpacity","Animated","SafeAreaView","Platform","jsx","_jsx","jsxs","_jsxs","ModalPopUp","isOpen","onClose","children","backdrop","closable","onRequestClose","bgColor","width","containerStyle","modalStyle","isVisible","setIsVisible","scaleAnim","Value","showModal","spring","toValue","useNativeDriver","damping","stiffness","start","hideModal","setTimeout","handleBackdropPress","modalContentStyle","flatten","transform","scale","backgroundColor","maxHeight","transparent","visible","statusBarTranslucent","style","styles","modalContainer","backdropTouch","activeOpacity","onPress","modalContent","closeButtonContainer","closeButton","hitSlop","top","bottom","left","right","contentContainer","create","flex","justifyContent","alignItems","position","height","borderRadius","overflow","select","ios","shadowColor","shadowOffset","shadowOpacity","shadowRadius","android","elevation","zIndex","padding"],"sourceRoot":"../../../src","sources":["Modal/Modal.tsx"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["React","useState","useEffect","useCallback","View","StyleSheet","Modal","TouchableOpacity","Animated","SafeAreaView","Platform","jsx","_jsx","jsxs","_jsxs","ModalPopUp","isOpen","onClose","children","backdrop","closable","onRequestClose","bgColor","width","containerStyle","modalStyle","isVisible","setIsVisible","scaleAnim","Value","showModal","spring","toValue","useNativeDriver","damping","stiffness","start","hideModal","setTimeout","handleBackdropPress","modalContentStyle","flatten","transform","scale","backgroundColor","maxHeight","transparent","visible","statusBarTranslucent","style","styles","modalContainer","backdropTouch","activeOpacity","onPress","modalContent","closeButtonContainer","closeButton","hitSlop","top","bottom","left","right","contentContainer","create","flex","justifyContent","alignItems","position","height","borderRadius","overflow","select","ios","shadowColor","shadowOffset","shadowOpacity","shadowRadius","android","elevation","zIndex","padding"],"sourceRoot":"../../../src","sources":["Modal/Modal.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# 🧊 ModalPopUp
|
|
2
|
+
ModalPopUp adalah komponen modal animasi dengan skala, dukungan backdrop, tombol close opsional, dan fleksibilitas ukuran serta gaya. Cocok untuk dialog, form, atau konfirmasi.
|
|
3
|
+
|
|
4
|
+
### 📦 Contoh Penggunaan
|
|
5
|
+
```tsx
|
|
6
|
+
import React, { useState } from 'react';
|
|
7
|
+
import { Text, Button } from 'react-native';
|
|
8
|
+
import ModalPopUp from '@herca/rn-kit/ModalPopUp';
|
|
9
|
+
|
|
10
|
+
export default function ExampleModal() {
|
|
11
|
+
const [visible, setVisible] = useState(false);
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<>
|
|
15
|
+
<Button title="Buka Modal" onPress={() => setVisible(true)} />
|
|
16
|
+
<ModalPopUp isOpen={visible} onClose={() => setVisible(false)}>
|
|
17
|
+
<Text style={{ fontSize: 18 }}>Ini adalah isi modal</Text>
|
|
18
|
+
</ModalPopUp>
|
|
19
|
+
</>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 🧩 API Reference
|
|
26
|
+
|
|
27
|
+
| Prop | Type | Default | Keterangan |
|
|
28
|
+
| ---------------- | ---------------------------- | ----------- | --------------------------------------------------------------------- |
|
|
29
|
+
| `isOpen` | `boolean` | — | Status untuk membuka/tutup modal. |
|
|
30
|
+
| `onClose` | `(isOpen?: boolean) => void` | `undefined` | Callback saat modal ditutup (baik via backdrop atau tombol close). |
|
|
31
|
+
| `children` | `ReactNode` | — | Konten utama modal. |
|
|
32
|
+
| `backdrop` | `boolean` | `true` | Apakah backdrop gelap ditampilkan di belakang modal. |
|
|
33
|
+
| `closable` | `boolean` | `true` | Apakah tombol close (lingkaran kecil di kanan atas) ditampilkan. |
|
|
34
|
+
| `onRequestClose` | `() => void` | `undefined` | Callback khusus saat backdrop ditekan (jika ingin override behavior). |
|
|
35
|
+
| `bgColor` | `string` | `"#fff"` | Warna latar belakang modal. |
|
|
36
|
+
| `width` | `DimensionValue` | `"90%"` | Lebar modal. Bisa `px`, `%`, atau nilai `number`. |
|
|
37
|
+
| `height` | `DimensionValue` | `undefined` | Tinggi modal (opsional, gunakan scroll jika tidak cukup). |
|
|
38
|
+
| `containerStyle` | `ViewStyle` | `undefined` | Gaya tambahan untuk wrapper container (pusat layar). |
|
|
39
|
+
| `modalStyle` | `ViewStyle` | `undefined` | Gaya tambahan untuk modal box. |
|
|
@@ -5,6 +5,7 @@ import { createContext, useContext, useState } from 'react';
|
|
|
5
5
|
import { StyleSheet, View } from 'react-native';
|
|
6
6
|
import LayoutWithFooter from "./LayoutWithFooter.js";
|
|
7
7
|
import RequiredUpdateAppsProvider from "./RequiredUpdateAppsProvider.js";
|
|
8
|
+
import Color from "../Color/Color.js";
|
|
8
9
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
10
|
const FooterContext = /*#__PURE__*/createContext(undefined);
|
|
10
11
|
export default function Provider({
|
|
@@ -37,6 +38,7 @@ export const useFooter = () => {
|
|
|
37
38
|
};
|
|
38
39
|
const styles = StyleSheet.create({
|
|
39
40
|
container: {
|
|
41
|
+
backgroundColor: Color.base.white100,
|
|
40
42
|
flex: 1
|
|
41
43
|
}
|
|
42
44
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContext","useContext","useState","StyleSheet","View","LayoutWithFooter","RequiredUpdateAppsProvider","jsx","_jsx","jsxs","_jsxs","FooterContext","undefined","Provider","children","requiredUpdated","updateConfig","footer","setFooter","style","styles","container","value","useFooter","context","Error","create","flex"],"sourceRoot":"../../../src","sources":["Provider/Provider.tsx"],"mappings":";;AAAA;AACA,SAASA,aAAa,EAAEC,UAAU,EAAEC,QAAQ,QAAQ,OAAO;AAC3D,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAC/C,OAAOC,gBAAgB,MAAM,uBAAoB;AACjD,OAAOC,0BAA0B,MAAM,iCAA8B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;
|
|
1
|
+
{"version":3,"names":["createContext","useContext","useState","StyleSheet","View","LayoutWithFooter","RequiredUpdateAppsProvider","Color","jsx","_jsx","jsxs","_jsxs","FooterContext","undefined","Provider","children","requiredUpdated","updateConfig","footer","setFooter","style","styles","container","value","useFooter","context","Error","create","backgroundColor","base","white100","flex"],"sourceRoot":"../../../src","sources":["Provider/Provider.tsx"],"mappings":";;AAAA;AACA,SAASA,aAAa,EAAEC,UAAU,EAAEC,QAAQ,QAAQ,OAAO;AAC3D,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAC/C,OAAOC,gBAAgB,MAAM,uBAAoB;AACjD,OAAOC,0BAA0B,MAAM,iCAA8B;AAGrE,OAAOC,KAAK,MAAM,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAanC,MAAMC,aAAa,gBAAGZ,aAAa,CAAgCa,SAAS,CAAC;AAE7E,eAAe,SAASC,QAAQA,CAAC;EAC/BC,QAAQ;EACRC,eAAe,GAAG,KAAK;EACvBC;AACa,CAAC,EAAE;EAChB,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGjB,QAAQ,CAAC,IAAI,CAAC;EAE1C,oBACES,KAAA,CAACP,IAAI;IAACgB,KAAK,EAAEC,MAAM,CAACC,SAAU;IAAAP,QAAA,GAC3BC,eAAe,gBACdP,IAAA,CAACH,0BAA0B;MAAA,GAAKW;IAAY,CAAG,CAAC,GAC9C,IAAI,eACRR,IAAA,CAACG,aAAa,CAACE,QAAQ;MAACS,KAAK,EAAE;QAAEL,MAAM;QAAEC;MAAU,CAAE;MAAAJ,QAAA,eACnDN,IAAA,CAACJ,gBAAgB;QAAAU,QAAA,EAAEA;MAAQ,CAAmB;IAAC,CACzB,CAAC;EAAA,CACrB,CAAC;AAEX;AAEA,OAAO,MAAMS,SAAS,GAAGA,CAAA,KAAM;EAC7B,MAAMC,OAAO,GAAGxB,UAAU,CAACW,aAAa,CAAC;EACzC,IAAIa,OAAO,KAAKZ,SAAS,EAAE;IACzB,MAAM,IAAIa,KAAK,CAAC,iDAAiD,CAAC;EACpE;EACA,OAAOD,OAAO;AAChB,CAAC;AAED,MAAMJ,MAAM,GAAGlB,UAAU,CAACwB,MAAM,CAAC;EAC/BL,SAAS,EAAE;IACTM,eAAe,EAAErB,KAAK,CAACsB,IAAI,CAACC,QAAQ;IACpCC,IAAI,EAAE;EACR;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# 🪜 Step & StepItem
|
|
2
|
+
Komponen Step menampilkan alur proses bertahap (wizard / progress indicator) dengan header horizontal yang dapat digeser, serta area konten untuk setiap langkah.
|
|
3
|
+
Setiap titik/langkah diwakili oleh StepItem.
|
|
4
|
+
|
|
5
|
+
## 📦 Contoh Penggunaan
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import React, { useState } from 'react';
|
|
9
|
+
import { View, Text } from 'react-native';
|
|
10
|
+
import Step from '@herca/rn-kit/Step';
|
|
11
|
+
import StepItem from '@herca/rn-kit/Step/StepItem';
|
|
12
|
+
|
|
13
|
+
export default function CheckoutWizard() {
|
|
14
|
+
const [currentStep, setCurrentStep] = useState(0);
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<Step current={currentStep} onChangeStep={(i) => setCurrentStep(i)}>
|
|
18
|
+
{/* Header & konten otomatis dipasangkan berdasarkan urutan */}
|
|
19
|
+
<StepItem title="Alamat">
|
|
20
|
+
<Text>Form Alamat Pengiriman</Text>
|
|
21
|
+
</StepItem>
|
|
22
|
+
|
|
23
|
+
<StepItem title="Pembayaran">
|
|
24
|
+
<Text>Metode Pembayaran</Text>
|
|
25
|
+
</StepItem>
|
|
26
|
+
|
|
27
|
+
<StepItem title="Konfirmasi">
|
|
28
|
+
<Text>Ringkasan & Konfirmasi Pesanan</Text>
|
|
29
|
+
</StepItem>
|
|
30
|
+
</Step>
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
## 🧩 API Reference
|
|
36
|
+
|
|
37
|
+
### Step
|
|
38
|
+
| Prop | Type | Wajib | Default | Deskripsi |
|
|
39
|
+
| -------------- | -------------------------------------- | ----- | ------- | --------------------------------------------------------------------------- |
|
|
40
|
+
| `children` | `ReactElement<StepItemProps>` \| array | ✅ | — | Satu atau beberapa `StepItem`. |
|
|
41
|
+
| `current` | `number` | ✅ | — | Indeks langkah aktif (dimulai dari `0`). |
|
|
42
|
+
| `onChangeStep` | `(activeIndex: number) => void` | ✅ | — | Callback yang dipicu setiap kali nilai `current` berubah di dalam komponen. |
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
### StepItem
|
|
46
|
+
|
|
47
|
+
Digunakan dua kali:
|
|
48
|
+
|
|
49
|
+
Sebagai header (ikon lingkaran + garis) – otomatis di‐render oleh Step.
|
|
50
|
+
|
|
51
|
+
Sebagai konten – ditampilkan bila index-nya sama dengan current.
|
|
52
|
+
|
|
53
|
+
| Prop | Type | Wajib | Default | Deskripsi |
|
|
54
|
+
| ---------- | ------------------------------------------------------------- | ----- | ----------- | ------------------------------------------------------------------ |
|
|
55
|
+
| `children` | `ReactNode` | ✅ | — | Konten yang muncul ketika langkah ini aktif. |
|
|
56
|
+
| `color` | `'primary' \| 'success' \| 'warning' \| 'danger' \| 'purple'` | ❌ | `'primary'` | Warna lingkaran & garis pada header. |
|
|
57
|
+
| `title` | `string` | ❌ | `''` | (Opsional) Judul untuk ditampilkan di header (bisa dikustom lagi). |
|
|
58
|
+
|
|
59
|
+
## ⚙️ Cara Kerja
|
|
60
|
+
|
|
61
|
+
1. Header Scrollable
|
|
62
|
+
|
|
63
|
+
- Lebar setiap header item fix (stepWidth = 100).
|
|
64
|
+
|
|
65
|
+
- Jika total lebar < perangkat, item otomatis di-center; jika lebih, bisa digeser horizontal.
|
|
66
|
+
|
|
67
|
+
- Ketika current berubah, ScrollView.scrollTo() memastikan item aktif selalu di tengah layar.
|
|
68
|
+
|
|
69
|
+
2. Lingkaran Status
|
|
70
|
+
|
|
71
|
+
- isActive → lingkaran berwarna solid (Color.info[500]).
|
|
72
|
+
|
|
73
|
+
- isCompleted (index < current) → gaya sama dengan aktif (bisa diubah jika ingin beda).
|
|
74
|
+
|
|
75
|
+
- Item terakhir otomatis tanpa garis setelah lingkaran.
|
|
76
|
+
|
|
77
|
+
3. Konten
|
|
78
|
+
|
|
79
|
+
- Hanya langkah aktif yang dirender di area konten (childrenArray[current]).
|
|
80
|
+
|
|
81
|
+
- Jika konten berupa FlatList, properti nestedScrollEnabled diaktifkan agar scrolling mulus di nested list.
|
|
82
|
+
|
|
83
|
+
## 💡 Tips & Praktik Terbaik
|
|
84
|
+
|
|
85
|
+
| Kebutuhan | Saran Implementasi |
|
|
86
|
+
| ------------------------- | --------------------------------------------------------------------------------------------------- |
|
|
87
|
+
| **Navigasi Manual** | Ubah state `current` dari luar (`setCurrentStep`). |
|
|
88
|
+
| **Validasi Tiap Langkah** | Jalankan pengecekan sebelum menaikkan `current`; mis. pastikan form valid. |
|
|
89
|
+
| **Kustom Warna/Ikon** | Edit `COLOR_MAP` atau tambahkan prop `icon` pada `StepItem` jika ingin ikon berbeda di bullet. |
|
|
90
|
+
| **Langkah Dinamis** | Karena `children` berupa array, Anda bisa `.filter()` atau `.slice()` sebelum mem-pass ke `<Step>`. |
|
|
91
|
+
| **Tema Gelap** | Sesuaikan `Color.info[500]`, `Color.info[50]`, dll. |
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# 🗂️ Timeline & TimelineItem
|
|
2
|
+
Timeline menampilkan rangkaian peristiwa secara vertikal—mirip “stepper” atau “activity feed”.
|
|
3
|
+
Setiap node diwakili oleh TimelineItem yang menampilkan titik (bullet icon) dan garis vertikal terhubung.
|
|
4
|
+
|
|
5
|
+
## Contoh Penggunaan
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import { Text } from 'react-native';
|
|
10
|
+
import Timeline from '@herca/rn-kit/Timeline';
|
|
11
|
+
import TimelineItem from '@herca/rn-kit/Timeline/TimelineItem';
|
|
12
|
+
|
|
13
|
+
export default function OrderHistory() {
|
|
14
|
+
return (
|
|
15
|
+
<Timeline>
|
|
16
|
+
<TimelineItem color="success">
|
|
17
|
+
<Text>Pesanan dibuat • 10 Jan 2025</Text>
|
|
18
|
+
</TimelineItem>
|
|
19
|
+
|
|
20
|
+
<TimelineItem color="primary">
|
|
21
|
+
<Text>Dikemas • 11 Jan 2025</Text>
|
|
22
|
+
</TimelineItem>
|
|
23
|
+
|
|
24
|
+
<TimelineItem color="warning">
|
|
25
|
+
<Text>Dalam pengiriman • 12 Jan 2025</Text>
|
|
26
|
+
</TimelineItem>
|
|
27
|
+
|
|
28
|
+
<TimelineItem color="danger">
|
|
29
|
+
<Text>Gagal diterima • 14 Jan 2025</Text>
|
|
30
|
+
</TimelineItem>
|
|
31
|
+
</Timeline>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Props
|
|
38
|
+
|
|
39
|
+
### Timeline
|
|
40
|
+
| Prop | Type | Wajib | Default | Deskripsi |
|
|
41
|
+
| ---------- | ----------- | ----- | ------- | ---------------------------------- |
|
|
42
|
+
| `children` | `ReactNode` | ✅ | — | Satu atau beberapa `TimelineItem`. |
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
### TimelineItem
|
|
46
|
+
| Prop | Type | Wajib | Default | Deskripsi |
|
|
47
|
+
| ---------- | ------------------------------------------------------------- | ----- | ----------- | ----------------------------------------------------- |
|
|
48
|
+
| `children` | `ReactNode` | ✅ | — | Konten untuk node timeline: teks, ikon tambahan, dsb. |
|
|
49
|
+
| `color` | `'primary' \| 'success' \| 'warning' \| 'danger' \| 'purple'` | ❌ | `'primary'` | Skema warna titik (`RadioButton`) dan garis vertikal. |
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
## ⚙️ Cara Kerja
|
|
53
|
+
|
|
54
|
+
1. Bullet & Line
|
|
55
|
+
|
|
56
|
+
- Bullet dirender dengan komponen Icon (name="RadioButton") memakai warna dari color.
|
|
57
|
+
|
|
58
|
+
- Garis vertikal (borderLeftWidth: 1) menggunakan borderStyle: 'dashed'. Tingginya dihitung secara dinamis (contentHeight - 20) agar garis mulai tepat di bawah bullet.
|
|
59
|
+
|
|
60
|
+
2. Penghitungan Tinggi
|
|
61
|
+
|
|
62
|
+
- onLayout pada wrapper konten mengukur tinggi aktual item.
|
|
63
|
+
|
|
64
|
+
- Hasil pengukuran dipakai untuk menyesuaikan panjang garis, menjaga visual konsisten meskipun konten memiliki tinggi berbeda.
|
|
65
|
+
|
|
66
|
+
3. Layout
|
|
67
|
+
|
|
68
|
+
- Komponen dibangun dengan flexDirection: 'row', bullet di kiri, konten di kanan (flex: 1).
|
|
69
|
+
|
|
70
|
+
- Margin horizontal (marginRight: 8) menjaga jarak antara bullet dan konten.
|
|
71
|
+
|
|
72
|
+
## 💡 Tips Penggunaan
|
|
73
|
+
- Item Terakhir Tanpa Garis
|
|
74
|
+
Bila ingin menghilangkan garis pada item terakhir, buat prop opsional mis. isLast dan kondisikan tinggi garis menjadi 0.
|
|
75
|
+
|
|
76
|
+
- Interaktif
|
|
77
|
+
Anda bebas menambahkan tombol, TouchableOpacity, atau ikon status di dalam children.
|
|
78
|
+
|
|
79
|
+
- Kustomisasi Warna
|
|
80
|
+
Untuk warna tambahan, update COLOR_MAP dan tipe ColorKey pada TimelineItem.
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { View } from 'react-native';
|
|
3
|
+
import { StyleSheet, View } from 'react-native';
|
|
4
4
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
5
|
export default function Timeline({
|
|
6
6
|
children
|
|
7
7
|
}) {
|
|
8
8
|
return /*#__PURE__*/_jsx(View, {
|
|
9
|
+
style: styles.gap14,
|
|
9
10
|
children: children
|
|
10
11
|
});
|
|
11
12
|
}
|
|
13
|
+
const styles = StyleSheet.create({
|
|
14
|
+
gap14: {
|
|
15
|
+
gap: 14
|
|
16
|
+
}
|
|
17
|
+
});
|
|
12
18
|
//# sourceMappingURL=Timeline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["View","jsx","_jsx","Timeline","children"],"sourceRoot":"../../../src","sources":["Timeline/Timeline.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;
|
|
1
|
+
{"version":3,"names":["StyleSheet","View","jsx","_jsx","Timeline","children","style","styles","gap14","create","gap"],"sourceRoot":"../../../src","sources":["Timeline/Timeline.tsx"],"mappings":";;AAAA,SAASA,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAMhD,eAAe,SAASC,QAAQA,CAAC;EAAEC;AAAmB,CAAC,EAAE;EACvD,oBAAOF,IAAA,CAACF,IAAI;IAACK,KAAK,EAAEC,MAAM,CAACC,KAAM;IAAAH,QAAA,EAAEA;EAAQ,CAAO,CAAC;AACrD;AAEA,MAAME,MAAM,GAAGP,UAAU,CAACS,MAAM,CAAC;EAC/BD,KAAK,EAAE;IACLE,GAAG,EAAE;EACP;AACF,CAAC,CAAC","ignoreList":[]}
|