@impulse-ui-native/datetime 2.0.0 → 2.1.0
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/LICENSE +21 -0
- package/README.md +37 -0
- package/dist/index.d.mts +6 -5
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +13 -13
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ImpulseUI Native contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# @impulse-ui-native/datetime
|
|
2
|
+
|
|
3
|
+
Token-driven date, time, date-time, and range controls backed by the Impulse UI Native flyout layer system.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
pnpm add @impulse-ui-native/datetime
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Render the controls inside `ThemeProvider` and mount one `LayerCenter` in the application. The native prerequisites are the same as the flyout package.
|
|
12
|
+
|
|
13
|
+
## Main exports
|
|
14
|
+
|
|
15
|
+
- `DatePicker` selects a calendar date.
|
|
16
|
+
- `DateRangePicker` selects a start and end date.
|
|
17
|
+
- `DatetimePicker` selects a date with time.
|
|
18
|
+
- `DatetimeRangePicker` selects a date-time range.
|
|
19
|
+
- `TimePicker` selects hours, minutes, and seconds.
|
|
20
|
+
- Types include `TimePickerValue`, `TimeRange`, `TimeFormat`, `QuickDateOption`, and the date-time picker prop contracts.
|
|
21
|
+
- Calendar and date utilities cover comparisons, selection state, range construction, calendar matrices, formatting, and date arithmetic.
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import { DatePicker } from "@impulse-ui-native/datetime";
|
|
27
|
+
|
|
28
|
+
<DatePicker
|
|
29
|
+
label="Start date"
|
|
30
|
+
value={date}
|
|
31
|
+
onChange={setDate}
|
|
32
|
+
clearable
|
|
33
|
+
quickDateOptions={[{ label: "Today", value: new Date() }]}
|
|
34
|
+
/>;
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
All picker controls support the shared control props for labels, errors, sizes, variants, placeholders, and addons. Date and range controls support controlled `value` and uncontrolled `defaultValue` modes.
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
3
|
import { FlyoutProps } from '@impulse-ui-native/flyout';
|
|
3
4
|
import { ControlComponentProps, ControlComponentCommonProps, PressableCoreProps } from '@impulse-ui-native/primitives';
|
|
4
5
|
|
|
@@ -54,20 +55,20 @@ interface DatetimeRangePickerProps extends DatetimePickerCommonProps {
|
|
|
54
55
|
quickDateOptions?: QuickDateOption<TimeRange>[];
|
|
55
56
|
}
|
|
56
57
|
|
|
57
|
-
declare const DatePicker: react.
|
|
58
|
+
declare const DatePicker: react.MemoExoticComponent<(props: DatetimePickerProps) => react_jsx_runtime.JSX.Element>;
|
|
58
59
|
|
|
59
|
-
declare const DateRangePicker: react.
|
|
60
|
+
declare const DateRangePicker: react.MemoExoticComponent<(props: DatetimeRangePickerProps) => react_jsx_runtime.JSX.Element>;
|
|
60
61
|
|
|
61
|
-
declare const DatetimePicker: react.
|
|
62
|
+
declare const DatetimePicker: react.MemoExoticComponent<(props: DatetimePickerProps) => react_jsx_runtime.JSX.Element>;
|
|
62
63
|
|
|
63
|
-
declare const DatetimeRangePicker: react.
|
|
64
|
+
declare const DatetimeRangePicker: react.MemoExoticComponent<(props: DatetimeRangePickerProps) => react_jsx_runtime.JSX.Element>;
|
|
64
65
|
|
|
65
66
|
interface TimePickerProps extends DatetimePickerCommonProps {
|
|
66
67
|
value?: TimePickerValue | null;
|
|
67
68
|
defaultValue?: TimePickerValue | null;
|
|
68
69
|
onChange?: (value: TimePickerValue | null) => void;
|
|
69
70
|
}
|
|
70
|
-
declare const TimePicker: react.
|
|
71
|
+
declare const TimePicker: react.MemoExoticComponent<(props: TimePickerProps) => react_jsx_runtime.JSX.Element>;
|
|
71
72
|
|
|
72
73
|
declare function getMonthNames(locale?: string, format?: "long" | "short" | "narrow"): string[];
|
|
73
74
|
declare function getDayNames(locale?: string, format?: "long" | "short" | "narrow"): string[];
|
package/dist/index.js
CHANGED
|
@@ -517,7 +517,7 @@ function useDatetimeRangePicker({
|
|
|
517
517
|
|
|
518
518
|
// src/components/common/date-control.tsx
|
|
519
519
|
import { memo } from "react";
|
|
520
|
-
import { CalendarDotsIcon } from "@impulse-ui-native/icon";
|
|
520
|
+
import { CalendarDotsIcon } from "@impulse-ui-native/icon/icons/calendar-dots";
|
|
521
521
|
import { Control, Pressable } from "@impulse-ui-native/primitives";
|
|
522
522
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
523
523
|
var DateControl = memo(function DateControl2(props) {
|
|
@@ -738,7 +738,7 @@ var QuickDateOptions = memo5(function QuickDateOptions2(props) {
|
|
|
738
738
|
|
|
739
739
|
// src/components/common/visible-date-select.tsx
|
|
740
740
|
import { memo as memo6, useCallback as useCallback4, useMemo as useMemo3 } from "react";
|
|
741
|
-
import { CalendarDotsIcon as CalendarDotsIcon2 } from "@impulse-ui-native/icon";
|
|
741
|
+
import { CalendarDotsIcon as CalendarDotsIcon2 } from "@impulse-ui-native/icon/icons/calendar-dots";
|
|
742
742
|
import { View as View4 } from "@impulse-ui-native/primitives";
|
|
743
743
|
import { Select } from "@impulse-ui-native/select";
|
|
744
744
|
import { useComponentsTokens as useComponentsTokens4 } from "@impulse-ui-native/theme";
|
|
@@ -976,7 +976,7 @@ import { useComponentsTokens as useComponentsTokens8 } from "@impulse-ui-native/
|
|
|
976
976
|
// src/components/time/time-picker.tsx
|
|
977
977
|
import { memo as memo12, useCallback as useCallback7, useEffect as useEffect4, useId as useId3, useState as useState3 } from "react";
|
|
978
978
|
import { useControllableState as useControllableState3, useIsOpen as useIsOpen3 } from "@impulse-ui-native/core";
|
|
979
|
-
import { ClockIcon } from "@impulse-ui-native/icon";
|
|
979
|
+
import { ClockIcon } from "@impulse-ui-native/icon/icons/clock";
|
|
980
980
|
import { Control as Control4, Pressable as Pressable5 } from "@impulse-ui-native/primitives";
|
|
981
981
|
|
|
982
982
|
// src/components/time/time-picker.flyout.tsx
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/date/date-picker.tsx","../src/hooks/use-datetime-picker.hook.ts","../src/utils/datetime.utils.ts","../src/utils/calendar-day.utils.ts","../src/hooks/use-datetime-range-picker.hook.ts","../src/components/common/date-control.tsx","../src/components/date/date-picker.flyout.tsx","../src/components/common/calendar.tsx","../src/components/common/calendar-day.tsx","../src/components/common/datetime-picker-flyout-actions.tsx","../src/components/common/quick-date-options.tsx","../src/components/common/visible-date-select.tsx","../src/components/date/date-range-picker.tsx","../src/components/datetime/datetime-picker.tsx","../src/components/datetime/datetime-picker.flyout.tsx","../src/components/time/time-picker.tsx","../src/components/time/time-picker.flyout.tsx","../src/components/time/picker-column.tsx","../src/components/datetime/datetime-range-picker.tsx","../src/components/datetime/datetime-range-picker.flyout.tsx"],"sourcesContent":["import { memo } from \"react\";\r\n\r\nimport { Control } from \"@impulse-ui-native/primitives\";\r\n\r\nimport { useDatetimePicker } from \"../../hooks\";\r\nimport { DatetimePickerProps } from \"../../types\";\r\nimport { DateControl } from \"../common/date-control\";\r\nimport { DatePickerFlyout } from \"./date-picker.flyout\";\r\n\r\nexport const DatePicker = memo(function DatePicker(props: DatetimePickerProps) {\r\n const {\r\n value,\r\n defaultValue,\r\n clearable,\r\n onChange,\r\n placeholder,\r\n quickDateOptions,\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n id,\r\n isOpen,\r\n visible,\r\n tempDate,\r\n selected,\r\n setVisible,\r\n close,\r\n onPressOpen,\r\n onPressApply,\r\n onPressCancel,\r\n onPressCalendarDay,\r\n onPressClear,\r\n onPressQuickDateOption,\r\n syncState,\r\n } = useDatetimePicker({ value, defaultValue, onChange });\r\n\r\n return (\r\n <DateControl {...rest} onPress={onPressOpen}>\r\n {selected === null ? (\r\n <Control.Placeholder>{placeholder}</Control.Placeholder>\r\n ) : null}\r\n\r\n {selected !== null ? (\r\n <Control.Value>{selected.toDateString()}</Control.Value>\r\n ) : null}\r\n\r\n <DatePickerFlyout\r\n id={id}\r\n open={isOpen}\r\n title=\"Date\"\r\n visible={visible}\r\n value={tempDate}\r\n clearable={clearable}\r\n quickDateOptions={quickDateOptions}\r\n onClose={close}\r\n onCloseFinished={syncState}\r\n onPressQuickDateOption={onPressQuickDateOption}\r\n onChangeVisible={setVisible}\r\n onPressCalendarDay={onPressCalendarDay}\r\n onPressApply={onPressApply}\r\n onPressCancel={onPressCancel}\r\n onPressClear={onPressClear}\r\n />\r\n </DateControl>\r\n );\r\n});\r\n","import { useCallback, useEffect, useId, useState } from \"react\";\r\n\r\nimport { useControllableState, useIsOpen } from \"@impulse-ui-native/core\";\r\n\r\nimport { TimePickerValue, TimeRange } from \"../types\";\r\nimport { isDateInMonth, isSameDay } from \"../utils\";\r\n\r\ninterface UseDatetimePickerStateOptions {\r\n value?: Date | null;\r\n defaultValue?: Date | null;\r\n onChange?: (value: Date | null) => void;\r\n}\r\n\r\nexport function useDatetimePicker({\r\n value,\r\n defaultValue,\r\n onChange,\r\n}: UseDatetimePickerStateOptions) {\r\n const [visible, setVisible] = useState<Date>(\r\n value ?? defaultValue ?? new Date(),\r\n );\r\n\r\n const [tempDate, setTempDate] = useState<Date | null>(\r\n value ?? defaultValue ?? null,\r\n );\r\n\r\n const [selected, setSelected] = useControllableState<Date | null>({\r\n prop: value,\r\n defaultProp: defaultValue ?? null,\r\n onChange,\r\n });\r\n\r\n const id = useId();\r\n const { isOpen, isClosed, open, close } = useIsOpen();\r\n\r\n const onPressOpen = useCallback(() => {\r\n setTempDate(selected);\r\n open();\r\n }, [open, selected]);\r\n\r\n const syncState = useCallback(() => {\r\n setTempDate(selected);\r\n\r\n if (selected) {\r\n setVisible(selected);\r\n }\r\n }, [selected]);\r\n\r\n const onPressApply = useCallback(() => {\r\n setSelected(tempDate);\r\n close();\r\n }, [close, tempDate]);\r\n\r\n const onPressCancel = useCallback(() => {\r\n close();\r\n }, [close]);\r\n\r\n const onPressCalendarDay = useCallback((date: Date) => {\r\n setTempDate((prev) => {\r\n if (!prev) {\r\n return date;\r\n }\r\n\r\n if (isSameDay(date, prev)) {\r\n return null;\r\n }\r\n\r\n const nextDate = new Date(date);\r\n\r\n nextDate.setHours(prev.getHours());\r\n nextDate.setMinutes(prev.getMinutes());\r\n nextDate.setSeconds(prev.getSeconds());\r\n nextDate.setMilliseconds(prev.getMilliseconds());\r\n\r\n return nextDate;\r\n });\r\n }, []);\r\n\r\n const onChangeTime = useCallback(\r\n (time: TimePickerValue | null) => {\r\n setTempDate((prev) => {\r\n const nextDate = new Date(prev ?? visible);\r\n\r\n nextDate.setHours(time?.hours ?? 0);\r\n nextDate.setMinutes(time?.minutes ?? 0);\r\n nextDate.setSeconds(time?.seconds ?? 0);\r\n nextDate.setMilliseconds(0);\r\n\r\n return nextDate;\r\n });\r\n },\r\n [visible],\r\n );\r\n\r\n const onPressClear = useCallback(() => {\r\n setTempDate(null);\r\n }, []);\r\n\r\n const onPressQuickDateOption = useCallback(\r\n (optionValue: Date | TimeRange) => {\r\n if (!(optionValue instanceof Date)) {\r\n return;\r\n }\r\n\r\n setTempDate(optionValue);\r\n\r\n if (!isDateInMonth(optionValue, visible)) {\r\n setVisible(optionValue);\r\n }\r\n },\r\n [visible],\r\n );\r\n\r\n useEffect(() => {\r\n if (!isOpen && isClosed) {\r\n setTempDate(selected);\r\n }\r\n }, [isOpen, selected, isClosed]);\r\n\r\n return {\r\n id,\r\n isOpen,\r\n visible,\r\n tempDate,\r\n selected,\r\n setVisible,\r\n setTempDate,\r\n setSelected,\r\n open,\r\n close,\r\n onPressOpen,\r\n onPressApply,\r\n onPressCancel,\r\n onPressCalendarDay,\r\n onChangeTime,\r\n onPressClear,\r\n onPressQuickDateOption,\r\n syncState,\r\n };\r\n}\r\n","import { TimePickerValue, TimeRange } from \"../types\";\r\n\r\nexport function getMonthNames(\r\n locale = \"en-US\",\r\n format: \"long\" | \"short\" | \"narrow\" = \"long\",\r\n) {\r\n return Array.from({ length: 12 }, (_, monthIndex) =>\r\n new Intl.DateTimeFormat(locale, {\r\n month: format,\r\n }).format(new Date(2026, monthIndex, 1)),\r\n );\r\n}\r\n\r\nexport function getDayNames(\r\n locale = \"en-US\",\r\n format: \"long\" | \"short\" | \"narrow\" = \"long\",\r\n) {\r\n const formatter = new Intl.DateTimeFormat(locale, {\r\n weekday: format,\r\n });\r\n\r\n const monday = new Date(2024, 0, 1);\r\n\r\n return Array.from({ length: 7 }, (_, index) => {\r\n const date = new Date(monday);\r\n\r\n date.setDate(monday.getDate() + index);\r\n\r\n return formatter.format(date);\r\n });\r\n}\r\n\r\nexport function getYears() {\r\n const start = new Date().getFullYear();\r\n let current = start;\r\n\r\n const years = [];\r\n\r\n while (current >= start - 150) {\r\n years.push(current--);\r\n }\r\n\r\n return years;\r\n}\r\n\r\nexport function getMonthCalendarMatrix(year: number, month: number) {\r\n const firstDayOfMonth = new Date(year, month, 1);\r\n const lastDayOfMonth = new Date(year, month + 1, 0);\r\n\r\n const firstDayWeekday = firstDayOfMonth.getDay();\r\n const mondayOffset = firstDayWeekday === 0 ? -6 : 1 - firstDayWeekday;\r\n\r\n const gridStartDate = new Date(firstDayOfMonth);\r\n gridStartDate.setDate(firstDayOfMonth.getDate() + mondayOffset);\r\n\r\n const lastDayWeekday = lastDayOfMonth.getDay();\r\n const sundayOffset = lastDayWeekday === 0 ? 0 : 7 - lastDayWeekday;\r\n\r\n const gridEndDate = new Date(lastDayOfMonth);\r\n gridEndDate.setDate(lastDayOfMonth.getDate() + sundayOffset);\r\n\r\n const weeks: Date[][] = [];\r\n const currentDate = new Date(gridStartDate);\r\n\r\n while (currentDate <= gridEndDate) {\r\n const week: Date[] = [];\r\n\r\n for (let dayIndex = 0; dayIndex < 7; dayIndex += 1) {\r\n week.push(new Date(currentDate));\r\n currentDate.setDate(currentDate.getDate() + 1);\r\n }\r\n\r\n weeks.push(week);\r\n }\r\n\r\n return weeks;\r\n}\r\n\r\nexport function createInfiniteRange(max: number, repeats: number) {\r\n const half = Math.floor(max / 2);\r\n const base = Array.from({ length: max }, (_, i) => i);\r\n\r\n return [\r\n ...base.slice(half),\r\n ...Array(repeats).fill(base).flat(),\r\n ...base.slice(0, half),\r\n ];\r\n}\r\n\r\nexport function getInfiniteRangeInitialIndex(\r\n max: number,\r\n targetValue: number,\r\n repeats: number,\r\n) {\r\n const half = Math.floor(max / 2);\r\n const middleSetIndex = Math.floor(repeats / 2);\r\n\r\n return half + middleSetIndex * max + targetValue;\r\n}\r\n\r\nexport function getClosestIndexByValue(\r\n data: number[],\r\n value: number,\r\n currentIndex: number,\r\n) {\r\n let closestIndex = -1;\r\n let closestDistance = Number.MAX_SAFE_INTEGER;\r\n\r\n for (let index = 0; index < data.length; index += 1) {\r\n if (data[index] !== value) {\r\n continue;\r\n }\r\n\r\n const distance = Math.abs(index - currentIndex);\r\n\r\n if (distance < closestDistance) {\r\n closestDistance = distance;\r\n closestIndex = index;\r\n }\r\n }\r\n\r\n return closestIndex;\r\n}\r\n\r\nexport function formatTimepickerValue(value: TimePickerValue) {\r\n const hours = String(value.hours).padStart(2, \"0\");\r\n const minutes = String(value.minutes).padStart(2, \"0\");\r\n const seconds = String(value.seconds).padStart(2, \"0\");\r\n\r\n return `${hours}:${minutes}:${seconds}`;\r\n}\r\n\r\nexport function applyTime(date: Date, time: TimePickerValue | null) {\r\n const nextDate = new Date(date);\r\n\r\n nextDate.setHours(time?.hours ?? 0);\r\n nextDate.setMinutes(time?.minutes ?? 0);\r\n nextDate.setSeconds(time?.seconds ?? 0);\r\n nextDate.setMilliseconds(0);\r\n\r\n return nextDate;\r\n}\r\n\r\nexport function getInitialVisibleDate(\r\n value?: TimeRange | null,\r\n defaultValue?: TimeRange | null,\r\n) {\r\n return (\r\n value?.start ??\r\n value?.end ??\r\n defaultValue?.start ??\r\n defaultValue?.end ??\r\n new Date()\r\n );\r\n}\r\n\r\nexport function normalizeRange(range: TimeRange | null): TimeRange | null {\r\n if (!range?.start && !range?.end) {\r\n return null;\r\n }\r\n\r\n if (range.start && range.end && range.start > range.end) {\r\n return {\r\n start: range.end,\r\n end: range.start,\r\n };\r\n }\r\n\r\n return range;\r\n}\r\n\r\nexport function endOfDay(date: Date) {\r\n const nextDate = new Date(date);\r\n\r\n nextDate.setHours(23);\r\n nextDate.setMinutes(59);\r\n nextDate.setSeconds(59);\r\n nextDate.setMilliseconds(999);\r\n\r\n return nextDate;\r\n}\r\n\r\nexport function addDays(date: Date, days: number) {\r\n const nextDate = new Date(date);\r\n\r\n nextDate.setDate(nextDate.getDate() + days);\r\n\r\n return nextDate;\r\n}\r\n\r\nexport function startOfWeek(date: Date) {\r\n const nextDate = startOfDay(date);\r\n const day = nextDate.getDay();\r\n const diff = day === 0 ? -6 : 1 - day;\r\n\r\n nextDate.setDate(nextDate.getDate() + diff);\r\n\r\n return nextDate;\r\n}\r\n\r\nexport function endOfWeek(date: Date) {\r\n const nextDate = startOfWeek(date);\r\n\r\n nextDate.setDate(nextDate.getDate() + 6);\r\n nextDate.setHours(23);\r\n nextDate.setMinutes(59);\r\n nextDate.setSeconds(59);\r\n nextDate.setMilliseconds(999);\r\n\r\n return nextDate;\r\n}\r\n\r\nexport function startOfDay(date: Date) {\r\n const nextDate = new Date(date);\r\n\r\n nextDate.setHours(0);\r\n nextDate.setMinutes(0);\r\n nextDate.setSeconds(0);\r\n nextDate.setMilliseconds(0);\r\n\r\n return nextDate;\r\n}\r\n","import { TimeRange } from \"../types\";\r\nimport { startOfDay } from \"./datetime.utils\";\r\n\r\nexport interface CalendarDayState {\r\n isSelected: boolean;\r\n isRangeStart: boolean;\r\n isInRange: boolean;\r\n isRangeEnd: boolean;\r\n isCurrentMonth: boolean;\r\n}\r\n\r\nexport interface GetCalendarDayStateOptions {\r\n date: Date;\r\n visible: Date;\r\n value?: Date | TimeRange | null;\r\n}\r\n\r\nexport function isTimeRange(value: unknown): value is TimeRange {\r\n return (\r\n typeof value === \"object\" &&\r\n value !== null &&\r\n !(value instanceof Date) &&\r\n (\"start\" in value || \"end\" in value)\r\n );\r\n}\r\n\r\nexport function isSameDay(left: Date, right: Date) {\r\n return (\r\n left.getFullYear() === right.getFullYear() &&\r\n left.getMonth() === right.getMonth() &&\r\n left.getDate() === right.getDate()\r\n );\r\n}\r\n\r\nexport function isDateInMonth(date: Date, monthDate: Date) {\r\n return (\r\n date.getFullYear() === monthDate.getFullYear() &&\r\n date.getMonth() === monthDate.getMonth()\r\n );\r\n}\r\n\r\nexport function isBeforeDay(left: Date, right: Date) {\r\n return startOfDay(left).getTime() < startOfDay(right).getTime();\r\n}\r\n\r\nexport function isAfterDay(left: Date, right: Date) {\r\n return startOfDay(left).getTime() > startOfDay(right).getTime();\r\n}\r\n\r\nexport function isRangeStart(date: Date, rangeStart?: Date | null) {\r\n if (!rangeStart) {\r\n return false;\r\n }\r\n\r\n return isSameDay(date, rangeStart);\r\n}\r\n\r\nexport function isRangeEnd(date: Date, rangeEnd?: Date | null) {\r\n if (!rangeEnd) {\r\n return false;\r\n }\r\n\r\n return isSameDay(date, rangeEnd);\r\n}\r\n\r\nexport function isInRange(\r\n date: Date,\r\n rangeStart?: Date | null,\r\n rangeEnd?: Date | null,\r\n) {\r\n if (!rangeStart || !rangeEnd) {\r\n return false;\r\n }\r\n\r\n const currentTime = startOfDay(date).getTime();\r\n const startTime = startOfDay(rangeStart).getTime();\r\n const endTime = startOfDay(rangeEnd).getTime();\r\n\r\n return currentTime > startTime && currentTime < endTime;\r\n}\r\n\r\nexport function isSelected(\r\n date: Date,\r\n selected?: Date | null,\r\n rangeStart?: Date | null,\r\n rangeEnd?: Date | null,\r\n) {\r\n if (selected && isSameDay(date, selected)) {\r\n return true;\r\n }\r\n\r\n if (rangeStart && isSameDay(date, rangeStart)) {\r\n return true;\r\n }\r\n\r\n if (rangeEnd && isSameDay(date, rangeEnd)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport function getCalendarDayState({\r\n date,\r\n visible,\r\n value,\r\n}: GetCalendarDayStateOptions): CalendarDayState {\r\n const selected = value instanceof Date ? value : undefined;\r\n const range = isTimeRange(value) ? value : undefined;\r\n\r\n const rangeStart = range?.start;\r\n const rangeEnd = range?.end;\r\n\r\n return {\r\n isSelected: isSelected(date, selected, rangeStart, rangeEnd),\r\n isRangeStart: isRangeStart(date, rangeStart),\r\n isInRange: isInRange(date, rangeStart, rangeEnd),\r\n isRangeEnd: isRangeEnd(date, rangeEnd),\r\n isCurrentMonth: isDateInMonth(date, visible),\r\n };\r\n}\r\nexport function createCalendarRange(\r\n date: Date,\r\n previousRange?: TimeRange,\r\n): TimeRange | undefined {\r\n if (!previousRange?.start || previousRange?.end) {\r\n return {\r\n start: date,\r\n };\r\n }\r\n\r\n if (isSameDay(date, previousRange.start)) {\r\n return undefined;\r\n }\r\n\r\n if (isBeforeDay(date, previousRange.start)) {\r\n return {\r\n start: date,\r\n end: previousRange.start,\r\n };\r\n }\r\n\r\n return {\r\n start: previousRange.start,\r\n end: date,\r\n };\r\n}\r\n\r\nexport function getQuickOptionKey(value: Date | TimeRange) {\r\n if (\"start\" in value && \"end\" in value) {\r\n return `${value.start?.toISOString()}-${value.end?.toISOString()}`;\r\n }\r\n\r\n if (value instanceof Date) {\r\n return value.toISOString();\r\n }\r\n}\r\n\r\nexport function isDateRange(value: unknown): value is TimeRange {\r\n return (\r\n typeof value === \"object\" &&\r\n value !== null &&\r\n !(value instanceof Date) &&\r\n (\"start\" in value || \"end\" in value)\r\n );\r\n}\r\n\r\nexport function getDateKey(date: Date) {\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${year}-${month}-${day}`;\r\n}\r\n","import { useCallback, useEffect, useId, useState } from \"react\";\r\n\r\nimport { useControllableState, useIsOpen } from \"@impulse-ui-native/core\";\r\n\r\nimport { RangeSide, TimePickerValue, TimeRange } from \"../types\";\r\nimport {\r\n applyTime,\r\n endOfDay,\r\n getInitialVisibleDate,\r\n isDateInMonth,\r\n isSameDay,\r\n normalizeRange,\r\n startOfDay,\r\n} from \"../utils\";\r\n\r\ninterface UseDatetimeRangePickerStateOptions {\r\n value?: TimeRange | null;\r\n defaultValue?: TimeRange | null;\r\n onChange?: (value: TimeRange | null) => void;\r\n}\r\n\r\nexport function useDatetimeRangePicker({\r\n value,\r\n defaultValue,\r\n onChange,\r\n}: UseDatetimeRangePickerStateOptions) {\r\n const [visible, setVisible] = useState<Date>(\r\n getInitialVisibleDate(value, defaultValue),\r\n );\r\n\r\n const [tempRange, setTempRange] = useState<TimeRange | null>(\r\n value ?? defaultValue ?? null,\r\n );\r\n\r\n const [selected, setSelected] = useControllableState<TimeRange | null>({\r\n prop: value,\r\n defaultProp: defaultValue ?? null,\r\n onChange,\r\n });\r\n\r\n const id = useId();\r\n const { isOpen, isClosed, open, close } = useIsOpen();\r\n\r\n const onPressOpen = useCallback(() => {\r\n setTempRange(selected);\r\n open();\r\n }, [open, selected]);\r\n\r\n const syncState = useCallback(() => {\r\n setTempRange(selected);\r\n\r\n const nextVisible = selected?.start ?? selected?.end;\r\n\r\n if (nextVisible) {\r\n setVisible(nextVisible);\r\n }\r\n }, [selected]);\r\n\r\n const onPressApply = useCallback(() => {\r\n setSelected(normalizeRange(tempRange));\r\n close();\r\n }, [close, tempRange]);\r\n\r\n const onPressCancel = useCallback(() => {\r\n close();\r\n }, [close]);\r\n\r\n const onPressCalendarDay = useCallback((date: Date) => {\r\n setTempRange((prev) => {\r\n const startDate = startOfDay(date);\r\n const endDate = endOfDay(date);\r\n\r\n if (!prev?.start || prev.end) {\r\n return {\r\n start: startDate,\r\n };\r\n }\r\n\r\n if (isSameDay(startDate, prev.start)) {\r\n return null;\r\n }\r\n\r\n if (startDate < prev.start) {\r\n return {\r\n start: startDate,\r\n end: endOfDay(prev.start),\r\n };\r\n }\r\n\r\n return {\r\n start: prev.start,\r\n end: endDate,\r\n };\r\n });\r\n }, []);\r\n\r\n const onChangeStartTime = useCallback(\r\n (time: TimePickerValue | null) => {\r\n setTempRange((prev) => {\r\n const fallbackDate = prev?.start ?? visible;\r\n\r\n return normalizeRange({\r\n start: applyTime(fallbackDate, time),\r\n end: prev?.end,\r\n });\r\n });\r\n },\r\n [visible],\r\n );\r\n\r\n const onChangeEndTime = useCallback(\r\n (time: TimePickerValue | null) => {\r\n setTempRange((prev) => {\r\n const fallbackDate = prev?.end ?? prev?.start ?? visible;\r\n\r\n return normalizeRange({\r\n start: prev?.start,\r\n end: applyTime(fallbackDate, time),\r\n });\r\n });\r\n },\r\n [visible],\r\n );\r\n\r\n const onChangeTime = useCallback(\r\n (side: RangeSide, time: TimePickerValue | null) => {\r\n if (side === \"start\") {\r\n onChangeStartTime(time);\r\n return;\r\n }\r\n\r\n onChangeEndTime(time);\r\n },\r\n [onChangeEndTime, onChangeStartTime],\r\n );\r\n\r\n const onPressClear = useCallback(() => {\r\n setTempRange(null);\r\n }, []);\r\n\r\n const onPressQuickDateOption = useCallback(\r\n (optionValue: Date | TimeRange) => {\r\n if (optionValue instanceof Date) {\r\n const nextDate = startOfDay(optionValue);\r\n\r\n setTempRange({\r\n start: nextDate,\r\n });\r\n\r\n if (!isDateInMonth(nextDate, visible)) {\r\n setVisible(nextDate);\r\n }\r\n\r\n return;\r\n }\r\n\r\n const nextRange = normalizeRange(optionValue);\r\n\r\n setTempRange(nextRange);\r\n\r\n const nextVisible = nextRange?.start ?? nextRange?.end;\r\n\r\n if (nextVisible && !isDateInMonth(nextVisible, visible)) {\r\n setVisible(nextVisible);\r\n }\r\n },\r\n [visible],\r\n );\r\n\r\n useEffect(() => {\r\n if (!isOpen && isClosed) {\r\n setTempRange(selected);\r\n }\r\n }, [isOpen, selected, isClosed]);\r\n\r\n return {\r\n id,\r\n isOpen,\r\n visible,\r\n tempRange,\r\n selected,\r\n setVisible,\r\n setTempRange,\r\n setSelected,\r\n open,\r\n close,\r\n onPressOpen,\r\n onPressApply,\r\n onPressCancel,\r\n onPressCalendarDay,\r\n onChangeTime,\r\n onChangeStartTime,\r\n onChangeEndTime,\r\n onPressClear,\r\n onPressQuickDateOption,\r\n syncState,\r\n };\r\n}\r\n","import { memo, PropsWithChildren } from \"react\";\r\nimport { PressableProps } from \"react-native\";\r\n\r\nimport { CalendarDotsIcon } from \"@impulse-ui-native/icon\";\r\nimport { Control, Pressable } from \"@impulse-ui-native/primitives\";\r\n\r\nimport { DatetimePickerCommonProps } from \"../../types\";\r\n\r\ninterface DateControlProps extends DatetimePickerCommonProps {\r\n onPress: PressableProps[\"onPress\"];\r\n}\r\n\r\nexport const DateControl = memo(function DateControl(\r\n props: PropsWithChildren<DateControlProps>,\r\n) {\r\n const {\r\n size = \"medium\",\r\n variant = \"outlined\",\r\n label,\r\n error,\r\n disabled,\r\n PrefixIcon = CalendarDotsIcon,\r\n Prefix,\r\n onPressPrefix: onPrefixPress,\r\n SuffixIcon,\r\n Suffix,\r\n onPressSuffix: onSuffixPress,\r\n onPress,\r\n children,\r\n } = props;\r\n\r\n return (\r\n <Control.Provider\r\n size={size}\r\n variant={variant}\r\n error={error}\r\n disabled={disabled}\r\n >\r\n <Control.Root>\r\n <Control.Label>{label}</Control.Label>\r\n <Pressable onPress={onPress}>\r\n <Control.Container>\r\n <Control.Addon\r\n icon={PrefixIcon}\r\n Content={Prefix}\r\n onPress={onPrefixPress}\r\n />\r\n {children}\r\n <Control.Addon\r\n icon={SuffixIcon}\r\n Content={Suffix}\r\n onPress={onSuffixPress}\r\n />\r\n </Control.Container>\r\n </Pressable>\r\n <Control.Error />\r\n </Control.Root>\r\n </Control.Provider>\r\n );\r\n});\r\n","import { memo } from \"react\";\r\n\r\nimport { Flyout } from \"@impulse-ui-native/flyout\";\r\nimport { Portal } from \"@impulse-ui-native/portal\";\r\nimport { View } from \"@impulse-ui-native/primitives\";\r\nimport { useComponentsTokens } from \"@impulse-ui-native/theme\";\r\n\r\nimport { DatetimePickerFlyoutCommonProps, TimeRange } from \"../../types\";\r\nimport { Calendar } from \"../common/calendar\";\r\nimport { DatetimePickerFlyoutActions } from \"../common/datetime-picker-flyout-actions\";\r\nimport { QuickDateOptions } from \"../common/quick-date-options\";\r\nimport { VisibleDateSelect } from \"../common/visible-date-select\";\r\n\r\ninterface DatePickerFlyoutProps extends DatetimePickerFlyoutCommonProps {\r\n value: Date | TimeRange | null | undefined;\r\n}\r\n\r\nexport const DatePickerFlyout = memo(function DatePickerFlyout(\r\n props: DatePickerFlyoutProps,\r\n) {\r\n const {\r\n visible,\r\n value,\r\n clearable,\r\n quickDateOptions,\r\n onPressQuickDateOption,\r\n onChangeVisible,\r\n onPressCalendarDay,\r\n onPressClear,\r\n onPressCancel,\r\n onPressApply,\r\n ...rest\r\n } = props;\r\n\r\n const tokens = useComponentsTokens();\r\n const datePickerTokens = tokens.datetimePicker.datePickerFlyout;\r\n\r\n return (\r\n <Portal>\r\n <Flyout {...rest}>\r\n <View gap={datePickerTokens.gap}>\r\n <VisibleDateSelect value={visible} onChange={onChangeVisible} />\r\n\r\n <Calendar\r\n value={value}\r\n visible={visible}\r\n onPress={onPressCalendarDay}\r\n />\r\n\r\n {quickDateOptions && quickDateOptions.length > 0 ? (\r\n <QuickDateOptions\r\n options={quickDateOptions}\r\n onPress={onPressQuickDateOption}\r\n />\r\n ) : null}\r\n\r\n <DatetimePickerFlyoutActions\r\n canClear={Boolean(value && clearable)}\r\n onPressApply={onPressApply}\r\n onPressCancel={onPressCancel}\r\n onPressClear={onPressClear}\r\n />\r\n </View>\r\n </Flyout>\r\n </Portal>\r\n );\r\n});\r\n","import { memo, useMemo } from \"react\";\r\n\r\nimport { Typography, View } from \"@impulse-ui-native/primitives\";\r\nimport { useComponentsTokens, useTheme } from \"@impulse-ui-native/theme\";\r\n\r\nimport { TimeRange } from \"../../types\";\r\nimport {\r\n getCalendarDayState,\r\n getDateKey,\r\n getDayNames,\r\n getMonthCalendarMatrix,\r\n} from \"../../utils\";\r\nimport { CalendarDay } from \"./calendar-day\";\r\n\r\ninterface CalendarProps {\r\n value: Date | TimeRange | null | undefined;\r\n visible: Date;\r\n onPress: (date: Date) => void;\r\n}\r\n\r\nexport const Calendar = memo(function Calendar(props: CalendarProps) {\r\n const { visible, value, onPress } = props;\r\n\r\n const tokens = useComponentsTokens();\r\n const calendarTokens = tokens.datetimePicker.calendar;\r\n\r\n const visibleMonth = visible.getMonth();\r\n const visibleYear = visible.getFullYear();\r\n\r\n const days = useMemo(() => {\r\n return getDayNames();\r\n }, []);\r\n\r\n const calendar = useMemo(() => {\r\n return getMonthCalendarMatrix(visibleYear, visibleMonth);\r\n }, [visibleYear, visibleMonth]);\r\n\r\n return (\r\n <View>\r\n <View\r\n flexDirection=\"row\"\r\n marginBottom={calendarTokens.dayNamesMarginBottom}\r\n >\r\n {days.map((day) => (\r\n <Typography.Body flex={1} textAlign=\"center\" key={day}>\r\n {day[0]}\r\n </Typography.Body>\r\n ))}\r\n </View>\r\n\r\n <View gap={calendarTokens.weeksGap}>\r\n {calendar.map((dates, index) => (\r\n <View flexDirection=\"row\" justifyContent=\"space-around\" key={index}>\r\n {dates.map((date) => {\r\n const state = getCalendarDayState({\r\n date,\r\n visible,\r\n value,\r\n });\r\n\r\n return (\r\n <CalendarDay\r\n key={getDateKey(date)}\r\n date={date}\r\n isSelected={state.isSelected}\r\n isInRange={state.isInRange}\r\n isRangeStart={state.isRangeStart}\r\n isRangeEnd={state.isRangeEnd}\r\n isCurrentMonth={state.isCurrentMonth}\r\n onPress={onPress}\r\n />\r\n );\r\n })}\r\n </View>\r\n ))}\r\n </View>\r\n </View>\r\n );\r\n});\r\n","import { memo, useCallback } from \"react\";\r\nimport { StyleSheet, TextStyle, ViewStyle } from \"react-native\";\r\n\r\nimport { Pressable, Typography, View } from \"@impulse-ui-native/primitives\";\r\nimport { AppTheme, useThemedStyles } from \"@impulse-ui-native/theme\";\r\n\r\ninterface CalendarDayProps {\r\n date: Date;\r\n selected?: boolean;\r\n isSelected?: boolean;\r\n isRangeStart?: boolean;\r\n isInRange?: boolean;\r\n isRangeEnd?: boolean;\r\n isCurrentMonth?: boolean;\r\n onPress?: (date: Date) => void;\r\n}\r\n\r\nexport const CalendarDay = memo(function CalendarDay(props: CalendarDayProps) {\r\n const styles = useThemedStyles(themedStyles, props, [\r\n props.isSelected,\r\n props.isRangeStart,\r\n props.isInRange,\r\n props.isRangeEnd,\r\n props.isCurrentMonth,\r\n ]);\r\n\r\n const handleOnPress = useCallback(\r\n () => props.onPress?.(props.date),\r\n [props.date, props.onPress],\r\n );\r\n\r\n return (\r\n <Pressable style={styles.pressableStyles} onPress={handleOnPress}>\r\n <View style={styles.container}>\r\n <Typography.Body style={styles.text} numeric>\r\n {props.date.getDate()}\r\n </Typography.Body>\r\n </View>\r\n </Pressable>\r\n );\r\n});\r\n\r\nfunction themedStyles(\r\n theme: AppTheme,\r\n props: {\r\n isSelected?: boolean;\r\n isRangeStart?: boolean;\r\n isInRange?: boolean;\r\n isRangeEnd?: boolean;\r\n isCurrentMonth?: boolean;\r\n },\r\n) {\r\n const dayTokens = theme.components.datetimePicker.day;\r\n\r\n let color: TextStyle[\"color\"] = dayTokens.color;\r\n let backgroundColor: ViewStyle[\"backgroundColor\"] = \"transparent\";\r\n\r\n if (!props.isCurrentMonth) {\r\n color = dayTokens.outsideMonthColor;\r\n }\r\n\r\n if (props.isInRange) {\r\n backgroundColor = dayTokens.rangeBackgroundColor;\r\n color = dayTokens.rangeColor;\r\n }\r\n\r\n if (props.isSelected || props.isRangeStart || props.isRangeEnd) {\r\n backgroundColor = dayTokens.selectedBackgroundColor;\r\n color = dayTokens.selectedColor;\r\n }\r\n\r\n return StyleSheet.create({\r\n pressableStyles: {\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n },\r\n\r\n container: {\r\n borderRadius: dayTokens.borderRadius,\r\n width: dayTokens.size,\r\n height: dayTokens.size,\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n backgroundColor,\r\n },\r\n\r\n text: {\r\n color,\r\n },\r\n });\r\n}\r\n","import { memo } from \"react\";\r\n\r\nimport {\r\n Button,\r\n Pressable,\r\n Typography,\r\n View,\r\n} from \"@impulse-ui-native/primitives\";\r\nimport { useComponentsTokens } from \"@impulse-ui-native/theme\";\r\n\r\nimport { DatetimePickerFlyoutCommonProps } from \"../../types\";\r\n\r\ninterface DatetimePickerFlyoutActionsProps {\r\n canClear?: boolean;\r\n onPressApply: DatetimePickerFlyoutCommonProps[\"onPressApply\"];\r\n onPressCancel: DatetimePickerFlyoutCommonProps[\"onPressCancel\"];\r\n onPressClear: DatetimePickerFlyoutCommonProps[\"onPressClear\"];\r\n}\r\n\r\nexport const DatetimePickerFlyoutActions = memo(\r\n function DatetimePickerFlyoutActions(\r\n props: DatetimePickerFlyoutActionsProps,\r\n ) {\r\n const tokens = useComponentsTokens();\r\n const flyoutActionsTokens = tokens.datetimePicker.flyoutActions;\r\n\r\n return (\r\n <View gap={flyoutActionsTokens.gap}>\r\n {props.canClear ? (\r\n <View alignItems=\"center\">\r\n <Pressable onPress={props.onPressClear}>\r\n <Typography.BodyLarge color={flyoutActionsTokens.clearColor}>\r\n Clear\r\n </Typography.BodyLarge>\r\n </Pressable>\r\n </View>\r\n ) : null}\r\n\r\n <View flexDirection=\"row\" gap={flyoutActionsTokens.buttonsGap}>\r\n <View flex={1}>\r\n <Button onPress={props.onPressCancel} variant=\"outlined\">\r\n Cancel\r\n </Button>\r\n </View>\r\n\r\n <View flex={1}>\r\n <Button onPress={props.onPressApply}>Apply</Button>\r\n </View>\r\n </View>\r\n </View>\r\n );\r\n },\r\n);\r\n","import { memo, useMemo } from \"react\";\r\nimport { ScrollView, ViewStyle } from \"react-native\";\r\n\r\nimport { Tag } from \"@impulse-ui-native/primitives\";\r\nimport { useComponentsTokens } from \"@impulse-ui-native/theme\";\r\n\r\nimport { QuickDateOption, TimeRange } from \"../../types\";\r\nimport { getQuickOptionKey } from \"../../utils\";\r\n\r\ninterface QuickDateOptionsProps {\r\n options: QuickDateOption<Date | TimeRange>[];\r\n onPress?: (date: QuickDateOption<Date | TimeRange>[\"value\"]) => void;\r\n}\r\n\r\nexport const QuickDateOptions = memo(function QuickDateOptions(\r\n props: QuickDateOptionsProps,\r\n) {\r\n const tokens = useComponentsTokens();\r\n\r\n const style = useMemo<ViewStyle>(\r\n () => ({ gap: tokens.datetimePicker.quickDateOptions.gap }),\r\n [tokens.datetimePicker.quickDateOptions],\r\n );\r\n\r\n return (\r\n <ScrollView\r\n horizontal\r\n contentContainerStyle={style}\r\n showsHorizontalScrollIndicator={false}\r\n >\r\n {props.options.map((option, index) => (\r\n <Tag\r\n key={getQuickOptionKey(option.value) ?? index}\r\n label={option.label}\r\n onPress={() => props.onPress?.(option.value)}\r\n />\r\n ))}\r\n </ScrollView>\r\n );\r\n});\r\n","import { memo, useCallback, useMemo } from \"react\";\r\n\r\nimport { CalendarDotsIcon } from \"@impulse-ui-native/icon\";\r\nimport { View } from \"@impulse-ui-native/primitives\";\r\nimport { Select, SelectOption } from \"@impulse-ui-native/select\";\r\nimport { useComponentsTokens } from \"@impulse-ui-native/theme\";\r\n\r\nimport { getMonthNames, getYears } from \"../../utils\";\r\n\r\ninterface VisibleDateSelectProps {\r\n value: Date;\r\n defaultValue?: Date;\r\n onChange: (value: Date) => void;\r\n}\r\n\r\nexport const VisibleDateSelect = memo(function VisibleDateSelect(\r\n props: VisibleDateSelectProps,\r\n) {\r\n const tokens = useComponentsTokens();\r\n\r\n const monthOptions = useMemo<SelectOption<number>[]>(() => {\r\n return getMonthNames().map((month, index) => ({\r\n label: month,\r\n value: index,\r\n }));\r\n }, []);\r\n\r\n const yearOptions = useMemo<SelectOption<number>[]>(() => {\r\n return getYears().map((year) => ({\r\n label: String(year),\r\n value: year,\r\n }));\r\n }, []);\r\n\r\n const onChangeVisibleMonth = useCallback(\r\n (month: number | undefined) => {\r\n if (month !== undefined && month !== props.value.getMonth()) {\r\n const newDate = new Date(props.value);\r\n newDate.setMonth(month);\r\n\r\n props.onChange(newDate);\r\n }\r\n },\r\n [props.value, props.onChange],\r\n );\r\n\r\n const onChangeVisibleYear = useCallback(\r\n (year: number | undefined) => {\r\n if (year !== undefined && year !== props.value.getFullYear()) {\r\n const newDate = new Date(props.value);\r\n newDate.setFullYear(year);\r\n\r\n props.onChange(newDate);\r\n }\r\n },\r\n [props.value, props.onChange],\r\n );\r\n\r\n return (\r\n <View flexDirection=\"row\" gap={tokens.datetimePicker.visibleDateSelect.gap}>\r\n <View flex={1}>\r\n <Select\r\n options={monthOptions}\r\n value={props.value.getMonth()}\r\n defaultValue={\r\n props.defaultValue?.getMonth() ?? props.value.getMonth()\r\n }\r\n PrefixIcon={CalendarDotsIcon}\r\n onChange={onChangeVisibleMonth}\r\n placeholder=\"Month\"\r\n />\r\n </View>\r\n\r\n <View flex={1}>\r\n <Select\r\n options={yearOptions}\r\n value={props.value.getFullYear()}\r\n defaultValue={\r\n props.defaultValue?.getFullYear() ?? props.value.getFullYear()\r\n }\r\n PrefixIcon={CalendarDotsIcon}\r\n onChange={onChangeVisibleYear}\r\n placeholder=\"Year\"\r\n />\r\n </View>\r\n </View>\r\n );\r\n});\r\n","import { memo } from \"react\";\r\n\r\nimport { Control } from \"@impulse-ui-native/primitives\";\r\n\r\nimport { useDatetimeRangePicker } from \"../../hooks\";\r\nimport { DatetimeRangePickerProps } from \"../../types\";\r\nimport { DateControl } from \"../common/date-control\";\r\nimport { DatePickerFlyout } from \"./date-picker.flyout\";\r\n\r\nexport const DateRangePicker = memo(function DateRangePicker(\r\n props: DatetimeRangePickerProps,\r\n) {\r\n const {\r\n value,\r\n defaultValue,\r\n onChange,\r\n placeholder,\r\n quickDateOptions,\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n id,\r\n isOpen,\r\n visible,\r\n tempRange,\r\n selected,\r\n setVisible,\r\n close,\r\n onPressOpen,\r\n onPressApply,\r\n onPressCancel,\r\n onPressCalendarDay,\r\n onPressClear,\r\n onPressQuickDateOption,\r\n syncState,\r\n } = useDatetimeRangePicker({ value, defaultValue, onChange });\r\n\r\n return (\r\n <DateControl {...rest} onPress={onPressOpen}>\r\n {selected === null ? (\r\n <Control.Placeholder>{placeholder}</Control.Placeholder>\r\n ) : null}\r\n\r\n {selected !== null ? (\r\n <Control.Value>\r\n {selected.start?.toDateString()} - {selected.end?.toDateString()}\r\n </Control.Value>\r\n ) : null}\r\n\r\n <DatePickerFlyout\r\n id={id}\r\n title=\"Datetime\"\r\n open={isOpen}\r\n visible={visible}\r\n value={tempRange}\r\n quickDateOptions={quickDateOptions}\r\n onClose={close}\r\n onCloseFinished={syncState}\r\n onPressQuickDateOption={onPressQuickDateOption}\r\n onChangeVisible={setVisible}\r\n onPressCalendarDay={onPressCalendarDay}\r\n onPressApply={onPressApply}\r\n onPressCancel={onPressCancel}\r\n onPressClear={onPressClear}\r\n />\r\n </DateControl>\r\n );\r\n});\r\n","import { memo } from \"react\";\r\n\r\nimport { Control } from \"@impulse-ui-native/primitives\";\r\n\r\nimport { useDatetimePicker } from \"../../hooks\";\r\nimport { DatetimePickerProps } from \"../../types\";\r\nimport { DateControl } from \"../common/date-control\";\r\nimport { DatetimePickerFlyout } from \"./datetime-picker.flyout\";\r\n\r\nexport const DatetimePicker = memo(function DatetimePicker(\r\n props: DatetimePickerProps,\r\n) {\r\n const {\r\n value,\r\n defaultValue,\r\n clearable = true,\r\n onChange,\r\n placeholder,\r\n quickDateOptions,\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n id,\r\n isOpen,\r\n visible,\r\n tempDate,\r\n selected,\r\n setVisible,\r\n close,\r\n onPressOpen,\r\n onPressApply,\r\n onPressCancel,\r\n onPressCalendarDay,\r\n onChangeTime,\r\n onPressClear,\r\n onPressQuickDateOption,\r\n syncState,\r\n } = useDatetimePicker({ value, defaultValue, onChange });\r\n\r\n return (\r\n <DateControl {...rest} onPress={onPressOpen}>\r\n {selected === null ? (\r\n <Control.Placeholder>{placeholder}</Control.Placeholder>\r\n ) : null}\r\n\r\n {selected !== null ? (\r\n <Control.Value>{selected.toLocaleString()}</Control.Value>\r\n ) : null}\r\n\r\n <DatetimePickerFlyout\r\n id={id}\r\n open={isOpen}\r\n title=\"Date\"\r\n visible={visible}\r\n value={tempDate}\r\n clearable={clearable}\r\n quickDateOptions={quickDateOptions}\r\n onClose={close}\r\n onCloseFinished={syncState}\r\n onPressQuickDateOption={onPressQuickDateOption}\r\n onChangeVisible={setVisible}\r\n onPressCalendarDay={onPressCalendarDay}\r\n onChangeTime={onChangeTime}\r\n onPressApply={onPressApply}\r\n onPressCancel={onPressCancel}\r\n onPressClear={onPressClear}\r\n />\r\n </DateControl>\r\n );\r\n});\r\n","import { memo, useMemo } from \"react\";\r\n\r\nimport { Flyout } from \"@impulse-ui-native/flyout\";\r\nimport { Portal } from \"@impulse-ui-native/portal\";\r\nimport { View } from \"@impulse-ui-native/primitives\";\r\nimport { useComponentsTokens } from \"@impulse-ui-native/theme\";\r\n\r\nimport { DatetimePickerFlyoutCommonProps, TimePickerValue } from \"../../types\";\r\nimport { Calendar } from \"../common/calendar\";\r\nimport { DatetimePickerFlyoutActions } from \"../common/datetime-picker-flyout-actions\";\r\nimport { QuickDateOptions } from \"../common/quick-date-options\";\r\nimport { VisibleDateSelect } from \"../common/visible-date-select\";\r\nimport { TimePicker } from \"../time/time-picker\";\r\n\r\nexport interface DatetimePickerFlyoutProps extends DatetimePickerFlyoutCommonProps {\r\n value: Date | null | undefined;\r\n onChangeTime?: (value: TimePickerValue | null) => void;\r\n}\r\n\r\nexport const DatetimePickerFlyout = memo(function DateRangePickerFlyout(\r\n props: DatetimePickerFlyoutProps,\r\n) {\r\n const {\r\n visible,\r\n value,\r\n clearable,\r\n quickDateOptions,\r\n onPressQuickDateOption,\r\n onChangeVisible,\r\n onPressCalendarDay,\r\n onChangeTime,\r\n onPressClear,\r\n onPressCancel,\r\n onPressApply,\r\n ...rest\r\n } = props;\r\n\r\n const tokens = useComponentsTokens();\r\n const datetimePickerTokens = tokens.datetimePicker.datetimePickerFlyout;\r\n\r\n const timeValue = useMemo<TimePickerValue | null>(() => {\r\n if (value) {\r\n return {\r\n hours: value.getHours(),\r\n minutes: value.getMinutes(),\r\n seconds: value.getSeconds(),\r\n };\r\n }\r\n\r\n return null;\r\n }, [value]);\r\n\r\n return (\r\n <Portal>\r\n <Flyout {...rest}>\r\n <View gap={datetimePickerTokens.gap}>\r\n <VisibleDateSelect value={visible} onChange={onChangeVisible} />\r\n <Calendar\r\n value={value}\r\n visible={visible}\r\n onPress={onPressCalendarDay}\r\n />\r\n <TimePicker\r\n value={timeValue}\r\n clearable={false}\r\n defaultValue={timeValue}\r\n onChange={onChangeTime}\r\n placeholder=\"00:00:00\"\r\n />\r\n {quickDateOptions && quickDateOptions.length > 0 ? (\r\n <QuickDateOptions\r\n options={quickDateOptions}\r\n onPress={onPressQuickDateOption}\r\n />\r\n ) : null}\r\n <DatetimePickerFlyoutActions\r\n canClear={Boolean(value && clearable)}\r\n onPressApply={onPressApply}\r\n onPressCancel={onPressCancel}\r\n onPressClear={onPressClear}\r\n />\r\n </View>\r\n </Flyout>\r\n </Portal>\r\n );\r\n});\r\n","import { memo, useCallback, useEffect, useId, useState } from \"react\";\r\n\r\nimport { useControllableState, useIsOpen } from \"@impulse-ui-native/core\";\r\nimport { ClockIcon } from \"@impulse-ui-native/icon\";\r\nimport { Control, Pressable } from \"@impulse-ui-native/primitives\";\r\n\r\nimport { DatetimePickerCommonProps, TimePickerValue } from \"../../types\";\r\nimport { formatTimepickerValue } from \"../../utils\";\r\nimport { TimePickerFlyout } from \"./time-picker.flyout\";\r\n\r\ninterface TimePickerProps extends DatetimePickerCommonProps {\r\n value?: TimePickerValue | null;\r\n defaultValue?: TimePickerValue | null;\r\n onChange?: (value: TimePickerValue | null) => void;\r\n}\r\n\r\nexport const TimePicker = memo(function TimePicker(props: TimePickerProps) {\r\n const {\r\n value,\r\n defaultValue,\r\n placeholder,\r\n clearable = true,\r\n size = \"medium\",\r\n onChange,\r\n variant = \"outlined\",\r\n label,\r\n error,\r\n disabled,\r\n PrefixIcon = ClockIcon,\r\n Prefix,\r\n onPressPrefix: onPrefixPress,\r\n SuffixIcon,\r\n Suffix,\r\n onPressSuffix: onSuffixPress,\r\n } = props;\r\n\r\n const id = useId();\r\n const { isOpen, isClosed, finishClose, open, close } = useIsOpen();\r\n\r\n const [selected, setSelected] = useControllableState<TimePickerValue | null>({\r\n prop: value,\r\n defaultProp: defaultValue ?? null,\r\n onChange,\r\n });\r\n\r\n const [tempTime, setTempTime] = useState<TimePickerValue | null>(selected);\r\n\r\n const onPressOpen = useCallback(() => {\r\n setTempTime(selected);\r\n open();\r\n }, [open, selected]);\r\n\r\n const onPressApply = useCallback(() => {\r\n setSelected(tempTime);\r\n close();\r\n }, [tempTime, close]);\r\n\r\n const onPressClear = useCallback(() => {\r\n setTempTime(null);\r\n }, []);\r\n\r\n const syncState = useCallback(() => {\r\n setTempTime(selected);\r\n }, [selected]);\r\n\r\n const onCloseFinished = useCallback(() => {\r\n syncState();\r\n finishClose();\r\n }, [syncState, finishClose]);\r\n\r\n useEffect(() => {\r\n if (!isOpen && isClosed) {\r\n setTempTime(selected);\r\n }\r\n }, [isOpen, selected, isClosed]);\r\n\r\n return (\r\n <Control.Provider\r\n size={size}\r\n variant={variant}\r\n error={error}\r\n disabled={disabled}\r\n >\r\n <Control.Root>\r\n <Control.Label>{label}</Control.Label>\r\n <Pressable onPress={onPressOpen}>\r\n <Control.Container>\r\n <Control.Addon\r\n icon={PrefixIcon}\r\n Content={Prefix}\r\n onPress={onPrefixPress}\r\n />\r\n\r\n {selected === null && placeholder ? (\r\n <Control.Placeholder>{placeholder}</Control.Placeholder>\r\n ) : null}\r\n\r\n {selected !== null ? (\r\n <Control.Value>{formatTimepickerValue(selected)}</Control.Value>\r\n ) : null}\r\n\r\n <TimePickerFlyout\r\n id={id}\r\n title=\"Time\"\r\n open={isOpen}\r\n value={tempTime}\r\n clearable={clearable}\r\n onClose={close}\r\n onCloseFinished={onCloseFinished}\r\n onChange={setTempTime}\r\n onPressApply={onPressApply}\r\n onPressClear={onPressClear}\r\n onPressCancel={close}\r\n />\r\n\r\n <Control.Addon\r\n icon={SuffixIcon}\r\n Content={Suffix}\r\n onPress={onSuffixPress}\r\n />\r\n </Control.Container>\r\n </Pressable>\r\n <Control.Error />\r\n </Control.Root>\r\n </Control.Provider>\r\n );\r\n});\r\n","import { memo, useCallback, useMemo } from \"react\";\r\n\r\nimport { Flyout, FlyoutProps } from \"@impulse-ui-native/flyout\";\r\nimport { Portal } from \"@impulse-ui-native/portal\";\r\nimport { View } from \"@impulse-ui-native/primitives\";\r\nimport { useComponentsTokens, useTheme } from \"@impulse-ui-native/theme\";\r\n\r\nimport { PickerFlyoutActions, TimePickerValue } from \"../../types\";\r\nimport { createInfiniteRange, getInfiniteRangeInitialIndex } from \"../../utils\";\r\nimport { DatetimePickerFlyoutActions } from \"../common/datetime-picker-flyout-actions\";\r\nimport { PickerColumn } from \"./picker-column\";\r\n\r\ninterface TimePickerFlyoutProps extends FlyoutProps, PickerFlyoutActions {\r\n value: Partial<TimePickerValue> | null | undefined;\r\n onChange: (value: TimePickerValue | null) => void;\r\n}\r\n\r\nconst DefaultTimePickerValue: TimePickerValue = {\r\n hours: 0,\r\n minutes: 0,\r\n seconds: 0,\r\n};\r\n\r\nexport const TimePickerFlyout = memo(function TimePickerFlyout(\r\n props: TimePickerFlyoutProps,\r\n) {\r\n const {\r\n value,\r\n onChange,\r\n onPressApply,\r\n onPressCancel,\r\n onPressClear,\r\n clearable,\r\n ...rest\r\n } = props;\r\n\r\n const tokens = useComponentsTokens();\r\n const timePickerTokens = tokens.timePicker;\r\n\r\n const selectedHours = value?.hours ?? DefaultTimePickerValue.hours;\r\n const selectedMinutes = value?.minutes ?? DefaultTimePickerValue.minutes;\r\n const selectedSeconds = value?.seconds ?? DefaultTimePickerValue.seconds;\r\n\r\n const hours = useMemo(() => {\r\n return createInfiniteRange(24, 4);\r\n }, []);\r\n\r\n const minutes = useMemo(() => {\r\n return createInfiniteRange(60, 4);\r\n }, []);\r\n\r\n const seconds = useMemo(() => {\r\n return createInfiniteRange(60, 4);\r\n }, []);\r\n\r\n const hoursInitialIndex = useMemo(() => {\r\n return getInfiniteRangeInitialIndex(24, selectedHours, 4);\r\n }, [selectedHours]);\r\n\r\n const minutesInitialIndex = useMemo(() => {\r\n return getInfiniteRangeInitialIndex(60, selectedMinutes, 4);\r\n }, [selectedMinutes]);\r\n\r\n const secondsInitialIndex = useMemo(() => {\r\n return getInfiniteRangeInitialIndex(60, selectedSeconds, 4);\r\n }, [selectedSeconds]);\r\n\r\n const handleHoursChange = useCallback(\r\n (hours: number) => {\r\n onChange({\r\n hours,\r\n minutes: selectedMinutes,\r\n seconds: selectedSeconds,\r\n });\r\n },\r\n [onChange, selectedMinutes, selectedSeconds],\r\n );\r\n\r\n const handleMinutesChange = useCallback(\r\n (minutes: number) => {\r\n onChange({\r\n hours: selectedHours,\r\n minutes,\r\n seconds: selectedSeconds,\r\n });\r\n },\r\n [onChange, selectedHours, selectedSeconds],\r\n );\r\n\r\n const handleSecondsChange = useCallback(\r\n (seconds: number) => {\r\n onChange({\r\n hours: selectedHours,\r\n minutes: selectedMinutes,\r\n seconds,\r\n });\r\n },\r\n [onChange, selectedHours, selectedMinutes],\r\n );\r\n\r\n return (\r\n <Portal>\r\n <Flyout {...rest}>\r\n <View gap={timePickerTokens.flyout.gap}>\r\n <View\r\n height={timePickerTokens.columns.height}\r\n gap={timePickerTokens.columns.gap}\r\n flexDirection=\"row\"\r\n alignItems=\"center\"\r\n justifyContent=\"center\"\r\n >\r\n <View\r\n pointerEvents=\"none\"\r\n position=\"absolute\"\r\n height={timePickerTokens.columns.indicatorHeight}\r\n width={timePickerTokens.columns.indicatorWidth}\r\n borderRadius={timePickerTokens.columns.indicatorBorderRadius}\r\n backgroundColor={\r\n timePickerTokens.columns.indicatorBackgroundColor\r\n }\r\n top={timePickerTokens.columns.indicatorTop}\r\n />\r\n\r\n <PickerColumn\r\n data={hours}\r\n label=\"h\"\r\n format=\"24h\"\r\n type=\"hour\"\r\n value={selectedHours}\r\n initialScrollIndex={hoursInitialIndex}\r\n onChange={handleHoursChange}\r\n />\r\n\r\n <PickerColumn\r\n data={minutes}\r\n label=\"m\"\r\n format=\"24h\"\r\n type=\"minute\"\r\n value={selectedMinutes}\r\n initialScrollIndex={minutesInitialIndex}\r\n onChange={handleMinutesChange}\r\n />\r\n\r\n <PickerColumn\r\n data={seconds}\r\n label=\"s\"\r\n format=\"24h\"\r\n type=\"second\"\r\n value={selectedSeconds}\r\n initialScrollIndex={secondsInitialIndex}\r\n onChange={handleSecondsChange}\r\n />\r\n </View>\r\n\r\n <DatetimePickerFlyoutActions\r\n canClear={Boolean(value && clearable)}\r\n onPressApply={onPressApply}\r\n onPressCancel={onPressCancel}\r\n onPressClear={onPressClear}\r\n />\r\n </View>\r\n </Flyout>\r\n </Portal>\r\n );\r\n});\r\n","import { memo, useCallback, useEffect, useMemo, useRef } from \"react\";\r\nimport {\r\n FlatList,\r\n ListRenderItemInfo,\r\n NativeScrollEvent,\r\n NativeSyntheticEvent,\r\n StyleSheet,\r\n} from \"react-native\";\r\n\r\nimport { Pressable, Typography, View } from \"@impulse-ui-native/primitives\";\r\nimport {\r\n FontWeightValue,\r\n useComponentsTokens,\r\n useTheme,\r\n} from \"@impulse-ui-native/theme\";\r\n\r\nimport { getClosestIndexByValue } from \"../../utils\";\r\n\r\ninterface PickerColumnProps {\r\n data: number[];\r\n label: string;\r\n type: \"hour\" | \"minute\" | \"second\";\r\n format: \"12h\" | \"24h\";\r\n value?: number;\r\n initialScrollIndex?: number;\r\n onChange?: (value: number) => void;\r\n}\r\n\r\nexport const PickerColumn = memo(function PickerColumn(\r\n props: PickerColumnProps,\r\n) {\r\n const { data, label, value, initialScrollIndex = 0, onChange } = props;\r\n\r\n const tokens = useComponentsTokens();\r\n const columnTokens = tokens.timePicker.column;\r\n\r\n const listRef = useRef<FlatList<number>>(null);\r\n const currentIndexRef = useRef(initialScrollIndex);\r\n\r\n const pressableStyle = useMemo(\r\n () => [\r\n styles.pressableStyle,\r\n {\r\n width: columnTokens.listWidth,\r\n height: columnTokens.itemHeight,\r\n },\r\n ],\r\n [columnTokens.listWidth, columnTokens.itemHeight],\r\n );\r\n\r\n const contentContainerStyle = useMemo(\r\n () => [\r\n styles.contentContainerStyle,\r\n {\r\n paddingVertical: columnTokens.verticalPadding,\r\n },\r\n ],\r\n [columnTokens.verticalPadding],\r\n );\r\n\r\n const keyExtractor = useCallback((item: number, index: number) => {\r\n return `${item}-${index}`;\r\n }, []);\r\n\r\n const getItemLayout = useCallback(\r\n (_: ArrayLike<number> | null | undefined, index: number) => {\r\n return {\r\n length: columnTokens.itemHeight,\r\n offset: columnTokens.itemHeight * index,\r\n index,\r\n };\r\n },\r\n [columnTokens.itemHeight],\r\n );\r\n\r\n const scrollToIndex = useCallback((index: number, animated: boolean) => {\r\n currentIndexRef.current = index;\r\n\r\n listRef.current?.scrollToIndex({\r\n index,\r\n animated,\r\n });\r\n }, []);\r\n\r\n const renderItem = useCallback(\r\n ({ item }: ListRenderItemInfo<number>) => {\r\n const selected = item === value;\r\n const fontWeight: FontWeightValue = (\r\n selected ? columnTokens.selectedFontWeight : columnTokens.fontWeight\r\n ) as FontWeightValue;\r\n\r\n return (\r\n <Pressable style={pressableStyle}>\r\n <Typography.Master\r\n fontSize={columnTokens.fontSize}\r\n color={selected ? columnTokens.selectedColor : columnTokens.color}\r\n textAlign=\"center\"\r\n numberOfLines={1}\r\n fontWeight={fontWeight}\r\n numeric\r\n >\r\n {String(item).padStart(2, \"0\")}\r\n </Typography.Master>\r\n </Pressable>\r\n );\r\n },\r\n [\r\n columnTokens.color,\r\n columnTokens.fontSize,\r\n columnTokens.fontWeight,\r\n columnTokens.selectedColor,\r\n columnTokens.selectedFontWeight,\r\n pressableStyle,\r\n value,\r\n ],\r\n );\r\n\r\n const onMomentumScrollEnd = useCallback(\r\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\r\n const offset = event.nativeEvent.contentOffset.y;\r\n const index = Math.round(offset / columnTokens.itemHeight);\r\n const newValue = data[index];\r\n\r\n if (newValue === value) {\r\n return;\r\n }\r\n\r\n currentIndexRef.current = index;\r\n\r\n if (newValue !== undefined) {\r\n onChange?.(newValue);\r\n }\r\n },\r\n [columnTokens.itemHeight, data, onChange, value],\r\n );\r\n\r\n const onScrollToIndexFailed = useCallback(() => {\r\n requestAnimationFrame(() => {\r\n listRef.current?.scrollToOffset({\r\n offset: initialScrollIndex * columnTokens.itemHeight,\r\n animated: false,\r\n });\r\n });\r\n }, [columnTokens.itemHeight, initialScrollIndex]);\r\n\r\n useEffect(() => {\r\n if (value === undefined) {\r\n return;\r\n }\r\n\r\n const closestIndex = getClosestIndexByValue(\r\n data,\r\n value,\r\n currentIndexRef.current,\r\n );\r\n\r\n if (closestIndex === -1 || closestIndex === currentIndexRef.current) {\r\n return;\r\n }\r\n\r\n scrollToIndex(closestIndex, true);\r\n }, [data, scrollToIndex, value]);\r\n\r\n return (\r\n <View\r\n width={columnTokens.width}\r\n height={columnTokens.height}\r\n flexDirection=\"row\"\r\n justifyContent=\"center\"\r\n gap={columnTokens.gap}\r\n >\r\n <View\r\n width={columnTokens.listWidth}\r\n height={columnTokens.height}\r\n overflow=\"hidden\"\r\n >\r\n <FlatList\r\n ref={listRef}\r\n data={data}\r\n renderItem={renderItem}\r\n keyExtractor={keyExtractor}\r\n getItemLayout={getItemLayout}\r\n snapToInterval={columnTokens.itemHeight}\r\n snapToAlignment=\"start\"\r\n decelerationRate=\"fast\"\r\n initialScrollIndex={initialScrollIndex}\r\n showsVerticalScrollIndicator={false}\r\n contentContainerStyle={contentContainerStyle}\r\n onMomentumScrollEnd={onMomentumScrollEnd}\r\n onScrollToIndexFailed={onScrollToIndexFailed}\r\n removeClippedSubviews\r\n windowSize={3}\r\n initialNumToRender={7}\r\n maxToRenderPerBatch={7}\r\n updateCellsBatchingPeriod={50}\r\n scrollEventThrottle={16}\r\n />\r\n </View>\r\n\r\n <Typography.Body alignSelf=\"center\">{label}</Typography.Body>\r\n </View>\r\n );\r\n});\r\n\r\nconst styles = StyleSheet.create({\r\n pressableStyle: {\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n },\r\n contentContainerStyle: {},\r\n});\r\n","import { memo } from \"react\";\r\n\r\nimport { Control } from \"@impulse-ui-native/primitives\";\r\n\r\nimport { useDatetimeRangePicker } from \"../../hooks\";\r\nimport { DatetimeRangePickerProps } from \"../../types\";\r\nimport { DateControl } from \"../common/date-control\";\r\nimport { DatetimeRangePickerFlyout } from \"./datetime-range-picker.flyout\";\r\n\r\nexport const DatetimeRangePicker = memo(function DatetimeRangePicker(\r\n props: DatetimeRangePickerProps,\r\n) {\r\n const {\r\n value,\r\n defaultValue,\r\n clearable = true,\r\n onChange,\r\n placeholder,\r\n quickDateOptions,\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n id,\r\n isOpen,\r\n visible,\r\n tempRange,\r\n selected,\r\n setVisible,\r\n close,\r\n onPressOpen,\r\n onPressApply,\r\n onPressCancel,\r\n onPressCalendarDay,\r\n onChangeStartTime,\r\n onChangeEndTime,\r\n onPressClear,\r\n onPressQuickDateOption,\r\n syncState,\r\n } = useDatetimeRangePicker({ value, defaultValue, onChange });\r\n\r\n return (\r\n <DateControl {...rest} onPress={onPressOpen}>\r\n {selected === null ? (\r\n <Control.Placeholder>{placeholder}</Control.Placeholder>\r\n ) : null}\r\n\r\n {selected !== null ? (\r\n <Control.Value>\r\n {selected.start?.toLocaleString()} - {selected.end?.toLocaleString()}\r\n </Control.Value>\r\n ) : null}\r\n\r\n <DatetimeRangePickerFlyout\r\n id={id}\r\n open={isOpen}\r\n title=\"Date\"\r\n visible={visible}\r\n value={tempRange}\r\n clearable={clearable}\r\n quickDateOptions={quickDateOptions}\r\n onClose={close}\r\n onCloseFinished={syncState}\r\n onPressQuickDateOption={onPressQuickDateOption}\r\n onChangeVisible={setVisible}\r\n onPressCalendarDay={onPressCalendarDay}\r\n onChangeStartTime={onChangeStartTime}\r\n onChangeEndTime={onChangeEndTime}\r\n onPressApply={onPressApply}\r\n onPressCancel={onPressCancel}\r\n onPressClear={onPressClear}\r\n />\r\n </DateControl>\r\n );\r\n});\r\n","import { memo, useMemo } from \"react\";\r\n\r\nimport { Flyout } from \"@impulse-ui-native/flyout\";\r\nimport { Portal } from \"@impulse-ui-native/portal\";\r\nimport { View } from \"@impulse-ui-native/primitives\";\r\nimport { useComponentsTokens } from \"@impulse-ui-native/theme\";\r\n\r\nimport {\r\n DatetimePickerFlyoutCommonProps,\r\n TimePickerValue,\r\n TimeRange,\r\n} from \"../../types\";\r\nimport { Calendar } from \"../common/calendar\";\r\nimport { DatetimePickerFlyoutActions } from \"../common/datetime-picker-flyout-actions\";\r\nimport { QuickDateOptions } from \"../common/quick-date-options\";\r\nimport { VisibleDateSelect } from \"../common/visible-date-select\";\r\nimport { TimePicker } from \"../time/time-picker\";\r\n\r\nexport interface DatetimeRangePickerFlyoutProps extends DatetimePickerFlyoutCommonProps {\r\n value: TimeRange | null | undefined;\r\n onChangeStartTime?: (value: TimePickerValue | null) => void;\r\n onChangeEndTime?: (value: TimePickerValue | null) => void;\r\n}\r\n\r\nexport const DatetimeRangePickerFlyout = memo(\r\n function DatetimeRangePickerFlyout(props: DatetimeRangePickerFlyoutProps) {\r\n const {\r\n visible,\r\n value,\r\n clearable,\r\n quickDateOptions,\r\n onPressQuickDateOption,\r\n onChangeVisible,\r\n onPressCalendarDay,\r\n onChangeStartTime,\r\n onChangeEndTime,\r\n onPressClear,\r\n onPressCancel,\r\n onPressApply,\r\n ...rest\r\n } = props;\r\n\r\n const tokens = useComponentsTokens();\r\n const datetimeRangePickerTokens =\r\n tokens.datetimePicker.datetimeRangePickerFlyout;\r\n\r\n const timeStartValue = useMemo<TimePickerValue | null>(() => {\r\n if (value?.start) {\r\n return {\r\n hours: value.start.getHours(),\r\n minutes: value.start.getMinutes(),\r\n seconds: value.start.getSeconds(),\r\n };\r\n }\r\n\r\n return null;\r\n }, [value?.start]);\r\n\r\n const timeEndValue = useMemo<TimePickerValue | null>(() => {\r\n if (value?.end) {\r\n return {\r\n hours: value.end.getHours(),\r\n minutes: value.end.getMinutes(),\r\n seconds: value.end.getSeconds(),\r\n };\r\n }\r\n\r\n return null;\r\n }, [value?.end]);\r\n\r\n return (\r\n <Portal>\r\n <Flyout {...rest}>\r\n <View gap={datetimeRangePickerTokens.gap}>\r\n <VisibleDateSelect value={visible} onChange={onChangeVisible} />\r\n <Calendar\r\n value={value}\r\n visible={visible}\r\n onPress={onPressCalendarDay}\r\n />\r\n\r\n <View\r\n flexDirection=\"row\"\r\n gap={datetimeRangePickerTokens.timeInputsGap}\r\n >\r\n <View flex={1}>\r\n <TimePicker\r\n value={timeStartValue}\r\n defaultValue={timeStartValue}\r\n clearable={false}\r\n onChange={onChangeStartTime}\r\n label=\"Start time\"\r\n placeholder=\"00:00:00\"\r\n />\r\n </View>\r\n <View flex={1}>\r\n <TimePicker\r\n value={timeEndValue}\r\n defaultValue={timeEndValue}\r\n clearable={false}\r\n onChange={onChangeEndTime}\r\n label=\"End time\"\r\n placeholder=\"00:00:00\"\r\n />\r\n </View>\r\n </View>\r\n\r\n {quickDateOptions && quickDateOptions.length > 0 ? (\r\n <QuickDateOptions\r\n options={quickDateOptions}\r\n onPress={onPressQuickDateOption}\r\n />\r\n ) : null}\r\n <DatetimePickerFlyoutActions\r\n canClear={Boolean(value && clearable)}\r\n onPressApply={onPressApply}\r\n onPressCancel={onPressCancel}\r\n onPressClear={onPressClear}\r\n />\r\n </View>\r\n </Flyout>\r\n </Portal>\r\n );\r\n },\r\n);\r\n"],"mappings":"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","names":["memo","Control","useCallback","useEffect","useId","useState","useControllableState","useIsOpen","useState","useControllableState","useId","useIsOpen","useCallback","useEffect","DateControl","memo","View","useComponentsTokens","memo","Typography","View","memo","useCallback","Pressable","jsx","CalendarDay","styles","jsx","jsxs","memo","Calendar","View","Typography","memo","Pressable","Typography","View","useComponentsTokens","jsx","jsxs","DatetimePickerFlyoutActions","memo","useMemo","useComponentsTokens","jsx","memo","QuickDateOptions","useComponentsTokens","useMemo","memo","useCallback","useMemo","CalendarDotsIcon","View","useComponentsTokens","jsx","jsxs","memo","VisibleDateSelect","useComponentsTokens","useMemo","useCallback","View","CalendarDotsIcon","jsx","jsxs","memo","DatePickerFlyout","useComponentsTokens","View","jsx","jsxs","memo","DatePicker","Control","memo","Control","jsx","jsxs","memo","DateRangePicker","Control","memo","Control","memo","useMemo","Flyout","Portal","View","useComponentsTokens","memo","useCallback","useEffect","useId","useState","useControllableState","useIsOpen","Control","Pressable","memo","useCallback","useMemo","Flyout","Portal","View","useComponentsTokens","memo","useCallback","useEffect","useMemo","StyleSheet","Pressable","Typography","View","useComponentsTokens","jsx","jsxs","memo","PickerColumn","useComponentsTokens","useMemo","useCallback","Pressable","Typography","useEffect","View","StyleSheet","jsx","jsxs","memo","TimePickerFlyout","useComponentsTokens","useMemo","useCallback","hours","minutes","seconds","Portal","Flyout","View","jsx","jsxs","memo","TimePicker","useId","useIsOpen","useControllableState","useState","useCallback","useEffect","Control","Pressable","jsx","jsxs","memo","useComponentsTokens","useMemo","Portal","Flyout","View","jsx","jsxs","memo","DatetimePicker","Control","memo","Control","memo","useMemo","Flyout","Portal","View","useComponentsTokens","jsx","jsxs","memo","DatetimeRangePickerFlyout","useComponentsTokens","useMemo","Portal","Flyout","View","jsx","jsxs","memo","DatetimeRangePicker","Control"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/date/date-picker.tsx","../src/hooks/use-datetime-picker.hook.ts","../src/utils/datetime.utils.ts","../src/utils/calendar-day.utils.ts","../src/hooks/use-datetime-range-picker.hook.ts","../src/components/common/date-control.tsx","../src/components/date/date-picker.flyout.tsx","../src/components/common/calendar.tsx","../src/components/common/calendar-day.tsx","../src/components/common/datetime-picker-flyout-actions.tsx","../src/components/common/quick-date-options.tsx","../src/components/common/visible-date-select.tsx","../src/components/date/date-range-picker.tsx","../src/components/datetime/datetime-picker.tsx","../src/components/datetime/datetime-picker.flyout.tsx","../src/components/time/time-picker.tsx","../src/components/time/time-picker.flyout.tsx","../src/components/time/picker-column.tsx","../src/components/datetime/datetime-range-picker.tsx","../src/components/datetime/datetime-range-picker.flyout.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport { Control } from \"@impulse-ui-native/primitives\";\n\nimport { useDatetimePicker } from \"../../hooks\";\nimport { DatetimePickerProps } from \"../../types\";\nimport { DateControl } from \"../common/date-control\";\nimport { DatePickerFlyout } from \"./date-picker.flyout\";\n\nexport const DatePicker = memo(function DatePicker(props: DatetimePickerProps) {\n const {\n value,\n defaultValue,\n clearable,\n onChange,\n placeholder,\n quickDateOptions,\n ...rest\n } = props;\n\n const {\n id,\n isOpen,\n visible,\n tempDate,\n selected,\n setVisible,\n close,\n onPressOpen,\n onPressApply,\n onPressCancel,\n onPressCalendarDay,\n onPressClear,\n onPressQuickDateOption,\n syncState,\n } = useDatetimePicker({ value, defaultValue, onChange });\n\n return (\n <DateControl {...rest} onPress={onPressOpen}>\n {selected === null ? (\n <Control.Placeholder>{placeholder}</Control.Placeholder>\n ) : null}\n\n {selected !== null ? (\n <Control.Value>{selected.toDateString()}</Control.Value>\n ) : null}\n\n <DatePickerFlyout\n id={id}\n open={isOpen}\n title=\"Date\"\n visible={visible}\n value={tempDate}\n clearable={clearable}\n quickDateOptions={quickDateOptions}\n onClose={close}\n onCloseFinished={syncState}\n onPressQuickDateOption={onPressQuickDateOption}\n onChangeVisible={setVisible}\n onPressCalendarDay={onPressCalendarDay}\n onPressApply={onPressApply}\n onPressCancel={onPressCancel}\n onPressClear={onPressClear}\n />\n </DateControl>\n );\n});\n","import { useCallback, useEffect, useId, useState } from \"react\";\n\nimport { useControllableState, useIsOpen } from \"@impulse-ui-native/core\";\n\nimport { TimePickerValue, TimeRange } from \"../types\";\nimport { isDateInMonth, isSameDay } from \"../utils\";\n\ninterface UseDatetimePickerStateOptions {\n value?: Date | null;\n defaultValue?: Date | null;\n onChange?: (value: Date | null) => void;\n}\n\nexport function useDatetimePicker({\n value,\n defaultValue,\n onChange,\n}: UseDatetimePickerStateOptions) {\n const [visible, setVisible] = useState<Date>(\n value ?? defaultValue ?? new Date(),\n );\n\n const [tempDate, setTempDate] = useState<Date | null>(\n value ?? defaultValue ?? null,\n );\n\n const [selected, setSelected] = useControllableState<Date | null>({\n prop: value,\n defaultProp: defaultValue ?? null,\n onChange,\n });\n\n const id = useId();\n const { isOpen, isClosed, open, close } = useIsOpen();\n\n const onPressOpen = useCallback(() => {\n setTempDate(selected);\n open();\n }, [open, selected]);\n\n const syncState = useCallback(() => {\n setTempDate(selected);\n\n if (selected) {\n setVisible(selected);\n }\n }, [selected]);\n\n const onPressApply = useCallback(() => {\n setSelected(tempDate);\n close();\n }, [close, tempDate]);\n\n const onPressCancel = useCallback(() => {\n close();\n }, [close]);\n\n const onPressCalendarDay = useCallback((date: Date) => {\n setTempDate((prev) => {\n if (!prev) {\n return date;\n }\n\n if (isSameDay(date, prev)) {\n return null;\n }\n\n const nextDate = new Date(date);\n\n nextDate.setHours(prev.getHours());\n nextDate.setMinutes(prev.getMinutes());\n nextDate.setSeconds(prev.getSeconds());\n nextDate.setMilliseconds(prev.getMilliseconds());\n\n return nextDate;\n });\n }, []);\n\n const onChangeTime = useCallback(\n (time: TimePickerValue | null) => {\n setTempDate((prev) => {\n const nextDate = new Date(prev ?? visible);\n\n nextDate.setHours(time?.hours ?? 0);\n nextDate.setMinutes(time?.minutes ?? 0);\n nextDate.setSeconds(time?.seconds ?? 0);\n nextDate.setMilliseconds(0);\n\n return nextDate;\n });\n },\n [visible],\n );\n\n const onPressClear = useCallback(() => {\n setTempDate(null);\n }, []);\n\n const onPressQuickDateOption = useCallback(\n (optionValue: Date | TimeRange) => {\n if (!(optionValue instanceof Date)) {\n return;\n }\n\n setTempDate(optionValue);\n\n if (!isDateInMonth(optionValue, visible)) {\n setVisible(optionValue);\n }\n },\n [visible],\n );\n\n useEffect(() => {\n if (!isOpen && isClosed) {\n setTempDate(selected);\n }\n }, [isOpen, selected, isClosed]);\n\n return {\n id,\n isOpen,\n visible,\n tempDate,\n selected,\n setVisible,\n setTempDate,\n setSelected,\n open,\n close,\n onPressOpen,\n onPressApply,\n onPressCancel,\n onPressCalendarDay,\n onChangeTime,\n onPressClear,\n onPressQuickDateOption,\n syncState,\n };\n}\n","import { TimePickerValue, TimeRange } from \"../types\";\n\nexport function getMonthNames(\n locale = \"en-US\",\n format: \"long\" | \"short\" | \"narrow\" = \"long\",\n) {\n return Array.from({ length: 12 }, (_, monthIndex) =>\n new Intl.DateTimeFormat(locale, {\n month: format,\n }).format(new Date(2026, monthIndex, 1)),\n );\n}\n\nexport function getDayNames(\n locale = \"en-US\",\n format: \"long\" | \"short\" | \"narrow\" = \"long\",\n) {\n const formatter = new Intl.DateTimeFormat(locale, {\n weekday: format,\n });\n\n const monday = new Date(2024, 0, 1);\n\n return Array.from({ length: 7 }, (_, index) => {\n const date = new Date(monday);\n\n date.setDate(monday.getDate() + index);\n\n return formatter.format(date);\n });\n}\n\nexport function getYears() {\n const start = new Date().getFullYear();\n let current = start;\n\n const years = [];\n\n while (current >= start - 150) {\n years.push(current--);\n }\n\n return years;\n}\n\nexport function getMonthCalendarMatrix(year: number, month: number) {\n const firstDayOfMonth = new Date(year, month, 1);\n const lastDayOfMonth = new Date(year, month + 1, 0);\n\n const firstDayWeekday = firstDayOfMonth.getDay();\n const mondayOffset = firstDayWeekday === 0 ? -6 : 1 - firstDayWeekday;\n\n const gridStartDate = new Date(firstDayOfMonth);\n gridStartDate.setDate(firstDayOfMonth.getDate() + mondayOffset);\n\n const lastDayWeekday = lastDayOfMonth.getDay();\n const sundayOffset = lastDayWeekday === 0 ? 0 : 7 - lastDayWeekday;\n\n const gridEndDate = new Date(lastDayOfMonth);\n gridEndDate.setDate(lastDayOfMonth.getDate() + sundayOffset);\n\n const weeks: Date[][] = [];\n const currentDate = new Date(gridStartDate);\n\n while (currentDate <= gridEndDate) {\n const week: Date[] = [];\n\n for (let dayIndex = 0; dayIndex < 7; dayIndex += 1) {\n week.push(new Date(currentDate));\n currentDate.setDate(currentDate.getDate() + 1);\n }\n\n weeks.push(week);\n }\n\n return weeks;\n}\n\nexport function createInfiniteRange(max: number, repeats: number) {\n const half = Math.floor(max / 2);\n const base = Array.from({ length: max }, (_, i) => i);\n\n return [\n ...base.slice(half),\n ...Array(repeats).fill(base).flat(),\n ...base.slice(0, half),\n ];\n}\n\nexport function getInfiniteRangeInitialIndex(\n max: number,\n targetValue: number,\n repeats: number,\n) {\n const half = Math.floor(max / 2);\n const middleSetIndex = Math.floor(repeats / 2);\n\n return half + middleSetIndex * max + targetValue;\n}\n\nexport function getClosestIndexByValue(\n data: number[],\n value: number,\n currentIndex: number,\n) {\n let closestIndex = -1;\n let closestDistance = Number.MAX_SAFE_INTEGER;\n\n for (let index = 0; index < data.length; index += 1) {\n if (data[index] !== value) {\n continue;\n }\n\n const distance = Math.abs(index - currentIndex);\n\n if (distance < closestDistance) {\n closestDistance = distance;\n closestIndex = index;\n }\n }\n\n return closestIndex;\n}\n\nexport function formatTimepickerValue(value: TimePickerValue) {\n const hours = String(value.hours).padStart(2, \"0\");\n const minutes = String(value.minutes).padStart(2, \"0\");\n const seconds = String(value.seconds).padStart(2, \"0\");\n\n return `${hours}:${minutes}:${seconds}`;\n}\n\nexport function applyTime(date: Date, time: TimePickerValue | null) {\n const nextDate = new Date(date);\n\n nextDate.setHours(time?.hours ?? 0);\n nextDate.setMinutes(time?.minutes ?? 0);\n nextDate.setSeconds(time?.seconds ?? 0);\n nextDate.setMilliseconds(0);\n\n return nextDate;\n}\n\nexport function getInitialVisibleDate(\n value?: TimeRange | null,\n defaultValue?: TimeRange | null,\n) {\n return (\n value?.start ??\n value?.end ??\n defaultValue?.start ??\n defaultValue?.end ??\n new Date()\n );\n}\n\nexport function normalizeRange(range: TimeRange | null): TimeRange | null {\n if (!range?.start && !range?.end) {\n return null;\n }\n\n if (range.start && range.end && range.start > range.end) {\n return {\n start: range.end,\n end: range.start,\n };\n }\n\n return range;\n}\n\nexport function endOfDay(date: Date) {\n const nextDate = new Date(date);\n\n nextDate.setHours(23);\n nextDate.setMinutes(59);\n nextDate.setSeconds(59);\n nextDate.setMilliseconds(999);\n\n return nextDate;\n}\n\nexport function addDays(date: Date, days: number) {\n const nextDate = new Date(date);\n\n nextDate.setDate(nextDate.getDate() + days);\n\n return nextDate;\n}\n\nexport function startOfWeek(date: Date) {\n const nextDate = startOfDay(date);\n const day = nextDate.getDay();\n const diff = day === 0 ? -6 : 1 - day;\n\n nextDate.setDate(nextDate.getDate() + diff);\n\n return nextDate;\n}\n\nexport function endOfWeek(date: Date) {\n const nextDate = startOfWeek(date);\n\n nextDate.setDate(nextDate.getDate() + 6);\n nextDate.setHours(23);\n nextDate.setMinutes(59);\n nextDate.setSeconds(59);\n nextDate.setMilliseconds(999);\n\n return nextDate;\n}\n\nexport function startOfDay(date: Date) {\n const nextDate = new Date(date);\n\n nextDate.setHours(0);\n nextDate.setMinutes(0);\n nextDate.setSeconds(0);\n nextDate.setMilliseconds(0);\n\n return nextDate;\n}\n","import { TimeRange } from \"../types\";\nimport { startOfDay } from \"./datetime.utils\";\n\nexport interface CalendarDayState {\n isSelected: boolean;\n isRangeStart: boolean;\n isInRange: boolean;\n isRangeEnd: boolean;\n isCurrentMonth: boolean;\n}\n\nexport interface GetCalendarDayStateOptions {\n date: Date;\n visible: Date;\n value?: Date | TimeRange | null;\n}\n\nexport function isTimeRange(value: unknown): value is TimeRange {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !(value instanceof Date) &&\n (\"start\" in value || \"end\" in value)\n );\n}\n\nexport function isSameDay(left: Date, right: Date) {\n return (\n left.getFullYear() === right.getFullYear() &&\n left.getMonth() === right.getMonth() &&\n left.getDate() === right.getDate()\n );\n}\n\nexport function isDateInMonth(date: Date, monthDate: Date) {\n return (\n date.getFullYear() === monthDate.getFullYear() &&\n date.getMonth() === monthDate.getMonth()\n );\n}\n\nexport function isBeforeDay(left: Date, right: Date) {\n return startOfDay(left).getTime() < startOfDay(right).getTime();\n}\n\nexport function isAfterDay(left: Date, right: Date) {\n return startOfDay(left).getTime() > startOfDay(right).getTime();\n}\n\nexport function isRangeStart(date: Date, rangeStart?: Date | null) {\n if (!rangeStart) {\n return false;\n }\n\n return isSameDay(date, rangeStart);\n}\n\nexport function isRangeEnd(date: Date, rangeEnd?: Date | null) {\n if (!rangeEnd) {\n return false;\n }\n\n return isSameDay(date, rangeEnd);\n}\n\nexport function isInRange(\n date: Date,\n rangeStart?: Date | null,\n rangeEnd?: Date | null,\n) {\n if (!rangeStart || !rangeEnd) {\n return false;\n }\n\n const currentTime = startOfDay(date).getTime();\n const startTime = startOfDay(rangeStart).getTime();\n const endTime = startOfDay(rangeEnd).getTime();\n\n return currentTime > startTime && currentTime < endTime;\n}\n\nexport function isSelected(\n date: Date,\n selected?: Date | null,\n rangeStart?: Date | null,\n rangeEnd?: Date | null,\n) {\n if (selected && isSameDay(date, selected)) {\n return true;\n }\n\n if (rangeStart && isSameDay(date, rangeStart)) {\n return true;\n }\n\n if (rangeEnd && isSameDay(date, rangeEnd)) {\n return true;\n }\n\n return false;\n}\n\nexport function getCalendarDayState({\n date,\n visible,\n value,\n}: GetCalendarDayStateOptions): CalendarDayState {\n const selected = value instanceof Date ? value : undefined;\n const range = isTimeRange(value) ? value : undefined;\n\n const rangeStart = range?.start;\n const rangeEnd = range?.end;\n\n return {\n isSelected: isSelected(date, selected, rangeStart, rangeEnd),\n isRangeStart: isRangeStart(date, rangeStart),\n isInRange: isInRange(date, rangeStart, rangeEnd),\n isRangeEnd: isRangeEnd(date, rangeEnd),\n isCurrentMonth: isDateInMonth(date, visible),\n };\n}\nexport function createCalendarRange(\n date: Date,\n previousRange?: TimeRange,\n): TimeRange | undefined {\n if (!previousRange?.start || previousRange?.end) {\n return {\n start: date,\n };\n }\n\n if (isSameDay(date, previousRange.start)) {\n return undefined;\n }\n\n if (isBeforeDay(date, previousRange.start)) {\n return {\n start: date,\n end: previousRange.start,\n };\n }\n\n return {\n start: previousRange.start,\n end: date,\n };\n}\n\nexport function getQuickOptionKey(value: Date | TimeRange) {\n if (\"start\" in value && \"end\" in value) {\n return `${value.start?.toISOString()}-${value.end?.toISOString()}`;\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n}\n\nexport function isDateRange(value: unknown): value is TimeRange {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !(value instanceof Date) &&\n (\"start\" in value || \"end\" in value)\n );\n}\n\nexport function getDateKey(date: Date) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n\n return `${year}-${month}-${day}`;\n}\n","import { useCallback, useEffect, useId, useState } from \"react\";\n\nimport { useControllableState, useIsOpen } from \"@impulse-ui-native/core\";\n\nimport { RangeSide, TimePickerValue, TimeRange } from \"../types\";\nimport {\n applyTime,\n endOfDay,\n getInitialVisibleDate,\n isDateInMonth,\n isSameDay,\n normalizeRange,\n startOfDay,\n} from \"../utils\";\n\ninterface UseDatetimeRangePickerStateOptions {\n value?: TimeRange | null;\n defaultValue?: TimeRange | null;\n onChange?: (value: TimeRange | null) => void;\n}\n\nexport function useDatetimeRangePicker({\n value,\n defaultValue,\n onChange,\n}: UseDatetimeRangePickerStateOptions) {\n const [visible, setVisible] = useState<Date>(\n getInitialVisibleDate(value, defaultValue),\n );\n\n const [tempRange, setTempRange] = useState<TimeRange | null>(\n value ?? defaultValue ?? null,\n );\n\n const [selected, setSelected] = useControllableState<TimeRange | null>({\n prop: value,\n defaultProp: defaultValue ?? null,\n onChange,\n });\n\n const id = useId();\n const { isOpen, isClosed, open, close } = useIsOpen();\n\n const onPressOpen = useCallback(() => {\n setTempRange(selected);\n open();\n }, [open, selected]);\n\n const syncState = useCallback(() => {\n setTempRange(selected);\n\n const nextVisible = selected?.start ?? selected?.end;\n\n if (nextVisible) {\n setVisible(nextVisible);\n }\n }, [selected]);\n\n const onPressApply = useCallback(() => {\n setSelected(normalizeRange(tempRange));\n close();\n }, [close, tempRange]);\n\n const onPressCancel = useCallback(() => {\n close();\n }, [close]);\n\n const onPressCalendarDay = useCallback((date: Date) => {\n setTempRange((prev) => {\n const startDate = startOfDay(date);\n const endDate = endOfDay(date);\n\n if (!prev?.start || prev.end) {\n return {\n start: startDate,\n };\n }\n\n if (isSameDay(startDate, prev.start)) {\n return null;\n }\n\n if (startDate < prev.start) {\n return {\n start: startDate,\n end: endOfDay(prev.start),\n };\n }\n\n return {\n start: prev.start,\n end: endDate,\n };\n });\n }, []);\n\n const onChangeStartTime = useCallback(\n (time: TimePickerValue | null) => {\n setTempRange((prev) => {\n const fallbackDate = prev?.start ?? visible;\n\n return normalizeRange({\n start: applyTime(fallbackDate, time),\n end: prev?.end,\n });\n });\n },\n [visible],\n );\n\n const onChangeEndTime = useCallback(\n (time: TimePickerValue | null) => {\n setTempRange((prev) => {\n const fallbackDate = prev?.end ?? prev?.start ?? visible;\n\n return normalizeRange({\n start: prev?.start,\n end: applyTime(fallbackDate, time),\n });\n });\n },\n [visible],\n );\n\n const onChangeTime = useCallback(\n (side: RangeSide, time: TimePickerValue | null) => {\n if (side === \"start\") {\n onChangeStartTime(time);\n return;\n }\n\n onChangeEndTime(time);\n },\n [onChangeEndTime, onChangeStartTime],\n );\n\n const onPressClear = useCallback(() => {\n setTempRange(null);\n }, []);\n\n const onPressQuickDateOption = useCallback(\n (optionValue: Date | TimeRange) => {\n if (optionValue instanceof Date) {\n const nextDate = startOfDay(optionValue);\n\n setTempRange({\n start: nextDate,\n });\n\n if (!isDateInMonth(nextDate, visible)) {\n setVisible(nextDate);\n }\n\n return;\n }\n\n const nextRange = normalizeRange(optionValue);\n\n setTempRange(nextRange);\n\n const nextVisible = nextRange?.start ?? nextRange?.end;\n\n if (nextVisible && !isDateInMonth(nextVisible, visible)) {\n setVisible(nextVisible);\n }\n },\n [visible],\n );\n\n useEffect(() => {\n if (!isOpen && isClosed) {\n setTempRange(selected);\n }\n }, [isOpen, selected, isClosed]);\n\n return {\n id,\n isOpen,\n visible,\n tempRange,\n selected,\n setVisible,\n setTempRange,\n setSelected,\n open,\n close,\n onPressOpen,\n onPressApply,\n onPressCancel,\n onPressCalendarDay,\n onChangeTime,\n onChangeStartTime,\n onChangeEndTime,\n onPressClear,\n onPressQuickDateOption,\n syncState,\n };\n}\n","import { memo, PropsWithChildren } from \"react\";\nimport { PressableProps } from \"react-native\";\n\nimport { CalendarDotsIcon } from \"@impulse-ui-native/icon/icons/calendar-dots\";\nimport { Control, Pressable } from \"@impulse-ui-native/primitives\";\n\nimport { DatetimePickerCommonProps } from \"../../types\";\n\ninterface DateControlProps extends DatetimePickerCommonProps {\n onPress: PressableProps[\"onPress\"];\n}\n\nexport const DateControl = memo(function DateControl(\n props: PropsWithChildren<DateControlProps>,\n) {\n const {\n size = \"medium\",\n variant = \"outlined\",\n label,\n error,\n disabled,\n PrefixIcon = CalendarDotsIcon,\n Prefix,\n onPressPrefix: onPrefixPress,\n SuffixIcon,\n Suffix,\n onPressSuffix: onSuffixPress,\n onPress,\n children,\n } = props;\n\n return (\n <Control.Provider\n size={size}\n variant={variant}\n error={error}\n disabled={disabled}\n >\n <Control.Root>\n <Control.Label>{label}</Control.Label>\n <Pressable onPress={onPress}>\n <Control.Container>\n <Control.Addon\n icon={PrefixIcon}\n Content={Prefix}\n onPress={onPrefixPress}\n />\n {children}\n <Control.Addon\n icon={SuffixIcon}\n Content={Suffix}\n onPress={onSuffixPress}\n />\n </Control.Container>\n </Pressable>\n <Control.Error />\n </Control.Root>\n </Control.Provider>\n );\n});\n","import { memo } from \"react\";\n\nimport { Flyout } from \"@impulse-ui-native/flyout\";\nimport { Portal } from \"@impulse-ui-native/portal\";\nimport { View } from \"@impulse-ui-native/primitives\";\nimport { useComponentsTokens } from \"@impulse-ui-native/theme\";\n\nimport { DatetimePickerFlyoutCommonProps, TimeRange } from \"../../types\";\nimport { Calendar } from \"../common/calendar\";\nimport { DatetimePickerFlyoutActions } from \"../common/datetime-picker-flyout-actions\";\nimport { QuickDateOptions } from \"../common/quick-date-options\";\nimport { VisibleDateSelect } from \"../common/visible-date-select\";\n\ninterface DatePickerFlyoutProps extends DatetimePickerFlyoutCommonProps {\n value: Date | TimeRange | null | undefined;\n}\n\nexport const DatePickerFlyout = memo(function DatePickerFlyout(\n props: DatePickerFlyoutProps,\n) {\n const {\n visible,\n value,\n clearable,\n quickDateOptions,\n onPressQuickDateOption,\n onChangeVisible,\n onPressCalendarDay,\n onPressClear,\n onPressCancel,\n onPressApply,\n ...rest\n } = props;\n\n const tokens = useComponentsTokens();\n const datePickerTokens = tokens.datetimePicker.datePickerFlyout;\n\n return (\n <Portal>\n <Flyout {...rest}>\n <View gap={datePickerTokens.gap}>\n <VisibleDateSelect value={visible} onChange={onChangeVisible} />\n\n <Calendar\n value={value}\n visible={visible}\n onPress={onPressCalendarDay}\n />\n\n {quickDateOptions && quickDateOptions.length > 0 ? (\n <QuickDateOptions\n options={quickDateOptions}\n onPress={onPressQuickDateOption}\n />\n ) : null}\n\n <DatetimePickerFlyoutActions\n canClear={Boolean(value && clearable)}\n onPressApply={onPressApply}\n onPressCancel={onPressCancel}\n onPressClear={onPressClear}\n />\n </View>\n </Flyout>\n </Portal>\n );\n});\n","import { memo, useMemo } from \"react\";\n\nimport { Typography, View } from \"@impulse-ui-native/primitives\";\nimport { useComponentsTokens, useTheme } from \"@impulse-ui-native/theme\";\n\nimport { TimeRange } from \"../../types\";\nimport {\n getCalendarDayState,\n getDateKey,\n getDayNames,\n getMonthCalendarMatrix,\n} from \"../../utils\";\nimport { CalendarDay } from \"./calendar-day\";\n\ninterface CalendarProps {\n value: Date | TimeRange | null | undefined;\n visible: Date;\n onPress: (date: Date) => void;\n}\n\nexport const Calendar = memo(function Calendar(props: CalendarProps) {\n const { visible, value, onPress } = props;\n\n const tokens = useComponentsTokens();\n const calendarTokens = tokens.datetimePicker.calendar;\n\n const visibleMonth = visible.getMonth();\n const visibleYear = visible.getFullYear();\n\n const days = useMemo(() => {\n return getDayNames();\n }, []);\n\n const calendar = useMemo(() => {\n return getMonthCalendarMatrix(visibleYear, visibleMonth);\n }, [visibleYear, visibleMonth]);\n\n return (\n <View>\n <View\n flexDirection=\"row\"\n marginBottom={calendarTokens.dayNamesMarginBottom}\n >\n {days.map((day) => (\n <Typography.Body flex={1} textAlign=\"center\" key={day}>\n {day[0]}\n </Typography.Body>\n ))}\n </View>\n\n <View gap={calendarTokens.weeksGap}>\n {calendar.map((dates, index) => (\n <View flexDirection=\"row\" justifyContent=\"space-around\" key={index}>\n {dates.map((date) => {\n const state = getCalendarDayState({\n date,\n visible,\n value,\n });\n\n return (\n <CalendarDay\n key={getDateKey(date)}\n date={date}\n isSelected={state.isSelected}\n isInRange={state.isInRange}\n isRangeStart={state.isRangeStart}\n isRangeEnd={state.isRangeEnd}\n isCurrentMonth={state.isCurrentMonth}\n onPress={onPress}\n />\n );\n })}\n </View>\n ))}\n </View>\n </View>\n );\n});\n","import { memo, useCallback } from \"react\";\nimport { StyleSheet, TextStyle, ViewStyle } from \"react-native\";\n\nimport { Pressable, Typography, View } from \"@impulse-ui-native/primitives\";\nimport { AppTheme, useThemedStyles } from \"@impulse-ui-native/theme\";\n\ninterface CalendarDayProps {\n date: Date;\n selected?: boolean;\n isSelected?: boolean;\n isRangeStart?: boolean;\n isInRange?: boolean;\n isRangeEnd?: boolean;\n isCurrentMonth?: boolean;\n onPress?: (date: Date) => void;\n}\n\nexport const CalendarDay = memo(function CalendarDay(props: CalendarDayProps) {\n const styles = useThemedStyles(themedStyles, props, [\n props.isSelected,\n props.isRangeStart,\n props.isInRange,\n props.isRangeEnd,\n props.isCurrentMonth,\n ]);\n\n const handleOnPress = useCallback(\n () => props.onPress?.(props.date),\n [props.date, props.onPress],\n );\n\n return (\n <Pressable style={styles.pressableStyles} onPress={handleOnPress}>\n <View style={styles.container}>\n <Typography.Body style={styles.text} numeric>\n {props.date.getDate()}\n </Typography.Body>\n </View>\n </Pressable>\n );\n});\n\nfunction themedStyles(\n theme: AppTheme,\n props: {\n isSelected?: boolean;\n isRangeStart?: boolean;\n isInRange?: boolean;\n isRangeEnd?: boolean;\n isCurrentMonth?: boolean;\n },\n) {\n const dayTokens = theme.components.datetimePicker.day;\n\n let color: TextStyle[\"color\"] = dayTokens.color;\n let backgroundColor: ViewStyle[\"backgroundColor\"] = \"transparent\";\n\n if (!props.isCurrentMonth) {\n color = dayTokens.outsideMonthColor;\n }\n\n if (props.isInRange) {\n backgroundColor = dayTokens.rangeBackgroundColor;\n color = dayTokens.rangeColor;\n }\n\n if (props.isSelected || props.isRangeStart || props.isRangeEnd) {\n backgroundColor = dayTokens.selectedBackgroundColor;\n color = dayTokens.selectedColor;\n }\n\n return StyleSheet.create({\n pressableStyles: {\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n\n container: {\n borderRadius: dayTokens.borderRadius,\n width: dayTokens.size,\n height: dayTokens.size,\n justifyContent: \"center\",\n alignItems: \"center\",\n backgroundColor,\n },\n\n text: {\n color,\n },\n });\n}\n","import { memo } from \"react\";\n\nimport {\n Button,\n Pressable,\n Typography,\n View,\n} from \"@impulse-ui-native/primitives\";\nimport { useComponentsTokens } from \"@impulse-ui-native/theme\";\n\nimport { DatetimePickerFlyoutCommonProps } from \"../../types\";\n\ninterface DatetimePickerFlyoutActionsProps {\n canClear?: boolean;\n onPressApply: DatetimePickerFlyoutCommonProps[\"onPressApply\"];\n onPressCancel: DatetimePickerFlyoutCommonProps[\"onPressCancel\"];\n onPressClear: DatetimePickerFlyoutCommonProps[\"onPressClear\"];\n}\n\nexport const DatetimePickerFlyoutActions = memo(\n function DatetimePickerFlyoutActions(\n props: DatetimePickerFlyoutActionsProps,\n ) {\n const tokens = useComponentsTokens();\n const flyoutActionsTokens = tokens.datetimePicker.flyoutActions;\n\n return (\n <View gap={flyoutActionsTokens.gap}>\n {props.canClear ? (\n <View alignItems=\"center\">\n <Pressable onPress={props.onPressClear}>\n <Typography.BodyLarge color={flyoutActionsTokens.clearColor}>\n Clear\n </Typography.BodyLarge>\n </Pressable>\n </View>\n ) : null}\n\n <View flexDirection=\"row\" gap={flyoutActionsTokens.buttonsGap}>\n <View flex={1}>\n <Button onPress={props.onPressCancel} variant=\"outlined\">\n Cancel\n </Button>\n </View>\n\n <View flex={1}>\n <Button onPress={props.onPressApply}>Apply</Button>\n </View>\n </View>\n </View>\n );\n },\n);\n","import { memo, useMemo } from \"react\";\nimport { ScrollView, ViewStyle } from \"react-native\";\n\nimport { Tag } from \"@impulse-ui-native/primitives\";\nimport { useComponentsTokens } from \"@impulse-ui-native/theme\";\n\nimport { QuickDateOption, TimeRange } from \"../../types\";\nimport { getQuickOptionKey } from \"../../utils\";\n\ninterface QuickDateOptionsProps {\n options: QuickDateOption<Date | TimeRange>[];\n onPress?: (date: QuickDateOption<Date | TimeRange>[\"value\"]) => void;\n}\n\nexport const QuickDateOptions = memo(function QuickDateOptions(\n props: QuickDateOptionsProps,\n) {\n const tokens = useComponentsTokens();\n\n const style = useMemo<ViewStyle>(\n () => ({ gap: tokens.datetimePicker.quickDateOptions.gap }),\n [tokens.datetimePicker.quickDateOptions],\n );\n\n return (\n <ScrollView\n horizontal\n contentContainerStyle={style}\n showsHorizontalScrollIndicator={false}\n >\n {props.options.map((option, index) => (\n <Tag\n key={getQuickOptionKey(option.value) ?? index}\n label={option.label}\n onPress={() => props.onPress?.(option.value)}\n />\n ))}\n </ScrollView>\n );\n});\n","import { memo, useCallback, useMemo } from \"react\";\n\nimport { CalendarDotsIcon } from \"@impulse-ui-native/icon/icons/calendar-dots\";\nimport { View } from \"@impulse-ui-native/primitives\";\nimport { Select, SelectOption } from \"@impulse-ui-native/select\";\nimport { useComponentsTokens } from \"@impulse-ui-native/theme\";\n\nimport { getMonthNames, getYears } from \"../../utils\";\n\ninterface VisibleDateSelectProps {\n value: Date;\n defaultValue?: Date;\n onChange: (value: Date) => void;\n}\n\nexport const VisibleDateSelect = memo(function VisibleDateSelect(\n props: VisibleDateSelectProps,\n) {\n const tokens = useComponentsTokens();\n\n const monthOptions = useMemo<SelectOption<number>[]>(() => {\n return getMonthNames().map((month, index) => ({\n label: month,\n value: index,\n }));\n }, []);\n\n const yearOptions = useMemo<SelectOption<number>[]>(() => {\n return getYears().map((year) => ({\n label: String(year),\n value: year,\n }));\n }, []);\n\n const onChangeVisibleMonth = useCallback(\n (month: number | undefined) => {\n if (month !== undefined && month !== props.value.getMonth()) {\n const newDate = new Date(props.value);\n newDate.setMonth(month);\n\n props.onChange(newDate);\n }\n },\n [props.value, props.onChange],\n );\n\n const onChangeVisibleYear = useCallback(\n (year: number | undefined) => {\n if (year !== undefined && year !== props.value.getFullYear()) {\n const newDate = new Date(props.value);\n newDate.setFullYear(year);\n\n props.onChange(newDate);\n }\n },\n [props.value, props.onChange],\n );\n\n return (\n <View flexDirection=\"row\" gap={tokens.datetimePicker.visibleDateSelect.gap}>\n <View flex={1}>\n <Select\n options={monthOptions}\n value={props.value.getMonth()}\n defaultValue={\n props.defaultValue?.getMonth() ?? props.value.getMonth()\n }\n PrefixIcon={CalendarDotsIcon}\n onChange={onChangeVisibleMonth}\n placeholder=\"Month\"\n />\n </View>\n\n <View flex={1}>\n <Select\n options={yearOptions}\n value={props.value.getFullYear()}\n defaultValue={\n props.defaultValue?.getFullYear() ?? props.value.getFullYear()\n }\n PrefixIcon={CalendarDotsIcon}\n onChange={onChangeVisibleYear}\n placeholder=\"Year\"\n />\n </View>\n </View>\n );\n});\n","import { memo } from \"react\";\n\nimport { Control } from \"@impulse-ui-native/primitives\";\n\nimport { useDatetimeRangePicker } from \"../../hooks\";\nimport { DatetimeRangePickerProps } from \"../../types\";\nimport { DateControl } from \"../common/date-control\";\nimport { DatePickerFlyout } from \"./date-picker.flyout\";\n\nexport const DateRangePicker = memo(function DateRangePicker(\n props: DatetimeRangePickerProps,\n) {\n const {\n value,\n defaultValue,\n onChange,\n placeholder,\n quickDateOptions,\n ...rest\n } = props;\n\n const {\n id,\n isOpen,\n visible,\n tempRange,\n selected,\n setVisible,\n close,\n onPressOpen,\n onPressApply,\n onPressCancel,\n onPressCalendarDay,\n onPressClear,\n onPressQuickDateOption,\n syncState,\n } = useDatetimeRangePicker({ value, defaultValue, onChange });\n\n return (\n <DateControl {...rest} onPress={onPressOpen}>\n {selected === null ? (\n <Control.Placeholder>{placeholder}</Control.Placeholder>\n ) : null}\n\n {selected !== null ? (\n <Control.Value>\n {selected.start?.toDateString()} - {selected.end?.toDateString()}\n </Control.Value>\n ) : null}\n\n <DatePickerFlyout\n id={id}\n title=\"Datetime\"\n open={isOpen}\n visible={visible}\n value={tempRange}\n quickDateOptions={quickDateOptions}\n onClose={close}\n onCloseFinished={syncState}\n onPressQuickDateOption={onPressQuickDateOption}\n onChangeVisible={setVisible}\n onPressCalendarDay={onPressCalendarDay}\n onPressApply={onPressApply}\n onPressCancel={onPressCancel}\n onPressClear={onPressClear}\n />\n </DateControl>\n );\n});\n","import { memo } from \"react\";\n\nimport { Control } from \"@impulse-ui-native/primitives\";\n\nimport { useDatetimePicker } from \"../../hooks\";\nimport { DatetimePickerProps } from \"../../types\";\nimport { DateControl } from \"../common/date-control\";\nimport { DatetimePickerFlyout } from \"./datetime-picker.flyout\";\n\nexport const DatetimePicker = memo(function DatetimePicker(\n props: DatetimePickerProps,\n) {\n const {\n value,\n defaultValue,\n clearable = true,\n onChange,\n placeholder,\n quickDateOptions,\n ...rest\n } = props;\n\n const {\n id,\n isOpen,\n visible,\n tempDate,\n selected,\n setVisible,\n close,\n onPressOpen,\n onPressApply,\n onPressCancel,\n onPressCalendarDay,\n onChangeTime,\n onPressClear,\n onPressQuickDateOption,\n syncState,\n } = useDatetimePicker({ value, defaultValue, onChange });\n\n return (\n <DateControl {...rest} onPress={onPressOpen}>\n {selected === null ? (\n <Control.Placeholder>{placeholder}</Control.Placeholder>\n ) : null}\n\n {selected !== null ? (\n <Control.Value>{selected.toLocaleString()}</Control.Value>\n ) : null}\n\n <DatetimePickerFlyout\n id={id}\n open={isOpen}\n title=\"Date\"\n visible={visible}\n value={tempDate}\n clearable={clearable}\n quickDateOptions={quickDateOptions}\n onClose={close}\n onCloseFinished={syncState}\n onPressQuickDateOption={onPressQuickDateOption}\n onChangeVisible={setVisible}\n onPressCalendarDay={onPressCalendarDay}\n onChangeTime={onChangeTime}\n onPressApply={onPressApply}\n onPressCancel={onPressCancel}\n onPressClear={onPressClear}\n />\n </DateControl>\n );\n});\n","import { memo, useMemo } from \"react\";\n\nimport { Flyout } from \"@impulse-ui-native/flyout\";\nimport { Portal } from \"@impulse-ui-native/portal\";\nimport { View } from \"@impulse-ui-native/primitives\";\nimport { useComponentsTokens } from \"@impulse-ui-native/theme\";\n\nimport { DatetimePickerFlyoutCommonProps, TimePickerValue } from \"../../types\";\nimport { Calendar } from \"../common/calendar\";\nimport { DatetimePickerFlyoutActions } from \"../common/datetime-picker-flyout-actions\";\nimport { QuickDateOptions } from \"../common/quick-date-options\";\nimport { VisibleDateSelect } from \"../common/visible-date-select\";\nimport { TimePicker } from \"../time/time-picker\";\n\nexport interface DatetimePickerFlyoutProps extends DatetimePickerFlyoutCommonProps {\n value: Date | null | undefined;\n onChangeTime?: (value: TimePickerValue | null) => void;\n}\n\nexport const DatetimePickerFlyout = memo(function DateRangePickerFlyout(\n props: DatetimePickerFlyoutProps,\n) {\n const {\n visible,\n value,\n clearable,\n quickDateOptions,\n onPressQuickDateOption,\n onChangeVisible,\n onPressCalendarDay,\n onChangeTime,\n onPressClear,\n onPressCancel,\n onPressApply,\n ...rest\n } = props;\n\n const tokens = useComponentsTokens();\n const datetimePickerTokens = tokens.datetimePicker.datetimePickerFlyout;\n\n const timeValue = useMemo<TimePickerValue | null>(() => {\n if (value) {\n return {\n hours: value.getHours(),\n minutes: value.getMinutes(),\n seconds: value.getSeconds(),\n };\n }\n\n return null;\n }, [value]);\n\n return (\n <Portal>\n <Flyout {...rest}>\n <View gap={datetimePickerTokens.gap}>\n <VisibleDateSelect value={visible} onChange={onChangeVisible} />\n <Calendar\n value={value}\n visible={visible}\n onPress={onPressCalendarDay}\n />\n <TimePicker\n value={timeValue}\n clearable={false}\n defaultValue={timeValue}\n onChange={onChangeTime}\n placeholder=\"00:00:00\"\n />\n {quickDateOptions && quickDateOptions.length > 0 ? (\n <QuickDateOptions\n options={quickDateOptions}\n onPress={onPressQuickDateOption}\n />\n ) : null}\n <DatetimePickerFlyoutActions\n canClear={Boolean(value && clearable)}\n onPressApply={onPressApply}\n onPressCancel={onPressCancel}\n onPressClear={onPressClear}\n />\n </View>\n </Flyout>\n </Portal>\n );\n});\n","import { memo, useCallback, useEffect, useId, useState } from \"react\";\n\nimport { useControllableState, useIsOpen } from \"@impulse-ui-native/core\";\nimport { ClockIcon } from \"@impulse-ui-native/icon/icons/clock\";\nimport { Control, Pressable } from \"@impulse-ui-native/primitives\";\n\nimport { DatetimePickerCommonProps, TimePickerValue } from \"../../types\";\nimport { formatTimepickerValue } from \"../../utils\";\nimport { TimePickerFlyout } from \"./time-picker.flyout\";\n\ninterface TimePickerProps extends DatetimePickerCommonProps {\n value?: TimePickerValue | null;\n defaultValue?: TimePickerValue | null;\n onChange?: (value: TimePickerValue | null) => void;\n}\n\nexport const TimePicker = memo(function TimePicker(props: TimePickerProps) {\n const {\n value,\n defaultValue,\n placeholder,\n clearable = true,\n size = \"medium\",\n onChange,\n variant = \"outlined\",\n label,\n error,\n disabled,\n PrefixIcon = ClockIcon,\n Prefix,\n onPressPrefix: onPrefixPress,\n SuffixIcon,\n Suffix,\n onPressSuffix: onSuffixPress,\n } = props;\n\n const id = useId();\n const { isOpen, isClosed, finishClose, open, close } = useIsOpen();\n\n const [selected, setSelected] = useControllableState<TimePickerValue | null>({\n prop: value,\n defaultProp: defaultValue ?? null,\n onChange,\n });\n\n const [tempTime, setTempTime] = useState<TimePickerValue | null>(selected);\n\n const onPressOpen = useCallback(() => {\n setTempTime(selected);\n open();\n }, [open, selected]);\n\n const onPressApply = useCallback(() => {\n setSelected(tempTime);\n close();\n }, [tempTime, close]);\n\n const onPressClear = useCallback(() => {\n setTempTime(null);\n }, []);\n\n const syncState = useCallback(() => {\n setTempTime(selected);\n }, [selected]);\n\n const onCloseFinished = useCallback(() => {\n syncState();\n finishClose();\n }, [syncState, finishClose]);\n\n useEffect(() => {\n if (!isOpen && isClosed) {\n setTempTime(selected);\n }\n }, [isOpen, selected, isClosed]);\n\n return (\n <Control.Provider\n size={size}\n variant={variant}\n error={error}\n disabled={disabled}\n >\n <Control.Root>\n <Control.Label>{label}</Control.Label>\n <Pressable onPress={onPressOpen}>\n <Control.Container>\n <Control.Addon\n icon={PrefixIcon}\n Content={Prefix}\n onPress={onPrefixPress}\n />\n\n {selected === null && placeholder ? (\n <Control.Placeholder>{placeholder}</Control.Placeholder>\n ) : null}\n\n {selected !== null ? (\n <Control.Value>{formatTimepickerValue(selected)}</Control.Value>\n ) : null}\n\n <TimePickerFlyout\n id={id}\n title=\"Time\"\n open={isOpen}\n value={tempTime}\n clearable={clearable}\n onClose={close}\n onCloseFinished={onCloseFinished}\n onChange={setTempTime}\n onPressApply={onPressApply}\n onPressClear={onPressClear}\n onPressCancel={close}\n />\n\n <Control.Addon\n icon={SuffixIcon}\n Content={Suffix}\n onPress={onSuffixPress}\n />\n </Control.Container>\n </Pressable>\n <Control.Error />\n </Control.Root>\n </Control.Provider>\n );\n});\n","import { memo, useCallback, useMemo } from \"react\";\n\nimport { Flyout, FlyoutProps } from \"@impulse-ui-native/flyout\";\nimport { Portal } from \"@impulse-ui-native/portal\";\nimport { View } from \"@impulse-ui-native/primitives\";\nimport { useComponentsTokens, useTheme } from \"@impulse-ui-native/theme\";\n\nimport { PickerFlyoutActions, TimePickerValue } from \"../../types\";\nimport { createInfiniteRange, getInfiniteRangeInitialIndex } from \"../../utils\";\nimport { DatetimePickerFlyoutActions } from \"../common/datetime-picker-flyout-actions\";\nimport { PickerColumn } from \"./picker-column\";\n\ninterface TimePickerFlyoutProps extends FlyoutProps, PickerFlyoutActions {\n value: Partial<TimePickerValue> | null | undefined;\n onChange: (value: TimePickerValue | null) => void;\n}\n\nconst DefaultTimePickerValue: TimePickerValue = {\n hours: 0,\n minutes: 0,\n seconds: 0,\n};\n\nexport const TimePickerFlyout = memo(function TimePickerFlyout(\n props: TimePickerFlyoutProps,\n) {\n const {\n value,\n onChange,\n onPressApply,\n onPressCancel,\n onPressClear,\n clearable,\n ...rest\n } = props;\n\n const tokens = useComponentsTokens();\n const timePickerTokens = tokens.timePicker;\n\n const selectedHours = value?.hours ?? DefaultTimePickerValue.hours;\n const selectedMinutes = value?.minutes ?? DefaultTimePickerValue.minutes;\n const selectedSeconds = value?.seconds ?? DefaultTimePickerValue.seconds;\n\n const hours = useMemo(() => {\n return createInfiniteRange(24, 4);\n }, []);\n\n const minutes = useMemo(() => {\n return createInfiniteRange(60, 4);\n }, []);\n\n const seconds = useMemo(() => {\n return createInfiniteRange(60, 4);\n }, []);\n\n const hoursInitialIndex = useMemo(() => {\n return getInfiniteRangeInitialIndex(24, selectedHours, 4);\n }, [selectedHours]);\n\n const minutesInitialIndex = useMemo(() => {\n return getInfiniteRangeInitialIndex(60, selectedMinutes, 4);\n }, [selectedMinutes]);\n\n const secondsInitialIndex = useMemo(() => {\n return getInfiniteRangeInitialIndex(60, selectedSeconds, 4);\n }, [selectedSeconds]);\n\n const handleHoursChange = useCallback(\n (hours: number) => {\n onChange({\n hours,\n minutes: selectedMinutes,\n seconds: selectedSeconds,\n });\n },\n [onChange, selectedMinutes, selectedSeconds],\n );\n\n const handleMinutesChange = useCallback(\n (minutes: number) => {\n onChange({\n hours: selectedHours,\n minutes,\n seconds: selectedSeconds,\n });\n },\n [onChange, selectedHours, selectedSeconds],\n );\n\n const handleSecondsChange = useCallback(\n (seconds: number) => {\n onChange({\n hours: selectedHours,\n minutes: selectedMinutes,\n seconds,\n });\n },\n [onChange, selectedHours, selectedMinutes],\n );\n\n return (\n <Portal>\n <Flyout {...rest}>\n <View gap={timePickerTokens.flyout.gap}>\n <View\n height={timePickerTokens.columns.height}\n gap={timePickerTokens.columns.gap}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <View\n pointerEvents=\"none\"\n position=\"absolute\"\n height={timePickerTokens.columns.indicatorHeight}\n width={timePickerTokens.columns.indicatorWidth}\n borderRadius={timePickerTokens.columns.indicatorBorderRadius}\n backgroundColor={\n timePickerTokens.columns.indicatorBackgroundColor\n }\n top={timePickerTokens.columns.indicatorTop}\n />\n\n <PickerColumn\n data={hours}\n label=\"h\"\n format=\"24h\"\n type=\"hour\"\n value={selectedHours}\n initialScrollIndex={hoursInitialIndex}\n onChange={handleHoursChange}\n />\n\n <PickerColumn\n data={minutes}\n label=\"m\"\n format=\"24h\"\n type=\"minute\"\n value={selectedMinutes}\n initialScrollIndex={minutesInitialIndex}\n onChange={handleMinutesChange}\n />\n\n <PickerColumn\n data={seconds}\n label=\"s\"\n format=\"24h\"\n type=\"second\"\n value={selectedSeconds}\n initialScrollIndex={secondsInitialIndex}\n onChange={handleSecondsChange}\n />\n </View>\n\n <DatetimePickerFlyoutActions\n canClear={Boolean(value && clearable)}\n onPressApply={onPressApply}\n onPressCancel={onPressCancel}\n onPressClear={onPressClear}\n />\n </View>\n </Flyout>\n </Portal>\n );\n});\n","import { memo, useCallback, useEffect, useMemo, useRef } from \"react\";\nimport {\n FlatList,\n ListRenderItemInfo,\n NativeScrollEvent,\n NativeSyntheticEvent,\n StyleSheet,\n} from \"react-native\";\n\nimport { Pressable, Typography, View } from \"@impulse-ui-native/primitives\";\nimport {\n FontWeightValue,\n useComponentsTokens,\n useTheme,\n} from \"@impulse-ui-native/theme\";\n\nimport { getClosestIndexByValue } from \"../../utils\";\n\ninterface PickerColumnProps {\n data: number[];\n label: string;\n type: \"hour\" | \"minute\" | \"second\";\n format: \"12h\" | \"24h\";\n value?: number;\n initialScrollIndex?: number;\n onChange?: (value: number) => void;\n}\n\nexport const PickerColumn = memo(function PickerColumn(\n props: PickerColumnProps,\n) {\n const { data, label, value, initialScrollIndex = 0, onChange } = props;\n\n const tokens = useComponentsTokens();\n const columnTokens = tokens.timePicker.column;\n\n const listRef = useRef<FlatList<number>>(null);\n const currentIndexRef = useRef(initialScrollIndex);\n\n const pressableStyle = useMemo(\n () => [\n styles.pressableStyle,\n {\n width: columnTokens.listWidth,\n height: columnTokens.itemHeight,\n },\n ],\n [columnTokens.listWidth, columnTokens.itemHeight],\n );\n\n const contentContainerStyle = useMemo(\n () => [\n styles.contentContainerStyle,\n {\n paddingVertical: columnTokens.verticalPadding,\n },\n ],\n [columnTokens.verticalPadding],\n );\n\n const keyExtractor = useCallback((item: number, index: number) => {\n return `${item}-${index}`;\n }, []);\n\n const getItemLayout = useCallback(\n (_: ArrayLike<number> | null | undefined, index: number) => {\n return {\n length: columnTokens.itemHeight,\n offset: columnTokens.itemHeight * index,\n index,\n };\n },\n [columnTokens.itemHeight],\n );\n\n const scrollToIndex = useCallback((index: number, animated: boolean) => {\n currentIndexRef.current = index;\n\n listRef.current?.scrollToIndex({\n index,\n animated,\n });\n }, []);\n\n const renderItem = useCallback(\n ({ item }: ListRenderItemInfo<number>) => {\n const selected = item === value;\n const fontWeight: FontWeightValue = (\n selected ? columnTokens.selectedFontWeight : columnTokens.fontWeight\n ) as FontWeightValue;\n\n return (\n <Pressable style={pressableStyle}>\n <Typography.Master\n fontSize={columnTokens.fontSize}\n color={selected ? columnTokens.selectedColor : columnTokens.color}\n textAlign=\"center\"\n numberOfLines={1}\n fontWeight={fontWeight}\n numeric\n >\n {String(item).padStart(2, \"0\")}\n </Typography.Master>\n </Pressable>\n );\n },\n [\n columnTokens.color,\n columnTokens.fontSize,\n columnTokens.fontWeight,\n columnTokens.selectedColor,\n columnTokens.selectedFontWeight,\n pressableStyle,\n value,\n ],\n );\n\n const onMomentumScrollEnd = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n const offset = event.nativeEvent.contentOffset.y;\n const index = Math.round(offset / columnTokens.itemHeight);\n const newValue = data[index];\n\n if (newValue === value) {\n return;\n }\n\n currentIndexRef.current = index;\n\n if (newValue !== undefined) {\n onChange?.(newValue);\n }\n },\n [columnTokens.itemHeight, data, onChange, value],\n );\n\n const onScrollToIndexFailed = useCallback(() => {\n requestAnimationFrame(() => {\n listRef.current?.scrollToOffset({\n offset: initialScrollIndex * columnTokens.itemHeight,\n animated: false,\n });\n });\n }, [columnTokens.itemHeight, initialScrollIndex]);\n\n useEffect(() => {\n if (value === undefined) {\n return;\n }\n\n const closestIndex = getClosestIndexByValue(\n data,\n value,\n currentIndexRef.current,\n );\n\n if (closestIndex === -1 || closestIndex === currentIndexRef.current) {\n return;\n }\n\n scrollToIndex(closestIndex, true);\n }, [data, scrollToIndex, value]);\n\n return (\n <View\n width={columnTokens.width}\n height={columnTokens.height}\n flexDirection=\"row\"\n justifyContent=\"center\"\n gap={columnTokens.gap}\n >\n <View\n width={columnTokens.listWidth}\n height={columnTokens.height}\n overflow=\"hidden\"\n >\n <FlatList\n ref={listRef}\n data={data}\n renderItem={renderItem}\n keyExtractor={keyExtractor}\n getItemLayout={getItemLayout}\n snapToInterval={columnTokens.itemHeight}\n snapToAlignment=\"start\"\n decelerationRate=\"fast\"\n initialScrollIndex={initialScrollIndex}\n showsVerticalScrollIndicator={false}\n contentContainerStyle={contentContainerStyle}\n onMomentumScrollEnd={onMomentumScrollEnd}\n onScrollToIndexFailed={onScrollToIndexFailed}\n removeClippedSubviews\n windowSize={3}\n initialNumToRender={7}\n maxToRenderPerBatch={7}\n updateCellsBatchingPeriod={50}\n scrollEventThrottle={16}\n />\n </View>\n\n <Typography.Body alignSelf=\"center\">{label}</Typography.Body>\n </View>\n );\n});\n\nconst styles = StyleSheet.create({\n pressableStyle: {\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n contentContainerStyle: {},\n});\n","import { memo } from \"react\";\n\nimport { Control } from \"@impulse-ui-native/primitives\";\n\nimport { useDatetimeRangePicker } from \"../../hooks\";\nimport { DatetimeRangePickerProps } from \"../../types\";\nimport { DateControl } from \"../common/date-control\";\nimport { DatetimeRangePickerFlyout } from \"./datetime-range-picker.flyout\";\n\nexport const DatetimeRangePicker = memo(function DatetimeRangePicker(\n props: DatetimeRangePickerProps,\n) {\n const {\n value,\n defaultValue,\n clearable = true,\n onChange,\n placeholder,\n quickDateOptions,\n ...rest\n } = props;\n\n const {\n id,\n isOpen,\n visible,\n tempRange,\n selected,\n setVisible,\n close,\n onPressOpen,\n onPressApply,\n onPressCancel,\n onPressCalendarDay,\n onChangeStartTime,\n onChangeEndTime,\n onPressClear,\n onPressQuickDateOption,\n syncState,\n } = useDatetimeRangePicker({ value, defaultValue, onChange });\n\n return (\n <DateControl {...rest} onPress={onPressOpen}>\n {selected === null ? (\n <Control.Placeholder>{placeholder}</Control.Placeholder>\n ) : null}\n\n {selected !== null ? (\n <Control.Value>\n {selected.start?.toLocaleString()} - {selected.end?.toLocaleString()}\n </Control.Value>\n ) : null}\n\n <DatetimeRangePickerFlyout\n id={id}\n open={isOpen}\n title=\"Date\"\n visible={visible}\n value={tempRange}\n clearable={clearable}\n quickDateOptions={quickDateOptions}\n onClose={close}\n onCloseFinished={syncState}\n onPressQuickDateOption={onPressQuickDateOption}\n onChangeVisible={setVisible}\n onPressCalendarDay={onPressCalendarDay}\n onChangeStartTime={onChangeStartTime}\n onChangeEndTime={onChangeEndTime}\n onPressApply={onPressApply}\n onPressCancel={onPressCancel}\n onPressClear={onPressClear}\n />\n </DateControl>\n );\n});\n","import { memo, useMemo } from \"react\";\n\nimport { Flyout } from \"@impulse-ui-native/flyout\";\nimport { Portal } from \"@impulse-ui-native/portal\";\nimport { View } from \"@impulse-ui-native/primitives\";\nimport { useComponentsTokens } from \"@impulse-ui-native/theme\";\n\nimport {\n DatetimePickerFlyoutCommonProps,\n TimePickerValue,\n TimeRange,\n} from \"../../types\";\nimport { Calendar } from \"../common/calendar\";\nimport { DatetimePickerFlyoutActions } from \"../common/datetime-picker-flyout-actions\";\nimport { QuickDateOptions } from \"../common/quick-date-options\";\nimport { VisibleDateSelect } from \"../common/visible-date-select\";\nimport { TimePicker } from \"../time/time-picker\";\n\nexport interface DatetimeRangePickerFlyoutProps extends DatetimePickerFlyoutCommonProps {\n value: TimeRange | null | undefined;\n onChangeStartTime?: (value: TimePickerValue | null) => void;\n onChangeEndTime?: (value: TimePickerValue | null) => void;\n}\n\nexport const DatetimeRangePickerFlyout = memo(\n function DatetimeRangePickerFlyout(props: DatetimeRangePickerFlyoutProps) {\n const {\n visible,\n value,\n clearable,\n quickDateOptions,\n onPressQuickDateOption,\n onChangeVisible,\n onPressCalendarDay,\n onChangeStartTime,\n onChangeEndTime,\n onPressClear,\n onPressCancel,\n onPressApply,\n ...rest\n } = props;\n\n const tokens = useComponentsTokens();\n const datetimeRangePickerTokens =\n tokens.datetimePicker.datetimeRangePickerFlyout;\n\n const timeStartValue = useMemo<TimePickerValue | null>(() => {\n if (value?.start) {\n return {\n hours: value.start.getHours(),\n minutes: value.start.getMinutes(),\n seconds: value.start.getSeconds(),\n };\n }\n\n return null;\n }, [value?.start]);\n\n const timeEndValue = useMemo<TimePickerValue | null>(() => {\n if (value?.end) {\n return {\n hours: value.end.getHours(),\n minutes: value.end.getMinutes(),\n seconds: value.end.getSeconds(),\n };\n }\n\n return null;\n }, [value?.end]);\n\n return (\n <Portal>\n <Flyout {...rest}>\n <View gap={datetimeRangePickerTokens.gap}>\n <VisibleDateSelect value={visible} onChange={onChangeVisible} />\n <Calendar\n value={value}\n visible={visible}\n onPress={onPressCalendarDay}\n />\n\n <View\n flexDirection=\"row\"\n gap={datetimeRangePickerTokens.timeInputsGap}\n >\n <View flex={1}>\n <TimePicker\n value={timeStartValue}\n defaultValue={timeStartValue}\n clearable={false}\n onChange={onChangeStartTime}\n label=\"Start time\"\n placeholder=\"00:00:00\"\n />\n </View>\n <View flex={1}>\n <TimePicker\n value={timeEndValue}\n defaultValue={timeEndValue}\n clearable={false}\n onChange={onChangeEndTime}\n label=\"End time\"\n placeholder=\"00:00:00\"\n />\n </View>\n </View>\n\n {quickDateOptions && quickDateOptions.length > 0 ? (\n <QuickDateOptions\n options={quickDateOptions}\n onPress={onPressQuickDateOption}\n />\n ) : null}\n <DatetimePickerFlyoutActions\n canClear={Boolean(value && clearable)}\n onPressApply={onPressApply}\n onPressCancel={onPressCancel}\n onPressClear={onPressClear}\n />\n </View>\n </Flyout>\n </Portal>\n );\n },\n);\n"],"mappings":"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","names":["memo","Control","useCallback","useEffect","useId","useState","useControllableState","useIsOpen","useState","useControllableState","useId","useIsOpen","useCallback","useEffect","DateControl","memo","View","useComponentsTokens","memo","Typography","View","memo","useCallback","Pressable","jsx","CalendarDay","styles","jsx","jsxs","memo","Calendar","View","Typography","memo","Pressable","Typography","View","useComponentsTokens","jsx","jsxs","DatetimePickerFlyoutActions","memo","useMemo","useComponentsTokens","jsx","memo","QuickDateOptions","useComponentsTokens","useMemo","memo","useCallback","useMemo","CalendarDotsIcon","View","useComponentsTokens","jsx","jsxs","memo","VisibleDateSelect","useComponentsTokens","useMemo","useCallback","View","CalendarDotsIcon","jsx","jsxs","memo","DatePickerFlyout","useComponentsTokens","View","jsx","jsxs","memo","DatePicker","Control","memo","Control","jsx","jsxs","memo","DateRangePicker","Control","memo","Control","memo","useMemo","Flyout","Portal","View","useComponentsTokens","memo","useCallback","useEffect","useId","useState","useControllableState","useIsOpen","Control","Pressable","memo","useCallback","useMemo","Flyout","Portal","View","useComponentsTokens","memo","useCallback","useEffect","useMemo","StyleSheet","Pressable","Typography","View","useComponentsTokens","jsx","jsxs","memo","PickerColumn","useComponentsTokens","useMemo","useCallback","Pressable","Typography","useEffect","View","StyleSheet","jsx","jsxs","memo","TimePickerFlyout","useComponentsTokens","useMemo","useCallback","hours","minutes","seconds","Portal","Flyout","View","jsx","jsxs","memo","TimePicker","useId","useIsOpen","useControllableState","useState","useCallback","useEffect","Control","Pressable","jsx","jsxs","memo","useComponentsTokens","useMemo","Portal","Flyout","View","jsx","jsxs","memo","DatetimePicker","Control","memo","Control","memo","useMemo","Flyout","Portal","View","useComponentsTokens","jsx","jsxs","memo","DatetimeRangePickerFlyout","useComponentsTokens","useMemo","Portal","Flyout","View","jsx","jsxs","memo","DatetimeRangePicker","Control"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@impulse-ui-native/datetime",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.mts",
|
|
@@ -18,25 +18,25 @@
|
|
|
18
18
|
"LICENSE"
|
|
19
19
|
],
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@impulse-ui-native/
|
|
22
|
-
"@impulse-ui-native/
|
|
23
|
-
"@impulse-ui-native/primitives": "2.
|
|
24
|
-
"@impulse-ui-native/
|
|
25
|
-
"@impulse-ui-native/
|
|
26
|
-
"@impulse-ui-native/select": "2.
|
|
27
|
-
"@impulse-ui-native/portal": "2.
|
|
21
|
+
"@impulse-ui-native/flyout": "2.1.0",
|
|
22
|
+
"@impulse-ui-native/core": "2.1.0",
|
|
23
|
+
"@impulse-ui-native/primitives": "2.1.0",
|
|
24
|
+
"@impulse-ui-native/theme": "2.1.0",
|
|
25
|
+
"@impulse-ui-native/icon": "2.1.0",
|
|
26
|
+
"@impulse-ui-native/select": "2.1.0",
|
|
27
|
+
"@impulse-ui-native/portal": "2.1.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/react": "~19.2.14",
|
|
31
31
|
"@shopify/flash-list": "2.0.2",
|
|
32
32
|
"eslint": "^9.38.0",
|
|
33
33
|
"prettier": "^3.6.2",
|
|
34
|
-
"react": "19.2.
|
|
35
|
-
"react-native": "0.
|
|
36
|
-
"typescript": "~
|
|
34
|
+
"react": "19.2.3",
|
|
35
|
+
"react-native": "0.86.2",
|
|
36
|
+
"typescript": "~6.0.3",
|
|
37
37
|
"@impulse-ui-native/eslint-config": "1.0.0",
|
|
38
|
-
"@impulse-ui-native/
|
|
39
|
-
"@impulse-ui-native/
|
|
38
|
+
"@impulse-ui-native/tsconfig": "1.0.0",
|
|
39
|
+
"@impulse-ui-native/prettier-config": "1.0.0"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"react": ">=18",
|