@bigbinary/neeto-atoms 1.0.37 → 1.0.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{DatePicker-CCN3b1oz.js → DatePicker-IrQUHqdL.js} +89 -22
- package/dist/{DatePicker-CCN3b1oz.js.map → DatePicker-IrQUHqdL.js.map} +1 -1
- package/dist/{TimePicker-wPi2k6Z8.js → TimePicker-BzlF3JWj.js} +43 -29
- package/dist/TimePicker-BzlF3JWj.js.map +1 -0
- package/dist/{TimePickerPanel-DAhz3B2d.js → TimePickerPanel-CgEbjExH.js} +200 -2
- package/dist/TimePickerPanel-CgEbjExH.js.map +1 -0
- package/dist/cjs/{DatePicker-DRQubO2h.js → DatePicker-DdTclP8E.js} +88 -21
- package/dist/cjs/{DatePicker-DRQubO2h.js.map → DatePicker-DdTclP8E.js.map} +1 -1
- package/dist/cjs/{TimePicker-BG_vYH3r.js → TimePicker-Cwwa1DD8.js} +42 -28
- package/dist/cjs/TimePicker-Cwwa1DD8.js.map +1 -0
- package/dist/cjs/{TimePickerPanel-6xA-hjhm.js → TimePickerPanel-CAdLD7qW.js} +204 -3
- package/dist/cjs/TimePickerPanel-CAdLD7qW.js.map +1 -0
- package/dist/cjs/components/DatePicker.js +2 -2
- package/dist/cjs/components/TimePicker.js +2 -2
- package/dist/cjs/components/index.js +3 -3
- package/dist/cjs/index.js +3 -3
- package/dist/components/DatePicker/utils.d.ts +4 -0
- package/dist/components/DatePicker.js +2 -2
- package/dist/components/TimePicker/utils.d.ts +1 -0
- package/dist/components/TimePicker.js +2 -2
- package/dist/components/index.js +3 -3
- package/dist/index.js +3 -3
- package/dist/utils/inputMask.d.ts +38 -0
- package/package.json +1 -1
- package/dist/TimePicker-wPi2k6Z8.js.map +0 -1
- package/dist/TimePickerPanel-DAhz3B2d.js.map +0 -1
- package/dist/cjs/TimePicker-BG_vYH3r.js.map +0 -1
- package/dist/cjs/TimePickerPanel-6xA-hjhm.js.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { forwardRef, useId, useRef, useState, useCallback, useEffect } from 'react';
|
|
2
|
+
import { forwardRef, useId, useRef, useState, useMemo, useCallback, useEffect, useLayoutEffect } from 'react';
|
|
3
3
|
import { g as getDefaultOptions$1, t as toDate, c as constructFrom, m as millisecondsInHour, b as millisecondsInMinute, d as millisecondsInSecond, e as getWeekYear, s as startOfWeek, f as startOfISOWeek, h as getWeek, i as getISOWeek, j as addDays, k as getTimezoneOffsetInMilliseconds, l as enUS, n as longFormatters, o as isProtectedWeekYearToken, w as warnOrThrowProtectedError, p as isProtectedDayOfYearToken, q as format, C as Calendar$1 } from './Calendar-CjOBwDbx.js';
|
|
4
4
|
import { Popover, PopoverAnchor, PopoverContent } from './primitives/Popover.js';
|
|
5
5
|
import { Field, FieldLabel, FieldContent, FieldError, FieldDescription } from './primitives/Field.js';
|
|
6
6
|
import { c as cn } from './utils-BJnb9o5c.js';
|
|
7
|
+
import { i as isFixedWidthFormat, c as buildRangeMaskTemplate, b as buildMaskTemplate, d as dateToTimeValue, T as TimePickerPanel, a as applyMask } from './TimePickerPanel-CgEbjExH.js';
|
|
7
8
|
import { Button } from './primitives/Button.js';
|
|
8
|
-
import { d as dateToTimeValue, T as TimePickerPanel } from './TimePickerPanel-DAhz3B2d.js';
|
|
9
9
|
import { c as createLucideIcon } from './createLucideIcon-C8ycilSN.js';
|
|
10
10
|
import { X } from './x-_o2T3n6D.js';
|
|
11
11
|
|
|
@@ -2714,6 +2714,16 @@ const applyTimeToDate = (date, time) => {
|
|
|
2714
2714
|
return result;
|
|
2715
2715
|
};
|
|
2716
2716
|
const getDisplayFormat = (dateFormat, timeFormat, showTime) => showTime ? `${dateFormat} ${timeFormat}` : dateFormat;
|
|
2717
|
+
const isDatePartComplete = (part, maskEnabled, singleDateLen) => maskEnabled ? part.length >= singleDateLen : part.length > 0;
|
|
2718
|
+
const parseRangeText = (text, displayFormat, maskEnabled, singleDateLen) => {
|
|
2719
|
+
const parts = text.split(" - ");
|
|
2720
|
+
if (parts.length !== 2) return null;
|
|
2721
|
+
if (!isDatePartComplete(parts[0], maskEnabled, singleDateLen) || !isDatePartComplete(parts[1], maskEnabled, singleDateLen))
|
|
2722
|
+
return null;
|
|
2723
|
+
const from = parseDate(parts[0], displayFormat);
|
|
2724
|
+
const to = parseDate(parts[1], displayFormat);
|
|
2725
|
+
return from && to ? [from, to] : null;
|
|
2726
|
+
};
|
|
2717
2727
|
|
|
2718
2728
|
const TIMEZONE_OPTIONS = [
|
|
2719
2729
|
{ label: "Local", value: "" },
|
|
@@ -2809,6 +2819,8 @@ const DatePicker = forwardRef(
|
|
|
2809
2819
|
const errorId = `error_${generatedId}`;
|
|
2810
2820
|
const helpTextId = `helpText_${generatedId}`;
|
|
2811
2821
|
const containerRef = useRef(null);
|
|
2822
|
+
const inputRef = useRef(null);
|
|
2823
|
+
const cursorPosRef = useRef(null);
|
|
2812
2824
|
const popoverContentId = useRef(
|
|
2813
2825
|
`datepicker-popover-${generatedId}`
|
|
2814
2826
|
).current;
|
|
@@ -2829,7 +2841,13 @@ const DatePicker = forwardRef(
|
|
|
2829
2841
|
});
|
|
2830
2842
|
const displayFormat = getDisplayFormat(dateFormat, timeFormat, showTime);
|
|
2831
2843
|
const sizeConfig = SIZE_CONFIG[size];
|
|
2832
|
-
const
|
|
2844
|
+
const maskEnabled = isFixedWidthFormat(displayFormat);
|
|
2845
|
+
const maskTemplate = useMemo(
|
|
2846
|
+
() => maskEnabled ? type === "range" ? buildRangeMaskTemplate(displayFormat) : buildMaskTemplate(displayFormat) : null,
|
|
2847
|
+
[displayFormat, type, maskEnabled]
|
|
2848
|
+
);
|
|
2849
|
+
const singlePlaceholder = showTime ? `${dateFormat.toUpperCase()} ${timeFormat}` : dateFormat.toUpperCase();
|
|
2850
|
+
const defaultPlaceholder = type === "range" ? `${singlePlaceholder} - ${singlePlaceholder}` : singlePlaceholder;
|
|
2833
2851
|
const getDisplayText = useCallback(() => {
|
|
2834
2852
|
if (type === "range") {
|
|
2835
2853
|
const rangeValue = currentValue;
|
|
@@ -2954,32 +2972,79 @@ const DatePicker = forwardRef(
|
|
|
2954
2972
|
e.preventDefault();
|
|
2955
2973
|
commitValue(null);
|
|
2956
2974
|
};
|
|
2975
|
+
useLayoutEffect(() => {
|
|
2976
|
+
if (cursorPosRef.current !== null && inputRef.current && document.activeElement === inputRef.current) {
|
|
2977
|
+
inputRef.current.setSelectionRange(
|
|
2978
|
+
cursorPosRef.current,
|
|
2979
|
+
cursorPosRef.current
|
|
2980
|
+
);
|
|
2981
|
+
cursorPosRef.current = null;
|
|
2982
|
+
}
|
|
2983
|
+
});
|
|
2984
|
+
const singleDateLen = useMemo(
|
|
2985
|
+
() => buildMaskTemplate(displayFormat).pattern.length,
|
|
2986
|
+
[displayFormat]
|
|
2987
|
+
);
|
|
2988
|
+
const parseAndApplyRange = (text) => {
|
|
2989
|
+
const parts = text.split(" - ");
|
|
2990
|
+
if (!isDatePartComplete(parts[0] ?? "", maskEnabled, singleDateLen))
|
|
2991
|
+
return;
|
|
2992
|
+
const from = parseDate(parts[0], displayFormat);
|
|
2993
|
+
if (from) setCalendarMonth(from);
|
|
2994
|
+
const range = parseRangeText(
|
|
2995
|
+
text,
|
|
2996
|
+
displayFormat,
|
|
2997
|
+
maskEnabled,
|
|
2998
|
+
singleDateLen
|
|
2999
|
+
);
|
|
3000
|
+
if (range) setInternalValue(range);
|
|
3001
|
+
};
|
|
2957
3002
|
const handleInputChange = (e) => {
|
|
2958
|
-
|
|
3003
|
+
let text = e.target.value;
|
|
3004
|
+
if (maskTemplate) {
|
|
3005
|
+
const masked = applyMask(
|
|
3006
|
+
text,
|
|
3007
|
+
maskTemplate,
|
|
3008
|
+
inputText,
|
|
3009
|
+
e.target.selectionStart
|
|
3010
|
+
);
|
|
3011
|
+
text = masked.text;
|
|
3012
|
+
cursorPosRef.current = masked.cursorPosition;
|
|
3013
|
+
}
|
|
2959
3014
|
setInputText(text);
|
|
2960
|
-
if (type === "range")
|
|
3015
|
+
if (type === "range") {
|
|
3016
|
+
parseAndApplyRange(text);
|
|
3017
|
+
return;
|
|
3018
|
+
}
|
|
3019
|
+
const isComplete = maskTemplate ? text.length >= maskTemplate.pattern.length : true;
|
|
3020
|
+
if (!isComplete) return;
|
|
2961
3021
|
const parsed = parseDate(text, displayFormat);
|
|
2962
|
-
if (parsed)
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
2968
|
-
|
|
2969
|
-
}
|
|
3022
|
+
if (!parsed) return;
|
|
3023
|
+
setCalendarMonth(parsed);
|
|
3024
|
+
if (showTime || needConfirm) {
|
|
3025
|
+
setPendingDate(parsed);
|
|
3026
|
+
setPendingTime(dateToTimeValue(parsed));
|
|
3027
|
+
} else {
|
|
3028
|
+
setInternalValue(parsed);
|
|
2970
3029
|
}
|
|
2971
3030
|
};
|
|
2972
3031
|
const handleInputKeyDown = (e) => {
|
|
2973
|
-
if (e.key === "
|
|
3032
|
+
if (e.key === "Escape") return closePopover();
|
|
3033
|
+
if (e.key !== "Enter") return;
|
|
3034
|
+
if (type === "range") {
|
|
3035
|
+
const range = parseRangeText(
|
|
3036
|
+
inputText,
|
|
3037
|
+
displayFormat,
|
|
3038
|
+
maskEnabled,
|
|
3039
|
+
singleDateLen
|
|
3040
|
+
);
|
|
3041
|
+
if (range) commitValue(range);
|
|
3042
|
+
} else {
|
|
2974
3043
|
const parsed = parseDate(inputText, displayFormat);
|
|
2975
|
-
if (parsed)
|
|
2976
|
-
commitValue(parsed);
|
|
2977
|
-
}
|
|
2978
|
-
setOpen(false);
|
|
2979
|
-
onOpenChange?.(false);
|
|
2980
|
-
} else if (e.key === "Escape") {
|
|
2981
|
-
closePopover();
|
|
3044
|
+
if (parsed) commitValue(parsed);
|
|
2982
3045
|
}
|
|
3046
|
+
setOpen(false);
|
|
3047
|
+
onOpenChange?.(false);
|
|
2983
3048
|
};
|
|
2984
3049
|
const handleInputFocus = () => {
|
|
2985
3050
|
if (!open) openPopover();
|
|
@@ -3024,6 +3089,7 @@ const DatePicker = forwardRef(
|
|
|
3024
3089
|
/* @__PURE__ */ jsx(
|
|
3025
3090
|
"input",
|
|
3026
3091
|
{
|
|
3092
|
+
ref: inputRef,
|
|
3027
3093
|
type: "text",
|
|
3028
3094
|
disabled,
|
|
3029
3095
|
"aria-label": label || "Pick a date",
|
|
@@ -3091,6 +3157,7 @@ const DatePicker = forwardRef(
|
|
|
3091
3157
|
mode: "range",
|
|
3092
3158
|
numberOfMonths: 2,
|
|
3093
3159
|
captionLayout: "dropdown",
|
|
3160
|
+
className: "[&_[data-outside][data-selected=true]]:!bg-transparent [&_[data-outside][data-selected=true]]:after:!bg-transparent [&_[data-outside]_button]:!bg-transparent [&_[data-outside]_button]:!text-muted-foreground",
|
|
3094
3161
|
month: calendarMonth,
|
|
3095
3162
|
onMonthChange: setCalendarMonth,
|
|
3096
3163
|
selected: currentValue ? {
|
|
@@ -3163,4 +3230,4 @@ const DatePicker = forwardRef(
|
|
|
3163
3230
|
DatePicker.displayName = "DatePicker";
|
|
3164
3231
|
|
|
3165
3232
|
export { DatePicker as D };
|
|
3166
|
-
//# sourceMappingURL=DatePicker-
|
|
3233
|
+
//# sourceMappingURL=DatePicker-IrQUHqdL.js.map
|