@mantine/dates 3.6.5 → 3.6.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/cjs/components/DatePicker/DatePicker.js +22 -7
  2. package/cjs/components/DatePicker/DatePicker.js.map +1 -1
  3. package/cjs/components/DatePickerBase/DatePickerBase.js +23 -7
  4. package/cjs/components/DatePickerBase/DatePickerBase.js.map +1 -1
  5. package/cjs/components/DateRangePicker/DateRangePicker.js +19 -6
  6. package/cjs/components/DateRangePicker/DateRangePicker.js.map +1 -1
  7. package/cjs/components/TimeInput/TimeInput.js +33 -39
  8. package/cjs/components/TimeInput/TimeInput.js.map +1 -1
  9. package/cjs/components/TimeInputBase/AmPmInput/AmPmInput.js +8 -6
  10. package/cjs/components/TimeInputBase/AmPmInput/AmPmInput.js.map +1 -1
  11. package/cjs/components/TimeInputBase/TimeField/TimeField.js +19 -5
  12. package/cjs/components/TimeInputBase/TimeField/TimeField.js.map +1 -1
  13. package/cjs/components/TimeInputBase/create-time-handler/create-time-handler.js +5 -11
  14. package/cjs/components/TimeInputBase/create-time-handler/create-time-handler.js.map +1 -1
  15. package/cjs/components/TimeInputBase/get-date/get-date.js +7 -1
  16. package/cjs/components/TimeInputBase/get-date/get-date.js.map +1 -1
  17. package/cjs/components/TimeInputBase/get-time-values/get-time-value.js +13 -4
  18. package/cjs/components/TimeInputBase/get-time-values/get-time-value.js.map +1 -1
  19. package/cjs/components/TimeRangeInput/TimeRangeInput.js +44 -230
  20. package/cjs/components/TimeRangeInput/TimeRangeInput.js.map +1 -1
  21. package/esm/components/DatePicker/DatePicker.js +22 -7
  22. package/esm/components/DatePicker/DatePicker.js.map +1 -1
  23. package/esm/components/DatePickerBase/DatePickerBase.js +23 -7
  24. package/esm/components/DatePickerBase/DatePickerBase.js.map +1 -1
  25. package/esm/components/DateRangePicker/DateRangePicker.js +19 -6
  26. package/esm/components/DateRangePicker/DateRangePicker.js.map +1 -1
  27. package/esm/components/TimeInput/TimeInput.js +35 -41
  28. package/esm/components/TimeInput/TimeInput.js.map +1 -1
  29. package/esm/components/TimeInputBase/AmPmInput/AmPmInput.js +8 -6
  30. package/esm/components/TimeInputBase/AmPmInput/AmPmInput.js.map +1 -1
  31. package/esm/components/TimeInputBase/TimeField/TimeField.js +20 -6
  32. package/esm/components/TimeInputBase/TimeField/TimeField.js.map +1 -1
  33. package/esm/components/TimeInputBase/create-time-handler/create-time-handler.js +5 -11
  34. package/esm/components/TimeInputBase/create-time-handler/create-time-handler.js.map +1 -1
  35. package/esm/components/TimeInputBase/get-date/get-date.js +7 -1
  36. package/esm/components/TimeInputBase/get-date/get-date.js.map +1 -1
  37. package/esm/components/TimeInputBase/get-time-values/get-time-value.js +13 -4
  38. package/esm/components/TimeInputBase/get-time-values/get-time-value.js.map +1 -1
  39. package/esm/components/TimeRangeInput/TimeRangeInput.js +46 -232
  40. package/esm/components/TimeRangeInput/TimeRangeInput.js.map +1 -1
  41. package/lib/components/DatePicker/DatePicker.d.ts +1 -1
  42. package/lib/components/DatePicker/DatePicker.d.ts.map +1 -1
  43. package/lib/components/DatePickerBase/DatePickerBase.d.ts +6 -0
  44. package/lib/components/DatePickerBase/DatePickerBase.d.ts.map +1 -1
  45. package/lib/components/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  46. package/lib/components/TimeInput/TimeInput.d.ts +4 -2
  47. package/lib/components/TimeInput/TimeInput.d.ts.map +1 -1
  48. package/lib/components/TimeInputBase/AmPmInput/AmPmInput.d.ts +0 -2
  49. package/lib/components/TimeInputBase/AmPmInput/AmPmInput.d.ts.map +1 -1
  50. package/lib/components/TimeInputBase/TimeField/TimeField.d.ts +6 -3
  51. package/lib/components/TimeInputBase/TimeField/TimeField.d.ts.map +1 -1
  52. package/lib/components/TimeInputBase/create-time-handler/create-time-handler.d.ts +1 -1
  53. package/lib/components/TimeInputBase/create-time-handler/create-time-handler.d.ts.map +1 -1
  54. package/lib/components/TimeInputBase/get-date/get-date.d.ts.map +1 -1
  55. package/lib/components/TimeInputBase/get-time-values/get-time-value.d.ts +2 -1
  56. package/lib/components/TimeInputBase/get-time-values/get-time-value.d.ts.map +1 -1
  57. package/lib/components/TimeRangeInput/TimeRangeInput.d.ts.map +1 -1
  58. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- import React, { forwardRef, useRef } from 'react';
1
+ import React, { forwardRef, useState, useRef } from 'react';
2
2
  import { useMergedRef, clamp } from '@mantine/hooks';
3
3
  import { Text } from '@mantine/core';
4
4
  import { padTime } from '../pad-time/pad-time.js';
@@ -42,6 +42,7 @@ const TimeField = forwardRef((_a, ref) => {
42
42
  withSeparator = false,
43
43
  size = "sm",
44
44
  max,
45
+ min = 0,
45
46
  value
46
47
  } = _b, others = __objRest(_b, [
47
48
  "className",
@@ -52,16 +53,22 @@ const TimeField = forwardRef((_a, ref) => {
52
53
  "withSeparator",
53
54
  "size",
54
55
  "max",
56
+ "min",
55
57
  "value"
56
58
  ]);
59
+ const [digitsEntered, setDigitsEntered] = useState(0);
57
60
  const { classes, cx, theme } = useStyles({ size, hasValue: !!value });
58
61
  const inputRef = useRef();
59
62
  const handleFocus = (event) => {
60
63
  typeof onFocus === "function" && onFocus(event);
61
64
  inputRef.current.select();
65
+ setDigitsEntered(0);
62
66
  };
63
67
  const handleBlur = (event) => {
64
68
  typeof onBlur === "function" && onBlur(event);
69
+ if (digitsEntered === 1) {
70
+ typeof onChange === "function" && onChange(event.currentTarget.value, false);
71
+ }
65
72
  };
66
73
  const handleClick = (event) => {
67
74
  event.stopPropagation();
@@ -70,25 +77,32 @@ const TimeField = forwardRef((_a, ref) => {
70
77
  const handleKeyDown = (event) => {
71
78
  if (event.nativeEvent.code === "ArrowUp") {
72
79
  event.preventDefault();
73
- const padded = padTime(clamp({ value: parseInt(event.currentTarget.value, 10) + 1, max, min: 0 }).toString());
80
+ const padded = padTime(clamp({ value: parseInt(event.currentTarget.value, 10) + 1, max, min }).toString());
74
81
  if (value !== padded) {
75
- setValue(padded);
76
82
  onChange(padded, false);
77
83
  }
78
84
  }
79
85
  if (event.nativeEvent.code === "ArrowDown") {
80
86
  event.preventDefault();
81
- const padded = padTime(clamp({ value: parseInt(event.currentTarget.value, 10) - 1, max, min: 0 }).toString());
87
+ const padded = padTime(clamp({ value: parseInt(event.currentTarget.value, 10) - 1, max, min }).toString());
82
88
  if (value !== padded) {
83
- setValue(padded);
84
89
  onChange(padded, false);
85
90
  }
86
91
  }
87
92
  };
93
+ const handleChange = (event) => {
94
+ setDigitsEntered(digitsEntered + 1);
95
+ const _val = parseInt(event.currentTarget.value, 10).toString();
96
+ if (_val === "0" && digitsEntered === 0) {
97
+ setValue("00");
98
+ return;
99
+ }
100
+ onChange(_val, true, digitsEntered > 0);
101
+ };
88
102
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("input", __spreadValues({
89
103
  type: "text",
90
104
  ref: useMergedRef(inputRef, ref),
91
- onChange: (event) => onChange(event.currentTarget.value, true),
105
+ onChange: handleChange,
92
106
  onClick: handleClick,
93
107
  onFocus: handleFocus,
94
108
  onBlur: handleBlur,
@@ -1 +1 @@
1
- {"version":3,"file":"TimeField.js","sources":["../../../../src/components/TimeInputBase/TimeField/TimeField.tsx"],"sourcesContent":["import React, { useRef, forwardRef } from 'react';\nimport { useMergedRef, clamp } from '@mantine/hooks';\nimport { Text, MantineSize } from '@mantine/core';\nimport { padTime } from '../pad-time/pad-time';\nimport useStyles from '../TimeInputBase.styles';\n\ninterface TimeFieldProps\n extends Omit<React.ComponentPropsWithoutRef<'input'>, 'onChange' | 'size'> {\n /** Called with onChange event */\n onChange(value: string, triggerShift: boolean): void;\n\n /** Called when input loses focus, used to format value */\n setValue(value: string): void;\n\n /** Adds colon after the field */\n withSeparator?: boolean;\n\n /** Colon text size */\n size?: MantineSize;\n\n /** Maximum possible value, min value is always 0 */\n max?: number;\n}\n\nexport const TimeField = forwardRef<HTMLInputElement, TimeFieldProps>(\n (\n {\n className,\n onFocus,\n onBlur,\n onChange,\n setValue,\n withSeparator = false,\n size = 'sm',\n max,\n value,\n ...others\n }: TimeFieldProps,\n ref\n ) => {\n const { classes, cx, theme } = useStyles({ size, hasValue: !!value });\n const inputRef = useRef<HTMLInputElement>();\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n typeof onFocus === 'function' && onFocus(event);\n inputRef.current.select();\n };\n\n const handleBlur = (event: any) => {\n typeof onBlur === 'function' && onBlur(event);\n };\n\n const handleClick = (event: React.MouseEvent<HTMLInputElement, MouseEvent>) => {\n event.stopPropagation();\n inputRef.current.select();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.nativeEvent.code === 'ArrowUp') {\n event.preventDefault();\n const padded = padTime(\n clamp({ value: parseInt(event.currentTarget.value, 10) + 1, max, min: 0 }).toString()\n );\n\n if (value !== padded) {\n setValue(padded);\n onChange(padded, false);\n }\n }\n\n if (event.nativeEvent.code === 'ArrowDown') {\n event.preventDefault();\n const padded = padTime(\n clamp({ value: parseInt(event.currentTarget.value, 10) - 1, max, min: 0 }).toString()\n );\n\n if (value !== padded) {\n setValue(padded);\n onChange(padded, false);\n }\n }\n };\n\n return (\n <>\n <input\n type=\"text\"\n ref={useMergedRef(inputRef, ref)}\n onChange={(event) => onChange(event.currentTarget.value, true)}\n onClick={handleClick}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n value={value}\n className={cx(classes.timeInput, className)}\n {...others}\n />\n\n {withSeparator && (\n <Text\n size={size}\n style={{\n lineHeight: 1,\n color: value\n ? 'inherit'\n : theme.colorScheme === 'dark'\n ? theme.colors.dark[2]\n : theme.colors.gray[7],\n }}\n >\n :\n </Text>\n )}\n </>\n );\n }\n);\n\nTimeField.displayName = '@mantine/dates/TimeField';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TimeField.js","sources":["../../../../src/components/TimeInputBase/TimeField/TimeField.tsx"],"sourcesContent":["import React, { useRef, forwardRef, useState } from 'react';\nimport { useMergedRef, clamp } from '@mantine/hooks';\nimport { Text, MantineSize } from '@mantine/core';\nimport { padTime } from '../pad-time/pad-time';\nimport useStyles from '../TimeInputBase.styles';\nimport type { createTimeHandler } from '../create-time-handler/create-time-handler';\n\ninterface TimeFieldProps\n extends Omit<React.ComponentPropsWithoutRef<'input'>, 'onChange' | 'size'> {\n /** Called with onChange event */\n onChange: ReturnType<typeof createTimeHandler>;\n\n /** Called to set input value and bypass parent validation/onChange calls */\n setValue(value: string): void;\n\n /** Adds colon after the field */\n withSeparator?: boolean;\n\n /** Colon text size */\n size?: MantineSize;\n\n /** Maximum possible value */\n max?: number;\n\n /** Minimum possible value. Default 0 */\n min?: number;\n}\n\nexport const TimeField = forwardRef<HTMLInputElement, TimeFieldProps>(\n (\n {\n className,\n onFocus,\n onBlur,\n onChange,\n setValue,\n withSeparator = false,\n size = 'sm',\n max,\n min = 0,\n value,\n ...others\n }: TimeFieldProps,\n ref\n ) => {\n const [digitsEntered, setDigitsEntered] = useState(0);\n const { classes, cx, theme } = useStyles({ size, hasValue: !!value });\n const inputRef = useRef<HTMLInputElement>();\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n typeof onFocus === 'function' && onFocus(event);\n inputRef.current.select();\n setDigitsEntered(0);\n };\n\n const handleBlur = (event: any) => {\n typeof onBlur === 'function' && onBlur(event);\n // Call onChange in case the only digit entered is 0\n if (digitsEntered === 1) {\n typeof onChange === 'function' && onChange(event.currentTarget.value, false);\n }\n };\n\n const handleClick = (event: React.MouseEvent<HTMLInputElement, MouseEvent>) => {\n event.stopPropagation();\n inputRef.current.select();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.nativeEvent.code === 'ArrowUp') {\n event.preventDefault();\n const padded = padTime(\n clamp({ value: parseInt(event.currentTarget.value, 10) + 1, max, min }).toString()\n );\n\n if (value !== padded) {\n onChange(padded, false);\n }\n }\n\n if (event.nativeEvent.code === 'ArrowDown') {\n event.preventDefault();\n const padded = padTime(\n clamp({ value: parseInt(event.currentTarget.value, 10) - 1, max, min }).toString()\n );\n\n if (value !== padded) {\n onChange(padded, false);\n }\n }\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setDigitsEntered(digitsEntered + 1);\n\n const _val = parseInt(event.currentTarget.value, 10).toString();\n\n // In 12-hour format, 0 is not allowed, but it could be the start of 01, 02, etc.\n if (_val === '0' && digitsEntered === 0) {\n setValue('00');\n return;\n }\n onChange(_val, true, digitsEntered > 0);\n };\n\n return (\n <>\n <input\n type=\"text\"\n ref={useMergedRef(inputRef, ref)}\n onChange={handleChange}\n onClick={handleClick}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n value={value}\n className={cx(classes.timeInput, className)}\n {...others}\n />\n\n {withSeparator && (\n <Text\n size={size}\n style={{\n lineHeight: 1,\n color: value\n ? 'inherit'\n : theme.colorScheme === 'dark'\n ? theme.colors.dark[2]\n : theme.colors.gray[7],\n }}\n >\n :\n </Text>\n )}\n </>\n );\n }\n);\n\nTimeField.displayName = '@mantine/dates/TimeField';\n"],"names":[],"mappings":"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"}
@@ -2,22 +2,16 @@ import { clamp } from '@mantine/hooks';
2
2
  import { padTime } from '../pad-time/pad-time.js';
3
3
 
4
4
  function createTimeHandler({ onChange, nextRef, min, max, maxValue }) {
5
- return (value, triggerShift) => {
6
- var _a, _b, _c, _d;
7
- if (value === "00") {
8
- onChange("00");
9
- triggerShift && ((_a = nextRef == null ? void 0 : nextRef.current) == null ? void 0 : _a.focus());
10
- triggerShift && ((_b = nextRef == null ? void 0 : nextRef.current) == null ? void 0 : _b.select());
11
- return;
12
- }
5
+ return (value, triggerShift, forceTriggerShift = false) => {
6
+ var _a, _b;
13
7
  const parsed = parseInt(value, 10);
14
8
  if (Number.isNaN(parsed)) {
15
9
  return;
16
10
  }
17
- if (parsed > maxValue) {
11
+ if (parsed > maxValue || forceTriggerShift) {
18
12
  onChange(padTime(clamp({ value: parsed, min, max }).toString()));
19
- triggerShift && ((_c = nextRef == null ? void 0 : nextRef.current) == null ? void 0 : _c.focus());
20
- triggerShift && ((_d = nextRef == null ? void 0 : nextRef.current) == null ? void 0 : _d.select());
13
+ triggerShift && ((_a = nextRef == null ? void 0 : nextRef.current) == null ? void 0 : _a.focus());
14
+ triggerShift && ((_b = nextRef == null ? void 0 : nextRef.current) == null ? void 0 : _b.select());
21
15
  return;
22
16
  }
23
17
  onChange(parsed.toString());
@@ -1 +1 @@
1
- {"version":3,"file":"create-time-handler.js","sources":["../../../../src/components/TimeInputBase/create-time-handler/create-time-handler.ts"],"sourcesContent":["import { clamp } from '@mantine/hooks';\nimport { padTime } from '../pad-time/pad-time';\n\ninterface CreateTimeHandler {\n onChange(value: string): void;\n nextRef?: React.RefObject<HTMLInputElement>;\n min: number;\n max: number;\n maxValue: number;\n}\n\nexport function createTimeHandler({ onChange, nextRef, min, max, maxValue }: CreateTimeHandler) {\n return (value: string, triggerShift: boolean) => {\n if (value === '00') {\n onChange('00');\n triggerShift && nextRef?.current?.focus();\n triggerShift && nextRef?.current?.select();\n return;\n }\n\n const parsed = parseInt(value, 10);\n\n if (Number.isNaN(parsed)) {\n return;\n }\n\n if (parsed > maxValue) {\n onChange(padTime(clamp({ value: parsed, min, max }).toString()));\n triggerShift && nextRef?.current?.focus();\n triggerShift && nextRef?.current?.select();\n return;\n }\n\n onChange(parsed.toString());\n };\n}\n"],"names":[],"mappings":";;;AAEO,SAAS,iBAAiB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;AAC7E,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY,KAAK;AAClC,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACvB,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE;AACxB,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrB,MAAM,YAAY,KAAK,CAAC,EAAE,GAAG,OAAO,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;AACxG,MAAM,YAAY,KAAK,CAAC,EAAE,GAAG,OAAO,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AACzG,MAAM,OAAO;AACb,KAAK;AACL,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACvC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAC9B,MAAM,OAAO;AACb,KAAK;AACL,IAAI,IAAI,MAAM,GAAG,QAAQ,EAAE;AAC3B,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACvE,MAAM,YAAY,KAAK,CAAC,EAAE,GAAG,OAAO,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;AACxG,MAAM,YAAY,KAAK,CAAC,EAAE,GAAG,OAAO,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AACzG,MAAM,OAAO;AACb,KAAK;AACL,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChC,GAAG,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"create-time-handler.js","sources":["../../../../src/components/TimeInputBase/create-time-handler/create-time-handler.ts"],"sourcesContent":["import { clamp } from '@mantine/hooks';\nimport { padTime } from '../pad-time/pad-time';\n\ninterface CreateTimeHandler {\n onChange(value: string): void;\n nextRef?: React.RefObject<HTMLInputElement>;\n min: number;\n max: number;\n maxValue: number;\n}\n\nexport function createTimeHandler({ onChange, nextRef, min, max, maxValue }: CreateTimeHandler) {\n return (value: string, triggerShift: boolean, forceTriggerShift = false) => {\n const parsed = parseInt(value, 10);\n\n if (Number.isNaN(parsed)) {\n return;\n }\n\n if (parsed > maxValue || forceTriggerShift) {\n onChange(padTime(clamp({ value: parsed, min, max }).toString()));\n triggerShift && nextRef?.current?.focus();\n triggerShift && nextRef?.current?.select();\n return;\n }\n\n onChange(parsed.toString());\n };\n}\n"],"names":[],"mappings":";;;AAEO,SAAS,iBAAiB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;AAC7E,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,iBAAiB,GAAG,KAAK,KAAK;AAC7D,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC;AACf,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACvC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAC9B,MAAM,OAAO;AACb,KAAK;AACL,IAAI,IAAI,MAAM,GAAG,QAAQ,IAAI,iBAAiB,EAAE;AAChD,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACvE,MAAM,YAAY,KAAK,CAAC,EAAE,GAAG,OAAO,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;AACxG,MAAM,YAAY,KAAK,CAAC,EAAE,GAAG,OAAO,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AACzG,MAAM,OAAO;AACb,KAAK;AACL,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChC,GAAG,CAAC;AACJ;;;;"}
@@ -8,7 +8,13 @@ function getDate(hours, minutes, seconds, format, amPm) {
8
8
  if (Number.isNaN(_hours)) {
9
9
  _hours = 0;
10
10
  }
11
- return date.hour(format === "12" && amPm === "pm" ? _hours < 12 ? _hours - 12 : _hours : _hours).minute(Number.isNaN(_minutes) ? 0 : _minutes).second(Number.isNaN(_seconds) ? 0 : _seconds).toDate();
11
+ if (format === "12") {
12
+ _hours %= 12;
13
+ if (amPm === "pm") {
14
+ _hours += 12;
15
+ }
16
+ }
17
+ return date.hour(_hours).minute(Number.isNaN(_minutes) ? 0 : _minutes).second(Number.isNaN(_seconds) ? 0 : _seconds).toDate();
12
18
  }
13
19
 
14
20
  export { getDate };
@@ -1 +1 @@
1
- {"version":3,"file":"get-date.js","sources":["../../../../src/components/TimeInputBase/get-date/get-date.ts"],"sourcesContent":["import dayjs from 'dayjs';\n\nexport function getDate(\n hours: string,\n minutes: string,\n seconds: string,\n format: '12' | '24',\n amPm?: string\n) {\n const date = dayjs();\n let _hours = parseInt(hours, 10);\n const _minutes = parseInt(minutes, 10);\n const _seconds = parseInt(seconds, 10);\n\n if (Number.isNaN(_hours)) {\n _hours = 0;\n }\n\n return date\n .hour(format === '12' && amPm === 'pm' ? (_hours < 12 ? _hours - 12 : _hours) : _hours)\n .minute(Number.isNaN(_minutes) ? 0 : _minutes)\n .second(Number.isNaN(_seconds) ? 0 : _seconds)\n .toDate();\n}\n"],"names":[],"mappings":";;AACO,SAAS,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;AAC/D,EAAE,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC;AACvB,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACnC,EAAE,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACzC,EAAE,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACzC,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,GAAG;AACH,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;AACxM;;;;"}
1
+ {"version":3,"file":"get-date.js","sources":["../../../../src/components/TimeInputBase/get-date/get-date.ts"],"sourcesContent":["import dayjs from 'dayjs';\n\nexport function getDate(\n hours: string,\n minutes: string,\n seconds: string,\n format: '12' | '24',\n amPm?: string\n) {\n const date = dayjs();\n let _hours = parseInt(hours, 10);\n const _minutes = parseInt(minutes, 10);\n const _seconds = parseInt(seconds, 10);\n\n if (Number.isNaN(_hours)) {\n _hours = 0;\n }\n\n if (format === '12') {\n _hours %= 12;\n if (amPm === 'pm') {\n _hours += 12;\n }\n }\n\n return date\n .hour(_hours)\n .minute(Number.isNaN(_minutes) ? 0 : _minutes)\n .second(Number.isNaN(_seconds) ? 0 : _seconds)\n .toDate();\n}\n"],"names":[],"mappings":";;AACO,SAAS,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;AAC/D,EAAE,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC;AACvB,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACnC,EAAE,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACzC,EAAE,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACzC,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,GAAG;AACH,EAAE,IAAI,MAAM,KAAK,IAAI,EAAE;AACvB,IAAI,MAAM,IAAI,EAAE,CAAC;AACjB,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;AACvB,MAAM,MAAM,IAAI,EAAE,CAAC;AACnB,KAAK;AACL,GAAG;AACH,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;AAChI;;;;"}
@@ -1,13 +1,22 @@
1
1
  import { padTime } from '../pad-time/pad-time.js';
2
2
 
3
- function getTimeValues(value) {
3
+ function getTimeValues(value, format) {
4
4
  if (!(value instanceof Date)) {
5
- return { hours: "", minutes: "", seconds: "" };
5
+ return { hours: "", minutes: "", seconds: "", amPm: "" };
6
+ }
7
+ let _hours = value.getHours();
8
+ const isPm = _hours >= 12;
9
+ if (format === "12") {
10
+ _hours %= 12;
11
+ if (_hours === 0) {
12
+ _hours += 12;
13
+ }
6
14
  }
7
15
  return {
8
- hours: padTime(value.getHours().toString()),
16
+ hours: padTime(_hours.toString()),
9
17
  minutes: padTime(value.getMinutes().toString()),
10
- seconds: padTime(value.getSeconds().toString())
18
+ seconds: padTime(value.getSeconds().toString()),
19
+ amPm: isPm ? "pm" : "am"
11
20
  };
12
21
  }
13
22
 
@@ -1 +1 @@
1
- {"version":3,"file":"get-time-value.js","sources":["../../../../src/components/TimeInputBase/get-time-values/get-time-value.ts"],"sourcesContent":["import { padTime } from '../pad-time/pad-time';\n\nexport function getTimeValues(value: Date) {\n if (!(value instanceof Date)) {\n return { hours: '', minutes: '', seconds: '' };\n }\n\n return {\n hours: padTime(value.getHours().toString()),\n minutes: padTime(value.getMinutes().toString()),\n seconds: padTime(value.getSeconds().toString()),\n };\n}\n"],"names":[],"mappings":";;AACO,SAAS,aAAa,CAAC,KAAK,EAAE;AACrC,EAAE,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;AAChC,IAAI,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACnD,GAAG;AACH,EAAE,OAAO;AACT,IAAI,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;AAC/C,IAAI,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC;AACnD,IAAI,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC;AACnD,GAAG,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"get-time-value.js","sources":["../../../../src/components/TimeInputBase/get-time-values/get-time-value.ts"],"sourcesContent":["import { padTime } from '../pad-time/pad-time';\n\nexport function getTimeValues(value: Date, format: '12' | '24') {\n if (!(value instanceof Date)) {\n return { hours: '', minutes: '', seconds: '', amPm: '' };\n }\n\n let _hours = value.getHours();\n\n const isPm = _hours >= 12;\n if (format === '12') {\n _hours %= 12;\n if (_hours === 0) {\n _hours += 12;\n }\n }\n\n return {\n hours: padTime(_hours.toString()),\n minutes: padTime(value.getMinutes().toString()),\n seconds: padTime(value.getSeconds().toString()),\n amPm: isPm ? 'pm' : 'am',\n };\n}\n"],"names":[],"mappings":";;AACO,SAAS,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE;AAC7C,EAAE,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;AAChC,IAAI,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC7D,GAAG;AACH,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;AAChC,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,CAAC;AAC5B,EAAE,IAAI,MAAM,KAAK,IAAI,EAAE;AACvB,IAAI,MAAM,IAAI,EAAE,CAAC;AACjB,IAAI,IAAI,MAAM,KAAK,CAAC,EAAE;AACtB,MAAM,MAAM,IAAI,EAAE,CAAC;AACnB,KAAK;AACL,GAAG;AACH,EAAE,OAAO;AACT,IAAI,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACrC,IAAI,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC;AACnD,IAAI,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC;AACnD,IAAI,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;AAC5B,GAAG,CAAC;AACJ;;;;"}
@@ -1,18 +1,10 @@
1
- import React, { forwardRef, useRef, useState, useEffect } from 'react';
1
+ import React, { forwardRef, useRef, useState } from 'react';
2
2
  import { extractMargins, CloseButton, InputWrapper, Input } from '@mantine/core';
3
- import { useUuid, useMergedRef } from '@mantine/hooks';
4
- import { TimeField } from '../TimeInputBase/TimeField/TimeField.js';
5
- import { createTimeHandler } from '../TimeInputBase/create-time-handler/create-time-handler.js';
6
- import { getTimeValues } from '../TimeInputBase/get-time-values/get-time-value.js';
3
+ import { useUuid, useDidUpdate, useMergedRef } from '@mantine/hooks';
7
4
  import useStyles from './TimeRangeInput.styles.js';
8
- import { padTime } from '../TimeInputBase/pad-time/pad-time.js';
9
- import { AmPmInput } from '../TimeInputBase/AmPmInput/AmPmInput.js';
10
- import { createAmPmHandler } from '../TimeInputBase/create-amPm-handler/create-amPm-handler.js';
11
- import { getDate } from '../TimeInputBase/get-date/get-date.js';
5
+ import { TimeInput } from '../TimeInput/TimeInput.js';
12
6
 
13
7
  var __defProp = Object.defineProperty;
14
- var __defProps = Object.defineProperties;
15
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
16
8
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
17
9
  var __hasOwnProp = Object.prototype.hasOwnProperty;
18
10
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
@@ -28,7 +20,6 @@ var __spreadValues = (a, b) => {
28
20
  }
29
21
  return a;
30
22
  };
31
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
32
23
  var __objRest = (source, exclude) => {
33
24
  var target = {};
34
25
  for (var prop in source)
@@ -62,7 +53,7 @@ const TimeRangeInput = forwardRef((_a, ref) => {
62
53
  styles,
63
54
  id,
64
55
  value,
65
- defaultValue,
56
+ defaultValue = [null, null],
66
57
  onChange,
67
58
  withSeconds = false,
68
59
  clearable = false,
@@ -111,106 +102,22 @@ const TimeRangeInput = forwardRef((_a, ref) => {
111
102
  const { classes, cx, theme } = useStyles({ size }, { classNames, styles, name: "TimeRangeInput" });
112
103
  const { margins, rest } = extractMargins(others);
113
104
  const uuid = useUuid(id);
114
- const hoursRef = useRef([]);
115
- const minutesRef = useRef([]);
116
- const secondsRef = useRef([]);
117
- const formatsRef = useRef([]);
118
- const [fromTime, setFromTime] = useState(getTimeValues(value ? value[0] : defaultValue ? defaultValue[0] : void 0));
119
- const [toTime, setToTime] = useState(getTimeValues(value ? value[1] : defaultValue ? defaultValue[1] : void 0));
120
- const [fromAmPm, setFromAmPm] = useState("am");
121
- const [toAmPm, setToAmPm] = useState("am");
122
- const [selectedFieldIndex, setSelectedFieldIndex] = useState(0);
105
+ const fromTimeRef = useRef();
106
+ const toTimeRef = useRef();
123
107
  const [_value, setValue] = useState(value != null ? value : defaultValue);
124
- useEffect(() => {
125
- setValue([
126
- getDate(fromTime.hours, fromTime.minutes, fromTime.seconds, format, fromAmPm),
127
- getDate(toTime.hours, toTime.minutes, toTime.seconds, format, toAmPm)
128
- ]);
129
- }, [
130
- fromTime.hours,
131
- fromTime.minutes,
132
- fromTime.seconds,
133
- toTime.hours,
134
- toTime.minutes,
135
- toTime.seconds,
136
- format,
137
- fromAmPm,
138
- toAmPm
139
- ]);
140
- useEffect(() => {
141
- if (format === "12" && (_value[0] || _value[1])) {
142
- setFromAmPm(parseInt(fromTime.hours, 10) >= 12 ? "pm" : "am");
143
- setToAmPm(parseInt(toTime.hours, 10) >= 12 ? "pm" : "am");
144
- }
145
- }, [format]);
146
- const setTime = (cb) => {
147
- selectedFieldIndex === 0 ? setFromTime(cb) : setToTime(cb);
148
- };
149
- const nextMinuteRef = () => {
150
- if (withSeconds) {
151
- return secondsRef.current[selectedFieldIndex];
152
- }
153
- if (format === "12") {
154
- return formatsRef.current[selectedFieldIndex];
155
- }
156
- if (format === "24" && selectedFieldIndex === 0) {
157
- return hoursRef.current[1];
158
- }
159
- return void 0;
160
- };
161
- const handleHoursChange = createTimeHandler({
162
- onChange: (val) => {
163
- setTime((current) => __spreadProps(__spreadValues({}, current), { hours: padTime(val) }));
164
- },
165
- min: 0,
166
- max: format === "12" ? 11 : 23,
167
- maxValue: format === "12" ? 1 : 2,
168
- nextRef: {
169
- current: minutesRef.current[selectedFieldIndex]
170
- }
171
- });
172
- const handleMinutesChange = createTimeHandler({
173
- onChange: (val) => {
174
- setTime((current) => __spreadProps(__spreadValues({}, current), { minutes: padTime(val) }));
175
- },
176
- min: 0,
177
- max: 59,
178
- maxValue: 5,
179
- nextRef: {
180
- current: nextMinuteRef()
181
- }
182
- });
183
- const handleSecondsChange = createTimeHandler({
184
- onChange: (val) => {
185
- setTime((current) => __spreadProps(__spreadValues({}, current), { seconds: padTime(val) }));
186
- },
187
- min: 0,
188
- max: 59,
189
- maxValue: 5,
190
- nextRef: {
191
- current: format === "12" ? formatsRef.current[selectedFieldIndex] : format === "24" && selectedFieldIndex === 0 ? hoursRef.current[1] : void 0
192
- }
193
- });
194
- const handleAmPmChange = createAmPmHandler({
195
- onChange: (val) => {
196
- if (selectedFieldIndex === 0) {
197
- setFromAmPm(val);
198
- } else {
199
- setToAmPm(val);
200
- }
201
- },
202
- nextRef: {
203
- current: selectedFieldIndex === 0 ? hoursRef.current[1] : void 0
108
+ useDidUpdate(() => {
109
+ typeof onChange === "function" && onChange(_value);
110
+ }, [_value]);
111
+ useDidUpdate(() => {
112
+ var _a2, _b2, _c, _d;
113
+ if (((_a2 = value[0]) == null ? void 0 : _a2.getTime()) !== ((_b2 = _value[0]) == null ? void 0 : _b2.getTime()) || ((_c = value[1]) == null ? void 0 : _c.getTime()) !== ((_d = _value[1]) == null ? void 0 : _d.getTime())) {
114
+ setValue(value);
204
115
  }
205
- });
116
+ }, [value]);
206
117
  const handleClear = () => {
207
118
  var _a2;
208
- setFromTime({ hours: "", minutes: "", seconds: "" });
209
- setToTime({ hours: "", minutes: "", seconds: "" });
210
- setSelectedFieldIndex(0);
211
- setFromAmPm("");
212
- setToAmPm("");
213
- (_a2 = hoursRef.current[0]) == null ? void 0 : _a2.focus();
119
+ setValue([null, null]);
120
+ (_a2 = fromTimeRef.current) == null ? void 0 : _a2.focus();
214
121
  };
215
122
  const rightSection = clearable && _value.filter((item) => Boolean(item)).length > 0 ? /* @__PURE__ */ React.createElement(CloseButton, {
216
123
  variant: "transparent",
@@ -218,6 +125,18 @@ const TimeRangeInput = forwardRef((_a, ref) => {
218
125
  onClick: handleClear,
219
126
  size
220
127
  }) : null;
128
+ const forwardProps = {
129
+ amPmLabel,
130
+ amPmPlaceholder,
131
+ disabled,
132
+ format,
133
+ hoursLabel,
134
+ minutesLabel,
135
+ secondsLabel,
136
+ size,
137
+ timePlaceholder,
138
+ withSeconds
139
+ };
221
140
  return /* @__PURE__ */ React.createElement(InputWrapper, __spreadValues(__spreadValues({
222
141
  required,
223
142
  label,
@@ -237,8 +156,8 @@ const TimeRangeInput = forwardRef((_a, ref) => {
237
156
  required,
238
157
  invalid: !!error,
239
158
  onClick: () => {
240
- setSelectedFieldIndex(0);
241
- hoursRef.current[selectedFieldIndex].focus();
159
+ var _a2;
160
+ (_a2 = fromTimeRef.current) == null ? void 0 : _a2.focus();
242
161
  },
243
162
  size,
244
163
  className: cx({ [classes.disabled]: disabled }),
@@ -249,130 +168,25 @@ const TimeRangeInput = forwardRef((_a, ref) => {
249
168
  rightSectionWidth: theme.fn.size({ size, sizes: RIGHT_SECTION_WIDTH })
250
169
  }, rest), /* @__PURE__ */ React.createElement("div", {
251
170
  className: classes.inputWrapper
252
- }, /* @__PURE__ */ React.createElement(TimeField, {
253
- ref: useMergedRef((node) => {
254
- hoursRef.current[0] = node;
255
- }, ref),
256
- value: fromTime.hours,
257
- onChange: handleHoursChange,
258
- setValue: (val) => setTime((current) => __spreadProps(__spreadValues({}, current), { hours: val })),
259
- id: uuid,
260
- className: classes.timeField,
261
- withSeparator: true,
262
- size,
263
- max: format === "12" ? 11 : 23,
264
- placeholder: timePlaceholder,
265
- "aria-label": `from ${hoursLabel}`,
266
- disabled,
267
- onFocus: () => setSelectedFieldIndex(0),
268
- name
269
- }), /* @__PURE__ */ React.createElement(TimeField, {
270
- ref: (node) => {
271
- minutesRef.current[0] = node;
272
- },
273
- value: fromTime.minutes,
274
- onChange: handleMinutesChange,
275
- setValue: (val) => setTime((current) => __spreadProps(__spreadValues({}, current), { minutes: val })),
276
- className: classes.timeField,
277
- withSeparator: withSeconds,
278
- size,
279
- max: 59,
280
- placeholder: timePlaceholder,
281
- "aria-label": `from ${minutesLabel}`,
282
- disabled,
283
- onFocus: () => setSelectedFieldIndex(0)
284
- }), withSeconds && /* @__PURE__ */ React.createElement(TimeField, {
285
- ref: (node) => {
286
- secondsRef.current[0] = node;
287
- },
288
- value: fromTime.seconds,
289
- onChange: handleSecondsChange,
290
- setValue: (val) => setTime((current) => __spreadProps(__spreadValues({}, current), { seconds: val })),
291
- className: classes.timeField,
292
- size,
293
- max: 59,
294
- placeholder: timePlaceholder,
295
- "aria-label": `from ${secondsLabel}`,
296
- disabled,
297
- onFocus: () => setSelectedFieldIndex(0)
298
- }), format === "12" && /* @__PURE__ */ React.createElement(AmPmInput, {
299
- ref: (node) => {
300
- formatsRef.current[0] = node;
301
- },
302
- value: fromAmPm,
303
- onChange: handleAmPmChange,
304
- setValue: (val) => {
305
- setFromAmPm(val);
306
- },
307
- placeholder: amPmPlaceholder,
308
- onFocus: () => setSelectedFieldIndex(0),
309
- "aria-label": `from ${amPmLabel}`,
310
- disabled
311
- }), /* @__PURE__ */ React.createElement("span", {
171
+ }, /* @__PURE__ */ React.createElement(TimeInput, __spreadValues({
172
+ ref: useMergedRef(fromTimeRef, ref),
173
+ variant: "unstyled",
174
+ value: _value[0],
175
+ onChange: (date) => setValue([date, _value[1]]),
176
+ name,
177
+ nextRef: toTimeRef,
178
+ id: uuid
179
+ }, forwardProps)), /* @__PURE__ */ React.createElement("span", {
312
180
  className: classes.separator,
313
181
  style: {
314
- color: (toTime == null ? void 0 : toTime.hours) ? "inherit" : theme.colorScheme === "dark" ? theme.colors.dark[2] : theme.colors.gray[7]
182
+ color: theme.colorScheme === "dark" ? theme.colors.dark[2] : theme.colors.gray[7]
315
183
  }
316
- }, labelSeparator), /* @__PURE__ */ React.createElement("div", {
317
- className: classes.inputWrapper
318
- }, /* @__PURE__ */ React.createElement(TimeField, {
319
- ref: (node) => {
320
- hoursRef.current[1] = node;
321
- },
322
- value: format === "12" && parseInt(toTime.hours, 10) >= 12 ? padTime((parseInt(toTime.hours, 10) - 12).toString()) : toTime.hours,
323
- onChange: handleHoursChange,
324
- setValue: (val) => setTime((current) => __spreadProps(__spreadValues({}, current), { hours: val })),
325
- className: classes.timeField,
326
- withSeparator: true,
327
- size,
328
- max: format === "12" ? 11 : 23,
329
- placeholder: timePlaceholder,
330
- "aria-label": `to ${hoursLabel}`,
331
- disabled,
332
- onFocus: () => setSelectedFieldIndex(1)
333
- }), /* @__PURE__ */ React.createElement(TimeField, {
334
- ref: (node) => {
335
- minutesRef.current[1] = node;
336
- },
337
- value: toTime.minutes,
338
- onChange: handleMinutesChange,
339
- setValue: (val) => setTime((current) => __spreadProps(__spreadValues({}, current), { minutes: val })),
340
- className: classes.timeField,
341
- withSeparator: withSeconds,
342
- size,
343
- max: 59,
344
- placeholder: timePlaceholder,
345
- "aria-label": `to ${minutesLabel}`,
346
- disabled,
347
- onFocus: () => setSelectedFieldIndex(1)
348
- }), withSeconds && /* @__PURE__ */ React.createElement(TimeField, {
349
- ref: (node) => {
350
- secondsRef.current[1] = node;
351
- },
352
- value: toTime.seconds,
353
- onChange: handleSecondsChange,
354
- setValue: (val) => setTime((current) => __spreadProps(__spreadValues({}, current), { seconds: val })),
355
- className: classes.timeField,
356
- size,
357
- max: 59,
358
- placeholder: timePlaceholder,
359
- "aria-label": `to ${secondsLabel}`,
360
- disabled,
361
- onFocus: () => setSelectedFieldIndex(1)
362
- }), format === "12" && /* @__PURE__ */ React.createElement(AmPmInput, {
363
- ref: (node) => {
364
- formatsRef.current[1] = node;
365
- },
366
- value: toAmPm,
367
- onChange: handleAmPmChange,
368
- setValue: (val) => {
369
- setToAmPm(val);
370
- },
371
- placeholder: amPmPlaceholder,
372
- onFocus: () => setSelectedFieldIndex(1),
373
- "aria-label": `to ${amPmLabel}`,
374
- disabled
375
- })))));
184
+ }, labelSeparator), /* @__PURE__ */ React.createElement(TimeInput, __spreadValues({
185
+ ref: toTimeRef,
186
+ variant: "unstyled",
187
+ value: _value[1],
188
+ onChange: (date) => setValue([_value[0], date])
189
+ }, forwardProps)))));
376
190
  });
377
191
  TimeRangeInput.displayName = "@mantine/dates/TimeRangeInput";
378
192