react-native-molecules 0.5.0-beta.16 → 0.5.0-beta.18

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 (87) hide show
  1. package/components/DateField/DateField.tsx +110 -0
  2. package/components/DateField/index.tsx +6 -0
  3. package/components/{DatePickerInput/inputUtils.ts → DateField/useDateFieldState.ts} +17 -49
  4. package/components/DatePicker/DateCalendar.tsx +83 -0
  5. package/components/DatePicker/DatePickerActions.tsx +73 -0
  6. package/components/DatePicker/DatePickerModal.tsx +234 -0
  7. package/components/DatePicker/DatePickerPopover.tsx +79 -0
  8. package/components/DatePicker/DatePickerProvider.tsx +152 -0
  9. package/components/DatePicker/DatePickerTrigger.tsx +23 -0
  10. package/components/DatePicker/context.tsx +82 -0
  11. package/components/DatePicker/index.tsx +44 -0
  12. package/components/DatePicker/utils.ts +292 -0
  13. package/components/DatePickerInline/DatePickerContext.tsx +1 -0
  14. package/components/DatePickerInline/DatePickerDockedHeader.tsx +113 -0
  15. package/components/DatePickerInline/DatePickerInline.tsx +16 -15
  16. package/components/DatePickerInline/DatePickerInlineBase.tsx +7 -1
  17. package/components/DatePickerInline/Day.tsx +25 -1
  18. package/components/DatePickerInline/DayRange.tsx +2 -4
  19. package/components/DatePickerInline/HeaderItem.tsx +42 -27
  20. package/components/DatePickerInline/Month.tsx +45 -65
  21. package/components/DatePickerInline/MonthPicker.tsx +25 -41
  22. package/components/DatePickerInline/Swiper.native.tsx +21 -4
  23. package/components/DatePickerInline/Swiper.tsx +168 -13
  24. package/components/DatePickerInline/Week.tsx +6 -1
  25. package/components/DatePickerInline/YearPicker.tsx +206 -53
  26. package/components/DatePickerInline/dateUtils.tsx +17 -12
  27. package/components/DatePickerInline/types.ts +3 -0
  28. package/components/DatePickerInline/utils.ts +66 -29
  29. package/components/ListItem/ListItem.tsx +3 -1
  30. package/components/ListItem/utils.ts +1 -1
  31. package/components/LoadingIndicator/index.tsx +1 -1
  32. package/components/Menu/Menu.tsx +3 -18
  33. package/components/Popover/Popover.tsx +122 -145
  34. package/components/Popover/PopoverRoot.tsx +74 -0
  35. package/components/Popover/common.ts +50 -34
  36. package/components/Popover/index.ts +18 -1
  37. package/components/Popover/usePlatformMeasure.native.ts +90 -0
  38. package/components/Popover/usePlatformMeasure.ts +118 -0
  39. package/components/Popover/utils.ts +34 -0
  40. package/components/Select/Select.tsx +7 -8
  41. package/components/Select/context.tsx +72 -0
  42. package/components/Select/index.ts +1 -0
  43. package/components/Select/utils.ts +0 -71
  44. package/components/Slot/compose-refs.tsx +2 -0
  45. package/components/TimeField/TimeField.tsx +75 -0
  46. package/components/TimeField/index.tsx +6 -0
  47. package/components/TimeField/useTimeFieldState.ts +70 -0
  48. package/components/{TimePickerField/sanitizeTime.ts → TimeField/utils.ts} +77 -10
  49. package/components/TimePicker/TimePicker.tsx +53 -9
  50. package/components/TimePicker/TimePickerModal.tsx +186 -0
  51. package/components/TimePicker/context.tsx +17 -0
  52. package/components/TimePicker/index.tsx +15 -3
  53. package/components/TimePicker/utils.ts +50 -0
  54. package/hooks/useActionState.tsx +19 -8
  55. package/package.json +6 -1
  56. package/components/DatePickerDocked/DatePickerDocked.tsx +0 -30
  57. package/components/DatePickerDocked/DatePickerDockedHeader.tsx +0 -129
  58. package/components/DatePickerDocked/index.tsx +0 -17
  59. package/components/DatePickerDocked/types.ts +0 -11
  60. package/components/DatePickerDocked/utils.ts +0 -157
  61. package/components/DatePickerInput/DatePickerInput.tsx +0 -130
  62. package/components/DatePickerInput/DatePickerInputModal.tsx +0 -48
  63. package/components/DatePickerInput/DatePickerInputWithoutModal.tsx +0 -73
  64. package/components/DatePickerInput/DateRangeInput.tsx +0 -88
  65. package/components/DatePickerInput/index.tsx +0 -11
  66. package/components/DatePickerInput/types.ts +0 -26
  67. package/components/DatePickerInput/utils.ts +0 -24
  68. package/components/DatePickerModal/AnimatedCrossView.tsx +0 -94
  69. package/components/DatePickerModal/CalendarEdit.tsx +0 -140
  70. package/components/DatePickerModal/DatePickerModal.tsx +0 -85
  71. package/components/DatePickerModal/DatePickerModalContent.tsx +0 -155
  72. package/components/DatePickerModal/DatePickerModalContentHeader.tsx +0 -213
  73. package/components/DatePickerModal/DatePickerModalHeader.tsx +0 -74
  74. package/components/DatePickerModal/DatePickerModalHeaderBackground.tsx +0 -13
  75. package/components/DatePickerModal/index.tsx +0 -16
  76. package/components/DatePickerModal/types.ts +0 -92
  77. package/components/DatePickerModal/utils.ts +0 -122
  78. package/components/DateTimePicker/DateTimePicker.tsx +0 -172
  79. package/components/DateTimePicker/index.tsx +0 -10
  80. package/components/DateTimePicker/utils.ts +0 -12
  81. package/components/Popover/Popover.native.tsx +0 -185
  82. package/components/TimePickerField/TimePickerField.tsx +0 -154
  83. package/components/TimePickerField/index.tsx +0 -10
  84. package/components/TimePickerField/utils.ts +0 -94
  85. package/components/TimePickerModal/TimePickerModal.tsx +0 -119
  86. package/components/TimePickerModal/index.tsx +0 -10
  87. package/components/TimePickerModal/utils.ts +0 -47
@@ -0,0 +1,152 @@
1
+ import type { ReactNode } from 'react';
2
+ import { memo, useCallback, useMemo, useRef, useState } from 'react';
3
+
4
+ import { getRegisteredComponentWithFallback } from '../../core';
5
+ import { useControlledValue } from '../../hooks';
6
+ import type { ValidRangeType } from '../DatePickerInline';
7
+ import type { DatePickerContextType, DatePickerMode, DatePickerValue, RangeValue } from './context';
8
+ import { DatePickerContext, withDraftLayer } from './context';
9
+
10
+ const DATE_FORMAT_BY_MODE: Record<DatePickerMode, string> = {
11
+ date: 'dd/MM/yyyy',
12
+ time: 'HH:mm',
13
+ datetime: 'dd/MM/yyyy HH:mm',
14
+ range: 'dd/MM/yyyy',
15
+ };
16
+
17
+ const emptyRange: RangeValue = { start: null, end: null };
18
+
19
+ const nullValueFor = (mode: DatePickerMode): DatePickerValue =>
20
+ mode === 'range' ? emptyRange : null;
21
+
22
+ export type DatePickerProviderProps = {
23
+ mode?: DatePickerMode;
24
+ value?: DatePickerValue;
25
+ defaultValue?: DatePickerValue;
26
+ onChange?: (value: DatePickerValue) => void;
27
+
28
+ draft?: boolean;
29
+ open?: boolean;
30
+ defaultOpen?: boolean;
31
+ onOpenChange?: (open: boolean) => void;
32
+
33
+ locale?: string;
34
+ validRange?: ValidRangeType;
35
+ is24Hour?: boolean;
36
+ dateFormat?: string;
37
+ disabled?: boolean;
38
+
39
+ children: ReactNode;
40
+ };
41
+
42
+ function DatePickerProviderInner({
43
+ mode = 'date',
44
+ value: valueProp,
45
+ defaultValue,
46
+ onChange,
47
+ draft: draftProp,
48
+ open: openProp,
49
+ defaultOpen = false,
50
+ onOpenChange,
51
+ locale,
52
+ validRange,
53
+ is24Hour = false,
54
+ dateFormat,
55
+ disabled,
56
+ children,
57
+ }: DatePickerProviderProps) {
58
+ const triggerRef = useRef<any>(null);
59
+
60
+ const [value, setCommittedValue] = useControlledValue<DatePickerValue>({
61
+ value: valueProp,
62
+ defaultValue: defaultValue ?? nullValueFor(mode),
63
+ onChange,
64
+ });
65
+
66
+ const [open, setOpen] = useControlledValue<boolean>({
67
+ value: openProp,
68
+ defaultValue: defaultOpen,
69
+ onChange: onOpenChange,
70
+ });
71
+
72
+ const [draftBuffer, setDraftBuffer] = useState<DatePickerValue>(value);
73
+
74
+ const prevOpenRef = useRef(open);
75
+ const prevValueRef = useRef(value);
76
+
77
+ if (open && !prevOpenRef.current && draftBuffer !== value) {
78
+ setDraftBuffer(value);
79
+ }
80
+ if (prevValueRef.current !== value && draftBuffer !== value) {
81
+ setDraftBuffer(value);
82
+ }
83
+ prevOpenRef.current = open;
84
+ prevValueRef.current = value;
85
+
86
+ const commitValue = useCallback(
87
+ (next: DatePickerValue) => {
88
+ setCommittedValue(next);
89
+ setDraftBuffer(next);
90
+ },
91
+ [setCommittedValue],
92
+ );
93
+
94
+ const resolvedFormat = dateFormat ?? DATE_FORMAT_BY_MODE[mode];
95
+ const defaultDraft = draftProp ?? true;
96
+
97
+ const ctx = useMemo<DatePickerContextType>(() => {
98
+ const base: DatePickerContextType = {
99
+ mode,
100
+ value,
101
+ draftBuffer,
102
+ setCommittedValue,
103
+ setDraftBuffer,
104
+ providerDraft: draftProp,
105
+
106
+ // Placeholders — withDraftLayer rebuilds these.
107
+ draft: defaultDraft,
108
+ draftValue: value,
109
+ setValue: () => {},
110
+ commit: () => {},
111
+ cancel: () => {},
112
+
113
+ commitValue,
114
+
115
+ open,
116
+ setOpen,
117
+ triggerRef,
118
+ locale,
119
+ validRange,
120
+ is24Hour,
121
+ dateFormat: resolvedFormat,
122
+ disabled,
123
+ };
124
+ return withDraftLayer(base, defaultDraft);
125
+ }, [
126
+ mode,
127
+ value,
128
+ draftBuffer,
129
+ setCommittedValue,
130
+ draftProp,
131
+ defaultDraft,
132
+ commitValue,
133
+ open,
134
+ setOpen,
135
+ locale,
136
+ validRange,
137
+ is24Hour,
138
+ resolvedFormat,
139
+ disabled,
140
+ ]);
141
+
142
+ return <DatePickerContext value={ctx}>{children}</DatePickerContext>;
143
+ }
144
+
145
+ const DatePickerProviderDefault = memo(DatePickerProviderInner);
146
+
147
+ export default DatePickerProviderDefault;
148
+
149
+ export const DatePickerProvider = getRegisteredComponentWithFallback(
150
+ 'DatePickerProvider',
151
+ DatePickerProviderDefault,
152
+ );
@@ -0,0 +1,23 @@
1
+ import type { ReactElement } from 'react';
2
+ import { memo, useCallback } from 'react';
3
+
4
+ import { getRegisteredComponentWithFallback } from '../../core';
5
+ import { Slot } from '../Slot';
6
+ import { useDatePickerContext } from './context';
7
+
8
+ const DatePickerTriggerDefault = memo(({ children }: { children: ReactElement }) => {
9
+ const { open, setOpen, disabled, triggerRef } = useDatePickerContext();
10
+
11
+ const onPress = useCallback(() => setOpen(!open), [open, setOpen]);
12
+
13
+ return (
14
+ <Slot ref={triggerRef} onPress={onPress} disabled={disabled}>
15
+ {children}
16
+ </Slot>
17
+ );
18
+ });
19
+
20
+ export const DatePickerTrigger = getRegisteredComponentWithFallback(
21
+ 'DatePickerTrigger',
22
+ DatePickerTriggerDefault,
23
+ );
@@ -0,0 +1,82 @@
1
+ import type { RefObject } from 'react';
2
+ import { createContext, useContext } from 'react';
3
+
4
+ import type { ValidRangeType } from '../DatePickerInline';
5
+ import { registerPortalContext } from '../Portal';
6
+
7
+ export type DatePickerMode = 'date' | 'time' | 'datetime' | 'range';
8
+
9
+ export type DateValue = Date | null;
10
+ export type RangeValue = { start: Date | null; end: Date | null };
11
+ export type DatePickerValue = DateValue | RangeValue;
12
+
13
+ export type DatePickerContextType = {
14
+ mode: DatePickerMode;
15
+
16
+ // Raw state shared across layers.
17
+ value: DatePickerValue;
18
+ draftBuffer: DatePickerValue;
19
+ setCommittedValue: (value: DatePickerValue) => void;
20
+ setDraftBuffer: (value: DatePickerValue) => void;
21
+
22
+ // User's explicit `draft` prop on <DatePicker.Provider>. Undefined if not passed.
23
+ providerDraft: boolean | undefined;
24
+
25
+ // Resolved for this layer — surfaces override these via withDraftLayer.
26
+ draft: boolean;
27
+ draftValue: DatePickerValue;
28
+ setValue: (value: DatePickerValue) => void;
29
+ commit: () => void;
30
+ cancel: () => void;
31
+
32
+ // Bypass setter for typed-entry fields — always commits, ignores draft.
33
+ commitValue: (value: DatePickerValue) => void;
34
+
35
+ open: boolean;
36
+ setOpen: (open: boolean) => void;
37
+ triggerRef: RefObject<any>;
38
+ locale?: string;
39
+ validRange?: ValidRangeType;
40
+ is24Hour: boolean;
41
+ dateFormat: string;
42
+ disabled?: boolean;
43
+ };
44
+
45
+ /** Rebuilds draft-derived fields on top of a base context for a specific layer's draft mode. */
46
+ export function withDraftLayer(base: DatePickerContextType, draft: boolean): DatePickerContextType {
47
+ return {
48
+ ...base,
49
+ draft,
50
+ draftValue: draft ? base.draftBuffer : base.value,
51
+ setValue: next => {
52
+ if (draft) base.setDraftBuffer(next);
53
+ else base.setCommittedValue(next);
54
+ },
55
+ commit: () => {
56
+ if (draft) base.setCommittedValue(base.draftBuffer);
57
+ base.setOpen(false);
58
+ },
59
+ cancel: () => {
60
+ base.setDraftBuffer(base.value);
61
+ base.setOpen(false);
62
+ },
63
+ };
64
+ }
65
+
66
+ export const DatePickerContext = createContext<DatePickerContextType | null>(null);
67
+
68
+ export function useDatePickerContext(): DatePickerContextType {
69
+ const ctx = useContext(DatePickerContext);
70
+ if (!ctx) {
71
+ throw new Error(
72
+ 'useDatePickerContext must be used within a <DatePickerProvider>. Wrap your date/time components with <DatePickerProvider>.',
73
+ );
74
+ }
75
+ return ctx;
76
+ }
77
+
78
+ export function useOptionalDatePickerContext(): DatePickerContextType | null {
79
+ return useContext(DatePickerContext);
80
+ }
81
+
82
+ registerPortalContext(DatePickerContext);
@@ -0,0 +1,44 @@
1
+ import { DateCalendar } from './DateCalendar';
2
+ import { DatePickerActions } from './DatePickerActions';
3
+ import { DatePickerModal } from './DatePickerModal';
4
+ import { DatePickerPopover } from './DatePickerPopover';
5
+ import { DatePickerProvider } from './DatePickerProvider';
6
+ import { DatePickerTrigger } from './DatePickerTrigger';
7
+
8
+ export const DatePicker = {
9
+ Provider: DatePickerProvider,
10
+ Trigger: DatePickerTrigger,
11
+ Actions: DatePickerActions,
12
+ Calendar: DateCalendar,
13
+ Modal: DatePickerModal,
14
+ Popover: DatePickerPopover,
15
+ };
16
+
17
+ export type {
18
+ DatePickerContextType,
19
+ DatePickerMode,
20
+ DatePickerValue,
21
+ DateValue,
22
+ RangeValue,
23
+ } from './context';
24
+ export { DatePickerContext, useDatePickerContext, useOptionalDatePickerContext } from './context';
25
+ export type { DateCalendarProps } from './DateCalendar';
26
+ export type { DatePickerActionsProps } from './DatePickerActions';
27
+ export { DatePickerActions } from './DatePickerActions';
28
+ export type { DatePickerModalProps } from './DatePickerModal';
29
+ export { DatePickerModal } from './DatePickerModal';
30
+ export type { DatePickerPopoverProps } from './DatePickerPopover';
31
+ export { DatePickerPopover } from './DatePickerPopover';
32
+ export type { DatePickerProviderProps } from './DatePickerProvider';
33
+ export { DatePickerProvider } from './DatePickerProvider';
34
+ export { DatePickerTrigger } from './DatePickerTrigger';
35
+ export {
36
+ datePickerHeaderItemStyles,
37
+ datePickerModalContentHeaderStyles,
38
+ datePickerModalEditStyles,
39
+ datePickerModalHeaderBackgroundStyles,
40
+ datePickerModalHeaderStyles,
41
+ datePickerModalStyles,
42
+ datePickerMonthItemStyles,
43
+ datePickerMonthPickerStyles,
44
+ } from './utils';
@@ -0,0 +1,292 @@
1
+ import { StyleSheet } from 'react-native-unistyles';
2
+
3
+ import { getRegisteredComponentStylesWithFallback } from '../../core';
4
+
5
+ const datePickerModalStylesDefault = StyleSheet.create(theme => ({
6
+ header: {
7
+ // backgroundColor: theme.colors.surfaceContainerHighest,
8
+ },
9
+ content: {
10
+ minWidth: 420,
11
+ width: 420,
12
+ maxWidth: undefined,
13
+ flex: undefined,
14
+ borderRadius: theme.shapes.corner.extraLarge,
15
+ overflow: 'hidden',
16
+ },
17
+ frame: {
18
+ // backgroundColor: theme.colors.surfaceContainerHighest,
19
+ width: '100%',
20
+ },
21
+ headlineContainer: {
22
+ // backgroundColor: theme.colors.surface,
23
+ paddingHorizontal: theme.spacings['5'],
24
+ paddingTop: theme.spacings['5'],
25
+ paddingBottom: theme.spacings['4'],
26
+ flexDirection: 'row',
27
+ alignItems: 'center',
28
+ },
29
+ headerCopy: {
30
+ flex: 1,
31
+ minWidth: 0,
32
+ },
33
+ headline: {
34
+ ...theme.typescale.labelLarge,
35
+ color: theme.colors.onSurfaceVariant,
36
+ },
37
+ supporting: {
38
+ fontSize: 44,
39
+ lineHeight: 52,
40
+ fontWeight: theme.typescale.displaySmall.fontWeight,
41
+ color: theme.colors.onSurface,
42
+ paddingTop: theme.spacings['2'],
43
+ flexShrink: 1,
44
+ },
45
+ modeToggle: {
46
+ color: theme.colors.onSurfaceVariant,
47
+ marginLeft: theme.spacings['3'],
48
+ },
49
+ body: {
50
+ // backgroundColor: theme.colors.surfaceContainerHighest,
51
+ borderTopWidth: StyleSheet.hairlineWidth,
52
+ borderTopColor: theme.colors.outlineVariant,
53
+ },
54
+ calendarContainer: {
55
+ minHeight: 320,
56
+ minWidth: undefined,
57
+ // backgroundColor: theme.colors.surfaceContainerHighest,
58
+ },
59
+ calendarRoot: {
60
+ // backgroundColor: theme.colors.surfaceContainerHighest,
61
+ },
62
+ inputContainer: {
63
+ padding: theme.spacings['6'],
64
+ paddingTop: theme.spacings['5'],
65
+ paddingBottom: theme.spacings['4'],
66
+ },
67
+ footer: {
68
+ // backgroundColor: theme.colors.surface,
69
+ flexDirection: 'row',
70
+ alignItems: 'center',
71
+ justifyContent: 'flex-end',
72
+ columnGap: theme.spacings['2'],
73
+ paddingHorizontal: theme.spacings['4'],
74
+ paddingTop: theme.spacings['0'],
75
+ paddingBottom: theme.spacings['2'],
76
+ },
77
+ }));
78
+
79
+ const datePickerModalHeaderStylesDefault = StyleSheet.create(theme => ({
80
+ root: {
81
+ color: theme.colors.onPrimary,
82
+ },
83
+ animated: {
84
+ paddingBottom: theme.spacings['0'],
85
+ elevation: 4,
86
+ },
87
+ safeContent: {
88
+ paddingBottom: theme.spacings['0'],
89
+
90
+ variants: {
91
+ state: {
92
+ disableSafeTop: {
93
+ paddingTop: 0,
94
+ },
95
+ },
96
+ },
97
+ },
98
+ safeContentNoTop: {
99
+ paddingTop: theme.spacings['0'],
100
+ },
101
+ appbarHeader: {
102
+ flexDirection: 'row',
103
+ alignItems: 'center',
104
+ justifyContent: 'space-between',
105
+ paddingHorizontal: theme.spacings['2'],
106
+ paddingVertical: theme.spacings['2'],
107
+ elevation: 0,
108
+ backgroundColor: 'transparent',
109
+ },
110
+ }));
111
+
112
+ const datePickerModalContentHeaderStylesDefault = StyleSheet.create(theme => ({
113
+ root: {
114
+ color: theme.colors.onPrimary,
115
+ },
116
+
117
+ fill: {
118
+ flex: 1,
119
+ },
120
+ header: {
121
+ height: 75,
122
+ alignItems: 'center',
123
+ flexDirection: 'row',
124
+ paddingLeft: theme.spacings['6'],
125
+ paddingRight: theme.spacings['3'],
126
+ },
127
+ headerContentContainer: {
128
+ marginTop: theme.spacings['1'],
129
+ flexDirection: 'row',
130
+ alignItems: 'center',
131
+ },
132
+ label: {
133
+ color: theme.colors.onPrimary,
134
+ letterSpacing: 1,
135
+ fontSize: theme.typescale.bodyMedium.fontSize,
136
+ },
137
+ headerText: {
138
+ fontSize: theme.typescale.bodyMedium.fontSize,
139
+ color: theme.colors.onPrimary,
140
+ },
141
+ headerSeparator: {
142
+ fontSize: theme.typescale.bodyMedium.fontSize,
143
+ paddingLeft: theme.spacings['2'],
144
+ paddingRight: theme.spacings['2'],
145
+ color: theme.colors.onPrimary,
146
+ },
147
+ icon: {
148
+ color: theme.colors.onPrimary,
149
+ },
150
+ }));
151
+
152
+ const datePickerModalHeaderBackgroundStylesDefault = StyleSheet.create(theme => ({
153
+ header: {
154
+ backgroundColor: theme.colors.primary,
155
+ paddingBottom: theme.spacings['0'],
156
+ elevation: 4,
157
+ },
158
+ safeContent: {
159
+ paddingBottom: theme.spacings['0'],
160
+ },
161
+ }));
162
+
163
+ const datePickerModalEditStylesDefault = StyleSheet.create(theme => ({
164
+ container: { padding: theme.spacings['3'] },
165
+ inner: { flexDirection: 'row' },
166
+ inputContainer: { flex: 1 },
167
+ input: { flex: 1 },
168
+ separator: { width: 12 },
169
+ }));
170
+
171
+ const datePickerPopoverHeaderStylesDefault = StyleSheet.create(theme => ({
172
+ buttonContainer: {
173
+ height: 46,
174
+ // width: '50%',
175
+ flexDirection: 'row',
176
+ alignItems: 'center',
177
+ },
178
+ buttonWrapper: {},
179
+ spacer: { flex: 1 },
180
+ labelStyle: {
181
+ ...theme.typescale.labelLarge,
182
+ color: theme.colors.onSurfaceVariant,
183
+ marginRight: theme.spacings['2'],
184
+ },
185
+ buttonStyle: {
186
+ alignSelf: 'center',
187
+ borderRadius: theme.shapes.corner.extraSmall,
188
+ },
189
+ innerStyle: {
190
+ paddingLeft: theme.spacings['0'],
191
+ flexDirection: 'row',
192
+ alignItems: 'center',
193
+ borderRadius: theme.shapes.corner.extraSmall,
194
+ },
195
+ emtpyView: {
196
+ width: 30,
197
+ },
198
+ }));
199
+
200
+ const datePickerPopoverMonthPickerStylesDefault = StyleSheet.create(theme => ({
201
+ root: {
202
+ backgroundColor: theme.colors.surface,
203
+ },
204
+ month: {
205
+ flex: 1,
206
+ justifyContent: 'center',
207
+ alignItems: 'flex-start',
208
+ },
209
+ selectedMonth: { color: theme.colors.onSurface },
210
+ monthButton: {
211
+ width: '100%',
212
+ overflow: 'hidden',
213
+ },
214
+ monthInner: {
215
+ height: 46,
216
+ alignItems: 'center',
217
+ justifyContent: 'flex-start',
218
+ flexDirection: 'row',
219
+ },
220
+ selectedMonthInner: { backgroundColor: theme.colors.surfaceVariant },
221
+ monthLabel: {
222
+ fontSize: 16,
223
+ },
224
+ }));
225
+
226
+ const datePickerPopoverMonthItemStylesDefault = StyleSheet.create(theme => ({
227
+ root: {
228
+ backgroundColor: theme.colors.surface,
229
+ },
230
+ monthButton: {
231
+ width: '100%',
232
+ overflow: 'hidden',
233
+ padding: theme.spacings['0'],
234
+ variants: {
235
+ state: {
236
+ selected: {
237
+ backgroundColor: theme.colors.surfaceVariant,
238
+ },
239
+ },
240
+ },
241
+ },
242
+ monthInner: {
243
+ height: 46,
244
+ alignItems: 'center',
245
+ justifyContent: 'flex-start',
246
+ flexDirection: 'row',
247
+ padding: theme.spacings['0'],
248
+ },
249
+ monthLabel: {
250
+ fontSize: 16,
251
+ variants: {
252
+ state: {
253
+ selected: {
254
+ color: theme.colors.onSurface,
255
+ },
256
+ },
257
+ },
258
+ },
259
+ }));
260
+
261
+ export const datePickerModalStyles = getRegisteredComponentStylesWithFallback(
262
+ 'DatePickerModal',
263
+ datePickerModalStylesDefault,
264
+ );
265
+ export const datePickerModalHeaderStyles = getRegisteredComponentStylesWithFallback(
266
+ 'DatePickerModal_Header',
267
+ datePickerModalHeaderStylesDefault,
268
+ );
269
+ export const datePickerModalContentHeaderStyles = getRegisteredComponentStylesWithFallback(
270
+ 'DatePickerModal_ContentHeader',
271
+ datePickerModalContentHeaderStylesDefault,
272
+ );
273
+ export const datePickerModalHeaderBackgroundStyles = getRegisteredComponentStylesWithFallback(
274
+ 'DatePickerModal_HeaderBackground',
275
+ datePickerModalHeaderBackgroundStylesDefault,
276
+ );
277
+ export const datePickerModalEditStyles = getRegisteredComponentStylesWithFallback(
278
+ 'DatePickerModal_Edit',
279
+ datePickerModalEditStylesDefault,
280
+ );
281
+ export const datePickerHeaderItemStyles = getRegisteredComponentStylesWithFallback(
282
+ 'DatePicker_HeaderItem',
283
+ datePickerPopoverHeaderStylesDefault,
284
+ );
285
+ export const datePickerMonthPickerStyles = getRegisteredComponentStylesWithFallback(
286
+ 'DatePickerPopover_MonthPicker',
287
+ datePickerPopoverMonthPickerStylesDefault,
288
+ );
289
+ export const datePickerMonthItemStyles = getRegisteredComponentStylesWithFallback(
290
+ 'DatePickerPopover_MonthItem',
291
+ datePickerPopoverMonthItemStylesDefault,
292
+ );
@@ -18,4 +18,5 @@ export const {
18
18
  Provider,
19
19
  useContext: useDatePickerStore,
20
20
  useContextValue: useDatePickerStoreValue,
21
+ useStoreRef: useDatePickerStoreRef,
21
22
  } = createFastContext<Store>();