Project Init

This commit is contained in:
Muluhabt
2026-05-29 15:23:46 +03:00
commit 2fbc557aac
67387 changed files with 6063341 additions and 0 deletions

View File

@@ -0,0 +1,109 @@
'use client';
import { jsx, jsxs } from 'react/jsx-runtime';
import { forwardRef } from 'react';
import { useTimePickerContext } from '../TimePicker.context.mjs';
const AmPmInput = forwardRef(
({
labels,
value,
onChange,
className,
style,
onPreviousInput,
readOnly,
onMouseDown,
onTouchStart,
inputType,
...others
}, ref) => {
const ctx = useTimePickerContext();
const handleKeyDown = (event) => {
if (readOnly) {
return;
}
if (event.key === "Home") {
event.preventDefault();
onChange(labels.am);
}
if (event.key === "End") {
event.preventDefault();
onChange(labels.pm);
}
if (event.key === "Backspace" || event.key === "Delete") {
event.preventDefault();
if (value === null) {
onPreviousInput?.();
} else {
onChange(null);
}
}
if (event.key === "ArrowLeft") {
event.preventDefault();
onPreviousInput?.();
}
if (event.key === "ArrowUp" || event.key === "ArrowDown") {
event.preventDefault();
onChange(value === labels.am ? labels.pm : labels.am);
}
if (event.code === "KeyA") {
event.preventDefault();
onChange(labels.am);
}
if (event.code === "KeyP") {
event.preventDefault();
onChange(labels.pm);
}
};
if (inputType === "input") {
const displayValue = value || "--";
const inputSize = displayValue.length + 1;
return /* @__PURE__ */ jsx(
"input",
{
...ctx.getStyles("field", { className, style }),
ref,
value: displayValue,
size: inputSize,
readOnly: true,
onChange: () => {
},
onClick: ((event) => event.stopPropagation()),
onKeyDown: handleKeyDown,
onMouseDown: (event) => {
event.stopPropagation();
onMouseDown?.(event);
},
"data-am-pm": true,
...others
}
);
}
return /* @__PURE__ */ jsxs(
"select",
{
...ctx.getStyles("field", { className, style }),
ref,
value: value || "",
onChange: (event) => !readOnly && onChange(event.target.value || null),
onClick: (event) => event.stopPropagation(),
onKeyDown: handleKeyDown,
onMouseDown: (event) => {
event.stopPropagation();
onMouseDown?.(event);
},
"data-am-pm": true,
...others,
children: [
/* @__PURE__ */ jsx("option", { value: "", children: "--" }),
/* @__PURE__ */ jsx("option", { value: labels.am, children: labels.am }),
/* @__PURE__ */ jsx("option", { value: labels.pm, children: labels.pm })
]
}
);
}
);
AmPmInput.displayName = "@mantine/dates/AmPmInput";
export { AmPmInput };
//# sourceMappingURL=AmPmInput.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,14 @@
'use client';
import { jsx } from 'react/jsx-runtime';
import { useTimePickerContext } from '../TimePicker.context.mjs';
import { TimeControl } from './TimeControl.mjs';
function AmPmControlsList({ labels, value, onSelect }) {
const ctx = useTimePickerContext();
const controls = [labels.am, labels.pm].map((control) => /* @__PURE__ */ jsx(TimeControl, { value: control, active: value === control, onSelect }, control));
return /* @__PURE__ */ jsx("div", { ...ctx.getStyles("controlsList"), children: controls });
}
AmPmControlsList.displayName = "@mantine/dates/AmPmControlsList";
export { AmPmControlsList };
//# sourceMappingURL=AmPmControlsList.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"AmPmControlsList.mjs","sources":["../../../../src/components/TimePicker/TimeControlsList/AmPmControlsList.tsx"],"sourcesContent":["import { useTimePickerContext } from '../TimePicker.context';\nimport { TimeControl } from './TimeControl';\n\ninterface AmPmControlsListProps {\n value: string | null;\n onSelect: (value: string) => void;\n labels: { am: string; pm: string };\n}\n\nexport function AmPmControlsList({ labels, value, onSelect }: AmPmControlsListProps) {\n const ctx = useTimePickerContext();\n const controls = [labels.am, labels.pm].map((control) => (\n <TimeControl key={control} value={control} active={value === control} onSelect={onSelect} />\n ));\n\n return <div {...ctx.getStyles('controlsList')}>{controls}</div>;\n}\n\nAmPmControlsList.displayName = '@mantine/dates/AmPmControlsList';\n"],"names":[],"mappings":";;;;;AASO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAS,CAAA,CAA0B,CAAA;AACnF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,IAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,CAAA;AACjC,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,GAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EAAE,EAAE,GAAA,CAAI,CAAC,4BAC3C,CAAA,CAAA,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAA0B,CAAA,CAAA,CAAA,CAAA,GAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,MAAU,OAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAApD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwE,CAC3F,CAAA,CAAA;AAED,CAAA,CAAA,2BAAQ,KAAA,CAAA,CAAA,CAAA,CAAK,GAAG,CAAA,CAAA,EAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,cAAc,GAAI,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA;AAC3D,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;"}

View File

@@ -0,0 +1,25 @@
'use client';
import { jsx } from 'react/jsx-runtime';
import { UnstyledButton } from '@mantine/core';
import { useTimePickerContext } from '../TimePicker.context.mjs';
import { padTime } from '../utils/pad-time/pad-time.mjs';
function TimeControl({ value, active, onSelect }) {
const ctx = useTimePickerContext();
return /* @__PURE__ */ jsx(
UnstyledButton,
{
mod: { active },
onClick: () => onSelect(value),
onMouseDown: (event) => event.preventDefault(),
"data-value": value,
tabIndex: -1,
...ctx.getStyles("control"),
children: typeof value === "number" ? padTime(value) : value
}
);
}
TimeControl.displayName = "@mantine/dates/TimeControl";
export { TimeControl };
//# sourceMappingURL=TimeControl.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"TimeControl.mjs","sources":["../../../../src/components/TimePicker/TimeControlsList/TimeControl.tsx"],"sourcesContent":["import { UnstyledButton } from '@mantine/core';\nimport { useTimePickerContext } from '../TimePicker.context';\nimport { padTime } from '../utils/pad-time/pad-time';\n\ninterface TimeControlProps {\n value: number | string;\n active: boolean;\n onSelect: (value: any) => void;\n}\n\nexport function TimeControl({ value, active, onSelect }: TimeControlProps) {\n const ctx = useTimePickerContext();\n\n return (\n <UnstyledButton\n mod={{ active }}\n onClick={() => onSelect(value)}\n onMouseDown={(event) => event.preventDefault()}\n data-value={value}\n tabIndex={-1}\n {...ctx.getStyles('control')}\n >\n {typeof value === 'number' ? padTime(value) : value}\n </UnstyledButton>\n );\n}\n\nTimeControl.displayName = '@mantine/dates/TimeControl';\n"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,62 @@
'use client';
import { jsx } from 'react/jsx-runtime';
import { useRef, useEffect } from 'react';
import { ScrollArea } from '@mantine/core';
import { useTimePickerContext } from '../TimePicker.context.mjs';
import { TimeControl } from './TimeControl.mjs';
function isElementVisibleInScrollContainer(element, container) {
if (!element || !container) {
return false;
}
const elementRect = element.getBoundingClientRect();
const containerRect = container.getBoundingClientRect();
const isVisible = elementRect.top >= containerRect.top && elementRect.bottom <= containerRect.bottom && elementRect.left >= containerRect.left && elementRect.right <= containerRect.right;
return isVisible;
}
function getValuesRange(min, max, step) {
const range = [];
for (let i = min; i <= max; i += step) {
range.push(i);
}
return range;
}
function TimeControlsList({
min,
max,
step,
value,
onSelect,
reversed
}) {
const ctx = useTimePickerContext();
const ref = useRef(null);
const range = getValuesRange(min, max, step);
const controls = (reversed ? range.reverse() : range).map((control) => /* @__PURE__ */ jsx(TimeControl, { value: control, active: value === control, onSelect }, control));
useEffect(() => {
if (value !== null) {
const scrollToValue = () => {
const target = ref.current?.querySelector(`[data-value="${value}"]`);
if (!isElementVisibleInScrollContainer(target, ref.current)) {
target?.scrollIntoView({ block: "nearest" });
}
};
requestAnimationFrame(scrollToValue);
}
}, [value]);
return /* @__PURE__ */ jsx(
ScrollArea,
{
h: ctx.maxDropdownContentHeight,
type: "never",
viewportRef: ref,
...ctx.getStyles("scrollarea"),
...ctx.scrollAreaProps,
children: /* @__PURE__ */ jsx("div", { ...ctx.getStyles("controlsList"), children: controls })
}
);
}
TimeControlsList.displayName = "@mantine/dates/TimeControlsList";
export { TimeControlsList };
//# sourceMappingURL=TimeControlsList.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,9 @@
'use client';
import { createSafeContext } from '@mantine/core';
const [TimePickerProvider, useTimePickerContext] = createSafeContext(
"TimeInput component was not found in the component tree"
);
export { TimePickerProvider, useTimePickerContext };
//# sourceMappingURL=TimePicker.context.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"TimePicker.context.mjs","sources":["../../../src/components/TimePicker/TimePicker.context.tsx"],"sourcesContent":["import { createSafeContext, GetStylesApi, ScrollAreaProps } from '@mantine/core';\nimport type { TimePickerFactory } from './TimePicker';\n\ninterface TimePickerContext {\n getStyles: GetStylesApi<TimePickerFactory>;\n maxDropdownContentHeight: number;\n scrollAreaProps: ScrollAreaProps | undefined;\n}\n\nexport const [TimePickerProvider, useTimePickerContext] = createSafeContext<TimePickerContext>(\n 'TimeInput component was not found in the component tree'\n);\n"],"names":[],"mappings":";;;AASO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAA,GAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACxD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACF,CAAA,CAAA;;"}

View File

@@ -0,0 +1,419 @@
'use client';
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
import { useRef, useState } from 'react';
import { createVarsResolver, getFontSize, factory, useProps, useResolvedStylesApi, useStyles, Popover, InputBase, CloseButton } from '@mantine/core';
import { useMergedRef, useId } from '@mantine/hooks';
import { SpinInput } from '../SpinInput/SpinInput.mjs';
import { AmPmInput } from './AmPmInput/AmPmInput.mjs';
import { AmPmControlsList } from './TimeControlsList/AmPmControlsList.mjs';
import { TimeControlsList } from './TimeControlsList/TimeControlsList.mjs';
import { TimePickerProvider } from './TimePicker.context.mjs';
import classes from './TimePicker.module.css.mjs';
import { TimePresets } from './TimePresets/TimePresets.mjs';
import { useTimePicker } from './use-time-picker.mjs';
import { clampTime } from './utils/clamp-time/clamp-time.mjs';
import { getParsedTime } from './utils/get-parsed-time/get-parsed-time.mjs';
import { getTimeString } from './utils/get-time-string/get-time-string.mjs';
const defaultProps = {
hoursStep: 1,
minutesStep: 1,
secondsStep: 1,
format: "24h",
amPmLabels: { am: "AM", pm: "PM" },
pasteSplit: getParsedTime,
maxDropdownContentHeight: 200,
hoursPlaceholder: "--",
minutesPlaceholder: "--",
secondsPlaceholder: "--"
};
const varsResolver = createVarsResolver((_theme, { size }) => ({
dropdown: {
"--control-font-size": getFontSize(size)
}
}));
const TimePicker = factory((_props, ref) => {
const props = useProps("TimePicker", defaultProps, _props);
const {
classNames,
className,
style,
styles,
unstyled,
vars,
onClick,
format,
value,
defaultValue,
onChange,
hoursStep,
minutesStep,
secondsStep,
withSeconds,
hoursInputLabel,
minutesInputLabel,
secondsInputLabel,
amPmInputLabel,
amPmLabels,
clearable,
onMouseDown,
onFocusCapture,
onBlurCapture,
min,
max,
popoverProps,
withDropdown,
rightSection,
onFocus,
onBlur,
clearButtonProps,
hoursInputProps,
minutesInputProps,
secondsInputProps,
amPmSelectProps,
readOnly,
disabled,
size,
name,
form,
hiddenInputProps,
labelProps,
pasteSplit,
hoursRef,
minutesRef,
secondsRef,
amPmRef,
presets,
maxDropdownContentHeight,
scrollAreaProps,
attributes,
reverseTimeControlsList,
hoursPlaceholder,
minutesPlaceholder,
secondsPlaceholder,
...others
} = props;
const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi({
classNames,
styles,
props
});
const getStyles = useStyles({
name: "TimePicker",
classes,
props,
className,
style,
classNames,
styles,
unstyled,
attributes,
vars,
varsResolver
});
const controller = useTimePicker({
value,
defaultValue,
onChange,
format,
amPmLabels,
withSeconds,
min,
max,
clearable,
disabled,
readOnly,
pasteSplit
});
const _hoursRef = useMergedRef(controller.refs.hours, hoursRef);
const _minutesRef = useMergedRef(controller.refs.minutes, minutesRef);
const _secondsRef = useMergedRef(controller.refs.seconds, secondsRef);
const _amPmRef = useMergedRef(controller.refs.amPm, amPmRef);
const hoursInputId = useId();
const hasFocusRef = useRef(false);
const [dropdownOpened, setDropdownOpened] = useState(false);
const handleFocus = (event) => {
if (!hasFocusRef.current) {
hasFocusRef.current = true;
onFocus?.(event);
}
};
const handleBlur = (event) => {
if (!event.currentTarget.contains(event.relatedTarget)) {
const computedValue = controller.values;
const timeString = getTimeString({
...computedValue,
format,
amPmLabels,
withSeconds: !!withSeconds
});
if (timeString.valid && (min || max)) {
const clamped = clampTime(timeString.value, min, max);
if (clamped.timeString !== timeString.value) {
controller.setTimeString(clamped.timeString);
}
}
hasFocusRef.current = false;
onBlur?.(event);
}
};
return /* @__PURE__ */ jsx(TimePickerProvider, { value: { getStyles, scrollAreaProps, maxDropdownContentHeight }, children: /* @__PURE__ */ jsxs(
Popover,
{
opened: dropdownOpened,
transitionProps: { duration: 0 },
position: "bottom-start",
withRoles: false,
disabled: disabled || readOnly || !withDropdown,
...popoverProps,
children: [
/* @__PURE__ */ jsx(Popover.Target, { children: /* @__PURE__ */ jsxs(
InputBase,
{
component: "div",
size,
disabled,
ref,
onClick: (event) => {
onClick?.(event);
controller.focus("hours");
},
onMouseDown: (event) => {
event.preventDefault();
onMouseDown?.(event);
},
onFocusCapture: (event) => {
setDropdownOpened(true);
onFocusCapture?.(event);
},
onBlurCapture: (event) => {
setDropdownOpened(false);
onBlurCapture?.(event);
},
rightSection: rightSection || controller.isClearable && /* @__PURE__ */ jsx(
CloseButton,
{
...clearButtonProps,
size,
onClick: (event) => {
controller.clear();
clearButtonProps?.onClick?.(event);
},
onMouseDown: (event) => {
event.preventDefault();
clearButtonProps?.onMouseDown?.(event);
}
}
),
labelProps: { htmlFor: hoursInputId, ...labelProps },
style,
className,
classNames: resolvedClassNames,
styles: resolvedStyles,
__staticSelector: "TimePicker",
...others,
children: [
/* @__PURE__ */ jsx("div", { ...getStyles("fieldsRoot"), dir: "ltr", children: /* @__PURE__ */ jsxs("div", { ...getStyles("fieldsGroup"), onBlur: handleBlur, children: [
/* @__PURE__ */ jsx(
SpinInput,
{
id: hoursInputId,
...hoursInputProps,
...getStyles("field", {
className: hoursInputProps?.className,
style: hoursInputProps?.style
}),
value: controller.values.hours,
onChange: controller.setHours,
onNextInput: () => controller.focus("minutes"),
min: format === "12h" ? 1 : 0,
max: format === "12h" ? 12 : 23,
allowTemporaryZero: format === "12h",
focusable: true,
step: hoursStep,
ref: _hoursRef,
"aria-label": hoursInputLabel,
readOnly,
disabled,
onPaste: controller.onPaste,
onFocus: (event) => {
handleFocus(event);
hoursInputProps?.onFocus?.(event);
},
onBlur: (event) => {
const actualInputValue = event.currentTarget.value;
const numericValue = actualInputValue ? parseInt(actualInputValue, 10) : null;
if (format === "12h" && numericValue === 0) {
controller.setHours(12);
}
hoursInputProps?.onBlur?.(event);
},
placeholder: hoursPlaceholder
}
),
/* @__PURE__ */ jsx("span", { children: ":" }),
/* @__PURE__ */ jsx(
SpinInput,
{
...minutesInputProps,
...getStyles("field", {
className: minutesInputProps?.className,
style: minutesInputProps?.style
}),
value: controller.values.minutes,
onChange: controller.setMinutes,
min: 0,
max: 59,
focusable: true,
step: minutesStep,
ref: _minutesRef,
onPreviousInput: () => controller.focus("hours"),
onNextInput: () => withSeconds ? controller.focus("seconds") : controller.focus("amPm"),
"aria-label": minutesInputLabel,
tabIndex: -1,
readOnly,
disabled,
onPaste: controller.onPaste,
onFocus: (event) => {
handleFocus(event);
minutesInputProps?.onFocus?.(event);
},
placeholder: minutesPlaceholder
}
),
withSeconds && /* @__PURE__ */ jsxs(Fragment, { children: [
/* @__PURE__ */ jsx("span", { children: ":" }),
/* @__PURE__ */ jsx(
SpinInput,
{
...secondsInputProps,
...getStyles("field", {
className: secondsInputProps?.className,
style: secondsInputProps?.style
}),
value: controller.values.seconds,
onChange: controller.setSeconds,
min: 0,
max: 59,
focusable: true,
step: secondsStep,
ref: _secondsRef,
onPreviousInput: () => controller.focus("minutes"),
onNextInput: () => controller.focus("amPm"),
"aria-label": secondsInputLabel,
tabIndex: -1,
readOnly,
disabled,
onPaste: controller.onPaste,
onFocus: (event) => {
handleFocus(event);
secondsInputProps?.onFocus?.(event);
},
placeholder: secondsPlaceholder
}
)
] }),
format === "12h" && /* @__PURE__ */ jsx(
AmPmInput,
{
...amPmSelectProps,
inputType: withDropdown ? "input" : "select",
labels: amPmLabels,
value: controller.values.amPm,
onChange: controller.setAmPm,
ref: _amPmRef,
"aria-label": amPmInputLabel,
onPreviousInput: () => withSeconds ? controller.focus("seconds") : controller.focus("minutes"),
readOnly,
disabled,
tabIndex: -1,
onPaste: controller.onPaste,
onFocus: (event) => {
handleFocus(event);
amPmSelectProps?.onFocus?.(event);
}
}
)
] }) }),
/* @__PURE__ */ jsx(
"input",
{
type: "hidden",
name,
form,
value: controller.hiddenInputValue,
...hiddenInputProps
}
)
]
}
) }),
/* @__PURE__ */ jsx(
Popover.Dropdown,
{
...getStyles("dropdown"),
onMouseDown: (event) => event.preventDefault(),
children: presets ? /* @__PURE__ */ jsx(
TimePresets,
{
value: controller.hiddenInputValue,
onChange: controller.setTimeString,
format,
presets,
amPmLabels,
withSeconds: withSeconds || false
}
) : /* @__PURE__ */ jsxs("div", { ...getStyles("controlsListGroup"), children: [
/* @__PURE__ */ jsx(
TimeControlsList,
{
min: format === "12h" ? 1 : 0,
max: format === "12h" ? 12 : 23,
step: hoursStep,
value: controller.values.hours,
onSelect: controller.setHours,
reversed: reverseTimeControlsList
}
),
/* @__PURE__ */ jsx(
TimeControlsList,
{
min: 0,
max: 59,
step: minutesStep,
value: controller.values.minutes,
onSelect: controller.setMinutes,
reversed: reverseTimeControlsList
}
),
withSeconds && /* @__PURE__ */ jsx(
TimeControlsList,
{
min: 0,
max: 59,
step: secondsStep,
value: controller.values.seconds,
onSelect: controller.setSeconds,
reversed: reverseTimeControlsList
}
),
format === "12h" && /* @__PURE__ */ jsx(
AmPmControlsList,
{
labels: amPmLabels,
value: controller.values.amPm,
onSelect: controller.setAmPm
}
)
] })
}
)
]
}
) });
});
TimePicker.displayName = "@mantine/dates/TimePicker";
TimePicker.classes = classes;
export { TimePicker };
//# sourceMappingURL=TimePicker.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,5 @@
'use client';
var classes = {"fieldsRoot":"m_7a8f1e6d","fieldsGroup":"m_d6bb0a54","controlsList":"m_b97ecb26","controlsListGroup":"m_31fe42f9","dropdown":"m_9c4817c3","control":"m_154c536b","presetControl":"m_7be09d0c","presetsGroup":"m_7d00001d","presetsGroupLabel":"m_d8d918d7","field":"m_6b43ba88"};
export { classes as default };
//# sourceMappingURL=TimePicker.module.css.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"TimePicker.module.css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}

View File

@@ -0,0 +1,29 @@
'use client';
import { jsx } from 'react/jsx-runtime';
import { UnstyledButton } from '@mantine/core';
import { TimeValue } from '../../TimeValue/TimeValue.mjs';
import { useTimePickerContext } from '../TimePicker.context.mjs';
function TimePresetControl({
value,
active,
onChange,
format,
amPmLabels,
withSeconds
}) {
const ctx = useTimePickerContext();
return /* @__PURE__ */ jsx(
UnstyledButton,
{
mod: { active },
onClick: () => onChange(value),
...ctx.getStyles("presetControl"),
children: /* @__PURE__ */ jsx(TimeValue, { withSeconds, value, format, amPmLabels })
}
);
}
TimePresetControl.displayName = "@mantine/dates/TimePresetControl";
export { TimePresetControl };
//# sourceMappingURL=TimePresetControl.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"TimePresetControl.mjs","sources":["../../../../src/components/TimePicker/TimePresets/TimePresetControl.tsx"],"sourcesContent":["import { UnstyledButton } from '@mantine/core';\nimport { TimeValue } from '../../TimeValue';\nimport { useTimePickerContext } from '../TimePicker.context';\nimport { TimePickerAmPmLabels, TimePickerFormat } from '../TimePicker.types';\n\ninterface TimePresetControlProps {\n value: string;\n active: boolean;\n onChange: (value: string) => void;\n format: TimePickerFormat;\n amPmLabels: TimePickerAmPmLabels;\n withSeconds: boolean;\n}\n\nexport function TimePresetControl({\n value,\n active,\n onChange,\n format,\n amPmLabels,\n withSeconds,\n}: TimePresetControlProps) {\n const ctx = useTimePickerContext();\n\n return (\n <UnstyledButton\n mod={{ active }}\n onClick={() => onChange(value)}\n {...ctx.getStyles('presetControl')}\n >\n <TimeValue withSeconds={withSeconds} value={value} format={format} amPmLabels={amPmLabels} />\n </UnstyledButton>\n );\n}\n\nTimePresetControl.displayName = '@mantine/dates/TimePresetControl';\n"],"names":[],"mappings":";;;;;;AAcO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,iBAAA,CAAkB,CAAA;AAAA,CAAA,CAChC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACF,CAAA,CAAA,CAA2B,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,IAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,CAAA;AAEjC,CAAA,CAAA,uBACE,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACd,OAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,KAAK,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC5B,GAAG,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,eAAe,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,SAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA0B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,GAAgB,UAAA,CAAA,CAAwB,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAC7F,CAAA;AAEJ,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;"}

View File

@@ -0,0 +1,37 @@
'use client';
import { jsx, jsxs } from 'react/jsx-runtime';
import { SimpleGrid } from '@mantine/core';
import { useTimePickerContext } from '../TimePicker.context.mjs';
import { isSameTime } from '../utils/is-same-time/is-same-time.mjs';
import { TimePresetControl } from './TimePresetControl.mjs';
function TimePresetGroup({
value,
data,
onChange,
format,
amPmLabels,
withSeconds
}) {
const ctx = useTimePickerContext();
const items = data.values.map((item) => /* @__PURE__ */ jsx(
TimePresetControl,
{
value: item,
format,
amPmLabels,
withSeconds,
active: isSameTime({ time: item, compare: value, withSeconds }),
onChange
},
item
));
return /* @__PURE__ */ jsxs("div", { ...ctx.getStyles("presetsGroup"), children: [
/* @__PURE__ */ jsx("div", { ...ctx.getStyles("presetsGroupLabel"), children: data.label }),
/* @__PURE__ */ jsx(SimpleGrid, { cols: withSeconds ? 2 : 3, spacing: 4, children: items })
] });
}
TimePresetGroup.displayName = "@mantine/dates/TimePresetGroup";
export { TimePresetGroup };
//# sourceMappingURL=TimePresetGroup.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"TimePresetGroup.mjs","sources":["../../../../src/components/TimePicker/TimePresets/TimePresetGroup.tsx"],"sourcesContent":["import { SimpleGrid } from '@mantine/core';\nimport { useTimePickerContext } from '../TimePicker.context';\nimport { TimePickerAmPmLabels, TimePickerFormat, TimePickerPresetGroup } from '../TimePicker.types';\nimport { isSameTime } from '../utils/is-same-time/is-same-time';\nimport { TimePresetControl } from './TimePresetControl';\n\ninterface TimePresetGroupProps {\n value: string;\n data: TimePickerPresetGroup;\n onChange: (value: string) => void;\n format: TimePickerFormat;\n amPmLabels: TimePickerAmPmLabels;\n withSeconds: boolean;\n}\n\nexport function TimePresetGroup({\n value,\n data,\n onChange,\n format,\n amPmLabels,\n withSeconds,\n}: TimePresetGroupProps) {\n const ctx = useTimePickerContext();\n\n const items = data.values.map((item) => (\n <TimePresetControl\n key={item}\n value={item}\n format={format}\n amPmLabels={amPmLabels}\n withSeconds={withSeconds}\n active={isSameTime({ time: item, compare: value, withSeconds })}\n onChange={onChange}\n />\n ));\n\n return (\n <div {...ctx.getStyles('presetsGroup')}>\n <div {...ctx.getStyles('presetsGroupLabel')}>{data.label}</div>\n <SimpleGrid cols={withSeconds ? 2 : 3} spacing={4}>\n {items}\n </SimpleGrid>\n </div>\n );\n}\n\nTimePresetGroup.displayName = '@mantine/dates/TimePresetGroup';\n"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,71 @@
'use client';
import { jsx } from 'react/jsx-runtime';
import { ScrollArea, SimpleGrid } from '@mantine/core';
import { useTimePickerContext } from '../TimePicker.context.mjs';
import { isSameTime } from '../utils/is-same-time/is-same-time.mjs';
import { TimePresetControl } from './TimePresetControl.mjs';
import { TimePresetGroup } from './TimePresetGroup.mjs';
function TimePresets({
presets,
format,
amPmLabels,
withSeconds,
value,
onChange
}) {
const ctx = useTimePickerContext();
if (presets.length === 0) {
return null;
}
if (typeof presets[0] === "string") {
const items = presets.map((item) => /* @__PURE__ */ jsx(
TimePresetControl,
{
value: item,
format,
amPmLabels,
withSeconds,
active: isSameTime({ time: item, compare: value, withSeconds }),
onChange
},
item
));
return /* @__PURE__ */ jsx(
ScrollArea.Autosize,
{
mah: ctx.maxDropdownContentHeight,
type: "never",
...ctx.getStyles("scrollarea"),
...ctx.scrollAreaProps,
children: /* @__PURE__ */ jsx("div", { ...ctx.getStyles("presetsRoot"), children: /* @__PURE__ */ jsx(SimpleGrid, { cols: withSeconds ? 2 : 3, spacing: 4, children: items }) })
}
);
}
const groups = presets.map((group, index) => /* @__PURE__ */ jsx(
TimePresetGroup,
{
data: group,
value,
format,
amPmLabels,
withSeconds,
onChange
},
index
));
return /* @__PURE__ */ jsx(
ScrollArea.Autosize,
{
mah: ctx.maxDropdownContentHeight,
type: "never",
...ctx.getStyles("scrollarea"),
...ctx.scrollAreaProps,
children: /* @__PURE__ */ jsx("div", { ...ctx.getStyles("presetsRoot"), children: groups })
}
);
}
TimePresets.displayName = "@mantine/dates/TimePresets";
export { TimePresets };
//# sourceMappingURL=TimePresets.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,193 @@
'use client';
import { useRef, useState } from 'react';
import { useDidUpdate } from '@mantine/hooks';
import { clampTime } from './utils/clamp-time/clamp-time.mjs';
import { getParsedTime } from './utils/get-parsed-time/get-parsed-time.mjs';
import { getTimeString } from './utils/get-time-string/get-time-string.mjs';
function useTimePicker({
value,
defaultValue,
onChange,
format,
amPmLabels,
withSeconds = false,
min,
max,
clearable,
readOnly,
disabled,
pasteSplit
}) {
const parsedTime = getParsedTime({
time: value || defaultValue || "",
amPmLabels,
format
});
const initialTimeString = getTimeString({
hours: parsedTime.hours,
minutes: parsedTime.minutes,
seconds: parsedTime.seconds,
format,
withSeconds,
amPm: parsedTime.amPm,
amPmLabels
});
const acceptChange = useRef(true);
const wasInvalidBefore = useRef(!initialTimeString.valid);
const [hours, setHours] = useState(parsedTime.hours);
const [minutes, setMinutes] = useState(parsedTime.minutes);
const [seconds, setSeconds] = useState(parsedTime.seconds);
const [amPm, setAmPm] = useState(parsedTime.amPm);
const isClearable = clearable && !readOnly && !disabled && (hours !== null || minutes !== null || seconds !== null || amPm !== null);
const hoursRef = useRef(null);
const minutesRef = useRef(null);
const secondsRef = useRef(null);
const amPmRef = useRef(null);
const focus = (field) => {
if (field === "hours") {
hoursRef.current?.focus();
}
if (field === "minutes") {
minutesRef.current?.focus();
}
if (field === "seconds") {
secondsRef.current?.focus();
}
if (field === "amPm") {
amPmRef.current?.focus();
}
};
const handleTimeChange = (field, val) => {
const computedValue = { hours, minutes, seconds, amPm, [field]: val };
const timeString = getTimeString({ ...computedValue, format, withSeconds, amPmLabels });
if (timeString.valid) {
acceptChange.current = false;
wasInvalidBefore.current = false;
if (field === "hours") {
setHours(val);
}
if (field === "minutes") {
setMinutes(val);
}
if (field === "seconds") {
setSeconds(val);
}
if (field === "amPm") {
setAmPm(val);
}
onChange?.(timeString.value);
} else {
acceptChange.current = false;
if (!wasInvalidBefore.current) {
onChange?.("");
wasInvalidBefore.current = true;
}
}
};
const setTimeString = (timeString) => {
acceptChange.current = false;
const parsedTime2 = getParsedTime({ time: timeString, amPmLabels, format });
setHours(parsedTime2.hours);
setMinutes(parsedTime2.minutes);
setSeconds(parsedTime2.seconds);
setAmPm(parsedTime2.amPm);
const next = getTimeString({ ...parsedTime2, format, withSeconds, amPmLabels });
wasInvalidBefore.current = !next.valid;
onChange?.(timeString);
};
const onHoursChange = (value2) => {
let adjustedValue = value2;
if (format === "12h" && typeof value2 === "number" && value2 > 12) {
adjustedValue = (value2 - 1) % 12 + 1;
}
setHours(adjustedValue);
handleTimeChange("hours", adjustedValue);
focus("hours");
};
const onMinutesChange = (value2) => {
setMinutes(value2);
handleTimeChange("minutes", value2);
focus("minutes");
};
const onSecondsChange = (value2) => {
setSeconds(value2);
handleTimeChange("seconds", value2);
focus("seconds");
};
const onAmPmChange = (value2) => {
setAmPm(value2);
handleTimeChange("amPm", value2);
focus("amPm");
};
const clear = () => {
acceptChange.current = false;
setHours(null);
setMinutes(null);
setSeconds(null);
setAmPm(null);
onChange?.("");
wasInvalidBefore.current = true;
focus("hours");
};
const onPaste = (event) => {
event.preventDefault();
const pastedValue = event.clipboardData.getData("text");
const parsedTime2 = (pasteSplit || getParsedTime)({ time: pastedValue, format, amPmLabels });
const timeString = getTimeString({ ...parsedTime2, format, withSeconds, amPmLabels });
if (timeString.valid) {
acceptChange.current = false;
const clamped = clampTime(timeString.value, min || "00:00:00", max || "23:59:59");
onChange?.(clamped.timeString);
setHours(parsedTime2.hours);
setMinutes(parsedTime2.minutes);
setSeconds(parsedTime2.seconds);
setAmPm(parsedTime2.amPm);
}
};
const hiddenInputValue = getTimeString({
hours,
minutes,
seconds,
format,
withSeconds,
amPm,
amPmLabels
});
useDidUpdate(() => {
if (value === "") {
acceptChange.current = false;
setHours(null);
setMinutes(null);
setSeconds(null);
setAmPm(null);
acceptChange.current = true;
return;
}
if (acceptChange.current && typeof value === "string") {
const parsedTime2 = getParsedTime({ time: value || "", amPmLabels, format });
setHours(parsedTime2.hours);
setMinutes(parsedTime2.minutes);
setSeconds(parsedTime2.seconds);
setAmPm(parsedTime2.amPm);
}
acceptChange.current = true;
}, [value]);
return {
refs: { hours: hoursRef, minutes: minutesRef, seconds: secondsRef, amPm: amPmRef },
values: { hours, minutes, seconds, amPm },
setHours: onHoursChange,
setMinutes: onMinutesChange,
setSeconds: onSecondsChange,
setAmPm: onAmPmChange,
focus,
clear,
onPaste,
setTimeString,
isClearable,
hiddenInputValue: hiddenInputValue.value
};
}
export { useTimePicker };
//# sourceMappingURL=use-time-picker.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,13 @@
'use client';
import { timeToSeconds, secondsToTime } from '../time-to-seconds/time-to-seconds.mjs';
function clampTime(time, min, max) {
const timeInSeconds = timeToSeconds(time);
const minInSeconds = min ? timeToSeconds(min) : -Infinity;
const maxInSeconds = max ? timeToSeconds(max) : Infinity;
const clampedSeconds = Math.max(minInSeconds, Math.min(timeInSeconds, maxInSeconds));
return secondsToTime(clampedSeconds);
}
export { clampTime };
//# sourceMappingURL=clamp-time.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"clamp-time.mjs","sources":["../../../../../src/components/TimePicker/utils/clamp-time/clamp-time.ts"],"sourcesContent":["import { secondsToTime, timeToSeconds } from '../time-to-seconds/time-to-seconds';\n\nexport function clampTime(time: string, min: string | undefined, max: string | undefined) {\n const timeInSeconds = timeToSeconds(time);\n const minInSeconds = min ? timeToSeconds(min) : -Infinity;\n const maxInSeconds = max ? timeToSeconds(max) : Infinity;\n\n const clampedSeconds = Math.max(minInSeconds, Math.min(timeInSeconds, maxInSeconds));\n return secondsToTime(clampedSeconds);\n}\n"],"names":[],"mappings":";;;AAEO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,SAAA,CAAU,CAAA,CAAA,CAAA,CAAA,EAAc,CAAA,CAAA,CAAA,CAAA,CAAyB,GAAA,CAAA,CAAyB,CAAA;AACxF,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAc,IAAI,CAAA,CAAA;AACxC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAChD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,aAAA,CAAc,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEhD,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,EAAK,GAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,EAAK,CAAA,CAAA,CAAA,CAAI,aAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA;AACnF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA;AACrC,CAAA;;"}

View File

@@ -0,0 +1,35 @@
'use client';
import { splitTimeString } from '../split-time-string/split-time-string.mjs';
function convertTimeTo12HourFormat({
hours,
minutes,
seconds,
amPmLabels
}) {
if (hours === null) {
return { hours: null, minutes: null, seconds: null, amPm: null };
}
const amPm = hours >= 12 ? amPmLabels.pm : amPmLabels.am;
const hour12 = hours % 12 === 0 ? 12 : hours % 12;
return {
hours: hour12,
minutes: typeof minutes === "number" ? minutes : null,
seconds: typeof seconds === "number" ? seconds : null,
amPm
};
}
function getParsedTime({ time, format, amPmLabels }) {
if (time === "") {
return { hours: null, minutes: null, seconds: null, amPm: null };
}
const { hours, minutes, seconds } = splitTimeString(time);
const parsed = { hours, minutes, seconds };
if (format === "12h") {
return convertTimeTo12HourFormat({ ...parsed, amPmLabels });
}
return { ...parsed, amPm: null };
}
export { convertTimeTo12HourFormat, getParsedTime };
//# sourceMappingURL=get-parsed-time.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,16 @@
'use client';
import { timeToSeconds, secondsToTime } from '../time-to-seconds/time-to-seconds.mjs';
function getTimeRange({ startTime, endTime, interval }) {
const timeRange = [];
const startInSeconds = timeToSeconds(startTime);
const endInSeconds = timeToSeconds(endTime);
const intervalInSeconds = timeToSeconds(interval);
for (let current = startInSeconds; current <= endInSeconds; current += intervalInSeconds) {
timeRange.push(secondsToTime(current).timeString);
}
return timeRange;
}
export { getTimeRange };
//# sourceMappingURL=get-time-range.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"get-time-range.mjs","sources":["../../../../../src/components/TimePicker/utils/get-time-range/get-time-range.ts"],"sourcesContent":["import { secondsToTime, timeToSeconds } from '../time-to-seconds/time-to-seconds';\n\ninterface GetTimeRangeInput {\n startTime: string;\n endTime: string;\n interval: string;\n}\n\nexport function getTimeRange({ startTime, endTime, interval }: GetTimeRangeInput): string[] {\n const timeRange: string[] = [];\n const startInSeconds = timeToSeconds(startTime);\n const endInSeconds = timeToSeconds(endTime);\n const intervalInSeconds = timeToSeconds(interval);\n\n for (let current = startInSeconds; current <= endInSeconds; current += intervalInSeconds) {\n timeRange.push(secondsToTime(current).timeString);\n }\n\n return timeRange;\n}\n"],"names":[],"mappings":";;;AAQO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAS,CAAA,CAAgC,CAAA;AAC1F,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAsB,CAAA,CAAC,CAAA;AAC7B,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAc,SAAS,CAAA,CAAA;AAC9C,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAc,OAAO,CAAA,CAAA;AAC1C,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAc,QAAQ,CAAA,CAAA;AAEhD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAW,iBAAA,CAAA,CAAmB,CAAA;AACxF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA;AAAA,CAAA,CAClD,CAAA;AAEA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA;;"}

View File

@@ -0,0 +1,49 @@
'use client';
import { padTime } from '../pad-time/pad-time.mjs';
function convertTo24HourFormat({
hours,
minutes,
seconds,
amPm,
amPmLabels,
withSeconds
}) {
let _hours = hours;
if (amPm === amPmLabels.pm && hours !== 12) {
_hours += 12;
} else if (amPm === amPmLabels.am && hours === 12) {
_hours = 0;
}
return `${padTime(_hours)}:${padTime(minutes)}${withSeconds ? `:${padTime(seconds || 0)}` : ""}`;
}
function getTimeString({
hours,
minutes,
seconds,
format,
withSeconds,
amPm,
amPmLabels
}) {
if (hours === null || minutes === null) {
return { valid: false, value: "" };
}
if (withSeconds && seconds === null) {
return { valid: false, value: "" };
}
if (format === "24h") {
const value = `${padTime(hours)}:${padTime(minutes)}${withSeconds ? `:${padTime(seconds)}` : ""}`;
return { valid: true, value };
}
if (amPm === null) {
return { valid: false, value: "" };
}
return {
valid: true,
value: convertTo24HourFormat({ hours, minutes, seconds, amPm, amPmLabels, withSeconds })
};
}
export { getTimeString };
//# sourceMappingURL=get-time-string.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,14 @@
'use client';
import { splitTimeString } from '../split-time-string/split-time-string.mjs';
function isSameTime({ time, compare, withSeconds }) {
const timeParts = splitTimeString(time);
const compareParts = splitTimeString(compare);
if (withSeconds) {
return timeParts.hours === compareParts.hours && timeParts.minutes === compareParts.minutes && timeParts.seconds === compareParts.seconds;
}
return timeParts.hours === compareParts.hours && timeParts.minutes === compareParts.minutes;
}
export { isSameTime };
//# sourceMappingURL=is-same-time.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"is-same-time.mjs","sources":["../../../../../src/components/TimePicker/utils/is-same-time/is-same-time.ts"],"sourcesContent":["import { splitTimeString } from '../split-time-string/split-time-string';\n\ninterface IsSameTimeInput {\n time: string;\n compare: string;\n withSeconds: boolean;\n}\n\nexport function isSameTime({ time, compare, withSeconds }: IsSameTimeInput) {\n const timeParts = splitTimeString(time);\n const compareParts = splitTimeString(compare);\n\n if (withSeconds) {\n return (\n timeParts.hours === compareParts.hours &&\n timeParts.minutes === compareParts.minutes &&\n timeParts.seconds === compareParts.seconds\n );\n }\n\n return timeParts.hours === compareParts.hours && timeParts.minutes === compareParts.minutes;\n}\n"],"names":[],"mappings":";;;AAQO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,EAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAY,CAAA,CAAoB,CAAA;AAC1E,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAgB,IAAI,CAAA,CAAA;AACtC,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAgB,OAAO,CAAA,CAAA;AAE5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,WAAA,CAAA,CAAa,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,SAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,KAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,YAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAEvC,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA,CAAA,CAAA,CAAA,CAAA,KAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,SAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACtF,CAAA;;"}

View File

@@ -0,0 +1,7 @@
'use client';
function padTime(value) {
return value < 10 ? `0${value}` : `${value}`;
}
export { padTime };
//# sourceMappingURL=pad-time.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"pad-time.mjs","sources":["../../../../../src/components/TimePicker/utils/pad-time/pad-time.ts"],"sourcesContent":["export function padTime(value: number) {\n return value < 10 ? `0${value}` : `${value}`;\n}\n"],"names":[],"mappings":";AAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA;AACrC,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,IAAQ,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAK,GAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA;AAC5C,CAAA;;"}

View File

@@ -0,0 +1,8 @@
'use client';
function splitTimeString(timeString) {
const [hours = null, minutes = null, seconds = null] = timeString.split(":").map(Number);
return { hours, minutes, seconds };
}
export { splitTimeString };
//# sourceMappingURL=split-time-string.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"split-time-string.mjs","sources":["../../../../../src/components/TimePicker/utils/split-time-string/split-time-string.ts"],"sourcesContent":["export function splitTimeString(timeString: string) {\n const [hours = null, minutes = null, seconds = null] = timeString.split(':').map(Number);\n return { hours, minutes, seconds };\n}\n"],"names":[],"mappings":";AAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAA;AAClD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,EAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,IAAI,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAG,CAAA,CAAE,CAAA,CAAA,EAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA;AACvF,CAAA,CAAA,OAAO,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,OAAA,CAAA,CAAQ,CAAA;AACnC,CAAA;;"}

View File

@@ -0,0 +1,21 @@
'use client';
import { padTime } from '../pad-time/pad-time.mjs';
function timeToSeconds(timeStr) {
const [hours = 0, minutes = 0, seconds = 0] = timeStr.split(":").map(Number);
return hours * 3600 + minutes * 60 + seconds;
}
function secondsToTime(seconds) {
const hours = Math.floor(seconds / 3600);
const minutes = Math.floor(seconds % 3600 / 60);
const secs = seconds % 60;
return {
timeString: `${padTime(hours)}:${padTime(minutes)}:${padTime(secs)}`,
hours,
minutes,
seconds: secs
};
}
export { secondsToTime, timeToSeconds };
//# sourceMappingURL=time-to-seconds.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"time-to-seconds.mjs","sources":["../../../../../src/components/TimePicker/utils/time-to-seconds/time-to-seconds.ts"],"sourcesContent":["import { padTime } from '../pad-time/pad-time';\n\nexport function timeToSeconds(timeStr: string): number {\n const [hours = 0, minutes = 0, seconds = 0] = timeStr.split(':').map(Number);\n return hours * 3600 + minutes * 60 + seconds;\n}\n\nexport function secondsToTime(seconds: number) {\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds % 3600) / 60);\n const secs = seconds % 60;\n\n return {\n timeString: `${padTime(hours)}:${padTime(minutes)}:${padTime(secs)}`,\n hours,\n minutes,\n seconds: secs,\n };\n}\n"],"names":[],"mappings":"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"}