@herca/rn-kit 0.1.63 → 0.1.65

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 (38) hide show
  1. package/README.md +8 -0
  2. package/lib/module/DatePicker/DatePicker.js +2 -2
  3. package/lib/module/DatePicker/DatePicker.js.map +1 -1
  4. package/lib/module/Input/InputDate.js +170 -0
  5. package/lib/module/Input/InputDate.js.map +1 -0
  6. package/lib/module/Input/README_INPUT_DATE.md +265 -0
  7. package/lib/module/Modal/Modal.js +24 -22
  8. package/lib/module/Modal/Modal.js.map +1 -1
  9. package/lib/module/Ui/README_VIEWINSETS.md +126 -0
  10. package/lib/module/Ui/ViewInsets.js +33 -0
  11. package/lib/module/Ui/ViewInsets.js.map +1 -0
  12. package/lib/module/function/README_DATE_FORMATTER.md +397 -0
  13. package/lib/module/function/dateFormatter.js +38 -0
  14. package/lib/module/function/dateFormatter.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/Calendar/CalendarPropsType.d.ts +5 -0
  18. package/lib/typescript/src/Calendar/CalendarPropsType.d.ts.map +1 -1
  19. package/lib/typescript/src/Input/InputDate.d.ts +27 -0
  20. package/lib/typescript/src/Input/InputDate.d.ts.map +1 -0
  21. package/lib/typescript/src/Modal/Modal.d.ts.map +1 -1
  22. package/lib/typescript/src/Ui/ViewInsets.d.ts +13 -0
  23. package/lib/typescript/src/Ui/ViewInsets.d.ts.map +1 -0
  24. package/lib/typescript/src/function/dateFormatter.d.ts +14 -0
  25. package/lib/typescript/src/function/dateFormatter.d.ts.map +1 -0
  26. package/lib/typescript/src/index.d.ts +4 -1
  27. package/lib/typescript/src/index.d.ts.map +1 -1
  28. package/package.json +1 -1
  29. package/src/Calendar/CalendarPropsType.tsx +6 -0
  30. package/src/DatePicker/DatePicker.tsx +2 -2
  31. package/src/Input/InputDate.tsx +216 -0
  32. package/src/Input/README_INPUT_DATE.md +265 -0
  33. package/src/Modal/Modal.tsx +31 -46
  34. package/src/Ui/README_VIEWINSETS.md +126 -0
  35. package/src/Ui/ViewInsets.tsx +46 -0
  36. package/src/function/README_DATE_FORMATTER.md +397 -0
  37. package/src/function/dateFormatter.ts +54 -0
  38. package/src/index.tsx +8 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputDate.d.ts","sourceRoot":"","sources":["../../../../src/Input/InputDate.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAGV,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAMvB,KAAK,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,CAAC;AAC/D,KAAK,8BAA8B,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;AAExE,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,8BAA8B,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC/C,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB;AAED,KAAK,eAAe,GAAG,SAAS,GAAG;IACjC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,kBAAkB,CAAC,EAAE,KAAK,CAAC;CAC5B,CAAC;AAEF,KAAK,cAAc,GAAG,SAAS,GAAG;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG,eAAe,GAAG,cAAc,CAAC;AAErD,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,KAAK,EACL,WAA8B,EAC9B,kBAAqC,EACrC,eAAe,EACf,KAAK,EACL,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,IAAe,EACf,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,2CAwIP"}
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../../src/Modal/Modal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAChE,OAAO,EAML,KAAK,cAAc,EAGnB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAItB,UAAU,eAAe;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAsFzC,CAAC;AA8DF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../../src/Modal/Modal.tsx"],"names":[],"mappings":"AACA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAChE,OAAO,EAML,KAAK,cAAc,EAGnB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,UAAU,eAAe;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA4FzC,CAAC;AA0CF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type ViewProps } from 'react-native';
2
+ import React from 'react';
3
+ interface ViewInsetsProps extends ViewProps {
4
+ children: React.ReactNode;
5
+ useTop?: boolean;
6
+ useBottom?: boolean;
7
+ useLeft?: boolean;
8
+ useRight?: boolean;
9
+ bottomType?: 'inset' | 'tabbar';
10
+ }
11
+ declare const ViewInsets: React.FC<ViewInsetsProps>;
12
+ export default ViewInsets;
13
+ //# sourceMappingURL=ViewInsets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewInsets.d.ts","sourceRoot":"","sources":["../../../../src/Ui/ViewInsets.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAkB,MAAM,OAAO,CAAC;AAGvC,UAAU,eAAgB,SAAQ,SAAS;IACzC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CACjC;AAED,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA8BzC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { DateProps } from '../Calendar/CalendarPropsType';
2
+ interface DateFormatterProps {
3
+ date: Date | DateProps;
4
+ options?: {
5
+ useTime?: boolean;
6
+ useWeekDay?: boolean;
7
+ monthFormat?: Intl.DateTimeFormatOptions['month'];
8
+ language?: 'en' | 'id';
9
+ format?: 'default' | 'iso' | 'localized';
10
+ };
11
+ }
12
+ export declare const dateFormatter: ({ date, options }: DateFormatterProps) => string;
13
+ export {};
14
+ //# sourceMappingURL=dateFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateFormatter.d.ts","sourceRoot":"","sources":["../../../../src/function/dateFormatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,UAAU,kBAAkB;IAC1B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IACvB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,WAAW,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAClD,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,WAAW,CAAC;KAC1C,CAAC;CACH;AAED,eAAO,MAAM,aAAa,GAAI,mBAAmB,kBAAkB,WAwClE,CAAC"}
@@ -50,7 +50,7 @@ export { default as Provider } from './Provider/Provider';
50
50
  export { default as useFooter } from './Provider/Provider';
51
51
  export { default as Drawing } from './Drawing/Drawing';
52
52
  export { default as Calendar } from './Calendar/Calendar';
53
- export type { DateRangeProps } from './Calendar/CalendarPropsType';
53
+ export type { DateRangeProps, DateProps, CalendarModeType, } from './Calendar/CalendarPropsType';
54
54
  export { default as DatePicker } from './DatePicker/DatePicker';
55
55
  export { default as YearPicker } from './DatePicker/YearPicker';
56
56
  export { default as MonthPicker } from './DatePicker/MonthPicker';
@@ -70,4 +70,7 @@ export { default as BadgeIcon } from './BadgeIcon/BadgeIcon';
70
70
  export { default as PdfView } from './FileView/PdfView';
71
71
  export { default as InputSelect } from './Input/InputSelect';
72
72
  export type { ChipValue } from './Chip/type';
73
+ export { default as InputDate } from './Input/InputDate';
74
+ export { dateFormatter } from './function/dateFormatter';
75
+ export { default as ViewInsets } from './Ui/ViewInsets';
73
76
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@herca/rn-kit",
3
- "version": "0.1.63",
3
+ "version": "0.1.65",
4
4
  "description": "React Native UI Kit",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -17,6 +17,12 @@ export type DateRangeProps = {
17
17
  date?: DateProps;
18
18
  };
19
19
 
20
+ export type FormattedDateRangeProps = {
21
+ startDate?: string;
22
+ endDate?: string;
23
+ date?: string;
24
+ };
25
+
20
26
  export type CalendarDisabledProp = {
21
27
  backgroundColor?: string | undefined;
22
28
  textColor?: string | undefined;
@@ -44,9 +44,9 @@ export default function DatePicker({
44
44
  date: null,
45
45
  });
46
46
 
47
- const handleOnChangeCalendar = useCallback((value: DateRangeProps) => {
47
+ const handleOnChangeCalendar = useCallback((val: DateRangeProps) => {
48
48
  setMarkDates({});
49
- setValueDatepicker(value);
49
+ setValueDatepicker(val);
50
50
  setErrorValidate(false);
51
51
  }, []);
52
52
 
@@ -0,0 +1,216 @@
1
+ import {
2
+ Color,
3
+ DatePicker,
4
+ Icon,
5
+ Typography,
6
+ type CalendarModeType,
7
+ type DateRangeProps,
8
+ } from '@herca/rn-kit';
9
+ import { useState } from 'react';
10
+ import { Pressable, StyleSheet, View } from 'react-native';
11
+ import type { FormattedDateRangeProps } from '../Calendar/CalendarPropsType';
12
+ import { dateFormatter } from '../function/dateFormatter';
13
+
14
+ type DatePickerProps = React.ComponentProps<typeof DatePicker>;
15
+ type DatePickerPropsWithoutOnChange = Omit<DatePickerProps, 'onChange'>;
16
+
17
+ interface BaseProps {
18
+ label: string;
19
+ placeholder: string;
20
+ datePickerProps?: DatePickerPropsWithoutOnChange;
21
+ value?: string;
22
+ valueDateEnd?: string;
23
+ onSelectClick?: () => void;
24
+ onDatePickerClose?: () => void;
25
+ onDateChange?: (value: DateRangeProps) => void;
26
+ mode?: CalendarModeType;
27
+ language?: 'en' | 'id';
28
+ }
29
+
30
+ type SingleModeProps = BaseProps & {
31
+ mode?: 'single';
32
+ placeholderDateEnd?: never;
33
+ };
34
+
35
+ type RangeModeProps = BaseProps & {
36
+ mode: 'range';
37
+ placeholderDateEnd: string;
38
+ };
39
+
40
+ export type Props = SingleModeProps | RangeModeProps;
41
+
42
+ export default function InputDate({
43
+ label,
44
+ placeholder = 'Select here...',
45
+ placeholderDateEnd = 'Select here...',
46
+ datePickerProps,
47
+ value,
48
+ valueDateEnd,
49
+ onSelectClick,
50
+ onDatePickerClose,
51
+ onDateChange,
52
+ mode = 'single',
53
+ language,
54
+ ...props
55
+ }: Props) {
56
+ const [isDatePickerOpen, setSelectOpen] = useState<boolean>(false);
57
+ const [dateValue, setDateValue] = useState<FormattedDateRangeProps>();
58
+ const [raw, setRaw] = useState<DateRangeProps>();
59
+
60
+ const handleOpenSelect = () => {
61
+ setSelectOpen(true);
62
+ onSelectClick?.();
63
+ };
64
+
65
+ const handleCloseDatePicker = () => {
66
+ setSelectOpen(false);
67
+ onDatePickerClose?.();
68
+ };
69
+
70
+ const handleDateChange = (val: any) => {
71
+ onDateChange?.({
72
+ date: val.date ?? null,
73
+ startDate: val.startDate ?? null,
74
+ endDate: val.endDate ?? null,
75
+ });
76
+
77
+ const formattedValue = dateFormatter({
78
+ date: val.date,
79
+ options: {
80
+ language,
81
+ format: language ? 'localized' : 'default',
82
+ },
83
+ });
84
+
85
+ const formattedStartDate = dateFormatter({
86
+ date: val.startDate,
87
+ options: {
88
+ language,
89
+ format: language ? 'localized' : 'default',
90
+ },
91
+ });
92
+
93
+ const formattedEndDate = dateFormatter({
94
+ date: val.endDate,
95
+ options: {
96
+ language,
97
+ format: language ? 'localized' : 'default',
98
+ },
99
+ });
100
+
101
+ setDateValue({
102
+ date: formattedValue,
103
+ startDate: formattedStartDate,
104
+ endDate: formattedEndDate,
105
+ });
106
+
107
+ setRaw(val);
108
+ };
109
+
110
+ const startDate = () => {
111
+ if (!value) {
112
+ if (mode === 'single') {
113
+ return dateValue?.date;
114
+ } else if (mode === 'range') {
115
+ return dateValue?.startDate;
116
+ }
117
+ }
118
+
119
+ return value;
120
+ };
121
+
122
+ const endDate = () => {
123
+ if (mode === 'single') return null;
124
+
125
+ if (!valueDateEnd) {
126
+ return dateValue?.endDate;
127
+ }
128
+
129
+ return valueDateEnd;
130
+ };
131
+
132
+ const rawValue = () => {
133
+ if (mode === 'single') {
134
+ return {
135
+ date: datePickerProps?.value?.date ?? raw?.date,
136
+ };
137
+ } else {
138
+ return {
139
+ startDate: datePickerProps?.value?.startDate ?? raw?.startDate,
140
+ endDate: datePickerProps?.value?.endDate ?? raw?.endDate,
141
+ };
142
+ }
143
+ };
144
+
145
+ return (
146
+ <View style={styles.gap4}>
147
+ <Typography variant="t2" weight="semibold" color={Color.gray[900]}>
148
+ {label}
149
+ </Typography>
150
+
151
+ <View style={styles.wrapper}>
152
+ {/* sart date */}
153
+ <Pressable
154
+ style={[styles.pickerTrigger, value !== '' && styles.hasValue]}
155
+ onPress={handleOpenSelect}
156
+ {...props}
157
+ >
158
+ <Typography variant="t2" color={Color.gray[900]} weight="medium">
159
+ {startDate() ?? placeholder}
160
+ </Typography>
161
+ <Icon name="ArrowDown" size={14} color={Color.gray[700]} />
162
+ </Pressable>
163
+
164
+ {/* end date */}
165
+ {mode === 'range' && (
166
+ <Pressable
167
+ style={[styles.pickerTrigger, value !== '' && styles.hasValue]}
168
+ onPress={handleOpenSelect}
169
+ {...props}
170
+ >
171
+ <Typography variant="t2" color={Color.gray[900]} weight="medium">
172
+ {endDate() ?? placeholderDateEnd}
173
+ </Typography>
174
+ <Icon name="ArrowDown" size={14} color={Color.gray[700]} />
175
+ </Pressable>
176
+ )}
177
+ </View>
178
+
179
+ <DatePicker
180
+ {...datePickerProps}
181
+ mode={mode}
182
+ isOpen={isDatePickerOpen}
183
+ onClose={handleCloseDatePicker}
184
+ value={rawValue()}
185
+ onChange={(val: DateRangeProps) => {
186
+ handleDateChange(val);
187
+ }}
188
+ />
189
+ </View>
190
+ );
191
+ }
192
+
193
+ const styles = StyleSheet.create({
194
+ gap4: {
195
+ gap: 4,
196
+ },
197
+ pickerTrigger: {
198
+ paddingVertical: 10,
199
+ paddingHorizontal: 12,
200
+ borderRadius: 8,
201
+ flexDirection: 'row',
202
+ justifyContent: 'space-between',
203
+ alignItems: 'center',
204
+ borderWidth: 1,
205
+ borderColor: Color.gray[200],
206
+ flex: 1,
207
+ },
208
+ hasValue: {
209
+ borderColor: Color.primary[300],
210
+ },
211
+ wrapper: {
212
+ flexDirection: 'row',
213
+ gap: 8,
214
+ alignItems: 'center',
215
+ },
216
+ });
@@ -0,0 +1,265 @@
1
+ # InputDate Component
2
+
3
+ Komponen React Native untuk input tanggal dengan dukungan mode single date dan date range. Terintegrasi dengan DatePicker dari `@herca/rn-kit` dan menyediakan UI yang user-friendly untuk pemilihan tanggal.
4
+
5
+ ## Penggunaan Dasar
6
+
7
+ ### Single Date Mode
8
+
9
+ ```jsx
10
+ import InputDate from './InputDate';
11
+
12
+ function MyForm() {
13
+ const [date, setDate] = useState('');
14
+
15
+ return (
16
+ <InputDate
17
+ label="Tanggal Lahir"
18
+ placeholder="Pilih tanggal"
19
+ value={date}
20
+ onDateChange={(val) => setDate(val.date)}
21
+ />
22
+ );
23
+ }
24
+ ```
25
+
26
+ ### Date Range Mode
27
+
28
+ ```jsx
29
+ import InputDate from './InputDate';
30
+
31
+ function MyForm() {
32
+ const [startDate, setStartDate] = useState('');
33
+ const [endDate, setEndDate] = useState('');
34
+
35
+ return (
36
+ <InputDate
37
+ mode="range"
38
+ label="Periode"
39
+ placeholder="Tanggal mulai"
40
+ placeholderDateEnd="Tanggal selesai"
41
+ value={startDate}
42
+ valueDateEnd={endDate}
43
+ onDateChange={(val) => {
44
+ setStartDate(val.startDate);
45
+ setEndDate(val.endDate);
46
+ }}
47
+ />
48
+ );
49
+ }
50
+ ```
51
+
52
+ ## Props
53
+
54
+ ### Base Props
55
+
56
+ | Prop | Type | Default | Deskripsi |
57
+ | ------------------- | --------------------------------- | ------------------ | -------------------------------------------------- |
58
+ | `label` | `string` | **Required** | Label yang ditampilkan di atas input |
59
+ | `placeholder` | `string` | `"Select here..."` | Placeholder untuk tanggal pertama/single |
60
+ | `value` | `string` | `undefined` | Nilai tanggal terpilih (formatted) |
61
+ | `valueDateEnd` | `string` | `undefined` | Nilai tanggal akhir untuk mode range (formatted) |
62
+ | `datePickerProps` | `DatePickerPropsWithoutOnChange` | `undefined` | Props tambahan untuk DatePicker (kecuali onChange) |
63
+ | `onSelectClick` | `() => void` | `undefined` | Callback ketika input diklik |
64
+ | `onDatePickerClose` | `() => void` | `undefined` | Callback ketika DatePicker ditutup |
65
+ | `onDateChange` | `(value: DateRangeProps) => void` | `undefined` | Callback ketika tanggal berubah |
66
+ | `mode` | `'single' \| 'range'` | `'single'` | Mode pemilihan tanggal |
67
+ | `language` | `'en' \| 'id'` | `undefined` | Bahasa untuk format tanggal |
68
+
69
+ ### Single Mode Specific Props
70
+
71
+ Ketika `mode` tidak diset atau `mode="single"`:
72
+
73
+ | Prop | Type | Deskripsi |
74
+ | -------------------- | ------- | ----------------------------- |
75
+ | `placeholderDateEnd` | `never` | Tidak tersedia di single mode |
76
+
77
+ ### Range Mode Specific Props
78
+
79
+ Ketika `mode="range"`:
80
+
81
+ | Prop | Type | Deskripsi |
82
+ | -------------------- | -------- | ---------------------------------------------- |
83
+ | `placeholderDateEnd` | `string` | **Required** - Placeholder untuk tanggal akhir |
84
+
85
+ ## Return Value dari onDateChange
86
+
87
+ Callback `onDateChange` menerima objek dengan struktur:
88
+
89
+ ```typescript
90
+ {
91
+ date: string | null; // Untuk single mode
92
+ startDate: string | null; // Untuk range mode (tanggal mulai)
93
+ endDate: string | null; // Untuk range mode (tanggal selesai)
94
+ }
95
+ ```
96
+
97
+ ## Contoh Penggunaan
98
+
99
+ ### Single Date dengan Language
100
+
101
+ ```jsx
102
+ <InputDate
103
+ label="Select Date"
104
+ placeholder="Choose a date"
105
+ mode="single"
106
+ language="id"
107
+ onDateChange={(val) => console.log(val.date)}
108
+ />
109
+ ```
110
+
111
+ ### Date Range dengan Controlled Values
112
+
113
+ ```jsx
114
+ function BookingForm() {
115
+ const [dateRange, setDateRange] = useState({
116
+ start: '',
117
+ end: '',
118
+ });
119
+
120
+ return (
121
+ <InputDate
122
+ mode="range"
123
+ label="Periode Booking"
124
+ placeholder="Check-in"
125
+ placeholderDateEnd="Check-out"
126
+ value={dateRange.start}
127
+ valueDateEnd={dateRange.end}
128
+ onDateChange={(val) => {
129
+ setDateRange({
130
+ start: val.startDate || '',
131
+ end: val.endDate || '',
132
+ });
133
+ }}
134
+ />
135
+ );
136
+ }
137
+ ```
138
+
139
+ ### Dengan Custom DatePicker Props
140
+
141
+ ```jsx
142
+ <InputDate
143
+ label="Tanggal Lahir"
144
+ placeholder="Pilih tanggal"
145
+ datePickerProps={{
146
+ minDate: new Date('1900-01-01'),
147
+ maxDate: new Date(),
148
+ value: { date: new Date() },
149
+ }}
150
+ onDateChange={(val) => console.log(val)}
151
+ />
152
+ ```
153
+
154
+ ### Dengan Event Callbacks
155
+
156
+ ```jsx
157
+ <InputDate
158
+ label="Appointment Date"
159
+ placeholder="Select date"
160
+ onSelectClick={() => console.log('Picker opened')}
161
+ onDatePickerClose={() => console.log('Picker closed')}
162
+ onDateChange={(val) => {
163
+ console.log('Date changed:', val);
164
+ }}
165
+ />
166
+ ```
167
+
168
+ ### English Language Format
169
+
170
+ ```jsx
171
+ <InputDate
172
+ label="Birth Date"
173
+ placeholder="Select date"
174
+ language="en"
175
+ onDateChange={(val) => console.log(val.date)}
176
+ />
177
+ ```
178
+
179
+ ### Indonesian Language Format
180
+
181
+ ```jsx
182
+ <InputDate
183
+ label="Tanggal Lahir"
184
+ placeholder="Pilih tanggal"
185
+ language="id"
186
+ onDateChange={(val) => console.log(val.date)}
187
+ />
188
+ ```
189
+
190
+ ## Fitur
191
+
192
+ - ✅ Dua mode: Single date dan Date range
193
+ - ✅ Support multi-bahasa (English & Indonesian)
194
+ - ✅ Controlled component dengan value props
195
+ - ✅ Auto-formatting tanggal berdasarkan bahasa
196
+ - ✅ Visual feedback untuk nilai yang sudah dipilih
197
+ - ✅ Terintegrasi dengan DatePicker dari @herca/rn-kit
198
+ - ✅ TypeScript support dengan discriminated unions untuk type safety
199
+ - ✅ Customizable melalui datePickerProps
200
+ - ✅ Event callbacks untuk lifecycle DatePicker
201
+
202
+ ## Styling
203
+
204
+ Komponen menggunakan styling internal dengan karakteristik:
205
+
206
+ - Border color berubah ke `primary[300]` ketika ada nilai terpilih
207
+ - Layout responsive dengan flexbox
208
+ - Gap 8px antara input start date dan end date (mode range)
209
+ - Border radius 8px dengan padding yang konsisten
210
+ - Typography menggunakan variant `t2` dari @herca/rn-kit
211
+
212
+ ## State Management Internal
213
+
214
+ Komponen mengelola beberapa state internal:
215
+
216
+ - `isDatePickerOpen`: Status buka/tutup DatePicker
217
+ - `dateValue`: Nilai tanggal yang sudah diformat
218
+ - `raw`: Nilai tanggal raw dari DatePicker
219
+
220
+ State internal ini memungkinkan komponen bekerja baik sebagai controlled maupun uncontrolled component.
221
+
222
+ ## TypeScript
223
+
224
+ Komponen menggunakan discriminated unions untuk type safety antara single dan range mode:
225
+
226
+ ```typescript
227
+ type SingleModeProps = BaseProps & {
228
+ mode?: 'single';
229
+ placeholderDateEnd?: never;
230
+ };
231
+
232
+ type RangeModeProps = BaseProps & {
233
+ mode: 'range';
234
+ placeholderDateEnd: string;
235
+ };
236
+
237
+ export type Props = SingleModeProps | RangeModeProps;
238
+ ```
239
+
240
+ Ini memastikan `placeholderDateEnd` hanya required ketika `mode="range"`.
241
+
242
+ ## Dependencies
243
+
244
+ - `@herca/rn-kit` - Untuk komponen DatePicker, Icon, Typography, dan Color
245
+ - `react-native` - Core components (View, Pressable, StyleSheet)
246
+
247
+ ## Best Practices
248
+
249
+ 1. **Selalu provide label yang jelas** untuk accessibility
250
+ 2. **Gunakan language prop** untuk konsistensi format tanggal di aplikasi
251
+ 3. **Handle onDateChange** untuk update state parent component
252
+ 4. **Gunakan controlled values** untuk form validation
253
+ 5. **Provide meaningful placeholders** yang menjelaskan expected input
254
+
255
+ ## Catatan
256
+
257
+ - Props tambahan akan diteruskan ke Pressable trigger
258
+ - Nilai yang dikembalikan via `onDateChange` selalu dalam format yang sudah diproses menggunakan `dateFormatter`
259
+ - Raw value dari DatePicker tetap tersimpan untuk keperluan internal
260
+ - Komponen dapat bekerja sebagai controlled maupun uncontrolled component
261
+ - Border color otomatis berubah ketika ada nilai terpilih untuk visual feedback
262
+
263
+ ## License
264
+
265
+ MIT