soda-heroui 0.8.8 → 0.9.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.
@@ -33,11 +33,11 @@ const react_namespaceObject = require("@heroui/react");
33
33
  const getFieldProps_cjs_namespaceObject = require("../utils/getFieldProps.cjs");
34
34
  const external_FormProvider_cjs_namespaceObject = require("./FormProvider.cjs");
35
35
  const external_FormTimeInput_cjs_namespaceObject = require("./FormTimeInput.cjs");
36
- function FormCalendar({ field, valueMode, emptyValue, component: Calendar2 = react_namespaceObject.Calendar, ...rest }) {
36
+ function FormCalendar({ field, valueMode, emptyValue, dateMode, component: Calendar2 = react_namespaceObject.Calendar, ...rest }) {
37
37
  const context = (0, external_react_namespaceObject.useContext)(external_FormProvider_cjs_namespaceObject.FormContext);
38
38
  emptyValue ??= context.emptyValue;
39
39
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Calendar2, {
40
- focusedValue: (0, external_FormTimeInput_cjs_namespaceObject.getFieldValue)(field),
40
+ focusedValue: (0, external_FormTimeInput_cjs_namespaceObject.getFieldValue)(field, dateMode),
41
41
  onFocusChange: (0, external_FormTimeInput_cjs_namespaceObject.getOnChange)({
42
42
  field,
43
43
  valueMode,
@@ -2,11 +2,13 @@ import { ReactNode } from "react";
2
2
  import { Calendar, CalendarProps, DateValue } from "@heroui/react";
3
3
  import { FieldComponentProps } from "soda-tanstack-form";
4
4
  import { StrictOmit } from "soda-type";
5
+ import { DateMode } from "../utils/parseTime";
5
6
  import { EmptyValue } from "./FormProvider";
6
7
  import { TimeValueMode, TimeValueModeMap } from "./FormTimeInput";
7
8
  export interface FormCalendarProps<ValueMode extends TimeValueMode = "date", FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined> extends StrictOmit<FieldComponentProps<typeof Calendar, FieldValue>, never> {
8
9
  valueMode?: ValueMode;
9
10
  emptyValue?: EmptyValue;
11
+ dateMode?: DateMode;
10
12
  component?: <T extends DateValue>(props: CalendarProps<T>) => ReactNode;
11
13
  }
12
- export declare function FormCalendar<ValueMode extends TimeValueMode = "date", FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined>({ field, valueMode, emptyValue, component: Calendar2, ...rest }: FormCalendarProps<ValueMode, FieldValue>): ReactNode;
14
+ export declare function FormCalendar<ValueMode extends TimeValueMode = "date", FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined>({ field, valueMode, emptyValue, dateMode, component: Calendar2, ...rest }: FormCalendarProps<ValueMode, FieldValue>): ReactNode;
@@ -5,11 +5,11 @@ import * as __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__ from "@heroui/rea
5
5
  import * as __WEBPACK_EXTERNAL_MODULE__utils_getFieldProps_js_0615ad2a__ from "../utils/getFieldProps.js";
6
6
  import * as __WEBPACK_EXTERNAL_MODULE__FormProvider_js_a80efa64__ from "./FormProvider.js";
7
7
  import * as __WEBPACK_EXTERNAL_MODULE__FormTimeInput_js_9364800a__ from "./FormTimeInput.js";
8
- function FormCalendar({ field, valueMode, emptyValue, component: Calendar2 = __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__.Calendar, ...rest }) {
8
+ function FormCalendar({ field, valueMode, emptyValue, dateMode, component: Calendar2 = __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__.Calendar, ...rest }) {
9
9
  const context = (0, __WEBPACK_EXTERNAL_MODULE_react__.useContext)(__WEBPACK_EXTERNAL_MODULE__FormProvider_js_a80efa64__.FormContext);
10
10
  emptyValue ??= context.emptyValue;
11
11
  return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(Calendar2, {
12
- focusedValue: (0, __WEBPACK_EXTERNAL_MODULE__FormTimeInput_js_9364800a__.getFieldValue)(field),
12
+ focusedValue: (0, __WEBPACK_EXTERNAL_MODULE__FormTimeInput_js_9364800a__.getFieldValue)(field, dateMode),
13
13
  onFocusChange: (0, __WEBPACK_EXTERNAL_MODULE__FormTimeInput_js_9364800a__.getOnChange)({
14
14
  field,
15
15
  valueMode,
@@ -33,11 +33,11 @@ const react_namespaceObject = require("@heroui/react");
33
33
  const getFieldProps_cjs_namespaceObject = require("../utils/getFieldProps.cjs");
34
34
  const external_FormProvider_cjs_namespaceObject = require("./FormProvider.cjs");
35
35
  const external_FormTimeInput_cjs_namespaceObject = require("./FormTimeInput.cjs");
36
- function FormDateInput({ field, valueMode, emptyValue, component: DateInput2 = react_namespaceObject.DateInput, ...rest }) {
36
+ function FormDateInput({ field, valueMode, emptyValue, dateMode, component: DateInput2 = react_namespaceObject.DateInput, ...rest }) {
37
37
  const context = (0, external_react_namespaceObject.useContext)(external_FormProvider_cjs_namespaceObject.FormContext);
38
38
  emptyValue ??= context.emptyValue;
39
39
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(DateInput2, {
40
- value: (0, external_FormTimeInput_cjs_namespaceObject.getFieldValue)(field),
40
+ value: (0, external_FormTimeInput_cjs_namespaceObject.getFieldValue)(field, dateMode),
41
41
  onChange: (0, external_FormTimeInput_cjs_namespaceObject.getOnChange)({
42
42
  field,
43
43
  valueMode,
@@ -2,11 +2,13 @@ import { ReactNode } from "react";
2
2
  import { DateInput, DateInputProps, DateValue } from "@heroui/react";
3
3
  import { FieldComponentProps } from "soda-tanstack-form";
4
4
  import { StrictOmit } from "soda-type";
5
+ import { DateMode } from "../utils/parseTime";
5
6
  import { EmptyValue } from "./FormProvider";
6
7
  import { TimeValueMode, TimeValueModeMap } from "./FormTimeInput";
7
8
  export interface FormDateInputProps<ValueMode extends TimeValueMode = "date", FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined> extends StrictOmit<FieldComponentProps<typeof DateInput, FieldValue>, never> {
8
9
  valueMode?: ValueMode;
9
10
  emptyValue?: EmptyValue;
11
+ dateMode?: DateMode;
10
12
  component?: <T extends DateValue>(props: DateInputProps<T>) => ReactNode;
11
13
  }
12
- export declare function FormDateInput<ValueMode extends TimeValueMode = "date", FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined>({ field, valueMode, emptyValue, component: DateInput2, ...rest }: FormDateInputProps<ValueMode, FieldValue>): ReactNode;
14
+ export declare function FormDateInput<ValueMode extends TimeValueMode = "date", FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined>({ field, valueMode, emptyValue, dateMode, component: DateInput2, ...rest }: FormDateInputProps<ValueMode, FieldValue>): ReactNode;
@@ -5,11 +5,11 @@ import * as __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__ from "@heroui/rea
5
5
  import * as __WEBPACK_EXTERNAL_MODULE__utils_getFieldProps_js_0615ad2a__ from "../utils/getFieldProps.js";
6
6
  import * as __WEBPACK_EXTERNAL_MODULE__FormProvider_js_a80efa64__ from "./FormProvider.js";
7
7
  import * as __WEBPACK_EXTERNAL_MODULE__FormTimeInput_js_9364800a__ from "./FormTimeInput.js";
8
- function FormDateInput({ field, valueMode, emptyValue, component: DateInput2 = __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__.DateInput, ...rest }) {
8
+ function FormDateInput({ field, valueMode, emptyValue, dateMode, component: DateInput2 = __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__.DateInput, ...rest }) {
9
9
  const context = (0, __WEBPACK_EXTERNAL_MODULE_react__.useContext)(__WEBPACK_EXTERNAL_MODULE__FormProvider_js_a80efa64__.FormContext);
10
10
  emptyValue ??= context.emptyValue;
11
11
  return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(DateInput2, {
12
- value: (0, __WEBPACK_EXTERNAL_MODULE__FormTimeInput_js_9364800a__.getFieldValue)(field),
12
+ value: (0, __WEBPACK_EXTERNAL_MODULE__FormTimeInput_js_9364800a__.getFieldValue)(field, dateMode),
13
13
  onChange: (0, __WEBPACK_EXTERNAL_MODULE__FormTimeInput_js_9364800a__.getOnChange)({
14
14
  field,
15
15
  valueMode,
@@ -33,11 +33,11 @@ const react_namespaceObject = require("@heroui/react");
33
33
  const getFieldProps_cjs_namespaceObject = require("../utils/getFieldProps.cjs");
34
34
  const external_FormProvider_cjs_namespaceObject = require("./FormProvider.cjs");
35
35
  const external_FormTimeInput_cjs_namespaceObject = require("./FormTimeInput.cjs");
36
- function FormDatePicker({ field, valueMode, emptyValue, component: DatePicker2 = react_namespaceObject.DatePicker, ...rest }) {
36
+ function FormDatePicker({ field, valueMode, emptyValue, dateMode, component: DatePicker2 = react_namespaceObject.DatePicker, ...rest }) {
37
37
  const context = (0, external_react_namespaceObject.useContext)(external_FormProvider_cjs_namespaceObject.FormContext);
38
38
  emptyValue ??= context.emptyValue;
39
39
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(DatePicker2, {
40
- value: (0, external_FormTimeInput_cjs_namespaceObject.getFieldValue)(field),
40
+ value: (0, external_FormTimeInput_cjs_namespaceObject.getFieldValue)(field, dateMode),
41
41
  onChange: (0, external_FormTimeInput_cjs_namespaceObject.getOnChange)({
42
42
  field,
43
43
  valueMode,
@@ -2,11 +2,13 @@ import { ReactNode } from "react";
2
2
  import { DatePicker, DatePickerProps, DateValue } from "@heroui/react";
3
3
  import { FieldComponentProps } from "soda-tanstack-form";
4
4
  import { StrictOmit } from "soda-type";
5
+ import { DateMode } from "../utils/parseTime";
5
6
  import { EmptyValue } from "./FormProvider";
6
7
  import { TimeValueMode, TimeValueModeMap } from "./FormTimeInput";
7
8
  export interface FormDatePickerProps<ValueMode extends TimeValueMode = "date", FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined> extends StrictOmit<FieldComponentProps<typeof DatePicker, FieldValue>, never> {
8
9
  valueMode?: ValueMode;
9
10
  emptyValue?: EmptyValue;
11
+ dateMode?: DateMode;
10
12
  component?: <T extends DateValue>(props: DatePickerProps<T>) => ReactNode;
11
13
  }
12
- export declare function FormDatePicker<ValueMode extends TimeValueMode = "date", FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined>({ field, valueMode, emptyValue, component: DatePicker2, ...rest }: FormDatePickerProps<ValueMode, FieldValue>): ReactNode;
14
+ export declare function FormDatePicker<ValueMode extends TimeValueMode = "date", FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined>({ field, valueMode, emptyValue, dateMode, component: DatePicker2, ...rest }: FormDatePickerProps<ValueMode, FieldValue>): ReactNode;
@@ -5,11 +5,11 @@ import * as __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__ from "@heroui/rea
5
5
  import * as __WEBPACK_EXTERNAL_MODULE__utils_getFieldProps_js_0615ad2a__ from "../utils/getFieldProps.js";
6
6
  import * as __WEBPACK_EXTERNAL_MODULE__FormProvider_js_a80efa64__ from "./FormProvider.js";
7
7
  import * as __WEBPACK_EXTERNAL_MODULE__FormTimeInput_js_9364800a__ from "./FormTimeInput.js";
8
- function FormDatePicker({ field, valueMode, emptyValue, component: DatePicker2 = __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__.DatePicker, ...rest }) {
8
+ function FormDatePicker({ field, valueMode, emptyValue, dateMode, component: DatePicker2 = __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__.DatePicker, ...rest }) {
9
9
  const context = (0, __WEBPACK_EXTERNAL_MODULE_react__.useContext)(__WEBPACK_EXTERNAL_MODULE__FormProvider_js_a80efa64__.FormContext);
10
10
  emptyValue ??= context.emptyValue;
11
11
  return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(DatePicker2, {
12
- value: (0, __WEBPACK_EXTERNAL_MODULE__FormTimeInput_js_9364800a__.getFieldValue)(field),
12
+ value: (0, __WEBPACK_EXTERNAL_MODULE__FormTimeInput_js_9364800a__.getFieldValue)(field, dateMode),
13
13
  onChange: (0, __WEBPACK_EXTERNAL_MODULE__FormTimeInput_js_9364800a__.getOnChange)({
14
14
  field,
15
15
  valueMode,
@@ -33,12 +33,12 @@ const react_namespaceObject = require("@heroui/react");
33
33
  const getFieldProps_cjs_namespaceObject = require("../utils/getFieldProps.cjs");
34
34
  const external_FormProvider_cjs_namespaceObject = require("./FormProvider.cjs");
35
35
  const external_FormRangeCalendar_cjs_namespaceObject = require("./FormRangeCalendar.cjs");
36
- function FormDateRangePicker({ field: _field, valueMode, emptyValue, component: DateRangePicker2 = react_namespaceObject.DateRangePicker, ...rest }) {
36
+ function FormDateRangePicker({ field: _field, valueMode, emptyValue, dateMode, component: DateRangePicker2 = react_namespaceObject.DateRangePicker, ...rest }) {
37
37
  const field = _field;
38
38
  const context = (0, external_react_namespaceObject.useContext)(external_FormProvider_cjs_namespaceObject.FormContext);
39
39
  emptyValue ??= context.emptyValue;
40
40
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(DateRangePicker2, {
41
- value: (0, external_FormRangeCalendar_cjs_namespaceObject.getFieldRangeValue)(field),
41
+ value: (0, external_FormRangeCalendar_cjs_namespaceObject.getFieldRangeValue)(field, dateMode),
42
42
  onChange: (0, external_FormRangeCalendar_cjs_namespaceObject.getOnRangeChange)({
43
43
  field,
44
44
  valueMode,
@@ -2,11 +2,13 @@ import { ReactNode } from "react";
2
2
  import { DateRangePicker, DateRangePickerProps, DateValue } from "@heroui/react";
3
3
  import { FieldComponentProps } from "soda-tanstack-form";
4
4
  import { StrictOmit } from "soda-type";
5
+ import { DateMode } from "../utils/parseTime";
5
6
  import { EmptyValue } from "./FormProvider";
6
7
  import { TimeValueMode, TimeValueModeMap } from "./FormTimeInput";
7
8
  export interface FormDateRangePickerProps<ValueMode extends TimeValueMode = "date", FieldValue extends [TimeValueModeMap<ValueMode>, TimeValueModeMap<ValueMode>] | null | undefined = [TimeValueModeMap<ValueMode>, TimeValueModeMap<ValueMode>] | null | undefined> extends StrictOmit<FieldComponentProps<typeof DateRangePicker, FieldValue>, never> {
8
9
  valueMode?: ValueMode;
9
10
  emptyValue?: EmptyValue;
11
+ dateMode?: DateMode;
10
12
  component?: <T extends DateValue>(props: DateRangePickerProps<T>) => ReactNode;
11
13
  }
12
- export declare function FormDateRangePicker<ValueMode extends TimeValueMode = "date", FieldValue extends [TimeValueModeMap<ValueMode>, TimeValueModeMap<ValueMode>] | null | undefined = [TimeValueModeMap<ValueMode>, TimeValueModeMap<ValueMode>] | null | undefined>({ field: _field, valueMode, emptyValue, component: DateRangePicker2, ...rest }: FormDateRangePickerProps<ValueMode, FieldValue>): ReactNode;
14
+ export declare function FormDateRangePicker<ValueMode extends TimeValueMode = "date", FieldValue extends [TimeValueModeMap<ValueMode>, TimeValueModeMap<ValueMode>] | null | undefined = [TimeValueModeMap<ValueMode>, TimeValueModeMap<ValueMode>] | null | undefined>({ field: _field, valueMode, emptyValue, dateMode, component: DateRangePicker2, ...rest }: FormDateRangePickerProps<ValueMode, FieldValue>): ReactNode;
@@ -5,12 +5,12 @@ import * as __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__ from "@heroui/rea
5
5
  import * as __WEBPACK_EXTERNAL_MODULE__utils_getFieldProps_js_0615ad2a__ from "../utils/getFieldProps.js";
6
6
  import * as __WEBPACK_EXTERNAL_MODULE__FormProvider_js_a80efa64__ from "./FormProvider.js";
7
7
  import * as __WEBPACK_EXTERNAL_MODULE__FormRangeCalendar_js_70d23bc2__ from "./FormRangeCalendar.js";
8
- function FormDateRangePicker({ field: _field, valueMode, emptyValue, component: DateRangePicker2 = __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__.DateRangePicker, ...rest }) {
8
+ function FormDateRangePicker({ field: _field, valueMode, emptyValue, dateMode, component: DateRangePicker2 = __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__.DateRangePicker, ...rest }) {
9
9
  const field = _field;
10
10
  const context = (0, __WEBPACK_EXTERNAL_MODULE_react__.useContext)(__WEBPACK_EXTERNAL_MODULE__FormProvider_js_a80efa64__.FormContext);
11
11
  emptyValue ??= context.emptyValue;
12
12
  return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(DateRangePicker2, {
13
- value: (0, __WEBPACK_EXTERNAL_MODULE__FormRangeCalendar_js_70d23bc2__.getFieldRangeValue)(field),
13
+ value: (0, __WEBPACK_EXTERNAL_MODULE__FormRangeCalendar_js_70d23bc2__.getFieldRangeValue)(field, dateMode),
14
14
  onChange: (0, __WEBPACK_EXTERNAL_MODULE__FormRangeCalendar_js_70d23bc2__.getOnRangeChange)({
15
15
  field,
16
16
  valueMode,
@@ -35,18 +35,18 @@ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
35
35
  const external_react_namespaceObject = require("react");
36
36
  const react_namespaceObject = require("@heroui/react");
37
37
  const external_deepsea_tools_namespaceObject = require("deepsea-tools");
38
- const getTimeValue_cjs_namespaceObject = require("../utils/getTimeValue.cjs");
39
38
  const getFieldProps_cjs_namespaceObject = require("../utils/getFieldProps.cjs");
39
+ const getTimeValue_cjs_namespaceObject = require("../utils/getTimeValue.cjs");
40
40
  const parseTime_cjs_namespaceObject = require("../utils/parseTime.cjs");
41
41
  const external_FormProvider_cjs_namespaceObject = require("./FormProvider.cjs");
42
- function getRangeValue(value) {
42
+ function getRangeValue(value, dateMode) {
43
43
  return (0, external_deepsea_tools_namespaceObject.isNonNullable)(value) ? {
44
- start: (0, parseTime_cjs_namespaceObject.parseTime)(value[0].valueOf()),
45
- end: (0, parseTime_cjs_namespaceObject.parseTime)(value[1].valueOf())
44
+ start: (0, parseTime_cjs_namespaceObject.parseTime)(value[0].valueOf(), dateMode),
45
+ end: (0, parseTime_cjs_namespaceObject.parseTime)(value[1].valueOf(), dateMode)
46
46
  } : null;
47
47
  }
48
- function getFieldRangeValue(field) {
49
- return getRangeValue(field.state.value);
48
+ function getFieldRangeValue(field, dateMode) {
49
+ return getRangeValue(field.state.value, dateMode);
50
50
  }
51
51
  function getRangeUpdater({ value, valueMode, emptyValue }) {
52
52
  if (!(0, external_deepsea_tools_namespaceObject.isNonNullable)(value)) return (0, external_FormProvider_cjs_namespaceObject.getEmptyValue)(emptyValue);
@@ -71,12 +71,12 @@ function getOnRangeChange({ field, valueMode, emptyValue }) {
71
71
  }));
72
72
  };
73
73
  }
74
- function FormRangeCalendar({ field: _field, valueMode, emptyValue, component: RangeCalendar2 = react_namespaceObject.RangeCalendar, ...rest }) {
74
+ function FormRangeCalendar({ field: _field, valueMode, emptyValue, dateMode, component: RangeCalendar2 = react_namespaceObject.RangeCalendar, ...rest }) {
75
75
  const field = _field;
76
76
  const context = (0, external_react_namespaceObject.useContext)(external_FormProvider_cjs_namespaceObject.FormContext);
77
77
  emptyValue ??= context.emptyValue;
78
78
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(RangeCalendar2, {
79
- value: getFieldRangeValue(field),
79
+ value: getFieldRangeValue(field, dateMode),
80
80
  onChange: getOnRangeChange({
81
81
  field,
82
82
  valueMode,
@@ -2,15 +2,17 @@ import { ReactNode, SetStateAction } from "react";
2
2
  import { DateValue, RangeCalendar, RangeCalendarProps, RangeValue } from "@heroui/react";
3
3
  import { Field, FieldComponentProps } from "soda-tanstack-form";
4
4
  import { StrictOmit } from "soda-type";
5
+ import { DateMode } from "../utils/parseTime";
5
6
  import { EmptyValue } from "./FormProvider";
6
7
  import { TimeValueMode, TimeValueModeMap } from "./FormTimeInput";
7
8
  export interface FormRangeCalendarProps<ValueMode extends TimeValueMode = "date", FieldValue extends [TimeValueModeMap<ValueMode>, TimeValueModeMap<ValueMode>] | null | undefined = [TimeValueModeMap<ValueMode>, TimeValueModeMap<ValueMode>] | null | undefined> extends StrictOmit<FieldComponentProps<typeof RangeCalendar, FieldValue>, never> {
8
9
  valueMode?: ValueMode;
9
10
  emptyValue?: EmptyValue;
11
+ dateMode?: DateMode;
10
12
  component?: <T extends DateValue>(props: RangeCalendarProps<T>) => ReactNode;
11
13
  }
12
- export declare function getRangeValue(value: [Date, Date] | [number, number] | null | undefined): RangeValue<DateValue> | null;
13
- export declare function getFieldRangeValue<T extends [Date, Date] | [number, number] | null | undefined>(field: Field<T>): RangeValue<DateValue> | null;
14
+ export declare function getRangeValue<T extends DateMode>(value: [Date, Date] | [number, number] | null | undefined, dateMode?: T): RangeValue<DateValue> | null;
15
+ export declare function getFieldRangeValue<T extends [Date, Date] | [number, number] | null | undefined, P extends DateMode>(field: Field<T>, dateMode?: P): RangeValue<DateValue> | null;
14
16
  export interface GetRangeUpdaterParams {
15
17
  value: RangeValue<DateValue> | null;
16
18
  valueMode?: TimeValueMode;
@@ -23,4 +25,4 @@ export interface GetOnRangeChangeParams<T extends [Date, Date] | [number, number
23
25
  emptyValue?: EmptyValue;
24
26
  }
25
27
  export declare function getOnRangeChange<T extends [Date, Date] | [number, number] | null | undefined>({ field, valueMode, emptyValue }: GetOnRangeChangeParams<T>): (value: RangeValue<DateValue> | null) => void;
26
- export declare function FormRangeCalendar<ValueMode extends TimeValueMode = "date", FieldValue extends [TimeValueModeMap<ValueMode>, TimeValueModeMap<ValueMode>] | null | undefined = [TimeValueModeMap<ValueMode>, TimeValueModeMap<ValueMode>] | null | undefined>({ field: _field, valueMode, emptyValue, component: RangeCalendar2, ...rest }: FormRangeCalendarProps<ValueMode, FieldValue>): ReactNode;
28
+ export declare function FormRangeCalendar<ValueMode extends TimeValueMode = "date", FieldValue extends [TimeValueModeMap<ValueMode>, TimeValueModeMap<ValueMode>] | null | undefined = [TimeValueModeMap<ValueMode>, TimeValueModeMap<ValueMode>] | null | undefined>({ field: _field, valueMode, emptyValue, dateMode, component: RangeCalendar2, ...rest }: FormRangeCalendarProps<ValueMode, FieldValue>): ReactNode;
@@ -3,18 +3,18 @@ import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/j
3
3
  import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
4
4
  import * as __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__ from "@heroui/react";
5
5
  import * as __WEBPACK_EXTERNAL_MODULE_deepsea_tools_8ecdf5a5__ from "deepsea-tools";
6
- import * as __WEBPACK_EXTERNAL_MODULE__utils_getTimeValue_js_9ba8f683__ from "../utils/getTimeValue.js";
7
6
  import * as __WEBPACK_EXTERNAL_MODULE__utils_getFieldProps_js_0615ad2a__ from "../utils/getFieldProps.js";
7
+ import * as __WEBPACK_EXTERNAL_MODULE__utils_getTimeValue_js_9ba8f683__ from "../utils/getTimeValue.js";
8
8
  import * as __WEBPACK_EXTERNAL_MODULE__utils_parseTime_js_d0890db8__ from "../utils/parseTime.js";
9
9
  import * as __WEBPACK_EXTERNAL_MODULE__FormProvider_js_a80efa64__ from "./FormProvider.js";
10
- function getRangeValue(value) {
10
+ function getRangeValue(value, dateMode) {
11
11
  return (0, __WEBPACK_EXTERNAL_MODULE_deepsea_tools_8ecdf5a5__.isNonNullable)(value) ? {
12
- start: (0, __WEBPACK_EXTERNAL_MODULE__utils_parseTime_js_d0890db8__.parseTime)(value[0].valueOf()),
13
- end: (0, __WEBPACK_EXTERNAL_MODULE__utils_parseTime_js_d0890db8__.parseTime)(value[1].valueOf())
12
+ start: (0, __WEBPACK_EXTERNAL_MODULE__utils_parseTime_js_d0890db8__.parseTime)(value[0].valueOf(), dateMode),
13
+ end: (0, __WEBPACK_EXTERNAL_MODULE__utils_parseTime_js_d0890db8__.parseTime)(value[1].valueOf(), dateMode)
14
14
  } : null;
15
15
  }
16
- function getFieldRangeValue(field) {
17
- return getRangeValue(field.state.value);
16
+ function getFieldRangeValue(field, dateMode) {
17
+ return getRangeValue(field.state.value, dateMode);
18
18
  }
19
19
  function getRangeUpdater({ value, valueMode, emptyValue }) {
20
20
  if (!(0, __WEBPACK_EXTERNAL_MODULE_deepsea_tools_8ecdf5a5__.isNonNullable)(value)) return (0, __WEBPACK_EXTERNAL_MODULE__FormProvider_js_a80efa64__.getEmptyValue)(emptyValue);
@@ -39,12 +39,12 @@ function getOnRangeChange({ field, valueMode, emptyValue }) {
39
39
  }));
40
40
  };
41
41
  }
42
- function FormRangeCalendar({ field: _field, valueMode, emptyValue, component: RangeCalendar2 = __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__.RangeCalendar, ...rest }) {
42
+ function FormRangeCalendar({ field: _field, valueMode, emptyValue, dateMode, component: RangeCalendar2 = __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__.RangeCalendar, ...rest }) {
43
43
  const field = _field;
44
44
  const context = (0, __WEBPACK_EXTERNAL_MODULE_react__.useContext)(__WEBPACK_EXTERNAL_MODULE__FormProvider_js_a80efa64__.FormContext);
45
45
  emptyValue ??= context.emptyValue;
46
46
  return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(RangeCalendar2, {
47
- value: getFieldRangeValue(field),
47
+ value: getFieldRangeValue(field, dateMode),
48
48
  onChange: getOnRangeChange({
49
49
  field,
50
50
  valueMode,
@@ -39,11 +39,11 @@ const getFieldProps_cjs_namespaceObject = require("../utils/getFieldProps.cjs");
39
39
  const getTimeValue_cjs_namespaceObject = require("../utils/getTimeValue.cjs");
40
40
  const parseTime_cjs_namespaceObject = require("../utils/parseTime.cjs");
41
41
  const external_FormProvider_cjs_namespaceObject = require("./FormProvider.cjs");
42
- function getValue(value) {
43
- return (0, external_deepsea_tools_namespaceObject.isNonNullable)(value) ? (0, parseTime_cjs_namespaceObject.parseTime)(value.valueOf()) : null;
42
+ function getValue(value, parseMode) {
43
+ return (0, external_deepsea_tools_namespaceObject.isNonNullable)(value) ? (0, parseTime_cjs_namespaceObject.parseTime)(value.valueOf(), parseMode) : null;
44
44
  }
45
- function getFieldValue(field) {
46
- return getValue(field.state.value);
45
+ function getFieldValue(field, parseMode) {
46
+ return getValue(field.state.value, parseMode);
47
47
  }
48
48
  function getUpdater({ value, valueMode, emptyValue }) {
49
49
  const timestamp = (0, getTimeValue_cjs_namespaceObject.getTimeValue)(value);
@@ -60,11 +60,11 @@ function getOnChange({ field, valueMode, emptyValue }) {
60
60
  }));
61
61
  };
62
62
  }
63
- function FormTimeInput({ field, valueMode, emptyValue, component: TimeInput2 = react_namespaceObject.TimeInput, ...rest }) {
63
+ function FormTimeInput({ field, valueMode, emptyValue, timeMode, component: TimeInput2 = react_namespaceObject.TimeInput, ...rest }) {
64
64
  const context = (0, external_react_namespaceObject.useContext)(external_FormProvider_cjs_namespaceObject.FormContext);
65
65
  emptyValue ??= context.emptyValue;
66
66
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(TimeInput2, {
67
- value: getFieldValue(field),
67
+ value: getFieldValue(field, timeMode),
68
68
  onChange: getOnChange({
69
69
  field,
70
70
  valueMode,
@@ -3,6 +3,7 @@ import { TimeInput, TimeInputProps } from "@heroui/react";
3
3
  import { CalendarDate, CalendarDateTime, Time, ZonedDateTime } from "@internationalized/date";
4
4
  import { Field, FieldComponentProps } from "soda-tanstack-form";
5
5
  import { StrictOmit } from "soda-type";
6
+ import { ParseMode, TimeMode } from "../utils/parseTime";
6
7
  import { EmptyValue } from "./FormProvider";
7
8
  export type TimeValue = Date | number;
8
9
  export type TimeValueMode = "date" | "timestamp";
@@ -10,10 +11,11 @@ export type TimeValueModeMap<ValueMode extends TimeValueMode> = ValueMode extend
10
11
  export interface FormTimeInputProps<ValueMode extends TimeValueMode = "date", FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined> extends StrictOmit<FieldComponentProps<typeof TimeInput, FieldValue>, never> {
11
12
  valueMode?: ValueMode;
12
13
  emptyValue?: EmptyValue;
14
+ timeMode?: TimeMode;
13
15
  component?: <T extends Time | CalendarDateTime | ZonedDateTime>(props: TimeInputProps<T>) => ReactNode;
14
16
  }
15
- export declare function getValue(value: Date | number | null | undefined): ZonedDateTime | null;
16
- export declare function getFieldValue<T extends Date | number | null | undefined>(field: Field<T>): ZonedDateTime | null;
17
+ export declare function getValue<T extends ParseMode>(value: Date | number | null | undefined, parseMode?: T): InstanceType<T> | null;
18
+ export declare function getFieldValue<T extends Date | number | null | undefined, P extends ParseMode>(field: Field<T>, parseMode?: P): InstanceType<P> | null;
17
19
  export interface GetUpdaterParams {
18
20
  value: CalendarDateTime | ZonedDateTime | Time | CalendarDate | CalendarDateTime | ZonedDateTime | null;
19
21
  valueMode?: TimeValueMode;
@@ -26,4 +28,4 @@ export interface GetOnChangeParams<T extends Date | number | null | undefined> {
26
28
  emptyValue?: EmptyValue;
27
29
  }
28
30
  export declare function getOnChange<T extends Date | number | null | undefined>({ field, valueMode, emptyValue }: GetOnChangeParams<T>): (value: CalendarDateTime | ZonedDateTime | Time | CalendarDate | CalendarDateTime | ZonedDateTime | null) => void;
29
- export declare function FormTimeInput<ValueMode extends TimeValueMode = "date", FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined>({ field, valueMode, emptyValue, component: TimeInput2, ...rest }: FormTimeInputProps<ValueMode, FieldValue>): ReactNode;
31
+ export declare function FormTimeInput<ValueMode extends TimeValueMode = "date", FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined>({ field, valueMode, emptyValue, timeMode, component: TimeInput2, ...rest }: FormTimeInputProps<ValueMode, FieldValue>): ReactNode;
@@ -7,11 +7,11 @@ import * as __WEBPACK_EXTERNAL_MODULE__utils_getFieldProps_js_0615ad2a__ from ".
7
7
  import * as __WEBPACK_EXTERNAL_MODULE__utils_getTimeValue_js_9ba8f683__ from "../utils/getTimeValue.js";
8
8
  import * as __WEBPACK_EXTERNAL_MODULE__utils_parseTime_js_d0890db8__ from "../utils/parseTime.js";
9
9
  import * as __WEBPACK_EXTERNAL_MODULE__FormProvider_js_a80efa64__ from "./FormProvider.js";
10
- function getValue(value) {
11
- return (0, __WEBPACK_EXTERNAL_MODULE_deepsea_tools_8ecdf5a5__.isNonNullable)(value) ? (0, __WEBPACK_EXTERNAL_MODULE__utils_parseTime_js_d0890db8__.parseTime)(value.valueOf()) : null;
10
+ function getValue(value, parseMode) {
11
+ return (0, __WEBPACK_EXTERNAL_MODULE_deepsea_tools_8ecdf5a5__.isNonNullable)(value) ? (0, __WEBPACK_EXTERNAL_MODULE__utils_parseTime_js_d0890db8__.parseTime)(value.valueOf(), parseMode) : null;
12
12
  }
13
- function getFieldValue(field) {
14
- return getValue(field.state.value);
13
+ function getFieldValue(field, parseMode) {
14
+ return getValue(field.state.value, parseMode);
15
15
  }
16
16
  function getUpdater({ value, valueMode, emptyValue }) {
17
17
  const timestamp = (0, __WEBPACK_EXTERNAL_MODULE__utils_getTimeValue_js_9ba8f683__.getTimeValue)(value);
@@ -28,11 +28,11 @@ function getOnChange({ field, valueMode, emptyValue }) {
28
28
  }));
29
29
  };
30
30
  }
31
- function FormTimeInput({ field, valueMode, emptyValue, component: TimeInput2 = __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__.TimeInput, ...rest }) {
31
+ function FormTimeInput({ field, valueMode, emptyValue, timeMode, component: TimeInput2 = __WEBPACK_EXTERNAL_MODULE__heroui_react_7b65ca80__.TimeInput, ...rest }) {
32
32
  const context = (0, __WEBPACK_EXTERNAL_MODULE_react__.useContext)(__WEBPACK_EXTERNAL_MODULE__FormProvider_js_a80efa64__.FormContext);
33
33
  emptyValue ??= context.emptyValue;
34
34
  return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(TimeInput2, {
35
- value: getFieldValue(field),
35
+ value: getFieldValue(field, timeMode),
36
36
  onChange: getOnChange({
37
37
  field,
38
38
  valueMode,
@@ -24,14 +24,43 @@ var __webpack_require__ = {};
24
24
  var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
- parseTime: ()=>parseTime
27
+ fromAbsolute: ()=>date_namespaceObject.fromAbsolute,
28
+ Time: ()=>date_namespaceObject.Time,
29
+ getLocalTimeZone: ()=>date_namespaceObject.getLocalTimeZone,
30
+ parseTime: ()=>parseTime,
31
+ CalendarDateTime: ()=>date_namespaceObject.CalendarDateTime,
32
+ ZonedDateTime: ()=>date_namespaceObject.ZonedDateTime,
33
+ CalendarDate: ()=>date_namespaceObject.CalendarDate
28
34
  });
29
35
  const date_namespaceObject = require("@internationalized/date");
30
- function parseTime(ms) {
31
- return (0, date_namespaceObject.fromAbsolute)(ms, (0, date_namespaceObject.getLocalTimeZone)());
36
+ function parseTime(ms, type) {
37
+ if (type === date_namespaceObject.ZonedDateTime) return (0, date_namespaceObject.fromAbsolute)(ms, (0, date_namespaceObject.getLocalTimeZone)());
38
+ const date = new Date(ms);
39
+ const year = date.getFullYear();
40
+ const month = date.getMonth();
41
+ const day = date.getDate();
42
+ const hour = date.getHours();
43
+ const minute = date.getMinutes();
44
+ const second = date.getSeconds();
45
+ const millisecond = date.getMilliseconds();
46
+ if (type === date_namespaceObject.CalendarDate) return new date_namespaceObject.CalendarDate(year, month, day);
47
+ if (type === date_namespaceObject.Time) return new date_namespaceObject.Time(hour, minute, second, millisecond);
48
+ return new date_namespaceObject.CalendarDateTime(year, month, day, hour, minute, second, millisecond);
32
49
  }
50
+ exports.CalendarDate = __webpack_exports__.CalendarDate;
51
+ exports.CalendarDateTime = __webpack_exports__.CalendarDateTime;
52
+ exports.Time = __webpack_exports__.Time;
53
+ exports.ZonedDateTime = __webpack_exports__.ZonedDateTime;
54
+ exports.fromAbsolute = __webpack_exports__.fromAbsolute;
55
+ exports.getLocalTimeZone = __webpack_exports__.getLocalTimeZone;
33
56
  exports.parseTime = __webpack_exports__.parseTime;
34
57
  for(var __webpack_i__ in __webpack_exports__)if (-1 === [
58
+ "CalendarDate",
59
+ "CalendarDateTime",
60
+ "Time",
61
+ "ZonedDateTime",
62
+ "fromAbsolute",
63
+ "getLocalTimeZone",
35
64
  "parseTime"
36
65
  ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
37
66
  Object.defineProperty(exports, '__esModule', {
@@ -1,2 +1,6 @@
1
- import { ZonedDateTime } from "@internationalized/date";
2
- export declare function parseTime(ms: number): ZonedDateTime;
1
+ import { CalendarDate, CalendarDateTime, Time, ZonedDateTime } from "@internationalized/date";
2
+ export { CalendarDate, CalendarDateTime, Time, ZonedDateTime, fromAbsolute, getLocalTimeZone } from "@internationalized/date";
3
+ export type ParseMode = typeof ZonedDateTime | typeof CalendarDate | typeof CalendarDateTime | typeof Time;
4
+ export type TimeMode = Exclude<ParseMode, typeof CalendarDate>;
5
+ export type DateMode = Exclude<ParseMode, typeof Time>;
6
+ export declare function parseTime<T extends ParseMode = typeof CalendarDateTime>(ms: number, type?: T): InstanceType<T>;
@@ -1,5 +1,22 @@
1
1
  import * as __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__ from "@internationalized/date";
2
- function parseTime(ms) {
3
- return (0, __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.fromAbsolute)(ms, (0, __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.getLocalTimeZone)());
2
+ function parseTime(ms, type) {
3
+ if (type === __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.ZonedDateTime) return (0, __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.fromAbsolute)(ms, (0, __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.getLocalTimeZone)());
4
+ const date = new Date(ms);
5
+ const year = date.getFullYear();
6
+ const month = date.getMonth();
7
+ const day = date.getDate();
8
+ const hour = date.getHours();
9
+ const minute = date.getMinutes();
10
+ const second = date.getSeconds();
11
+ const millisecond = date.getMilliseconds();
12
+ if (type === __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.CalendarDate) return new __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.CalendarDate(year, month, day);
13
+ if (type === __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.Time) return new __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.Time(hour, minute, second, millisecond);
14
+ return new __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.CalendarDateTime(year, month, day, hour, minute, second, millisecond);
4
15
  }
5
- export { parseTime };
16
+ var __webpack_exports__CalendarDate = __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.CalendarDate;
17
+ var __webpack_exports__CalendarDateTime = __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.CalendarDateTime;
18
+ var __webpack_exports__Time = __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.Time;
19
+ var __webpack_exports__ZonedDateTime = __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.ZonedDateTime;
20
+ var __webpack_exports__fromAbsolute = __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.fromAbsolute;
21
+ var __webpack_exports__getLocalTimeZone = __WEBPACK_EXTERNAL_MODULE__internationalized_date_00f69a87__.getLocalTimeZone;
22
+ export { parseTime, __webpack_exports__CalendarDate as CalendarDate, __webpack_exports__CalendarDateTime as CalendarDateTime, __webpack_exports__Time as Time, __webpack_exports__ZonedDateTime as ZonedDateTime, __webpack_exports__fromAbsolute as fromAbsolute, __webpack_exports__getLocalTimeZone as getLocalTimeZone };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "soda-heroui",
3
- "version": "0.8.8",
3
+ "version": "0.9.0",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "exports": {
@@ -39,8 +39,8 @@
39
39
  "@tanstack/react-form": "^1.14.1",
40
40
  "deepsea-tools": "5.38.2",
41
41
  "soda-type": "6.3.0",
42
- "soda-hooks": "6.12.0",
43
- "soda-tanstack-form": "0.2.2"
42
+ "soda-tanstack-form": "0.2.3",
43
+ "soda-hooks": "6.12.0"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@ianvs/prettier-plugin-sort-imports": "^4.5.1",
@@ -5,7 +5,9 @@ import { Calendar, CalendarProps, DateValue } from "@heroui/react"
5
5
  import { FieldComponentProps } from "soda-tanstack-form"
6
6
  import { StrictOmit } from "soda-type"
7
7
 
8
- import { getFieldProps } from "../utils/getFieldProps"
8
+ import { getFieldProps } from "@/utils/getFieldProps"
9
+ import { DateMode } from "@/utils/parseTime"
10
+
9
11
  import { EmptyValue, FormContext } from "./FormProvider"
10
12
  import { TimeValueMode, TimeValueModeMap, getFieldValue, getOnChange } from "./FormTimeInput"
11
13
 
@@ -15,15 +17,23 @@ export interface FormCalendarProps<
15
17
  > extends StrictOmit<FieldComponentProps<typeof Calendar, FieldValue>, never> {
16
18
  valueMode?: ValueMode
17
19
  emptyValue?: EmptyValue
20
+ dateMode?: DateMode
18
21
  component?: <T extends DateValue>(props: CalendarProps<T>) => ReactNode
19
22
  }
20
23
 
21
24
  export function FormCalendar<
22
25
  ValueMode extends TimeValueMode = "date",
23
26
  FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined,
24
- >({ field, valueMode, emptyValue, component: Calendar2 = Calendar, ...rest }: FormCalendarProps<ValueMode, FieldValue>): ReactNode {
27
+ >({ field, valueMode, emptyValue, dateMode, component: Calendar2 = Calendar, ...rest }: FormCalendarProps<ValueMode, FieldValue>): ReactNode {
25
28
  const context = useContext(FormContext)
26
29
  emptyValue ??= context.emptyValue
27
30
 
28
- return <Calendar2 focusedValue={getFieldValue(field)} onFocusChange={getOnChange({ field, valueMode, emptyValue })} {...getFieldProps(field)} {...rest} />
31
+ return (
32
+ <Calendar2
33
+ focusedValue={getFieldValue(field, dateMode)}
34
+ onFocusChange={getOnChange({ field, valueMode, emptyValue })}
35
+ {...getFieldProps(field)}
36
+ {...rest}
37
+ />
38
+ )
29
39
  }
@@ -5,7 +5,9 @@ import { DateInput, DateInputProps, DateValue } from "@heroui/react"
5
5
  import { FieldComponentProps } from "soda-tanstack-form"
6
6
  import { StrictOmit } from "soda-type"
7
7
 
8
- import { getFieldProps } from "../utils/getFieldProps"
8
+ import { getFieldProps } from "@/utils/getFieldProps"
9
+ import { DateMode } from "@/utils/parseTime"
10
+
9
11
  import { EmptyValue, FormContext } from "./FormProvider"
10
12
  import { TimeValueMode, TimeValueModeMap, getFieldValue, getOnChange } from "./FormTimeInput"
11
13
 
@@ -15,15 +17,16 @@ export interface FormDateInputProps<
15
17
  > extends StrictOmit<FieldComponentProps<typeof DateInput, FieldValue>, never> {
16
18
  valueMode?: ValueMode
17
19
  emptyValue?: EmptyValue
20
+ dateMode?: DateMode
18
21
  component?: <T extends DateValue>(props: DateInputProps<T>) => ReactNode
19
22
  }
20
23
 
21
24
  export function FormDateInput<
22
25
  ValueMode extends TimeValueMode = "date",
23
26
  FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined,
24
- >({ field, valueMode, emptyValue, component: DateInput2 = DateInput, ...rest }: FormDateInputProps<ValueMode, FieldValue>): ReactNode {
27
+ >({ field, valueMode, emptyValue, dateMode, component: DateInput2 = DateInput, ...rest }: FormDateInputProps<ValueMode, FieldValue>): ReactNode {
25
28
  const context = useContext(FormContext)
26
29
  emptyValue ??= context.emptyValue
27
30
 
28
- return <DateInput2 value={getFieldValue(field)} onChange={getOnChange({ field, valueMode, emptyValue })} {...getFieldProps(field)} {...rest} />
31
+ return <DateInput2 value={getFieldValue(field, dateMode)} onChange={getOnChange({ field, valueMode, emptyValue })} {...getFieldProps(field)} {...rest} />
29
32
  }
@@ -5,6 +5,8 @@ import { DatePicker, DatePickerProps, DateValue } from "@heroui/react"
5
5
  import { FieldComponentProps } from "soda-tanstack-form"
6
6
  import { StrictOmit } from "soda-type"
7
7
 
8
+ import { DateMode, TimeMode } from "@/utils/parseTime"
9
+
8
10
  import { getFieldProps } from "../utils/getFieldProps"
9
11
  import { EmptyValue, FormContext } from "./FormProvider"
10
12
  import { TimeValueMode, TimeValueModeMap, getFieldValue, getOnChange } from "./FormTimeInput"
@@ -15,15 +17,16 @@ export interface FormDatePickerProps<
15
17
  > extends StrictOmit<FieldComponentProps<typeof DatePicker, FieldValue>, never> {
16
18
  valueMode?: ValueMode
17
19
  emptyValue?: EmptyValue
20
+ dateMode?: DateMode
18
21
  component?: <T extends DateValue>(props: DatePickerProps<T>) => ReactNode
19
22
  }
20
23
 
21
24
  export function FormDatePicker<
22
25
  ValueMode extends TimeValueMode = "date",
23
26
  FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined,
24
- >({ field, valueMode, emptyValue, component: DatePicker2 = DatePicker, ...rest }: FormDatePickerProps<ValueMode, FieldValue>): ReactNode {
27
+ >({ field, valueMode, emptyValue, dateMode, component: DatePicker2 = DatePicker, ...rest }: FormDatePickerProps<ValueMode, FieldValue>): ReactNode {
25
28
  const context = useContext(FormContext)
26
29
  emptyValue ??= context.emptyValue
27
30
 
28
- return <DatePicker2 value={getFieldValue(field)} onChange={getOnChange({ field, valueMode, emptyValue })} {...getFieldProps(field)} {...rest} />
31
+ return <DatePicker2 value={getFieldValue(field, dateMode)} onChange={getOnChange({ field, valueMode, emptyValue })} {...getFieldProps(field)} {...rest} />
29
32
  }
@@ -6,6 +6,7 @@ import { Field, FieldComponentProps } from "soda-tanstack-form"
6
6
  import { StrictOmit } from "soda-type"
7
7
 
8
8
  import { getFieldProps } from "../utils/getFieldProps"
9
+ import { DateMode } from "../utils/parseTime"
9
10
  import { EmptyValue, FormContext } from "./FormProvider"
10
11
  import { getFieldRangeValue, getOnRangeChange } from "./FormRangeCalendar"
11
12
  import { TimeValueMode, TimeValueModeMap } from "./FormTimeInput"
@@ -19,6 +20,7 @@ export interface FormDateRangePickerProps<
19
20
  > extends StrictOmit<FieldComponentProps<typeof DateRangePicker, FieldValue>, never> {
20
21
  valueMode?: ValueMode
21
22
  emptyValue?: EmptyValue
23
+ dateMode?: DateMode
22
24
  component?: <T extends DateValue>(props: DateRangePickerProps<T>) => ReactNode
23
25
  }
24
26
 
@@ -32,6 +34,7 @@ export function FormDateRangePicker<
32
34
  field: _field,
33
35
  valueMode,
34
36
  emptyValue,
37
+ dateMode,
35
38
  component: DateRangePicker2 = DateRangePicker,
36
39
  ...rest
37
40
  }: FormDateRangePickerProps<ValueMode, FieldValue>): ReactNode {
@@ -40,6 +43,11 @@ export function FormDateRangePicker<
40
43
  emptyValue ??= context.emptyValue
41
44
 
42
45
  return (
43
- <DateRangePicker2 value={getFieldRangeValue(field)} onChange={getOnRangeChange({ field, valueMode, emptyValue })} {...getFieldProps(field)} {...rest} />
46
+ <DateRangePicker2
47
+ value={getFieldRangeValue(field, dateMode)}
48
+ onChange={getOnRangeChange({ field, valueMode, emptyValue })}
49
+ {...getFieldProps(field)}
50
+ {...rest}
51
+ />
44
52
  )
45
53
  }
@@ -6,10 +6,10 @@ import { isNonNullable } from "deepsea-tools"
6
6
  import { Field, FieldComponentProps } from "soda-tanstack-form"
7
7
  import { StrictOmit } from "soda-type"
8
8
 
9
+ import { getFieldProps } from "@/utils/getFieldProps"
9
10
  import { getTimeValue } from "@/utils/getTimeValue"
10
11
 
11
- import { getFieldProps } from "../utils/getFieldProps"
12
- import { parseTime } from "../utils/parseTime"
12
+ import { DateMode, parseTime } from "../utils/parseTime"
13
13
  import { EmptyValue, FormContext, getEmptyValue } from "./FormProvider"
14
14
  import { TimeValueMode, TimeValueModeMap } from "./FormTimeInput"
15
15
 
@@ -22,20 +22,21 @@ export interface FormRangeCalendarProps<
22
22
  > extends StrictOmit<FieldComponentProps<typeof RangeCalendar, FieldValue>, never> {
23
23
  valueMode?: ValueMode
24
24
  emptyValue?: EmptyValue
25
+ dateMode?: DateMode
25
26
  component?: <T extends DateValue>(props: RangeCalendarProps<T>) => ReactNode
26
27
  }
27
28
 
28
- export function getRangeValue(value: [Date, Date] | [number, number] | null | undefined): RangeValue<DateValue> | null {
29
+ export function getRangeValue<T extends DateMode>(value: [Date, Date] | [number, number] | null | undefined, dateMode?: T): RangeValue<DateValue> | null {
29
30
  return isNonNullable(value)
30
31
  ? {
31
- start: parseTime(value[0].valueOf()),
32
- end: parseTime(value[1].valueOf()),
32
+ start: parseTime(value[0].valueOf(), dateMode),
33
+ end: parseTime(value[1].valueOf(), dateMode),
33
34
  }
34
35
  : null
35
36
  }
36
37
 
37
- export function getFieldRangeValue<T extends [Date, Date] | [number, number] | null | undefined>(field: Field<T>) {
38
- return getRangeValue(field.state.value)
38
+ export function getFieldRangeValue<T extends [Date, Date] | [number, number] | null | undefined, P extends DateMode>(field: Field<T>, dateMode?: P) {
39
+ return getRangeValue(field.state.value, dateMode)
39
40
  }
40
41
 
41
42
  export interface GetRangeUpdaterParams {
@@ -76,12 +77,24 @@ export function FormRangeCalendar<
76
77
  | [TimeValueModeMap<ValueMode>, TimeValueModeMap<ValueMode>]
77
78
  | null
78
79
  | undefined,
79
- >({ field: _field, valueMode, emptyValue, component: RangeCalendar2 = RangeCalendar, ...rest }: FormRangeCalendarProps<ValueMode, FieldValue>): ReactNode {
80
+ >({
81
+ field: _field,
82
+ valueMode,
83
+ emptyValue,
84
+ dateMode,
85
+ component: RangeCalendar2 = RangeCalendar,
86
+ ...rest
87
+ }: FormRangeCalendarProps<ValueMode, FieldValue>): ReactNode {
80
88
  const field = _field as unknown as Field<[Date, Date] | [number, number] | null | undefined>
81
89
  const context = useContext(FormContext)
82
90
  emptyValue ??= context.emptyValue
83
91
 
84
92
  return (
85
- <RangeCalendar2 value={getFieldRangeValue(field)} onChange={getOnRangeChange({ field, valueMode, emptyValue })} {...getFieldProps(field)} {...rest} />
93
+ <RangeCalendar2
94
+ value={getFieldRangeValue(field, dateMode)}
95
+ onChange={getOnRangeChange({ field, valueMode, emptyValue })}
96
+ {...getFieldProps(field)}
97
+ {...rest}
98
+ />
86
99
  )
87
100
  }
@@ -10,7 +10,7 @@ import { StrictOmit } from "soda-type"
10
10
  import { getFieldProps } from "@/utils/getFieldProps"
11
11
  import { getTimeValue } from "@/utils/getTimeValue"
12
12
 
13
- import { parseTime } from "../utils/parseTime"
13
+ import { ParseMode, TimeMode, parseTime } from "../utils/parseTime"
14
14
  import { EmptyValue, FormContext, getEmptyValue } from "./FormProvider"
15
15
 
16
16
  export type TimeValue = Date | number
@@ -25,15 +25,16 @@ export interface FormTimeInputProps<
25
25
  > extends StrictOmit<FieldComponentProps<typeof TimeInput, FieldValue>, never> {
26
26
  valueMode?: ValueMode
27
27
  emptyValue?: EmptyValue
28
+ timeMode?: TimeMode
28
29
  component?: <T extends Time | CalendarDateTime | ZonedDateTime>(props: TimeInputProps<T>) => ReactNode
29
30
  }
30
31
 
31
- export function getValue(value: Date | number | null | undefined) {
32
- return isNonNullable(value) ? parseTime(value.valueOf()) : null
32
+ export function getValue<T extends ParseMode>(value: Date | number | null | undefined, parseMode?: T) {
33
+ return isNonNullable(value) ? parseTime(value.valueOf(), parseMode) : null
33
34
  }
34
35
 
35
- export function getFieldValue<T extends Date | number | null | undefined>(field: Field<T>) {
36
- return getValue(field.state.value)
36
+ export function getFieldValue<T extends Date | number | null | undefined, P extends ParseMode>(field: Field<T>, parseMode?: P) {
37
+ return getValue(field.state.value, parseMode)
37
38
  }
38
39
 
39
40
  export interface GetUpdaterParams {
@@ -64,9 +65,9 @@ export function getOnChange<T extends Date | number | null | undefined>({ field,
64
65
  export function FormTimeInput<
65
66
  ValueMode extends TimeValueMode = "date",
66
67
  FieldValue extends TimeValueModeMap<ValueMode> | null | undefined = TimeValueModeMap<ValueMode> | null | undefined,
67
- >({ field, valueMode, emptyValue, component: TimeInput2 = TimeInput, ...rest }: FormTimeInputProps<ValueMode, FieldValue>): ReactNode {
68
+ >({ field, valueMode, emptyValue, timeMode, component: TimeInput2 = TimeInput, ...rest }: FormTimeInputProps<ValueMode, FieldValue>): ReactNode {
68
69
  const context = useContext(FormContext)
69
70
  emptyValue ??= context.emptyValue
70
71
 
71
- return <TimeInput2 value={getFieldValue(field)} onChange={getOnChange({ field, valueMode, emptyValue })} {...getFieldProps(field)} {...rest} />
72
+ return <TimeInput2 value={getFieldValue(field, timeMode)} onChange={getOnChange({ field, valueMode, emptyValue })} {...getFieldProps(field)} {...rest} />
72
73
  }
@@ -1,5 +1,24 @@
1
- import { ZonedDateTime, fromAbsolute, getLocalTimeZone } from "@internationalized/date"
1
+ import { CalendarDate, CalendarDateTime, Time, ZonedDateTime, fromAbsolute, getLocalTimeZone } from "@internationalized/date"
2
2
 
3
- export function parseTime(ms: number): ZonedDateTime {
4
- return fromAbsolute(ms, getLocalTimeZone())
3
+ export { CalendarDate, CalendarDateTime, Time, ZonedDateTime, fromAbsolute, getLocalTimeZone } from "@internationalized/date"
4
+
5
+ export type ParseMode = typeof ZonedDateTime | typeof CalendarDate | typeof CalendarDateTime | typeof Time
6
+
7
+ export type TimeMode = Exclude<ParseMode, typeof CalendarDate>
8
+
9
+ export type DateMode = Exclude<ParseMode, typeof Time>
10
+
11
+ export function parseTime<T extends ParseMode = typeof CalendarDateTime>(ms: number, type?: T): InstanceType<T> {
12
+ if (type === ZonedDateTime) return fromAbsolute(ms, getLocalTimeZone()) as InstanceType<T>
13
+ const date = new Date(ms)
14
+ const year = date.getFullYear()
15
+ const month = date.getMonth()
16
+ const day = date.getDate()
17
+ const hour = date.getHours()
18
+ const minute = date.getMinutes()
19
+ const second = date.getSeconds()
20
+ const millisecond = date.getMilliseconds()
21
+ if (type === CalendarDate) return new CalendarDate(year, month, day) as InstanceType<T>
22
+ if (type === Time) return new Time(hour, minute, second, millisecond) as InstanceType<T>
23
+ return new CalendarDateTime(year, month, day, hour, minute, second, millisecond) as InstanceType<T>
5
24
  }