@webority-technologies/mobile 0.0.15 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/Accordion/Accordion.js +60 -19
- package/lib/commonjs/components/AppBar/AppBar.js +29 -20
- package/lib/commonjs/components/Avatar/Avatar.js +38 -8
- package/lib/commonjs/components/Badge/Badge.js +66 -4
- package/lib/commonjs/components/Banner/Banner.js +146 -66
- package/lib/commonjs/components/BottomNavigation/BottomNavigation.js +37 -15
- package/lib/commonjs/components/BottomSheet/BottomSheet.js +78 -53
- package/lib/commonjs/components/Button/Button.js +12 -5
- package/lib/commonjs/components/Card/Card.js +106 -16
- package/lib/commonjs/components/Carousel/Carousel.js +66 -12
- package/lib/commonjs/components/Checkbox/Checkbox.js +11 -7
- package/lib/commonjs/components/Chip/Chip.js +44 -12
- package/lib/commonjs/components/DatePicker/DatePicker.js +185 -76
- package/lib/commonjs/components/DateRangePicker/DateRangePicker.js +133 -59
- package/lib/commonjs/components/Dialog/Dialog.js +16 -10
- package/lib/commonjs/components/Drawer/Drawer.js +13 -10
- package/lib/commonjs/components/FieldBase/FieldBase.js +306 -0
- package/lib/commonjs/components/FieldBase/index.js +32 -0
- package/lib/commonjs/components/FloatingActionButton/FloatingActionButton.js +69 -44
- package/lib/commonjs/components/ForceUpdateDialog/ForceUpdateDialog.js +8 -2
- package/lib/commonjs/components/FormField/FormField.js +3 -2
- package/lib/commonjs/components/ImageGallery/ImageGallery.js +132 -44
- package/lib/commonjs/components/Input/Input.js +144 -181
- package/lib/commonjs/components/ListItem/ListItem.js +90 -11
- package/lib/commonjs/components/Modal/Modal.js +55 -27
- package/lib/commonjs/components/NumberInput/NumberInput.js +60 -106
- package/lib/commonjs/components/OTPInput/OTPInput.js +65 -58
- package/lib/commonjs/components/PickerTrigger/PickerTrigger.js +185 -0
- package/lib/commonjs/components/{AppIcon → PickerTrigger}/index.js +4 -4
- package/lib/commonjs/components/ProgressBar/ProgressBar.js +19 -11
- package/lib/commonjs/components/Radio/Radio.js +11 -6
- package/lib/commonjs/components/Rating/Rating.js +85 -19
- package/lib/commonjs/components/SearchBar/SearchBar.js +84 -107
- package/lib/commonjs/components/SegmentedControl/SegmentedControl.js +22 -11
- package/lib/commonjs/components/Select/Select.js +62 -91
- package/lib/commonjs/components/Skeleton/Skeleton.js +131 -174
- package/lib/commonjs/components/Skeleton/SkeletonClock.js +117 -0
- package/lib/commonjs/components/Skeleton/SkeletonContent.js +164 -81
- package/lib/commonjs/components/Skeleton/SkeletonProvider.js +72 -10
- package/lib/commonjs/components/Skeleton/index.js +17 -16
- package/lib/commonjs/components/Slider/Slider.js +44 -25
- package/lib/commonjs/components/Stepper/Stepper.js +199 -29
- package/lib/commonjs/components/Swipeable/Swipeable.js +36 -19
- package/lib/commonjs/components/Switch/Switch.js +9 -2
- package/lib/commonjs/components/Tabs/Tabs.js +84 -21
- package/lib/commonjs/components/TimePicker/TimePicker.js +123 -45
- package/lib/commonjs/components/Toast/Toast.js +27 -16
- package/lib/commonjs/components/Tooltip/Tooltip.js +56 -32
- package/lib/commonjs/components/index.js +37 -37
- package/lib/commonjs/theme/tokens.js +55 -7
- package/lib/module/components/Accordion/Accordion.js +61 -20
- package/lib/module/components/AppBar/AppBar.js +29 -20
- package/lib/module/components/Avatar/Avatar.js +39 -9
- package/lib/module/components/Badge/Badge.js +67 -5
- package/lib/module/components/Banner/Banner.js +147 -67
- package/lib/module/components/BottomNavigation/BottomNavigation.js +37 -15
- package/lib/module/components/BottomSheet/BottomSheet.js +80 -55
- package/lib/module/components/Button/Button.js +12 -5
- package/lib/module/components/Card/Card.js +107 -17
- package/lib/module/components/Carousel/Carousel.js +67 -13
- package/lib/module/components/Checkbox/Checkbox.js +11 -7
- package/lib/module/components/Chip/Chip.js +45 -13
- package/lib/module/components/DatePicker/DatePicker.js +185 -76
- package/lib/module/components/DateRangePicker/DateRangePicker.js +134 -60
- package/lib/module/components/Dialog/Dialog.js +16 -10
- package/lib/module/components/Drawer/Drawer.js +13 -10
- package/lib/module/components/FieldBase/FieldBase.js +297 -0
- package/lib/module/components/FieldBase/index.js +4 -0
- package/lib/module/components/FloatingActionButton/FloatingActionButton.js +69 -44
- package/lib/module/components/ForceUpdateDialog/ForceUpdateDialog.js +8 -2
- package/lib/module/components/FormField/FormField.js +3 -2
- package/lib/module/components/ImageGallery/ImageGallery.js +128 -40
- package/lib/module/components/Input/Input.js +144 -179
- package/lib/module/components/ListItem/ListItem.js +91 -12
- package/lib/module/components/Modal/Modal.js +55 -27
- package/lib/module/components/NumberInput/NumberInput.js +60 -106
- package/lib/module/components/OTPInput/OTPInput.js +65 -58
- package/lib/module/components/PickerTrigger/PickerTrigger.js +181 -0
- package/lib/module/components/PickerTrigger/index.js +4 -0
- package/lib/module/components/ProgressBar/ProgressBar.js +19 -11
- package/lib/module/components/Radio/Radio.js +11 -6
- package/lib/module/components/Rating/Rating.js +86 -20
- package/lib/module/components/SearchBar/SearchBar.js +84 -107
- package/lib/module/components/SegmentedControl/SegmentedControl.js +22 -11
- package/lib/module/components/Select/Select.js +62 -91
- package/lib/module/components/Skeleton/Skeleton.js +135 -175
- package/lib/module/components/Skeleton/SkeletonClock.js +110 -0
- package/lib/module/components/Skeleton/SkeletonContent.js +167 -84
- package/lib/module/components/Skeleton/SkeletonProvider.js +71 -10
- package/lib/module/components/Skeleton/index.js +3 -2
- package/lib/module/components/Slider/Slider.js +44 -25
- package/lib/module/components/Stepper/Stepper.js +201 -31
- package/lib/module/components/Swipeable/Swipeable.js +36 -19
- package/lib/module/components/Switch/Switch.js +9 -2
- package/lib/module/components/Tabs/Tabs.js +84 -21
- package/lib/module/components/TimePicker/TimePicker.js +123 -45
- package/lib/module/components/Toast/Toast.js +27 -16
- package/lib/module/components/Tooltip/Tooltip.js +56 -32
- package/lib/module/components/index.js +2 -2
- package/lib/module/theme/tokens.js +55 -7
- package/lib/typescript/commonjs/components/Accordion/Accordion.d.ts +10 -5
- package/lib/typescript/commonjs/components/AppBar/AppBar.d.ts +8 -0
- package/lib/typescript/commonjs/components/Avatar/Avatar.d.ts +12 -6
- package/lib/typescript/commonjs/components/Badge/Badge.d.ts +7 -6
- package/lib/typescript/commonjs/components/Banner/Banner.d.ts +17 -6
- package/lib/typescript/commonjs/components/BottomSheet/BottomSheet.d.ts +7 -0
- package/lib/typescript/commonjs/components/Card/Card.d.ts +17 -6
- package/lib/typescript/commonjs/components/Carousel/Carousel.d.ts +7 -6
- package/lib/typescript/commonjs/components/Checkbox/Checkbox.d.ts +9 -1
- package/lib/typescript/commonjs/components/Chip/Chip.d.ts +13 -6
- package/lib/typescript/commonjs/components/DatePicker/DatePicker.d.ts +38 -3
- package/lib/typescript/commonjs/components/DateRangePicker/DateRangePicker.d.ts +36 -3
- package/lib/typescript/commonjs/components/Dialog/Dialog.d.ts +13 -1
- package/lib/typescript/commonjs/components/FieldBase/FieldBase.d.ts +141 -0
- package/lib/typescript/commonjs/components/FieldBase/index.d.ts +3 -0
- package/lib/typescript/commonjs/components/FloatingActionButton/FloatingActionButton.d.ts +8 -6
- package/lib/typescript/commonjs/components/FloatingActionButton/index.d.ts +1 -1
- package/lib/typescript/commonjs/components/ForceUpdateDialog/ForceUpdateDialog.d.ts +7 -0
- package/lib/typescript/commonjs/components/FormField/FormField.d.ts +7 -0
- package/lib/typescript/commonjs/components/ImageGallery/ImageGallery.d.ts +6 -4
- package/lib/typescript/commonjs/components/Input/Input.d.ts +6 -0
- package/lib/typescript/commonjs/components/ListItem/ListItem.d.ts +13 -6
- package/lib/typescript/commonjs/components/NumberInput/NumberInput.d.ts +3 -0
- package/lib/typescript/commonjs/components/PickerTrigger/PickerTrigger.d.ts +57 -0
- package/lib/typescript/commonjs/components/PickerTrigger/index.d.ts +3 -0
- package/lib/typescript/commonjs/components/ProgressBar/ProgressBar.d.ts +2 -0
- package/lib/typescript/commonjs/components/Radio/Radio.d.ts +3 -0
- package/lib/typescript/commonjs/components/Rating/Rating.d.ts +9 -6
- package/lib/typescript/commonjs/components/SegmentedControl/SegmentedControl.d.ts +3 -0
- package/lib/typescript/commonjs/components/Skeleton/Skeleton.d.ts +49 -20
- package/lib/typescript/commonjs/components/Skeleton/SkeletonClock.d.ts +60 -0
- package/lib/typescript/commonjs/components/Skeleton/SkeletonContent.d.ts +80 -19
- package/lib/typescript/commonjs/components/Skeleton/SkeletonProvider.d.ts +39 -5
- package/lib/typescript/commonjs/components/Skeleton/index.d.ts +6 -4
- package/lib/typescript/commonjs/components/Slider/Slider.d.ts +12 -1
- package/lib/typescript/commonjs/components/Stepper/Stepper.d.ts +18 -6
- package/lib/typescript/commonjs/components/Swipeable/Swipeable.d.ts +2 -0
- package/lib/typescript/commonjs/components/Switch/Switch.d.ts +1 -0
- package/lib/typescript/commonjs/components/Tabs/Tabs.d.ts +26 -2
- package/lib/typescript/commonjs/components/TimePicker/TimePicker.d.ts +36 -3
- package/lib/typescript/commonjs/components/Toast/Toast.d.ts +8 -0
- package/lib/typescript/commonjs/components/Tooltip/Tooltip.d.ts +7 -1
- package/lib/typescript/commonjs/components/index.d.ts +5 -5
- package/lib/typescript/commonjs/index.d.ts +1 -1
- package/lib/typescript/commonjs/theme/index.d.ts +1 -1
- package/lib/typescript/commonjs/theme/types.d.ts +553 -11
- package/lib/typescript/module/components/Accordion/Accordion.d.ts +10 -5
- package/lib/typescript/module/components/AppBar/AppBar.d.ts +8 -0
- package/lib/typescript/module/components/Avatar/Avatar.d.ts +12 -6
- package/lib/typescript/module/components/Badge/Badge.d.ts +7 -6
- package/lib/typescript/module/components/Banner/Banner.d.ts +17 -6
- package/lib/typescript/module/components/BottomSheet/BottomSheet.d.ts +7 -0
- package/lib/typescript/module/components/Card/Card.d.ts +17 -6
- package/lib/typescript/module/components/Carousel/Carousel.d.ts +7 -6
- package/lib/typescript/module/components/Checkbox/Checkbox.d.ts +9 -1
- package/lib/typescript/module/components/Chip/Chip.d.ts +13 -6
- package/lib/typescript/module/components/DatePicker/DatePicker.d.ts +38 -3
- package/lib/typescript/module/components/DateRangePicker/DateRangePicker.d.ts +36 -3
- package/lib/typescript/module/components/Dialog/Dialog.d.ts +13 -1
- package/lib/typescript/module/components/FieldBase/FieldBase.d.ts +141 -0
- package/lib/typescript/module/components/FieldBase/index.d.ts +3 -0
- package/lib/typescript/module/components/FloatingActionButton/FloatingActionButton.d.ts +8 -6
- package/lib/typescript/module/components/FloatingActionButton/index.d.ts +1 -1
- package/lib/typescript/module/components/ForceUpdateDialog/ForceUpdateDialog.d.ts +7 -0
- package/lib/typescript/module/components/FormField/FormField.d.ts +7 -0
- package/lib/typescript/module/components/ImageGallery/ImageGallery.d.ts +6 -4
- package/lib/typescript/module/components/Input/Input.d.ts +6 -0
- package/lib/typescript/module/components/ListItem/ListItem.d.ts +13 -6
- package/lib/typescript/module/components/NumberInput/NumberInput.d.ts +3 -0
- package/lib/typescript/module/components/PickerTrigger/PickerTrigger.d.ts +57 -0
- package/lib/typescript/module/components/PickerTrigger/index.d.ts +3 -0
- package/lib/typescript/module/components/ProgressBar/ProgressBar.d.ts +2 -0
- package/lib/typescript/module/components/Radio/Radio.d.ts +3 -0
- package/lib/typescript/module/components/Rating/Rating.d.ts +9 -6
- package/lib/typescript/module/components/SegmentedControl/SegmentedControl.d.ts +3 -0
- package/lib/typescript/module/components/Skeleton/Skeleton.d.ts +49 -20
- package/lib/typescript/module/components/Skeleton/SkeletonClock.d.ts +60 -0
- package/lib/typescript/module/components/Skeleton/SkeletonContent.d.ts +80 -19
- package/lib/typescript/module/components/Skeleton/SkeletonProvider.d.ts +39 -5
- package/lib/typescript/module/components/Skeleton/index.d.ts +6 -4
- package/lib/typescript/module/components/Slider/Slider.d.ts +12 -1
- package/lib/typescript/module/components/Stepper/Stepper.d.ts +18 -6
- package/lib/typescript/module/components/Swipeable/Swipeable.d.ts +2 -0
- package/lib/typescript/module/components/Switch/Switch.d.ts +1 -0
- package/lib/typescript/module/components/Tabs/Tabs.d.ts +26 -2
- package/lib/typescript/module/components/TimePicker/TimePicker.d.ts +36 -3
- package/lib/typescript/module/components/Toast/Toast.d.ts +8 -0
- package/lib/typescript/module/components/Tooltip/Tooltip.d.ts +7 -1
- package/lib/typescript/module/components/index.d.ts +5 -5
- package/lib/typescript/module/index.d.ts +1 -1
- package/lib/typescript/module/theme/index.d.ts +1 -1
- package/lib/typescript/module/theme/types.d.ts +553 -11
- package/package.json +2 -6
- package/lib/commonjs/components/AppIcon/AppIcon.js +0 -120
- package/lib/commonjs/types/vector-icons.d.js +0 -2
- package/lib/module/components/AppIcon/AppIcon.js +0 -111
- package/lib/module/components/AppIcon/index.js +0 -4
- package/lib/module/types/vector-icons.d.js +0 -2
- package/lib/typescript/commonjs/components/AppIcon/AppIcon.d.ts +0 -20
- package/lib/typescript/commonjs/components/AppIcon/index.d.ts +0 -3
- package/lib/typescript/module/components/AppIcon/AppIcon.d.ts +0 -20
- package/lib/typescript/module/components/AppIcon/index.d.ts +0 -3
|
@@ -6,10 +6,27 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = exports.DatePicker = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
|
+
var _reactNativeSafeAreaContext = require("react-native-safe-area-context");
|
|
9
10
|
var _index = require("../../theme/index.js");
|
|
10
11
|
var _index2 = require("../../utils/index.js");
|
|
12
|
+
var _index3 = require("../PickerTrigger/index.js");
|
|
11
13
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
14
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
15
|
+
/**
|
|
16
|
+
* DatePicker operates in two modes:
|
|
17
|
+
*
|
|
18
|
+
* 1. **Controlled-modal mode** — pass `visible` (plus `onSelect` / `onClose`)
|
|
19
|
+
* and own the open state externally. The component renders only the modal.
|
|
20
|
+
* 2. **Trigger mode** — omit `visible`. The component renders a built-in
|
|
21
|
+
* PickerTrigger field (label / value / placeholder / chevron / clear /
|
|
22
|
+
* helper / error / size / variant) and manages its own open state. The
|
|
23
|
+
* field opens the modal on press and closes it on confirm/cancel.
|
|
24
|
+
*
|
|
25
|
+
* `onSelect` / `onClose` are typed optional to support trigger-only usage
|
|
26
|
+
* where the consumer may not need either callback. In controlled-modal mode
|
|
27
|
+
* they remain semantically required.
|
|
28
|
+
*/
|
|
29
|
+
|
|
13
30
|
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
14
31
|
const GRID_SIZE = 12; // 4 cols x 3 rows for year / decade grids
|
|
15
32
|
const DECADE_SPAN = 10;
|
|
@@ -86,7 +103,6 @@ const buildDecadeCells = anchorYear => {
|
|
|
86
103
|
};
|
|
87
104
|
const DatePicker = props => {
|
|
88
105
|
const {
|
|
89
|
-
visible,
|
|
90
106
|
value,
|
|
91
107
|
onSelect,
|
|
92
108
|
onClose,
|
|
@@ -100,9 +116,32 @@ const DatePicker = props => {
|
|
|
100
116
|
confirmLabel = 'Confirm',
|
|
101
117
|
cancelLabel = 'Cancel',
|
|
102
118
|
style,
|
|
103
|
-
|
|
119
|
+
containerStyle,
|
|
120
|
+
headerLabelStyle,
|
|
121
|
+
navButtonStyle,
|
|
122
|
+
footerButtonStyle,
|
|
123
|
+
testID,
|
|
124
|
+
label,
|
|
125
|
+
placeholder,
|
|
126
|
+
helperText,
|
|
127
|
+
error,
|
|
128
|
+
required,
|
|
129
|
+
disabled,
|
|
130
|
+
size,
|
|
131
|
+
variant,
|
|
132
|
+
clearable,
|
|
133
|
+
onClear,
|
|
134
|
+
formatValue,
|
|
135
|
+
triggerStyle
|
|
104
136
|
} = props;
|
|
137
|
+
|
|
138
|
+
// Controlled vs uncontrolled detection: if `visible` is supplied (even
|
|
139
|
+
// `false`), the consumer owns the open state; otherwise we own it.
|
|
140
|
+
const isControlled = props.visible !== undefined;
|
|
141
|
+
const [internalOpen, setInternalOpen] = (0, _react.useState)(false);
|
|
142
|
+
const open = isControlled ? props.visible : internalOpen;
|
|
105
143
|
const theme = (0, _index.useTheme)();
|
|
144
|
+
const insets = (0, _reactNativeSafeAreaContext.useSafeAreaInsets)();
|
|
106
145
|
const styles = (0, _react.useMemo)(() => buildStyles(theme), [theme]);
|
|
107
146
|
const today = (0, _react.useMemo)(() => startOfDay(new Date()), []);
|
|
108
147
|
const initialAnchor = value ? startOfDay(value) : today;
|
|
@@ -131,17 +170,20 @@ const DatePicker = props => {
|
|
|
131
170
|
}
|
|
132
171
|
}, [value]);
|
|
133
172
|
|
|
134
|
-
// Modal open / close animation.
|
|
173
|
+
// Modal open / close animation. Backdrop opacity runs on JS driver — see
|
|
174
|
+
// Modal.tsx for the RN 0.85 / Fabric two-bug reason (view flattening +
|
|
175
|
+
// native-driver opacity on Animated.View with backgroundColor). Sheet
|
|
176
|
+
// transform stays native.
|
|
135
177
|
(0, _react.useEffect)(() => {
|
|
136
178
|
if (mode !== 'modal') return;
|
|
137
|
-
if (
|
|
138
|
-
|
|
179
|
+
if (open) {
|
|
180
|
+
backdrop.setValue(0);
|
|
139
181
|
(0, _index.setNativeValue)(sheet, 0);
|
|
140
182
|
_reactNative.Animated.parallel([_reactNative.Animated.timing(backdrop, {
|
|
141
183
|
toValue: 1,
|
|
142
184
|
duration: theme.motion.duration.normal,
|
|
143
185
|
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
144
|
-
useNativeDriver:
|
|
186
|
+
useNativeDriver: false
|
|
145
187
|
}), _reactNative.Animated.spring(sheet, {
|
|
146
188
|
toValue: 1,
|
|
147
189
|
damping: theme.motion.spring.gentle.damping,
|
|
@@ -150,7 +192,7 @@ const DatePicker = props => {
|
|
|
150
192
|
useNativeDriver: true
|
|
151
193
|
})]).start();
|
|
152
194
|
}
|
|
153
|
-
}, [
|
|
195
|
+
}, [open, mode, backdrop, sheet, theme.motion]);
|
|
154
196
|
const disabledIsoSet = (0, _react.useMemo)(() => {
|
|
155
197
|
const set = new Set();
|
|
156
198
|
disabledDates?.forEach(d => set.add(toIso(startOfDay(d))));
|
|
@@ -191,17 +233,19 @@ const DatePicker = props => {
|
|
|
191
233
|
return false;
|
|
192
234
|
}, [minDay, maxDay]);
|
|
193
235
|
const animateMonthChange = (0, _react.useCallback)(delta => {
|
|
194
|
-
(0, _index2.triggerHaptic)('impactLight');
|
|
236
|
+
if (theme.components.datePicker?.haptic) (0, _index2.triggerHaptic)('impactLight');
|
|
195
237
|
const direction = delta > 0 ? 1 : -1;
|
|
196
|
-
const distance = 32;
|
|
238
|
+
const distance = theme.components.datePicker?.monthSlideDistance ?? 32;
|
|
239
|
+
const outDuration = theme.components.datePicker?.monthSlideOutDuration ?? theme.motion.duration.fast ?? 140;
|
|
240
|
+
const inDuration = theme.components.datePicker?.monthSlideInDuration ?? theme.motion.duration.fast ?? 160;
|
|
197
241
|
_reactNative.Animated.sequence([_reactNative.Animated.parallel([_reactNative.Animated.timing(monthSlide, {
|
|
198
242
|
toValue: -direction * distance,
|
|
199
|
-
duration:
|
|
243
|
+
duration: outDuration,
|
|
200
244
|
easing: _reactNative.Easing.out(_reactNative.Easing.quad),
|
|
201
245
|
useNativeDriver: true
|
|
202
246
|
}), _reactNative.Animated.timing(monthFade, {
|
|
203
247
|
toValue: 0,
|
|
204
|
-
duration:
|
|
248
|
+
duration: outDuration,
|
|
205
249
|
useNativeDriver: true
|
|
206
250
|
})]), _reactNative.Animated.timing(monthSlide, {
|
|
207
251
|
toValue: direction * distance,
|
|
@@ -209,68 +253,71 @@ const DatePicker = props => {
|
|
|
209
253
|
useNativeDriver: true
|
|
210
254
|
}), _reactNative.Animated.parallel([_reactNative.Animated.timing(monthSlide, {
|
|
211
255
|
toValue: 0,
|
|
212
|
-
duration:
|
|
256
|
+
duration: inDuration,
|
|
213
257
|
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
214
258
|
useNativeDriver: true
|
|
215
259
|
}), _reactNative.Animated.timing(monthFade, {
|
|
216
260
|
toValue: 1,
|
|
217
|
-
duration:
|
|
261
|
+
duration: inDuration,
|
|
218
262
|
useNativeDriver: true
|
|
219
263
|
})])]).start();
|
|
220
264
|
const next = addMonths(anchor, delta);
|
|
221
265
|
setAnchor(next);
|
|
222
266
|
_reactNative.AccessibilityInfo.announceForAccessibility(formatMonthYear(next, locale));
|
|
223
|
-
}, [anchor, locale, monthFade, monthSlide]);
|
|
267
|
+
}, [anchor, locale, monthFade, monthSlide, theme.components.datePicker, theme.motion.duration.fast]);
|
|
224
268
|
const goPrev = (0, _react.useCallback)(() => {
|
|
225
269
|
if (viewMode === 'days') {
|
|
226
270
|
animateMonthChange(-1);
|
|
227
271
|
return;
|
|
228
272
|
}
|
|
229
|
-
(0, _index2.triggerHaptic)('impactLight');
|
|
273
|
+
if (theme.components.datePicker?.haptic) (0, _index2.triggerHaptic)('impactLight');
|
|
230
274
|
if (viewMode === 'years') {
|
|
231
275
|
setAnchor(prev => new Date(prev.getFullYear() - GRID_SIZE, prev.getMonth(), 1));
|
|
232
276
|
} else {
|
|
233
277
|
setAnchor(prev => new Date(prev.getFullYear() - GRID_SIZE * DECADE_SPAN, prev.getMonth(), 1));
|
|
234
278
|
}
|
|
235
|
-
}, [animateMonthChange, viewMode]);
|
|
279
|
+
}, [animateMonthChange, viewMode, theme.components.datePicker]);
|
|
236
280
|
const goNext = (0, _react.useCallback)(() => {
|
|
237
281
|
if (viewMode === 'days') {
|
|
238
282
|
animateMonthChange(1);
|
|
239
283
|
return;
|
|
240
284
|
}
|
|
241
|
-
(0, _index2.triggerHaptic)('impactLight');
|
|
285
|
+
if (theme.components.datePicker?.haptic) (0, _index2.triggerHaptic)('impactLight');
|
|
242
286
|
if (viewMode === 'years') {
|
|
243
287
|
setAnchor(prev => new Date(prev.getFullYear() + GRID_SIZE, prev.getMonth(), 1));
|
|
244
288
|
} else {
|
|
245
289
|
setAnchor(prev => new Date(prev.getFullYear() + GRID_SIZE * DECADE_SPAN, prev.getMonth(), 1));
|
|
246
290
|
}
|
|
247
|
-
}, [animateMonthChange, viewMode]);
|
|
291
|
+
}, [animateMonthChange, viewMode, theme.components.datePicker]);
|
|
248
292
|
|
|
249
|
-
// View-mode transition: fade + scale
|
|
293
|
+
// View-mode transition: fade + scale, native driver.
|
|
250
294
|
const animateViewTransition = (0, _react.useCallback)(() => {
|
|
295
|
+
const dur = theme.components.datePicker?.viewTransitionDuration ?? theme.motion.duration.normal ?? 200;
|
|
251
296
|
(0, _index.setNativeValue)(viewFade, 0);
|
|
252
297
|
(0, _index.setNativeValue)(viewScale, 0.9);
|
|
253
298
|
_reactNative.Animated.parallel([_reactNative.Animated.timing(viewFade, {
|
|
254
299
|
toValue: 1,
|
|
255
|
-
duration:
|
|
300
|
+
duration: dur,
|
|
256
301
|
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
257
302
|
useNativeDriver: true
|
|
258
303
|
}), _reactNative.Animated.timing(viewScale, {
|
|
259
304
|
toValue: 1,
|
|
260
|
-
duration:
|
|
305
|
+
duration: dur,
|
|
261
306
|
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
262
307
|
useNativeDriver: true
|
|
263
308
|
})]).start();
|
|
264
|
-
}, [viewFade, viewScale]);
|
|
309
|
+
}, [viewFade, viewScale, theme.components.datePicker, theme.motion.duration.normal]);
|
|
265
310
|
const cycleViewMode = (0, _react.useCallback)(() => {
|
|
266
|
-
(0, _index2.triggerHaptic)('selection');
|
|
311
|
+
if (theme.components.datePicker?.haptic) (0, _index2.triggerHaptic)('selection');
|
|
312
|
+
const pressDur = theme.components.datePicker?.headerPressDuration ?? 80;
|
|
313
|
+
const releaseDur = theme.components.datePicker?.headerReleaseDuration ?? 100;
|
|
267
314
|
_reactNative.Animated.sequence([_reactNative.Animated.timing(headerScale, {
|
|
268
315
|
toValue: 0.96,
|
|
269
|
-
duration:
|
|
316
|
+
duration: pressDur,
|
|
270
317
|
useNativeDriver: true
|
|
271
318
|
}), _reactNative.Animated.timing(headerScale, {
|
|
272
319
|
toValue: 1,
|
|
273
|
-
duration:
|
|
320
|
+
duration: releaseDur,
|
|
274
321
|
useNativeDriver: true
|
|
275
322
|
})]).start();
|
|
276
323
|
setViewMode(prev => {
|
|
@@ -279,23 +326,23 @@ const DatePicker = props => {
|
|
|
279
326
|
return 'years';
|
|
280
327
|
});
|
|
281
328
|
animateViewTransition();
|
|
282
|
-
}, [animateViewTransition, headerScale]);
|
|
329
|
+
}, [animateViewTransition, headerScale, theme.components.datePicker]);
|
|
283
330
|
const pickYear = (0, _react.useCallback)(year => {
|
|
284
|
-
(0, _index2.triggerHaptic)('selection');
|
|
331
|
+
if (theme.components.datePicker?.haptic) (0, _index2.triggerHaptic)('selection');
|
|
285
332
|
setAnchor(prev => new Date(year, prev.getMonth(), 1));
|
|
286
333
|
setViewMode('days');
|
|
287
334
|
animateViewTransition();
|
|
288
|
-
}, [animateViewTransition]);
|
|
335
|
+
}, [animateViewTransition, theme.components.datePicker]);
|
|
289
336
|
const pickDecade = (0, _react.useCallback)(decadeStart => {
|
|
290
|
-
(0, _index2.triggerHaptic)('selection');
|
|
337
|
+
if (theme.components.datePicker?.haptic) (0, _index2.triggerHaptic)('selection');
|
|
291
338
|
// Anchor mid-decade so the year grid centers nicely on this decade.
|
|
292
339
|
setAnchor(prev => new Date(decadeStart + 4, prev.getMonth(), 1));
|
|
293
340
|
setViewMode('years');
|
|
294
341
|
animateViewTransition();
|
|
295
|
-
}, [animateViewTransition]);
|
|
342
|
+
}, [animateViewTransition, theme.components.datePicker]);
|
|
296
343
|
const pressDay = (0, _react.useCallback)(cell => {
|
|
297
344
|
if (isDisabled(cell.date)) return;
|
|
298
|
-
(0, _index2.triggerHaptic)('selection');
|
|
345
|
+
if (theme.components.datePicker?.haptic) (0, _index2.triggerHaptic)('selection');
|
|
299
346
|
setPendingDate(cell.date);
|
|
300
347
|
if (!cell.inMonth) {
|
|
301
348
|
setAnchor(new Date(cell.date.getFullYear(), cell.date.getMonth(), 1));
|
|
@@ -308,42 +355,50 @@ const DatePicker = props => {
|
|
|
308
355
|
mass: theme.motion.spring.bouncy.mass,
|
|
309
356
|
useNativeDriver: true
|
|
310
357
|
}).start();
|
|
311
|
-
}, [isDisabled, selectScale, theme.motion.spring.bouncy]);
|
|
358
|
+
}, [isDisabled, selectScale, theme.motion.spring.bouncy, theme.components.datePicker]);
|
|
359
|
+
const finalizeClose = (0, _react.useCallback)(() => {
|
|
360
|
+
if (isControlled) {
|
|
361
|
+
onClose?.();
|
|
362
|
+
} else {
|
|
363
|
+
setInternalOpen(false);
|
|
364
|
+
onClose?.();
|
|
365
|
+
}
|
|
366
|
+
}, [isControlled, onClose]);
|
|
312
367
|
const handleClose = (0, _react.useCallback)(() => {
|
|
313
368
|
if (mode !== 'modal') {
|
|
314
|
-
|
|
369
|
+
finalizeClose();
|
|
315
370
|
return;
|
|
316
371
|
}
|
|
317
372
|
_reactNative.Animated.parallel([_reactNative.Animated.timing(backdrop, {
|
|
318
373
|
toValue: 0,
|
|
319
374
|
duration: theme.motion.duration.fast,
|
|
320
375
|
easing: _reactNative.Easing.in(_reactNative.Easing.cubic),
|
|
321
|
-
useNativeDriver:
|
|
376
|
+
useNativeDriver: false
|
|
322
377
|
}), _reactNative.Animated.timing(sheet, {
|
|
323
378
|
toValue: 0,
|
|
324
379
|
duration: theme.motion.duration.fast,
|
|
325
380
|
easing: _reactNative.Easing.in(_reactNative.Easing.cubic),
|
|
326
381
|
useNativeDriver: true
|
|
327
382
|
})]).start(() => {
|
|
328
|
-
|
|
383
|
+
finalizeClose();
|
|
329
384
|
});
|
|
330
|
-
}, [backdrop, mode,
|
|
385
|
+
}, [backdrop, mode, finalizeClose, sheet, theme.motion.duration.fast]);
|
|
331
386
|
const handleCancel = (0, _react.useCallback)(() => {
|
|
332
|
-
(0, _index2.triggerHaptic)('selection');
|
|
387
|
+
if (theme.components.datePicker?.haptic) (0, _index2.triggerHaptic)('selection');
|
|
333
388
|
handleClose();
|
|
334
|
-
}, [handleClose]);
|
|
389
|
+
}, [handleClose, theme.components.datePicker]);
|
|
335
390
|
const handleConfirm = (0, _react.useCallback)(() => {
|
|
336
391
|
if (!pendingDate) return;
|
|
337
|
-
(0, _index2.triggerHaptic)('notificationSuccess');
|
|
338
|
-
onSelect(pendingDate);
|
|
392
|
+
if (theme.components.datePicker?.haptic) (0, _index2.triggerHaptic)('notificationSuccess');
|
|
393
|
+
onSelect?.(pendingDate);
|
|
339
394
|
handleClose();
|
|
340
|
-
}, [handleClose, onSelect, pendingDate]);
|
|
395
|
+
}, [handleClose, onSelect, pendingDate, theme.components.datePicker]);
|
|
341
396
|
const sheetTranslate = sheet.interpolate({
|
|
342
397
|
inputRange: [0, 1],
|
|
343
398
|
outputRange: [320, 0]
|
|
344
399
|
});
|
|
345
400
|
const calendar = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
346
|
-
style: [styles.card, style],
|
|
401
|
+
style: [styles.card, style, containerStyle],
|
|
347
402
|
accessibilityRole: mode === 'modal' ? undefined : 'none',
|
|
348
403
|
accessible: false,
|
|
349
404
|
testID: testID,
|
|
@@ -360,7 +415,7 @@ const DatePicker = props => {
|
|
|
360
415
|
onPress: goPrev,
|
|
361
416
|
style: ({
|
|
362
417
|
pressed
|
|
363
|
-
}) => [styles.navBtn, pressed && styles.navBtnPressed],
|
|
418
|
+
}) => [styles.navBtn, pressed && styles.navBtnPressed, navButtonStyle],
|
|
364
419
|
accessibilityRole: "button",
|
|
365
420
|
accessibilityLabel: viewMode === 'days' ? 'Previous month' : viewMode === 'years' ? 'Previous years' : 'Previous decades',
|
|
366
421
|
hitSlop: 8,
|
|
@@ -370,7 +425,7 @@ const DatePicker = props => {
|
|
|
370
425
|
})
|
|
371
426
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
372
427
|
onPress: cycleViewMode,
|
|
373
|
-
style: styles.headerLabelWrap,
|
|
428
|
+
style: [styles.headerLabelWrap, headerLabelStyle],
|
|
374
429
|
accessibilityRole: "button",
|
|
375
430
|
accessibilityLabel: viewMode === 'days' ? `${headerLabel}, switch to year selection` : viewMode === 'years' ? `${headerLabel}, switch to decade selection` : `${headerLabel}, switch to year selection`,
|
|
376
431
|
hitSlop: 8,
|
|
@@ -404,7 +459,7 @@ const DatePicker = props => {
|
|
|
404
459
|
onPress: goNext,
|
|
405
460
|
style: ({
|
|
406
461
|
pressed
|
|
407
|
-
}) => [styles.navBtn, pressed && styles.navBtnPressed],
|
|
462
|
+
}) => [styles.navBtn, pressed && styles.navBtnPressed, navButtonStyle],
|
|
408
463
|
accessibilityRole: "button",
|
|
409
464
|
accessibilityLabel: viewMode === 'days' ? 'Next month' : viewMode === 'years' ? 'Next years' : 'Next decades',
|
|
410
465
|
hitSlop: 8,
|
|
@@ -578,7 +633,7 @@ const DatePicker = props => {
|
|
|
578
633
|
onPress: handleCancel,
|
|
579
634
|
style: ({
|
|
580
635
|
pressed
|
|
581
|
-
}) => [styles.footerBtn, styles.footerCancel, pressed && styles.footerBtnPressed],
|
|
636
|
+
}) => [styles.footerBtn, styles.footerCancel, pressed && styles.footerBtnPressed, footerButtonStyle],
|
|
582
637
|
accessibilityRole: "button",
|
|
583
638
|
accessibilityLabel: cancelLabel,
|
|
584
639
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
@@ -597,7 +652,7 @@ const DatePicker = props => {
|
|
|
597
652
|
opacity: !pendingDate ? 0.5 : 1
|
|
598
653
|
}, pressed && {
|
|
599
654
|
backgroundColor: theme.colors.primaryHover
|
|
600
|
-
}],
|
|
655
|
+
}, footerButtonStyle],
|
|
601
656
|
accessibilityRole: "button",
|
|
602
657
|
accessibilityLabel: confirmLabel,
|
|
603
658
|
accessibilityState: {
|
|
@@ -612,38 +667,92 @@ const DatePicker = props => {
|
|
|
612
667
|
})]
|
|
613
668
|
})]
|
|
614
669
|
});
|
|
670
|
+
const formatTriggerValue = formatValue ?? (d => d.toLocaleDateString());
|
|
671
|
+
const triggerValueText = value ? formatTriggerValue(value) : undefined;
|
|
672
|
+
const showTrigger = !isControlled;
|
|
615
673
|
if (mode === 'inline') {
|
|
616
|
-
if (!
|
|
674
|
+
if (!open && !showTrigger) return null;
|
|
675
|
+
if (showTrigger) {
|
|
676
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
677
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_index3.PickerTrigger, {
|
|
678
|
+
label: label,
|
|
679
|
+
value: triggerValueText,
|
|
680
|
+
placeholder: placeholder,
|
|
681
|
+
helperText: helperText,
|
|
682
|
+
error: error,
|
|
683
|
+
required: required,
|
|
684
|
+
disabled: disabled,
|
|
685
|
+
size: size,
|
|
686
|
+
variant: variant,
|
|
687
|
+
clearable: clearable,
|
|
688
|
+
onClear: onClear,
|
|
689
|
+
onPress: () => setInternalOpen(true),
|
|
690
|
+
triggerStyle: triggerStyle
|
|
691
|
+
}), open ? calendar : null]
|
|
692
|
+
});
|
|
693
|
+
}
|
|
617
694
|
return calendar;
|
|
618
695
|
}
|
|
619
|
-
|
|
620
|
-
visible:
|
|
696
|
+
const modalNode = /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Modal, {
|
|
697
|
+
visible: open,
|
|
621
698
|
transparent: true,
|
|
622
|
-
statusBarTranslucent: true
|
|
699
|
+
statusBarTranslucent: true
|
|
700
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
701
|
+
// @ts-ignore — Android-only RN 0.71+; iOS ignores it.
|
|
702
|
+
,
|
|
703
|
+
navigationBarTranslucent: true,
|
|
623
704
|
animationType: "none",
|
|
624
705
|
onRequestClose: handleClose,
|
|
625
|
-
children:
|
|
706
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View
|
|
707
|
+
// Backdrop wraps the sheet (not sibling) — on Fabric a sibling
|
|
708
|
+
// backdrop is occluded by the sheet wrapper regardless of order.
|
|
709
|
+
// collapsable={false} prevents flattening; plain View + pre-baked
|
|
710
|
+
// rgba colour avoids the Fabric animated-opacity-on-coloured-View bug.
|
|
711
|
+
, {
|
|
712
|
+
collapsable: false,
|
|
626
713
|
style: [styles.backdrop, {
|
|
627
|
-
opacity: backdrop,
|
|
628
714
|
backgroundColor: theme.colors.background.overlay
|
|
629
715
|
}],
|
|
630
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
716
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
631
717
|
style: _reactNative.StyleSheet.absoluteFill,
|
|
632
718
|
onPress: handleClose,
|
|
633
719
|
accessibilityLabel: "Dismiss"
|
|
634
|
-
})
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
720
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
|
|
721
|
+
style: [styles.sheetWrap, {
|
|
722
|
+
// Push the sheet up by the system nav-bar inset so its content
|
|
723
|
+
// never lands behind Android gesture/3-button chrome.
|
|
724
|
+
paddingBottom: insets.bottom + theme.spacing.lg,
|
|
725
|
+
opacity: sheet,
|
|
726
|
+
transform: [{
|
|
727
|
+
translateY: sheetTranslate
|
|
728
|
+
}]
|
|
729
|
+
}],
|
|
730
|
+
accessibilityViewIsModal: true,
|
|
731
|
+
accessibilityRole: "none",
|
|
732
|
+
children: calendar
|
|
733
|
+
})]
|
|
734
|
+
})
|
|
646
735
|
});
|
|
736
|
+
if (showTrigger) {
|
|
737
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
738
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_index3.PickerTrigger, {
|
|
739
|
+
label: label,
|
|
740
|
+
value: triggerValueText,
|
|
741
|
+
placeholder: placeholder,
|
|
742
|
+
helperText: helperText,
|
|
743
|
+
error: error,
|
|
744
|
+
required: required,
|
|
745
|
+
disabled: disabled,
|
|
746
|
+
size: size,
|
|
747
|
+
variant: variant,
|
|
748
|
+
clearable: clearable,
|
|
749
|
+
onClear: onClear,
|
|
750
|
+
onPress: () => setInternalOpen(true),
|
|
751
|
+
triggerStyle: triggerStyle
|
|
752
|
+
}), modalNode]
|
|
753
|
+
});
|
|
754
|
+
}
|
|
755
|
+
return modalNode;
|
|
647
756
|
};
|
|
648
757
|
exports.DatePicker = DatePicker;
|
|
649
758
|
const buildStyles = theme => {
|
|
@@ -685,8 +794,8 @@ const buildStyles = theme => {
|
|
|
685
794
|
marginBottom: theme.spacing.md
|
|
686
795
|
},
|
|
687
796
|
navBtn: {
|
|
688
|
-
width: 36,
|
|
689
|
-
height: 36,
|
|
797
|
+
width: theme.components.datePicker?.navButtonSize ?? 36,
|
|
798
|
+
height: theme.components.datePicker?.navButtonSize ?? 36,
|
|
690
799
|
borderRadius: theme.radius.full,
|
|
691
800
|
alignItems: 'center',
|
|
692
801
|
justifyContent: 'center',
|
|
@@ -696,8 +805,8 @@ const buildStyles = theme => {
|
|
|
696
805
|
backgroundColor: theme.colors.surface.pressed
|
|
697
806
|
},
|
|
698
807
|
navText: {
|
|
699
|
-
fontSize: 22,
|
|
700
|
-
lineHeight: 24,
|
|
808
|
+
fontSize: theme.components.datePicker?.navTextFontSize ?? 22,
|
|
809
|
+
lineHeight: theme.components.datePicker?.navTextLineHeight ?? 24,
|
|
701
810
|
color: theme.colors.text.primary,
|
|
702
811
|
fontWeight: theme.typography.fontWeight.semibold
|
|
703
812
|
},
|
|
@@ -746,12 +855,12 @@ const buildStyles = theme => {
|
|
|
746
855
|
aspectRatio: 1,
|
|
747
856
|
alignItems: 'center',
|
|
748
857
|
justifyContent: 'center',
|
|
749
|
-
padding: 2
|
|
858
|
+
padding: theme.components.datePicker?.dayCellPadding ?? 2
|
|
750
859
|
},
|
|
751
860
|
dayInner: {
|
|
752
861
|
width: '100%',
|
|
753
862
|
height: '100%',
|
|
754
|
-
borderRadius: theme.radius.full,
|
|
863
|
+
borderRadius: theme.components.datePicker?.dayInnerBorderRadius ?? theme.radius.full,
|
|
755
864
|
alignItems: 'center',
|
|
756
865
|
justifyContent: 'center'
|
|
757
866
|
},
|
|
@@ -767,12 +876,12 @@ const buildStyles = theme => {
|
|
|
767
876
|
aspectRatio: 1.6,
|
|
768
877
|
alignItems: 'center',
|
|
769
878
|
justifyContent: 'center',
|
|
770
|
-
padding: 4
|
|
879
|
+
padding: theme.components.datePicker?.yearCellPadding ?? 4
|
|
771
880
|
},
|
|
772
881
|
yearInner: {
|
|
773
882
|
width: '100%',
|
|
774
883
|
height: '100%',
|
|
775
|
-
borderRadius: theme.radius.lg,
|
|
884
|
+
borderRadius: theme.components.datePicker?.yearInnerBorderRadius ?? theme.radius.lg,
|
|
776
885
|
alignItems: 'center',
|
|
777
886
|
justifyContent: 'center'
|
|
778
887
|
},
|
|
@@ -783,7 +892,7 @@ const buildStyles = theme => {
|
|
|
783
892
|
decadeRangeText: {
|
|
784
893
|
fontSize: theme.typography.fontSize.xs,
|
|
785
894
|
fontWeight: theme.typography.fontWeight.medium,
|
|
786
|
-
marginTop: 2
|
|
895
|
+
marginTop: theme.components.datePicker?.decadeRangeMarginTop ?? 2
|
|
787
896
|
},
|
|
788
897
|
footer: {
|
|
789
898
|
flexDirection: 'row',
|
|
@@ -796,7 +905,7 @@ const buildStyles = theme => {
|
|
|
796
905
|
paddingHorizontal: theme.spacing.lg,
|
|
797
906
|
paddingVertical: theme.spacing.sm,
|
|
798
907
|
borderRadius: theme.radius.md,
|
|
799
|
-
minHeight: 40,
|
|
908
|
+
minHeight: theme.components.datePicker?.footerButtonMinHeight ?? 40,
|
|
800
909
|
alignItems: 'center',
|
|
801
910
|
justifyContent: 'center'
|
|
802
911
|
},
|