@herca/rn-kit 0.1.31 → 0.1.33

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 (43) hide show
  1. package/README.md +5 -3
  2. package/lib/module/Chip/Chip.js +17 -7
  3. package/lib/module/Chip/Chip.js.map +1 -1
  4. package/lib/module/Chip/ChipItem.js +3 -1
  5. package/lib/module/Chip/ChipItem.js.map +1 -1
  6. package/lib/module/Chip/README_CHIP_ITEM.md +73 -0
  7. package/lib/module/Select/README.md +26 -17
  8. package/lib/module/Select/Select.js +42 -30
  9. package/lib/module/Select/Select.js.map +1 -1
  10. package/lib/module/Skeleton/README.md +79 -0
  11. package/lib/module/Skeleton/Skeleton.js +73 -0
  12. package/lib/module/Skeleton/Skeleton.js.map +1 -0
  13. package/lib/module/Skeleton/type.js +4 -0
  14. package/lib/module/Skeleton/type.js.map +1 -0
  15. package/lib/module/index.js +3 -0
  16. package/lib/module/index.js.map +1 -1
  17. package/lib/typescript/src/Chip/Chip.d.ts.map +1 -1
  18. package/lib/typescript/src/Chip/ChipItem.d.ts +1 -1
  19. package/lib/typescript/src/Chip/ChipItem.d.ts.map +1 -1
  20. package/lib/typescript/src/Chip/type.d.ts +2 -1
  21. package/lib/typescript/src/Chip/type.d.ts.map +1 -1
  22. package/lib/typescript/src/Select/Select.d.ts +1 -1
  23. package/lib/typescript/src/Select/Select.d.ts.map +1 -1
  24. package/lib/typescript/src/Select/type.d.ts +2 -0
  25. package/lib/typescript/src/Select/type.d.ts.map +1 -1
  26. package/lib/typescript/src/Skeleton/Skeleton.d.ts +5 -0
  27. package/lib/typescript/src/Skeleton/Skeleton.d.ts.map +1 -0
  28. package/lib/typescript/src/Skeleton/type.d.ts +10 -0
  29. package/lib/typescript/src/Skeleton/type.d.ts.map +1 -0
  30. package/lib/typescript/src/index.d.ts +4 -0
  31. package/lib/typescript/src/index.d.ts.map +1 -1
  32. package/package.json +1 -1
  33. package/src/Chip/Chip.tsx +19 -4
  34. package/src/Chip/ChipItem.tsx +2 -0
  35. package/src/Chip/README_CHIP_ITEM.md +73 -0
  36. package/src/Chip/type.tsx +2 -1
  37. package/src/Select/README.md +26 -17
  38. package/src/Select/Select.tsx +47 -34
  39. package/src/Select/type.tsx +2 -0
  40. package/src/Skeleton/README.md +79 -0
  41. package/src/Skeleton/Skeleton.tsx +99 -0
  42. package/src/Skeleton/type.ts +10 -0
  43. package/src/index.tsx +4 -0
package/README.md CHANGED
@@ -4,7 +4,7 @@ UI Kit untuk pengembangan aplikasi internal **HerCa**.
4
4
 
5
5
  Kit ini dirancang untuk mempercepat proses pengembangan antarmuka pengguna dengan pendekatan minimal terhadap penggunaan `style` manual. Beberapa komponen dibuat **fix dan konsisten** agar tampilan aplikasi memiliki nuansa yang seragam.
6
6
 
7
- > **Catatan:** Jika menggunakan UI Kit ini, **tidak disarankan untuk menambahkan style atau melakukan kustomisasi manual**.
7
+ > **Catatan:** Jika menggunakan UI Kit ini, **tidak disarankan untuk menambahkan style atau melakukan kustomisasi manual**.
8
8
  > Untuk kebutuhan kustomisasi, gunakan konfigurasi `Theme` yang telah disediakan.
9
9
 
10
10
  ---
@@ -107,6 +107,7 @@ Komponen untuk mengumpulkan input dari pengguna.
107
107
  - [Checkbox](./src/CheckBox/README_CHECKBOX.md)
108
108
  - [Checkbox List](./src/CheckBox/README_CHECKBOXLIST.md)
109
109
  - [Chip-(Select)](./src/Chip/README.md)
110
+ - [ChipItem](./src/Chip/README_CHIP_ITEM.md)
110
111
  - [CounterButton](./src/CounterButton/README.md)
111
112
  - [DatePicker](./src/DatePicker/README_DATEPICKER.md)
112
113
  - [DropDown](./src/DropDown/README.md)
@@ -142,7 +143,7 @@ Komponen untuk menyembunyikan atau menampilkan konten.
142
143
 
143
144
  ---
144
145
 
145
- ### 🔹 4. Feedback
146
+ ### 🔹 4. Feedback
146
147
 
147
148
  Komponen untuk memberikan umpan balik atau informasi kepada pengguna.
148
149
 
@@ -169,6 +170,7 @@ Komponen untuk menampilkan informasi atau elemen visual.
169
170
  - [List](./src/List/README.md)
170
171
  - [Timeline](./src/Timeline/README.md)
171
172
  - [Typography](./src/Typography/README.md)
173
+ - [Skeleton](./src/Skeleton/README.md)
172
174
 
173
175
  ---
174
176
 
@@ -184,4 +186,4 @@ Silakan baca panduan kontribusi pada [CONTRIBUTING.md](CONTRIBUTING.md) untuk me
184
186
 
185
187
  ## 📄 Lisensi
186
188
 
187
- MIT License
189
+ MIT License
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import React, { useState, useEffect, useMemo } from 'react';
4
- import { FlatList, StyleSheet } from 'react-native';
4
+ import { Dimensions, FlatList, StyleSheet } from 'react-native';
5
5
  import ChipItem from "./ChipItem.js";
6
6
  import { jsx as _jsx } from "react/jsx-runtime";
7
7
  const Chip = ({
@@ -23,6 +23,11 @@ const Chip = ({
23
23
  header
24
24
  }) => {
25
25
  const isHorizontal = direction === 'horizontal';
26
+ const [chipItemWidth, setChipItemWidth] = useState(0);
27
+ const screenWidth = Dimensions.get('window').width;
28
+ const contaierHorizontalPadding = 24;
29
+ const containerHorizontalChipGap = 8;
30
+ const availableContainerChipWidth = screenWidth - contaierHorizontalPadding;
26
31
  const normalizeSelected = val => Array.isArray(val) ? val : val ? [val] : [];
27
32
  const [internalSelected, setInternalSelected] = useState(normalizeSelected(selected));
28
33
  useEffect(() => {
@@ -46,8 +51,8 @@ const Chip = ({
46
51
  };
47
52
  const numColumns = useMemo(() => {
48
53
  if (isHorizontal || block) return 1;
49
- return 2;
50
- }, [block, isHorizontal]);
54
+ return Math.floor(availableContainerChipWidth / (chipItemWidth + containerHorizontalChipGap));
55
+ }, [block, isHorizontal, availableContainerChipWidth, chipItemWidth]);
51
56
  const handleOnPresChipItem = (isDisabled, item) => {
52
57
  !isDisabled && handleSelect(item.value);
53
58
  onPress?.(item.value);
@@ -65,7 +70,13 @@ const Chip = ({
65
70
  block: block,
66
71
  onPress: handleOnPresChipItem,
67
72
  size: size,
68
- renderItem: renderItem
73
+ renderItem: renderItem,
74
+ onLayout: chipItemWidth ? undefined : e => {
75
+ const {
76
+ width
77
+ } = e.nativeEvent.layout;
78
+ setChipItemWidth(width);
79
+ }
69
80
  }),
70
81
  keyExtractor: item => String(item.value),
71
82
  horizontal: isHorizontal,
@@ -82,12 +93,11 @@ const Chip = ({
82
93
  columnWrapperStyle: numColumns > 1 ? styles.wrapperStyle : undefined,
83
94
  ListFooterComponent: footer,
84
95
  ListHeaderComponent: header
85
- });
96
+ }, `chip-${numColumns}`);
86
97
  };
87
98
  const styles = StyleSheet.create({
88
99
  container: {
89
- gap: 8,
90
- paddingBottom: 14
100
+ gap: 8
91
101
  },
92
102
  wrapperStyle: {
93
103
  gap: 8,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","useEffect","useMemo","FlatList","StyleSheet","ChipItem","jsx","_jsx","Chip","options","selected","onSelect","onPress","direction","color","renderItem","multiple","scrollable","block","size","onRefresh","refreshing","onEndReached","footer","header","isHorizontal","normalizeSelected","val","Array","isArray","internalSelected","setInternalSelected","newSelected","JSON","stringify","isSelected","value","includes","handleSelect","length","filter","v","numColumns","handleOnPresChipItem","isDisabled","item","flexDirectionStyle","alignItemsStyle","data","keyExtractor","String","horizontal","scrollEnabled","keyboardShouldPersistTaps","contentContainerStyle","styles","container","flexDirection","alignItems","columnWrapperStyle","wrapperStyle","undefined","ListFooterComponent","ListHeaderComponent","create","gap","paddingBottom","flexWrap","chip","borderRadius","borderWidth","alignSelf","chipSmall","paddingVertical","paddingHorizontal","chipMedium","chipLarge","blockChip","width"],"sourceRoot":"../../../src","sources":["Chip/Chip.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","useEffect","useMemo","Dimensions","FlatList","StyleSheet","ChipItem","jsx","_jsx","Chip","options","selected","onSelect","onPress","direction","color","renderItem","multiple","scrollable","block","size","onRefresh","refreshing","onEndReached","footer","header","isHorizontal","chipItemWidth","setChipItemWidth","screenWidth","get","width","contaierHorizontalPadding","containerHorizontalChipGap","availableContainerChipWidth","normalizeSelected","val","Array","isArray","internalSelected","setInternalSelected","newSelected","JSON","stringify","isSelected","value","includes","handleSelect","length","filter","v","numColumns","Math","floor","handleOnPresChipItem","isDisabled","item","flexDirectionStyle","alignItemsStyle","data","onLayout","undefined","e","nativeEvent","layout","keyExtractor","String","horizontal","scrollEnabled","keyboardShouldPersistTaps","contentContainerStyle","styles","container","flexDirection","alignItems","columnWrapperStyle","wrapperStyle","ListFooterComponent","ListHeaderComponent","create","gap","flexWrap","chip","borderRadius","borderWidth","alignSelf","chipSmall","paddingVertical","paddingHorizontal","chipMedium","chipLarge","blockChip"],"sourceRoot":"../../../src","sources":["Chip/Chip.tsx"],"mappings":"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","ignoreList":[]}
@@ -12,7 +12,8 @@ export default function ChipItem({
12
12
  size,
13
13
  renderItem,
14
14
  isHorizontal,
15
- onPress
15
+ onPress,
16
+ onLayout
16
17
  }) {
17
18
  const validColors = ['default', 'success', 'danger', 'primary', 'warning', 'info', 'purple', 'orange'];
18
19
  const safeColor = validColors.includes(color) ? color : 'default';
@@ -50,6 +51,7 @@ export default function ChipItem({
50
51
  style: [styles.chip, getSizeStyle(), dynamicStyle, isBlockMode && styles.blockChip],
51
52
  onPress: () => handleOnPres(isDisabled, item),
52
53
  disabled: isDisabled,
54
+ onLayout: onLayout,
53
55
  children: renderItem ? renderItem(item, selectedState, isDisabled) : /*#__PURE__*/_jsx(Typography, {
54
56
  variant: "t2",
55
57
  style: {
@@ -1 +1 @@
1
- {"version":3,"names":["Pressable","StyleSheet","Typography","CHIP_COLOR_MAP","jsx","_jsx","ChipItem","item","isSelected","color","block","size","renderItem","isHorizontal","onPress","validColors","safeColor","includes","colors","selectedState","value","isDisabled","disabled","dynamicStyle","borderColor","backgroundColor","selectedBorderColor","selectedBackgroundColor","disabledBorderColor","disabledBackgroundColor","isBlockMode","getSizeStyle","styles","chipSmall","chipLarge","chipMedium","handleOnPres","val","style","chip","blockChip","children","variant","fontSize","disabledTextColor","selectedTextColor","textColor","label","create","container","gap","borderRadius","borderWidth","alignSelf","paddingVertical","paddingHorizontal","width"],"sourceRoot":"../../../src","sources":["Chip/ChipItem.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Pressable","StyleSheet","Typography","CHIP_COLOR_MAP","jsx","_jsx","ChipItem","item","isSelected","color","block","size","renderItem","isHorizontal","onPress","onLayout","validColors","safeColor","includes","colors","selectedState","value","isDisabled","disabled","dynamicStyle","borderColor","backgroundColor","selectedBorderColor","selectedBackgroundColor","disabledBorderColor","disabledBackgroundColor","isBlockMode","getSizeStyle","styles","chipSmall","chipLarge","chipMedium","handleOnPres","val","style","chip","blockChip","children","variant","fontSize","disabledTextColor","selectedTextColor","textColor","label","create","container","gap","borderRadius","borderWidth","alignSelf","paddingVertical","paddingHorizontal","width"],"sourceRoot":"../../../src","sources":["Chip/ChipItem.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,73 @@
1
+ # 📦 Komponen `ChipItem` – React Native
2
+
3
+ Komponen `ChipItem` merupakan komponen presentasional dalam bentuk "chip" atau "pill" yang digunakan sebagai bagian dari list filter/select menggunakan UI gaya chip, baik single maupun multiple select.
4
+
5
+ ---
6
+
7
+ ## 🔧 Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ | -------------- | ------------------------------------------------------------------------------------------------ | ------------ | ---------------------------------------------------------------------------------- |
11
+ | `item` | `ChipOptionProps` | **Required** | Data item yang akan ditampilkan, berisi label, value, dan optional `disabled` |
12
+ | `isSelected` | `(value: boolean) => boolean` | **Required** | Fungsi untuk menentukan apakah item saat ini sedang terpilih |
13
+ | `color` | `'default' \| 'success' \| 'danger' \| 'primary' \| 'warning' \| 'info' \| 'purple' \| 'orange'` | `'default'` | Warna tema chip berdasarkan `CHIP_COLOR_MAP` |
14
+ | `block` | `boolean` | `false` | Apakah chip harus mengisi lebar penuh jika ditampilkan secara vertikal |
15
+ | `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Ukuran padding dan font chip |
16
+ | `renderItem` | `(item: ChipOptionProps, selected: boolean, disabled: boolean) => ReactNode` | `undefined` | Fungsi untuk mengkustomisasi isi tampilan chip |
17
+ | `isHorizontal` | `boolean` | `false` | Jika true, maka `block` akan diabaikan agar chip tetap fleksibel secara horizontal |
18
+ | `onPress` | `(disabled: boolean, val: ChipOptionProps) => void` | `undefined` | Callback saat chip ditekan |
19
+ | `onLayout` | `(event: LayoutChangeEvent) => void` | `undefined` | Callback ketika layout chip dihitung oleh React Native |
20
+
21
+ ---
22
+
23
+ ## 🎨 Style Behavior
24
+
25
+ - **Warna Dinamis**: Warna border, background, dan teks akan menyesuaikan status:
26
+ - Default
27
+ - Selected
28
+ - Disabled
29
+
30
+ - **Ukuran**:
31
+ - `'small'`: Padding kecil, font size 12
32
+ - `'medium'`: Default, font size 14
33
+ - `'large'`: Padding besar, font size 16
34
+
35
+ - **Block Mode**:
36
+ - Bila `block: true` dan `isHorizontal: false`, chip akan mengisi lebar penuh kontainer
37
+
38
+ ---
39
+
40
+ ## 💡 Contoh Penggunaan
41
+
42
+ ```tsx
43
+ <ChipItem
44
+ item={{ label: 'Marketing', value: 'marketing' }}
45
+ isSelected={() => true}
46
+ color="primary"
47
+ size="medium"
48
+ onPress={(disabled, val) => console.log('Pressed:', val)}
49
+ />
50
+ ```
51
+
52
+ ---
53
+
54
+ ## 🛠️ Tips
55
+
56
+ - Gunakan `renderItem` untuk mengganti isi chip dengan tampilan kustom.
57
+ - Pastikan `isSelected` di-define dengan benar agar state visual chip sesuai.
58
+
59
+ ---
60
+
61
+ ## 🧱 Dependencies
62
+
63
+ - `Typography`
64
+ - `CHIP_COLOR_MAP`
65
+ - `Pressable` & `StyleSheet` dari React Native
66
+
67
+ ---
68
+
69
+ ## 🗂️ Related
70
+
71
+ - `Chip`
72
+ - `Select`
73
+ - `ChipOptionProps`
@@ -14,22 +14,23 @@ Komponen `Select` adalah komponen pemilihan data berbasis bottom sheet dengan du
14
14
 
15
15
  ## 📦 Props
16
16
 
17
- | Prop | Tipe | Default | Keterangan |
18
- |--------------|--------------------------------------------------|---------------|------------|
19
- | `isOpen` | `boolean` | `false` | Menentukan apakah bottom sheet terbuka |
20
- | `data` | `ChipOptionProps[]` | - | Data pilihan untuk ditampilkan |
21
- | `multiple` | `boolean` | `false` | Mengizinkan multiple selection |
22
- | `renderItem` | `(item, selected, disabled) => React.ReactNode` | - | Kustom tampilan item |
23
- | `onSubmit` | `(selected: ChipSelectedProps) => void` | - | Callback saat tombol submit ditekan |
24
- | `onClose` | `(val: boolean) => void` | - | Callback saat bottom sheet ditutup |
25
- | `onSearch` | `(val: string) => void` | - | Callback saat input pencarian berubah |
26
- | `required` | `boolean` | `false` | Jika `true`, validasi input saat submit |
27
- | `loading` | `boolean` | `false` | Menampilkan loading saat data di-fetch |
28
- | `delaySearch`| `number` | `300` | Delay pencarian dalam milidetik |
29
- | `height` | `BottomSheetHeighProps` | - | Ukuran tinggi BottomSheet |
30
- | `onRefresh` | `() => void` | - | Callback saat pull-to-refresh dilakukan |
31
- | `header` | ReactElement| – | Jika ingin chip mempunyai header. |
32
- | `footer` | ReactElement| – | Jika ingin chip mempunyai footer. |
17
+ | Prop | Tipe | Default | Keterangan |
18
+ | ------------- | ----------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
19
+ | `isOpen` | `boolean` | `false` | Menentukan apakah bottom sheet terbuka |
20
+ | `data` | `ChipOptionProps[]` | - | Data pilihan untuk ditampilkan |
21
+ | `multiple` | `boolean` | `false` | Mengizinkan multiple selection |
22
+ | `renderItem` | `(item, selected, disabled) => React.ReactNode` | - | Kustom tampilan item |
23
+ | `onSubmit` | `(selected: ChipSelectedProps) => void` | - | Callback saat tombol submit ditekan |
24
+ | `onClose` | `(val: boolean) => void` | - | Callback saat bottom sheet ditutup |
25
+ | `onSearch` | `(val: string) => void` | - | Callback saat input pencarian berubah |
26
+ | `required` | `boolean` | `false` | Jika `true`, validasi input saat submit |
27
+ | `loading` | `boolean` | `false` | Menampilkan loading saat data di-fetch |
28
+ | `delaySearch` | `number` | `300` | Delay pencarian dalam milidetik |
29
+ | `height` | `BottomSheetHeighProps` | - | Ukuran tinggi BottomSheet |
30
+ | `onRefresh` | `() => void` | - | Callback saat pull-to-refresh dilakukan |
31
+ | `header` | ReactElement | – | Jika ingin chip mempunyai header. |
32
+ | `footer` | ReactElement | – | Jika ingin chip mempunyai footer. |
33
+ | `value` | ChipSelectedProps | – | Nilai pilihan yang dikontrol dari luar. Cocok untuk membuat komponen controlled. Akan mensinkronkan state internal selected dengan value setiap kali berubah. |
33
34
 
34
35
  ## 📌 Contoh Penggunaan
35
36
 
@@ -53,6 +54,7 @@ const MyScreen = () => {
53
54
  <Button title="Pilih Data" onPress={() => setOpen(true)} />
54
55
  <Select
55
56
  isOpen={open}
57
+ value={selected}
56
58
  data={data}
57
59
  multiple={true}
58
60
  onClose={() => setOpen(false)}
@@ -77,4 +79,11 @@ const MyScreen = () => {
77
79
  - `Loading`
78
80
  - `Toast` (untuk validasi/error)
79
81
 
80
- - Jika ingin menambahkan animasi shimmer saat loading, bisa modifikasi komponen `Loading`.
82
+ - Jika ingin menambahkan animasi shimmer saat loading, bisa modifikasi komponen `Loading`.
83
+
84
+ ## ⚠️ Behavior Penting
85
+
86
+ - Jika `multiple={false}` dan `required={true}`, maka:
87
+ - Item yang dipilih akan langsung dikirim ke `onSubmit`.
88
+ - BottomSheet akan langsung tertutup tanpa menekan tombol submit.
89
+ - Jika `required={false}`, user bisa membatalkan pilihan (deselect), dan mengirim data kosong.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { useCallback, useState } from 'react';
3
+ import { useCallback, useState, useEffect } from 'react';
4
4
  import { Keyboard, StyleSheet, TouchableWithoutFeedback, View } from 'react-native';
5
5
  import BottomSheet from "../BottomSheet/BottomSheet.js";
6
6
  import Button from "../Button/Button.js";
@@ -27,7 +27,8 @@ export default function Select({
27
27
  footer,
28
28
  header,
29
29
  onEndReached,
30
- submitBtnLabel
30
+ submitBtnLabel,
31
+ value
31
32
  }) {
32
33
  // const [isOpenSelect, setIsOpenSelect] = useState<boolean | undefined>(false);
33
34
  const [selected, setSelected] = useState();
@@ -66,6 +67,11 @@ export default function Select({
66
67
  onSearch?.(val);
67
68
  }, delaySearch);
68
69
  };
70
+ useEffect(() => {
71
+ if (value !== undefined) {
72
+ setSelected(value);
73
+ }
74
+ }, [value]);
69
75
  return /*#__PURE__*/_jsx(BottomSheet, {
70
76
  onClose: val => handleOnCloseBottom(val),
71
77
  isOpen: isOpen,
@@ -91,45 +97,51 @@ export default function Select({
91
97
  onChangeText: val => handleOnSearch(val)
92
98
  })
93
99
  })
94
- }), loading ? /*#__PURE__*/_jsx(Loading, {}) : /*#__PURE__*/_jsx(Chip, {
95
- options: data,
96
- direction: "vertical",
97
- scrollable: true,
98
- selected: selected,
99
- multiple: multiple,
100
- onEndReached: onEndReached,
101
- color: "primary",
102
- size: "large",
103
- renderItem: renderItem,
104
- onRefresh: onRefresh,
105
- block: true,
106
- refreshing: refreshing,
107
- footer: footer,
108
- header: header,
109
- onSelect: item => {
110
- setSelected(item);
111
- if (!multiple && required) {
112
- onSubmit?.(item);
113
- handleOnCloseBottom(false);
114
- } else if (!multiple && !required) {
115
- const isSame = Array.isArray(item) && Array.isArray(selected) ? item[0] === selected?.[0] : item === selected;
116
- const nextValue = !multiple && !required && isSame ? [] : item;
117
- setSelected(nextValue);
118
- onSubmit?.(nextValue);
119
- handleOnCloseBottom(false);
100
+ }), loading ? /*#__PURE__*/_jsx(Loading, {}) : /*#__PURE__*/_jsx(View, {
101
+ style: styles.containerChip,
102
+ children: /*#__PURE__*/_jsx(Chip, {
103
+ options: data,
104
+ direction: "vertical",
105
+ scrollable: true,
106
+ selected: selected,
107
+ multiple: multiple,
108
+ onEndReached: onEndReached,
109
+ color: "primary",
110
+ size: "large",
111
+ renderItem: renderItem,
112
+ onRefresh: onRefresh,
113
+ block: true,
114
+ refreshing: refreshing,
115
+ footer: footer,
116
+ header: header,
117
+ onSelect: item => {
118
+ setSelected(item);
119
+ if (!multiple && required) {
120
+ onSubmit?.(item);
121
+ handleOnCloseBottom(false);
122
+ } else if (!multiple && !required) {
123
+ const isSame = Array.isArray(item) && Array.isArray(selected) ? item[0] === selected?.[0] : item === selected;
124
+ const nextValue = !multiple && !required && isSame ? [] : item;
125
+ setSelected(nextValue);
126
+ onSubmit?.(nextValue);
127
+ handleOnCloseBottom(false);
128
+ }
120
129
  }
121
- }
130
+ })
122
131
  })]
123
132
  })
124
133
  });
125
134
  }
126
135
  const styles = StyleSheet.create({
127
136
  container: {
128
- marginBottom: 140
137
+ marginBottom: 195
129
138
  },
130
139
  containerSearch: {
131
140
  gap: 14,
132
141
  paddingBottom: 12
142
+ },
143
+ containerChip: {
144
+ paddingBottom: 12
133
145
  }
134
146
  });
135
147
  //# sourceMappingURL=Select.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useState","Keyboard","StyleSheet","TouchableWithoutFeedback","View","BottomSheet","Button","Chip","Input","Loading","useToast","useRef","jsx","_jsx","jsxs","_jsxs","Select","isOpen","data","renderItem","onClose","onSubmit","multiple","onSearch","required","loading","delaySearch","height","onRefresh","refreshing","footer","header","onEndReached","submitBtnLabel","selected","setSelected","searchQuery","setSearchQuery","show","handleOnCloseBottom","val","handleOnPresSubmitSelect","length","searchTimeout","handleOnSearch","current","clearTimeout","setTimeout","title","color","disabled","onPress","undefined","children","style","styles","container","containerSearch","dismiss","accessible","submitBehavior","icon","placeholder","value","onChangeText","options","direction","scrollable","size","block","onSelect","item","isSame","Array","isArray","nextValue","create","marginBottom","gap","paddingBottom"],"sourceRoot":"../../../src","sources":["Select/Select.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useState","useEffect","Keyboard","StyleSheet","TouchableWithoutFeedback","View","BottomSheet","Button","Chip","Input","Loading","useToast","useRef","jsx","_jsx","jsxs","_jsxs","Select","isOpen","data","renderItem","onClose","onSubmit","multiple","onSearch","required","loading","delaySearch","height","onRefresh","refreshing","footer","header","onEndReached","submitBtnLabel","value","selected","setSelected","searchQuery","setSearchQuery","show","handleOnCloseBottom","val","handleOnPresSubmitSelect","length","searchTimeout","handleOnSearch","current","clearTimeout","setTimeout","undefined","title","color","disabled","onPress","children","style","styles","container","containerSearch","dismiss","accessible","submitBehavior","icon","placeholder","onChangeText","containerChip","options","direction","scrollable","size","block","onSelect","item","isSame","Array","isArray","nextValue","create","marginBottom","gap","paddingBottom"],"sourceRoot":"../../../src","sources":["Select/Select.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,79 @@
1
+ # 🦴 Skeleton Loader Component
2
+
3
+ Komponen `Skeleton` adalah placeholder UI yang menampilkan efek shimmer animasi, berguna untuk memberikan feedback loading saat data belum tersedia.
4
+
5
+ ---
6
+
7
+ ## 📦 Props
8
+
9
+ | Prop | Tipe | Default | Deskripsi |
10
+ | ----------------- | ---------------- | ---------------------------- | ---------------------------------------------------------------------------------- |
11
+ | `width` | `DimensionValue` | `"100%"` | Lebar dari skeleton block. Bisa berupa angka atau string (`'100%'`, `'50%'`, dsb). |
12
+ | `height` | `DimensionValue` | `50` | Tinggi dari skeleton block. |
13
+ | `rounded` | `number` | `8` | Radius border untuk membuat sudut membulat. |
14
+ | `backgroundColor` | `string` | `"#F0F0F0"` | Warna latar belakang dari blok skeleton. |
15
+ | `shimmerColor` | `string` | `"rgba(255, 255, 255, 0.7)"` | Warna efek shimmer yang bergerak. |
16
+ | `duration` | `number` | `1500` | Durasi animasi shimmer (dalam milidetik). |
17
+
18
+ ---
19
+
20
+ ## 🧠 Cara Kerja
21
+
22
+ - Komponen menggunakan `Animated.Value` untuk menggerakkan efek shimmer dari kiri ke kanan secara loop.
23
+ - Lebar shimmer dihitung berdasarkan lebar aktual komponen yang didapat dari event `onLayout`.
24
+ - Shimmer bergerak dengan `translateX` menggunakan `interpolate()` untuk efek linear mulus.
25
+
26
+ ---
27
+
28
+ ## 📌 Contoh Penggunaan
29
+
30
+ ```tsx
31
+ import React from 'react';
32
+ import { View } from 'react-native';
33
+ import Skeleton from './components/Skeleton';
34
+
35
+ const MyLoadingScreen = () => {
36
+ return (
37
+ <View style={{ padding: 16 }}>
38
+ <Skeleton height={20} width="60%" />
39
+ <View style={{ height: 16 }} />
40
+ <Skeleton height={20} width="80%" />
41
+ <View style={{ height: 16 }} />
42
+ <Skeleton height={100} width="100%" rounded={12} />
43
+ </View>
44
+ );
45
+ };
46
+ ```
47
+
48
+ ---
49
+
50
+ ## 🧱 Struktur Rendered
51
+
52
+ ```tsx
53
+ <View>
54
+ {' '}
55
+ // container
56
+ <Animated.View /> // shimmer yang bergerak horizontal
57
+ </View>
58
+ ```
59
+
60
+ ---
61
+
62
+ ## ⚠️ Catatan
63
+
64
+ - Komponen ini **tidak menerima children**, hanya untuk placeholder visual.
65
+ - Efek shimmer akan selalu berjalan secara loop selama komponen hidup.
66
+ - Perhatikan performa jika digunakan secara masif di satu halaman.
67
+
68
+ ---
69
+
70
+ ## 🛠 Tips
71
+
72
+ - Gunakan `Skeleton` dalam daftar (list, table, card) untuk meningkatkan UX saat loading.
73
+ - Dapat digabungkan dengan kondisi seperti:
74
+
75
+ ```tsx
76
+ {
77
+ isLoading ? <Skeleton height={50} /> : <ActualComponent data={data} />;
78
+ }
79
+ ```
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ import React, { useEffect, useRef } from 'react';
4
+ import { Animated, Easing, StyleSheet, View } from 'react-native';
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ const Skeleton = ({
7
+ width = '100%',
8
+ height = 50,
9
+ rounded = 8,
10
+ backgroundColor = '#F0F0F0',
11
+ shimmerColor = 'rgba(255, 255, 255, 0.7)',
12
+ duration = 1500
13
+ }) => {
14
+ const shimmerAnimation = useRef(new Animated.Value(0)).current;
15
+ const skeletonWidth = useRef(0);
16
+ const handleLayout = event => {
17
+ skeletonWidth.current = event.nativeEvent.layout.width;
18
+ };
19
+ useEffect(() => {
20
+ const animateShimmer = () => {
21
+ Animated.loop(Animated.sequence([Animated.timing(shimmerAnimation, {
22
+ toValue: 1,
23
+ duration: duration,
24
+ easing: Easing.linear,
25
+ useNativeDriver: true
26
+ }), Animated.timing(shimmerAnimation, {
27
+ toValue: 0,
28
+ duration: 0,
29
+ useNativeDriver: true
30
+ })])).start();
31
+ };
32
+ animateShimmer();
33
+ return () => {
34
+ shimmerAnimation.stopAnimation();
35
+ };
36
+ }, [shimmerAnimation, duration]);
37
+ const shimmerTranslate = shimmerAnimation.interpolate({
38
+ inputRange: [0, 1],
39
+ // Gunakan lebar skeleton untuk perhitungan yang presisi
40
+ outputRange: [-200, skeletonWidth.current + 200]
41
+ });
42
+ return /*#__PURE__*/_jsx(View, {
43
+ onLayout: handleLayout,
44
+ style: [styles.skeletonCard, {
45
+ width,
46
+ height,
47
+ backgroundColor,
48
+ borderRadius: rounded
49
+ }],
50
+ children: /*#__PURE__*/_jsx(Animated.View, {
51
+ style: [styles.shimmer, {
52
+ backgroundColor: shimmerColor,
53
+ transform: [{
54
+ translateX: shimmerTranslate
55
+ }],
56
+ borderRadius: rounded
57
+ }]
58
+ })
59
+ });
60
+ };
61
+ export default Skeleton;
62
+ const styles = StyleSheet.create({
63
+ skeletonCard: {
64
+ overflow: 'hidden'
65
+ },
66
+ shimmer: {
67
+ ...StyleSheet.absoluteFillObject,
68
+ width: '90%',
69
+ height: '100%',
70
+ opacity: 0.3
71
+ }
72
+ });
73
+ //# sourceMappingURL=Skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useEffect","useRef","Animated","Easing","StyleSheet","View","jsx","_jsx","Skeleton","width","height","rounded","backgroundColor","shimmerColor","duration","shimmerAnimation","Value","current","skeletonWidth","handleLayout","event","nativeEvent","layout","animateShimmer","loop","sequence","timing","toValue","easing","linear","useNativeDriver","start","stopAnimation","shimmerTranslate","interpolate","inputRange","outputRange","onLayout","style","styles","skeletonCard","borderRadius","children","shimmer","transform","translateX","create","overflow","absoluteFillObject","opacity"],"sourceRoot":"../../../src","sources":["Skeleton/Skeleton.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAChD,SACEC,QAAQ,EACRC,MAAM,EACNC,UAAU,EACVC,IAAI,QAIC,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGtB,MAAMC,QAAiC,GAAGA,CAAC;EACzCC,KAAK,GAAG,MAAM;EACdC,MAAM,GAAG,EAAE;EACXC,OAAO,GAAG,CAAC;EACXC,eAAe,GAAG,SAAS;EAC3BC,YAAY,GAAG,0BAA0B;EACzCC,QAAQ,GAAG;AACb,CAAC,KAAK;EACJ,MAAMC,gBAAgB,GAAGd,MAAM,CAAC,IAAIC,QAAQ,CAACc,KAAK,CAAC,CAAC,CAAC,CAAC,CAACC,OAAO;EAC9D,MAAMC,aAAa,GAAGjB,MAAM,CAAC,CAAC,CAAC;EAE/B,MAAMkB,YAAY,GAAIC,KAAwB,IAAK;IACjDF,aAAa,CAACD,OAAO,GAAGG,KAAK,CAACC,WAAW,CAACC,MAAM,CAACb,KAAK;EACxD,CAAC;EAEDT,SAAS,CAAC,MAAM;IACd,MAAMuB,cAAc,GAAGA,CAAA,KAAM;MAC3BrB,QAAQ,CAACsB,IAAI,CACXtB,QAAQ,CAACuB,QAAQ,CAAC,CAChBvB,QAAQ,CAACwB,MAAM,CAACX,gBAAgB,EAAE;QAChCY,OAAO,EAAE,CAAC;QACVb,QAAQ,EAAEA,QAAQ;QAClBc,MAAM,EAAEzB,MAAM,CAAC0B,MAAM;QACrBC,eAAe,EAAE;MACnB,CAAC,CAAC,EACF5B,QAAQ,CAACwB,MAAM,CAACX,gBAAgB,EAAE;QAChCY,OAAO,EAAE,CAAC;QACVb,QAAQ,EAAE,CAAC;QACXgB,eAAe,EAAE;MACnB,CAAC,CAAC,CACH,CACH,CAAC,CAACC,KAAK,CAAC,CAAC;IACX,CAAC;IAEDR,cAAc,CAAC,CAAC;IAEhB,OAAO,MAAM;MACXR,gBAAgB,CAACiB,aAAa,CAAC,CAAC;IAClC,CAAC;EACH,CAAC,EAAE,CAACjB,gBAAgB,EAAED,QAAQ,CAAC,CAAC;EAEhC,MAAMmB,gBAAgB,GAAGlB,gBAAgB,CAACmB,WAAW,CAAC;IACpDC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAClB;IACAC,WAAW,EAAE,CAAC,CAAC,GAAG,EAAElB,aAAa,CAACD,OAAO,GAAG,GAAG;EACjD,CAAC,CAAC;EAEF,oBACEV,IAAA,CAACF,IAAI;IACHgC,QAAQ,EAAElB,YAAa;IACvBmB,KAAK,EAAE,CACLC,MAAM,CAACC,YAAY,EACnB;MACE/B,KAAK;MACLC,MAAM;MACNE,eAAe;MACf6B,YAAY,EAAE9B;IAChB,CAAC,CACD;IAAA+B,QAAA,eAEFnC,IAAA,CAACL,QAAQ,CAACG,IAAI;MACZiC,KAAK,EAAE,CACLC,MAAM,CAACI,OAAO,EACd;QACE/B,eAAe,EAAEC,YAAY;QAC7B+B,SAAS,EAAE,CAAC;UAAEC,UAAU,EAAEZ;QAAiB,CAAC,CAAC;QAC7CQ,YAAY,EAAE9B;MAChB,CAAC;IACD,CACH;EAAC,CACE,CAAC;AAEX,CAAC;AAED,eAAeH,QAAQ;AAEvB,MAAM+B,MAAM,GAAGnC,UAAU,CAAC0C,MAAM,CAAC;EAC/BN,YAAY,EAAE;IACZO,QAAQ,EAAE;EACZ,CAAC;EACDJ,OAAO,EAAE;IACP,GAAGvC,UAAU,CAAC4C,kBAAkB;IAChCvC,KAAK,EAAE,KAAK;IACZC,MAAM,EAAE,MAAM;IACduC,OAAO,EAAE;EACX;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["Skeleton/type.ts"],"mappings":"","ignoreList":[]}
@@ -18,6 +18,7 @@ export { default as Gap } from "./Ui/Gap.js";
18
18
  export { default as Grid } from "./Ui/Grid.js";
19
19
  export { default as Col } from "./Ui/Col.js";
20
20
  export { default as Chip } from "./Chip/Chip.js";
21
+ export { default as ChipItem } from "./Chip/ChipItem.js";
21
22
  export { default as Footer } from "./Ui/Footer.js";
22
23
  export { default as Devider } from "./Ui/Devider.js";
23
24
  export { default as Select } from "./Select/Select.js";
@@ -60,4 +61,6 @@ export { default as TextArea } from "./Input/TextArea.js";
60
61
  export { default as TextEditor } from "./TextEditor/TextEditor.js";
61
62
  // export { default as PdfView } from './FileView/PdfView';
62
63
  export { ToastProvider, useToast } from "./Toast/ToastContext.js";
64
+ export { default as Skeleton } from "./Skeleton/Skeleton.js";
65
+ export { default as CounterButton } from "./CounterButton/CounterButton.js";
63
66
  //# sourceMappingURL=index.js.map