react-native-molecules 0.5.0-beta.3 → 0.5.0-beta.30

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 (227) hide show
  1. package/components/Accordion/Accordion.tsx +2 -6
  2. package/components/Accordion/AccordionItem.tsx +16 -12
  3. package/components/Accordion/AccordionItemContent.tsx +6 -1
  4. package/components/Accordion/AccordionItemHeader.tsx +1 -1
  5. package/components/Accordion/utils.ts +6 -0
  6. package/components/ActivityIndicator/ActivityIndicator.tsx +6 -15
  7. package/components/Appbar/AppbarBase.tsx +18 -13
  8. package/components/Button/Button.tsx +211 -264
  9. package/components/Button/index.tsx +9 -3
  10. package/components/Button/types.ts +16 -2
  11. package/components/Button/utils.ts +230 -208
  12. package/components/Card/Card.tsx +1 -1
  13. package/components/Checkbox/Checkbox.tsx +125 -88
  14. package/components/Checkbox/CheckboxBase.ios.tsx +14 -23
  15. package/components/Checkbox/CheckboxBase.tsx +21 -137
  16. package/components/Checkbox/context.tsx +14 -0
  17. package/components/Checkbox/index.tsx +11 -4
  18. package/components/Checkbox/types.ts +63 -29
  19. package/components/Checkbox/utils.ts +25 -108
  20. package/components/Chip/Chip.tsx +41 -52
  21. package/components/Chip/utils.ts +3 -7
  22. package/components/DateField/DateField.tsx +111 -0
  23. package/components/DateField/index.tsx +6 -0
  24. package/components/{DatePickerInput/inputUtils.ts → DateField/useDateFieldState.ts} +19 -51
  25. package/components/DatePicker/DateCalendar.tsx +83 -0
  26. package/components/DatePicker/DatePickerActions.tsx +73 -0
  27. package/components/DatePicker/DatePickerModal.tsx +246 -0
  28. package/components/DatePicker/DatePickerPopover.tsx +79 -0
  29. package/components/DatePicker/DatePickerProvider.tsx +158 -0
  30. package/components/DatePicker/DatePickerTrigger.tsx +23 -0
  31. package/components/DatePicker/context.tsx +83 -0
  32. package/components/DatePicker/index.tsx +45 -0
  33. package/components/DatePicker/utils.ts +295 -0
  34. package/components/DatePickerInline/DatePickerDockedHeader.tsx +117 -0
  35. package/components/DatePickerInline/DatePickerInline.tsx +17 -16
  36. package/components/DatePickerInline/DatePickerInlineBase.tsx +11 -5
  37. package/components/DatePickerInline/DatePickerInlineHeader.tsx +50 -20
  38. package/components/DatePickerInline/Day.tsx +25 -1
  39. package/components/DatePickerInline/DayNames.tsx +13 -10
  40. package/components/DatePickerInline/DayRange.tsx +2 -4
  41. package/components/DatePickerInline/HeaderItem.tsx +44 -29
  42. package/components/DatePickerInline/Month.tsx +48 -67
  43. package/components/DatePickerInline/MonthPicker.tsx +80 -92
  44. package/components/DatePickerInline/Swiper.native.tsx +21 -4
  45. package/components/DatePickerInline/Swiper.tsx +169 -14
  46. package/components/DatePickerInline/SwiperUtils.ts +1 -1
  47. package/components/DatePickerInline/Week.tsx +6 -1
  48. package/components/DatePickerInline/YearPicker.tsx +220 -78
  49. package/components/DatePickerInline/dateUtils.tsx +18 -13
  50. package/components/DatePickerInline/store.tsx +27 -0
  51. package/components/DatePickerInline/types.ts +6 -2
  52. package/components/DatePickerInline/utils.ts +66 -29
  53. package/components/Divider/Divider.tsx +192 -0
  54. package/components/Divider/index.tsx +10 -0
  55. package/components/Drawer/Drawer.tsx +17 -6
  56. package/components/Drawer/DrawerItemGroup.tsx +3 -7
  57. package/components/ElementGroup/ElementGroup.tsx +1 -1
  58. package/components/FilePicker/FilePicker.tsx +48 -78
  59. package/components/FilePicker/index.tsx +2 -1
  60. package/components/FilePicker/utils.ts +9 -0
  61. package/components/HelperText/HelperText.tsx +0 -35
  62. package/components/Icon/iconFactory.tsx +5 -4
  63. package/components/Icon/index.tsx +1 -1
  64. package/components/Icon/types.ts +17 -6
  65. package/components/IconButton/IconButton.tsx +84 -84
  66. package/components/IconButton/index.tsx +1 -0
  67. package/components/IconButton/types.ts +10 -0
  68. package/components/IconButton/utils.ts +167 -33
  69. package/components/List/List.tsx +276 -0
  70. package/components/List/context.tsx +27 -0
  71. package/components/List/index.ts +8 -0
  72. package/components/List/types.ts +117 -0
  73. package/components/List/utils.ts +79 -0
  74. package/components/LoadingIndicator/LoadingIndicator.tsx +253 -0
  75. package/components/LoadingIndicator/LoadingIndicator.web.tsx +136 -0
  76. package/components/LoadingIndicator/index.tsx +13 -0
  77. package/components/LoadingIndicator/utils.ts +117 -0
  78. package/components/Menu/Menu.tsx +162 -39
  79. package/components/Menu/index.tsx +10 -7
  80. package/components/Menu/utils.ts +21 -70
  81. package/components/NavigationRail/NavigationRail.tsx +15 -9
  82. package/components/Popover/Popover.tsx +119 -145
  83. package/components/Popover/PopoverRoot.tsx +60 -0
  84. package/components/Popover/common.ts +54 -34
  85. package/components/Popover/index.ts +12 -1
  86. package/components/Popover/usePlatformMeasure.native.ts +90 -0
  87. package/components/Popover/usePlatformMeasure.ts +120 -0
  88. package/components/Popover/utils.ts +34 -0
  89. package/components/Portal/Portal.tsx +1 -2
  90. package/components/Radio/Radio.tsx +188 -0
  91. package/components/Radio/RadioBase.ios.tsx +69 -0
  92. package/components/Radio/RadioBase.tsx +136 -0
  93. package/components/Radio/context.tsx +23 -0
  94. package/components/Radio/index.tsx +20 -0
  95. package/components/Radio/types.ts +101 -0
  96. package/components/Radio/utils.ts +115 -0
  97. package/components/Rating/Rating.tsx +1 -1
  98. package/components/Select/Select.tsx +521 -785
  99. package/components/Select/context.tsx +81 -0
  100. package/components/Select/index.ts +26 -14
  101. package/components/Select/types.ts +65 -58
  102. package/components/Select/utils.ts +126 -0
  103. package/components/Slot/Slot.tsx +244 -0
  104. package/components/Slot/compose-refs.tsx +62 -0
  105. package/components/Slot/index.tsx +8 -0
  106. package/components/Surface/Surface.android.tsx +32 -7
  107. package/components/Surface/Surface.ios.tsx +34 -29
  108. package/components/Surface/Surface.tsx +31 -4
  109. package/components/Surface/utils.ts +44 -6
  110. package/components/Switch/Switch.ios.tsx +1 -1
  111. package/components/Switch/Switch.tsx +10 -3
  112. package/components/Tabs/TabItem.tsx +35 -58
  113. package/components/Tabs/TabLabel.tsx +5 -9
  114. package/components/Tabs/Tabs.tsx +156 -150
  115. package/components/Tabs/utils.ts +15 -2
  116. package/components/Text/textFactory.tsx +17 -5
  117. package/components/TextInput/TextInput.tsx +663 -579
  118. package/components/TextInput/index.tsx +19 -3
  119. package/components/TextInput/types.ts +77 -28
  120. package/components/TextInput/utils.ts +235 -145
  121. package/components/TimeField/TimeField.tsx +75 -0
  122. package/components/TimeField/index.tsx +6 -0
  123. package/components/TimeField/useTimeFieldState.ts +70 -0
  124. package/components/{TimePickerField/sanitizeTime.ts → TimeField/utils.ts} +77 -10
  125. package/components/TimePicker/AnalogClock.tsx +1 -1
  126. package/components/TimePicker/TimeInput.tsx +87 -42
  127. package/components/TimePicker/TimeInputs.tsx +138 -50
  128. package/components/TimePicker/TimePicker.tsx +74 -11
  129. package/components/TimePicker/TimePickerModal.tsx +186 -0
  130. package/components/TimePicker/context.tsx +17 -0
  131. package/components/TimePicker/index.tsx +15 -3
  132. package/components/TimePicker/utils.ts +93 -4
  133. package/components/Tooltip/Tooltip.tsx +42 -67
  134. package/components/Tooltip/TooltipContent.tsx +32 -5
  135. package/components/Tooltip/TooltipTrigger.tsx +20 -20
  136. package/components/Tooltip/index.tsx +1 -1
  137. package/components/TouchableRipple/TouchableRipple.native.tsx +83 -16
  138. package/components/TouchableRipple/TouchableRipple.tsx +150 -102
  139. package/components/TouchableRipple/rippleFromForegroundColor.ts +21 -0
  140. package/hocs/index.tsx +1 -1
  141. package/hocs/withKeyboardAccessibility.tsx +2 -3
  142. package/hocs/withPortal.tsx +1 -1
  143. package/hooks/index.tsx +2 -12
  144. package/hooks/useActionState.tsx +19 -8
  145. package/hooks/useContrastColor.ts +1 -2
  146. package/hooks/useFilePicker.tsx +7 -17
  147. package/hooks/useHandleNumberFormat.tsx +2 -2
  148. package/hooks/useMediaQuery.tsx +1 -2
  149. package/package.json +95 -111
  150. package/shortcuts-manager/ShortcutsManager/ShortcutsManager.tsx +6 -3
  151. package/shortcuts-manager/ShortcutsManager/utils.tsx +1 -1
  152. package/shortcuts-manager/useSetScopes/useSetScopes.tsx +1 -1
  153. package/shortcuts-manager/useShortcut/useShortcut.tsx +1 -1
  154. package/styles/shadow.ts +2 -1
  155. package/styles/themes/LightTheme.tsx +1 -1
  156. package/utils/DocumentPicker/documentPicker.ts +78 -27
  157. package/utils/DocumentPicker/types.ts +0 -1
  158. package/utils/extractSubcomponents.ts +89 -0
  159. package/utils/extractTextStyles.ts +1 -2
  160. package/utils/formatNumberWithMask/formatNumberWithMask.ts +2 -1
  161. package/utils/index.ts +0 -3
  162. package/utils/normalizeToNumberString/normalizeToNumberString.ts +1 -1
  163. package/components/DatePickerDocked/DatePickerDocked.tsx +0 -30
  164. package/components/DatePickerDocked/DatePickerDockedHeader.tsx +0 -129
  165. package/components/DatePickerDocked/index.tsx +0 -17
  166. package/components/DatePickerDocked/types.ts +0 -11
  167. package/components/DatePickerDocked/utils.ts +0 -157
  168. package/components/DatePickerInline/DatePickerContext.tsx +0 -21
  169. package/components/DatePickerInput/DatePickerInput.tsx +0 -139
  170. package/components/DatePickerInput/DatePickerInputModal.tsx +0 -48
  171. package/components/DatePickerInput/DatePickerInputWithoutModal.tsx +0 -77
  172. package/components/DatePickerInput/DateRangeInput.tsx +0 -88
  173. package/components/DatePickerInput/index.tsx +0 -10
  174. package/components/DatePickerInput/types.ts +0 -28
  175. package/components/DatePickerInput/utils.ts +0 -15
  176. package/components/DatePickerModal/AnimatedCrossView.tsx +0 -94
  177. package/components/DatePickerModal/CalendarEdit.tsx +0 -139
  178. package/components/DatePickerModal/DatePickerModal.tsx +0 -85
  179. package/components/DatePickerModal/DatePickerModalContent.tsx +0 -155
  180. package/components/DatePickerModal/DatePickerModalContentHeader.tsx +0 -213
  181. package/components/DatePickerModal/DatePickerModalHeader.tsx +0 -74
  182. package/components/DatePickerModal/DatePickerModalHeaderBackground.tsx +0 -13
  183. package/components/DatePickerModal/index.tsx +0 -16
  184. package/components/DatePickerModal/types.ts +0 -92
  185. package/components/DatePickerModal/utils.ts +0 -122
  186. package/components/DateTimePicker/DateTimePicker.tsx +0 -172
  187. package/components/DateTimePicker/index.tsx +0 -10
  188. package/components/DateTimePicker/utils.ts +0 -12
  189. package/components/HorizontalDivider/HorizontalDivider.tsx +0 -103
  190. package/components/HorizontalDivider/index.tsx +0 -9
  191. package/components/ListItem/ListItem.tsx +0 -136
  192. package/components/ListItem/ListItemDescription.tsx +0 -25
  193. package/components/ListItem/ListItemTitle.tsx +0 -25
  194. package/components/ListItem/index.tsx +0 -14
  195. package/components/ListItem/utils.ts +0 -115
  196. package/components/Menu/MenuDivider.tsx +0 -13
  197. package/components/Menu/MenuItem.tsx +0 -128
  198. package/components/Popover/Popover.native.tsx +0 -185
  199. package/components/RadioButton/RadioButton.tsx +0 -138
  200. package/components/RadioButton/RadioButtonAndroid.tsx +0 -188
  201. package/components/RadioButton/RadioButtonGroup.tsx +0 -98
  202. package/components/RadioButton/RadioButtonIOS.tsx +0 -106
  203. package/components/RadioButton/RadioButtonItem.tsx +0 -232
  204. package/components/RadioButton/index.ts +0 -22
  205. package/components/RadioButton/utils.ts +0 -165
  206. package/components/TimePickerField/TimePickerField.tsx +0 -152
  207. package/components/TimePickerField/index.tsx +0 -10
  208. package/components/TimePickerField/utils.ts +0 -94
  209. package/components/TimePickerModal/TimePickerModal.tsx +0 -115
  210. package/components/TimePickerModal/index.tsx +0 -10
  211. package/components/TimePickerModal/utils.ts +0 -47
  212. package/components/VerticalDivider/VerticalDivider.tsx +0 -100
  213. package/components/VerticalDivider/index.tsx +0 -9
  214. package/context-bridge/index.tsx +0 -87
  215. package/fast-context/index.tsx +0 -190
  216. package/hocs/typedMemo.tsx +0 -5
  217. package/hooks/useControlledValue.tsx +0 -68
  218. package/hooks/useLatest.tsx +0 -9
  219. package/hooks/useMergedRefs.ts +0 -14
  220. package/hooks/usePrevious.ts +0 -13
  221. package/hooks/useSearchable.tsx +0 -74
  222. package/hooks/useSubcomponents.tsx +0 -59
  223. package/hooks/useToggle.tsx +0 -24
  224. package/utils/color.ts +0 -22
  225. package/utils/compare/index.ts +0 -54
  226. package/utils/lodash.ts +0 -49
  227. package/utils/repository.ts +0 -53
@@ -0,0 +1,158 @@
1
+ import { useControlledValue } from '@react-native-molecules/utils/hooks';
2
+ import type { ReactNode } from 'react';
3
+ import { memo, useCallback, useMemo, useRef, useState } from 'react';
4
+
5
+ import { getRegisteredComponentWithFallback } from '../../core';
6
+ import type { ValidRangeType } from '../DatePickerInline';
7
+ import type {
8
+ DatePickerContextType,
9
+ DatePickerLocale,
10
+ DatePickerMode,
11
+ DatePickerValue,
12
+ RangeValue,
13
+ } from './context';
14
+ import { DatePickerContext, withDraftLayer } from './context';
15
+
16
+ const DATE_FORMAT_BY_MODE: Record<DatePickerMode, string> = {
17
+ date: 'dd/MM/yyyy',
18
+ time: 'HH:mm',
19
+ datetime: 'dd/MM/yyyy HH:mm',
20
+ range: 'dd/MM/yyyy',
21
+ };
22
+
23
+ const emptyRange: RangeValue = { start: null, end: null };
24
+
25
+ const nullValueFor = (mode: DatePickerMode): DatePickerValue =>
26
+ mode === 'range' ? emptyRange : null;
27
+
28
+ export type DatePickerProviderProps = {
29
+ mode?: DatePickerMode;
30
+ value?: DatePickerValue;
31
+ defaultValue?: DatePickerValue;
32
+ onChange?: (value: DatePickerValue) => void;
33
+
34
+ draft?: boolean;
35
+ open?: boolean;
36
+ defaultOpen?: boolean;
37
+ onOpenChange?: (open: boolean) => void;
38
+
39
+ locale?: DatePickerLocale;
40
+ validRange?: ValidRangeType;
41
+ is24Hour?: boolean;
42
+ dateFormat?: string;
43
+ disabled?: boolean;
44
+
45
+ children: ReactNode;
46
+ };
47
+
48
+ function DatePickerProviderInner({
49
+ mode = 'date',
50
+ value: valueProp,
51
+ defaultValue,
52
+ onChange,
53
+ draft: draftProp,
54
+ open: openProp,
55
+ defaultOpen = false,
56
+ onOpenChange,
57
+ locale,
58
+ validRange,
59
+ is24Hour = false,
60
+ dateFormat,
61
+ disabled,
62
+ children,
63
+ }: DatePickerProviderProps) {
64
+ const triggerRef = useRef<any>(null);
65
+
66
+ const [value, setCommittedValue] = useControlledValue<DatePickerValue>({
67
+ value: valueProp,
68
+ defaultValue: defaultValue ?? nullValueFor(mode),
69
+ onChange,
70
+ });
71
+
72
+ const [open, setOpen] = useControlledValue<boolean>({
73
+ value: openProp,
74
+ defaultValue: defaultOpen,
75
+ onChange: onOpenChange,
76
+ });
77
+
78
+ const [draftBuffer, setDraftBuffer] = useState<DatePickerValue>(value);
79
+
80
+ const prevOpenRef = useRef(open);
81
+ const prevValueRef = useRef(value);
82
+
83
+ if (open && !prevOpenRef.current && draftBuffer !== value) {
84
+ setDraftBuffer(value);
85
+ }
86
+ if (prevValueRef.current !== value && draftBuffer !== value) {
87
+ setDraftBuffer(value);
88
+ }
89
+ prevOpenRef.current = open;
90
+ prevValueRef.current = value;
91
+
92
+ const commitValue = useCallback(
93
+ (next: DatePickerValue) => {
94
+ setCommittedValue(next);
95
+ setDraftBuffer(next);
96
+ },
97
+ [setCommittedValue],
98
+ );
99
+
100
+ const resolvedFormat = dateFormat ?? DATE_FORMAT_BY_MODE[mode];
101
+ const defaultDraft = draftProp ?? true;
102
+
103
+ const ctx = useMemo<DatePickerContextType>(() => {
104
+ const base: DatePickerContextType = {
105
+ mode,
106
+ value,
107
+ draftBuffer,
108
+ setCommittedValue,
109
+ setDraftBuffer,
110
+ providerDraft: draftProp,
111
+
112
+ // Placeholders — withDraftLayer rebuilds these.
113
+ draft: defaultDraft,
114
+ draftValue: value,
115
+ setValue: () => {},
116
+ commit: () => {},
117
+ cancel: () => {},
118
+
119
+ commitValue,
120
+
121
+ open,
122
+ setOpen,
123
+ triggerRef,
124
+ locale,
125
+ validRange,
126
+ is24Hour,
127
+ dateFormat: resolvedFormat,
128
+ disabled,
129
+ };
130
+ return withDraftLayer(base, defaultDraft);
131
+ }, [
132
+ mode,
133
+ value,
134
+ draftBuffer,
135
+ setCommittedValue,
136
+ draftProp,
137
+ defaultDraft,
138
+ commitValue,
139
+ open,
140
+ setOpen,
141
+ locale,
142
+ validRange,
143
+ is24Hour,
144
+ resolvedFormat,
145
+ disabled,
146
+ ]);
147
+
148
+ return <DatePickerContext value={ctx}>{children}</DatePickerContext>;
149
+ }
150
+
151
+ const DatePickerProviderDefault = memo(DatePickerProviderInner);
152
+
153
+ export default DatePickerProviderDefault;
154
+
155
+ export const DatePickerProvider = getRegisteredComponentWithFallback(
156
+ 'DatePickerProvider',
157
+ DatePickerProviderDefault,
158
+ );
@@ -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,83 @@
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
+ export type DatePickerLocale = Intl.LocalesArgument;
9
+
10
+ export type DateValue = Date | null;
11
+ export type RangeValue = { start: Date | null; end: Date | null };
12
+ export type DatePickerValue = DateValue | RangeValue;
13
+
14
+ export type DatePickerContextType = {
15
+ mode: DatePickerMode;
16
+
17
+ // Raw state shared across layers.
18
+ value: DatePickerValue;
19
+ draftBuffer: DatePickerValue;
20
+ setCommittedValue: (value: DatePickerValue) => void;
21
+ setDraftBuffer: (value: DatePickerValue) => void;
22
+
23
+ // User's explicit `draft` prop on <DatePicker.Provider>. Undefined if not passed.
24
+ providerDraft: boolean | undefined;
25
+
26
+ // Resolved for this layer — surfaces override these via withDraftLayer.
27
+ draft: boolean;
28
+ draftValue: DatePickerValue;
29
+ setValue: (value: DatePickerValue) => void;
30
+ commit: () => void;
31
+ cancel: () => void;
32
+
33
+ // Bypass setter for typed-entry fields — always commits, ignores draft.
34
+ commitValue: (value: DatePickerValue) => void;
35
+
36
+ open: boolean;
37
+ setOpen: (open: boolean) => void;
38
+ triggerRef: RefObject<any>;
39
+ locale?: DatePickerLocale;
40
+ validRange?: ValidRangeType;
41
+ is24Hour: boolean;
42
+ dateFormat: string;
43
+ disabled?: boolean;
44
+ };
45
+
46
+ /** Rebuilds draft-derived fields on top of a base context for a specific layer's draft mode. */
47
+ export function withDraftLayer(base: DatePickerContextType, draft: boolean): DatePickerContextType {
48
+ return {
49
+ ...base,
50
+ draft,
51
+ draftValue: draft ? base.draftBuffer : base.value,
52
+ setValue: next => {
53
+ if (draft) base.setDraftBuffer(next);
54
+ else base.setCommittedValue(next);
55
+ },
56
+ commit: () => {
57
+ if (draft) base.setCommittedValue(base.draftBuffer);
58
+ base.setOpen(false);
59
+ },
60
+ cancel: () => {
61
+ base.setDraftBuffer(base.value);
62
+ base.setOpen(false);
63
+ },
64
+ };
65
+ }
66
+
67
+ export const DatePickerContext = createContext<DatePickerContextType | null>(null);
68
+
69
+ export function useDatePickerContext(): DatePickerContextType {
70
+ const ctx = useContext(DatePickerContext);
71
+ if (!ctx) {
72
+ throw new Error(
73
+ 'useDatePickerContext must be used within a <DatePickerProvider>. Wrap your date/time components with <DatePickerProvider>.',
74
+ );
75
+ }
76
+ return ctx;
77
+ }
78
+
79
+ export function useOptionalDatePickerContext(): DatePickerContextType | null {
80
+ return useContext(DatePickerContext);
81
+ }
82
+
83
+ registerPortalContext(DatePickerContext);
@@ -0,0 +1,45 @@
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
+ DatePickerLocale,
20
+ DatePickerMode,
21
+ DatePickerValue,
22
+ DateValue,
23
+ RangeValue,
24
+ } from './context';
25
+ export { DatePickerContext, useDatePickerContext, useOptionalDatePickerContext } from './context';
26
+ export type { DateCalendarProps } from './DateCalendar';
27
+ export type { DatePickerActionsProps } from './DatePickerActions';
28
+ export { DatePickerActions } from './DatePickerActions';
29
+ export type { DatePickerModalProps } from './DatePickerModal';
30
+ export { DatePickerModal } from './DatePickerModal';
31
+ export type { DatePickerPopoverProps } from './DatePickerPopover';
32
+ export { DatePickerPopover } from './DatePickerPopover';
33
+ export type { DatePickerProviderProps } from './DatePickerProvider';
34
+ export { DatePickerProvider } from './DatePickerProvider';
35
+ export { DatePickerTrigger } from './DatePickerTrigger';
36
+ export {
37
+ datePickerHeaderItemStyles,
38
+ datePickerModalContentHeaderStyles,
39
+ datePickerModalEditStyles,
40
+ datePickerModalHeaderBackgroundStyles,
41
+ datePickerModalHeaderStyles,
42
+ datePickerModalStyles,
43
+ datePickerMonthItemStyles,
44
+ datePickerMonthPickerStyles,
45
+ } from './utils';
@@ -0,0 +1,295 @@
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
+ gap: theme.spacings['2'],
175
+ // width: '50%',
176
+ flexDirection: 'row',
177
+ alignItems: 'center',
178
+ },
179
+ buttonWrapper: {},
180
+ spacer: { flex: 1 },
181
+ labelStyle: {
182
+ ...theme.typescale.labelLarge,
183
+ color: theme.colors.onSurfaceVariant,
184
+ marginRight: theme.spacings['2'],
185
+ },
186
+ buttonStyle: {
187
+ alignSelf: 'center',
188
+ borderRadius: theme.shapes.corner.extraSmall,
189
+ },
190
+ innerStyle: {
191
+ paddingLeft: theme.spacings['0'],
192
+ flexDirection: 'row',
193
+ alignItems: 'center',
194
+ borderRadius: theme.shapes.corner.extraSmall,
195
+ },
196
+ emtpyView: {
197
+ width: 30,
198
+ },
199
+ }));
200
+
201
+ const datePickerPopoverMonthPickerStylesDefault = StyleSheet.create(theme => ({
202
+ root: {
203
+ backgroundColor: theme.colors.surface,
204
+ },
205
+ month: {
206
+ flex: 1,
207
+ justifyContent: 'center',
208
+ alignItems: 'flex-start',
209
+ },
210
+ selectedMonth: { color: theme.colors.onSurface },
211
+ monthButton: {
212
+ width: '100%',
213
+ overflow: 'hidden',
214
+ },
215
+ monthInner: {
216
+ height: 46,
217
+ alignItems: 'center',
218
+ justifyContent: 'flex-start',
219
+ flexDirection: 'row',
220
+ },
221
+ selectedMonthInner: { backgroundColor: theme.colors.surfaceVariant },
222
+ monthLabel: {
223
+ fontSize: 16,
224
+ },
225
+ }));
226
+
227
+ const datePickerPopoverMonthItemStylesDefault = StyleSheet.create(theme => ({
228
+ root: {
229
+ backgroundColor: theme.colors.surface,
230
+ },
231
+ monthButton: {
232
+ width: '100%',
233
+ overflow: 'hidden',
234
+ padding: theme.spacings['0'],
235
+ justifyContent: 'flex-start',
236
+
237
+ variants: {
238
+ state: {
239
+ selected: {
240
+ backgroundColor: theme.colors.surfaceVariant,
241
+ },
242
+ },
243
+ },
244
+ },
245
+ monthInner: {
246
+ height: 46,
247
+ alignItems: 'center',
248
+ justifyContent: 'flex-start',
249
+ flexDirection: 'row',
250
+ padding: theme.spacings['0'],
251
+ },
252
+ monthLabel: {
253
+ fontSize: 16,
254
+ variants: {
255
+ state: {
256
+ selected: {
257
+ color: theme.colors.onSurface,
258
+ },
259
+ },
260
+ },
261
+ },
262
+ }));
263
+
264
+ export const datePickerModalStyles = getRegisteredComponentStylesWithFallback(
265
+ 'DatePickerModal',
266
+ datePickerModalStylesDefault,
267
+ );
268
+ export const datePickerModalHeaderStyles = getRegisteredComponentStylesWithFallback(
269
+ 'DatePickerModal_Header',
270
+ datePickerModalHeaderStylesDefault,
271
+ );
272
+ export const datePickerModalContentHeaderStyles = getRegisteredComponentStylesWithFallback(
273
+ 'DatePickerModal_ContentHeader',
274
+ datePickerModalContentHeaderStylesDefault,
275
+ );
276
+ export const datePickerModalHeaderBackgroundStyles = getRegisteredComponentStylesWithFallback(
277
+ 'DatePickerModal_HeaderBackground',
278
+ datePickerModalHeaderBackgroundStylesDefault,
279
+ );
280
+ export const datePickerModalEditStyles = getRegisteredComponentStylesWithFallback(
281
+ 'DatePickerModal_Edit',
282
+ datePickerModalEditStylesDefault,
283
+ );
284
+ export const datePickerHeaderItemStyles = getRegisteredComponentStylesWithFallback(
285
+ 'DatePicker_HeaderItem',
286
+ datePickerPopoverHeaderStylesDefault,
287
+ );
288
+ export const datePickerMonthPickerStyles = getRegisteredComponentStylesWithFallback(
289
+ 'DatePickerPopover_MonthPicker',
290
+ datePickerPopoverMonthPickerStylesDefault,
291
+ );
292
+ export const datePickerMonthItemStyles = getRegisteredComponentStylesWithFallback(
293
+ 'DatePickerPopover_MonthItem',
294
+ datePickerPopoverMonthItemStylesDefault,
295
+ );