@bsol-oss/react-datatable5 12.0.0-beta.64 → 12.0.0-beta.66
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/index.js +128 -101
- package/dist/index.mjs +129 -102
- package/dist/types/components/TimePicker/TimePicker.d.ts +2 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4114,7 +4114,7 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, showTotalAndLi
|
|
|
4114
4114
|
setOpenSearchResult(true);
|
|
4115
4115
|
}, justifyContent: "start", children: !!watchEnum === false
|
|
4116
4116
|
? ""
|
|
4117
|
-
: translate.t(removeIndex(`${colLabel}.${watchEnum ?? "null"}`)) })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(`${colLabel}.type_to_search`), onChange: (event) => {
|
|
4117
|
+
: translate.t(removeIndex(`${colLabel}.${watchEnum ?? "null"}`)) })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { portalled: false, children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(`${colLabel}.type_to_search`), onChange: (event) => {
|
|
4118
4118
|
onSearchChange(event);
|
|
4119
4119
|
setOpenSearchResult(true);
|
|
4120
4120
|
}, autoComplete: "off", ref: ref }), jsxRuntime.jsx(PopoverTitle, {}), showTotalAndLimit && (jsxRuntime.jsx(react.Text, { children: `${translate.t(removeIndex(`${colLabel}.total`))}: ${count}, ${translate.t(removeIndex(`${colLabel}.showing`))} ${limit}` })), jsxRuntime.jsxs(react.Grid, { overflow: "auto", maxHeight: "20rem", children: [jsxRuntime.jsx(react.Flex, { flexFlow: "column wrap", children: dataList
|
|
@@ -4701,7 +4701,7 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4701
4701
|
setOpenSearchResult(true);
|
|
4702
4702
|
}, children: translate.t(removeIndex(`${colLabel}.add_more`)) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
|
|
4703
4703
|
setOpenSearchResult(true);
|
|
4704
|
-
}, justifyContent: "start", children: queryDefault.isLoading ? jsxRuntime.jsx(react.Spinner, { size: "sm" }) : getPickedValue() })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(removeIndex(`${colLabel}.type_to_search`)), onChange: onSearchChange, autoComplete: "off", ref: ref, value: searchText }), jsxRuntime.jsx(PopoverTitle, {}), openSearchResult && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [(isFetching || isLoading || isPending) && jsxRuntime.jsx(react.Spinner, {}), isError && (jsxRuntime.jsx(react.Icon, { color: "red.400", children: jsxRuntime.jsx(bi.BiError, {}) })), jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", alignItems: "center", children: [jsxRuntime.jsxs(react.Flex, { alignItems: "center", gap: "2", children: [jsxRuntime.jsx(InfoTip, { children: `${translate.t(removeIndex(`${colLabel}.total`))} ${count}, ${translate.t(removeIndex(`${colLabel}.showing`))} ${limit} ${translate.t(removeIndex(`${colLabel}.per_page`), "per page")}` }), jsxRuntime.jsxs(react.Text, { fontSize: "sm", fontWeight: "bold", children: [count, jsxRuntime.jsxs(react.Text, { as: "span", fontSize: "xs", ml: "1", color: "gray.500", children: ["/ ", count > 0 ? `${page * limit + 1}-${Math.min((page + 1) * limit, count)}` : '0'] })] })] }), jsxRuntime.jsx(react.Box, { children: jsxRuntime.jsxs("select", { value: limit, onChange: handleLimitChange, style: {
|
|
4704
|
+
}, justifyContent: "start", children: queryDefault.isLoading ? jsxRuntime.jsx(react.Spinner, { size: "sm" }) : getPickedValue() })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { portalled: false, children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(removeIndex(`${colLabel}.type_to_search`)), onChange: onSearchChange, autoComplete: "off", ref: ref, value: searchText }), jsxRuntime.jsx(PopoverTitle, {}), openSearchResult && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [(isFetching || isLoading || isPending) && jsxRuntime.jsx(react.Spinner, {}), isError && (jsxRuntime.jsx(react.Icon, { color: "red.400", children: jsxRuntime.jsx(bi.BiError, {}) })), jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", alignItems: "center", children: [jsxRuntime.jsxs(react.Flex, { alignItems: "center", gap: "2", children: [jsxRuntime.jsx(InfoTip, { children: `${translate.t(removeIndex(`${colLabel}.total`))} ${count}, ${translate.t(removeIndex(`${colLabel}.showing`))} ${limit} ${translate.t(removeIndex(`${colLabel}.per_page`), "per page")}` }), jsxRuntime.jsxs(react.Text, { fontSize: "sm", fontWeight: "bold", children: [count, jsxRuntime.jsxs(react.Text, { as: "span", fontSize: "xs", ml: "1", color: "gray.500", children: ["/ ", count > 0 ? `${page * limit + 1}-${Math.min((page + 1) * limit, count)}` : '0'] })] })] }), jsxRuntime.jsx(react.Box, { children: jsxRuntime.jsxs("select", { value: limit, onChange: handleLimitChange, style: {
|
|
4705
4705
|
padding: "4px 8px",
|
|
4706
4706
|
borderRadius: "4px",
|
|
4707
4707
|
border: "1px solid #ccc",
|
|
@@ -5031,99 +5031,130 @@ const TextAreaInput = ({ column, schema, prefix, }) => {
|
|
|
5031
5031
|
function TimePicker$1({ hour, setHour, minute, setMinute, meridiem, setMeridiem, meridiemLabel = {
|
|
5032
5032
|
am: "am",
|
|
5033
5033
|
pm: "pm",
|
|
5034
|
-
}, onChange = (_newValue) => { }, }) {
|
|
5035
|
-
|
|
5036
|
-
|
|
5037
|
-
|
|
5038
|
-
|
|
5039
|
-
|
|
5040
|
-
|
|
5041
|
-
|
|
5042
|
-
|
|
5043
|
-
|
|
5044
|
-
if (
|
|
5045
|
-
|
|
5034
|
+
}, onChange = (_newValue) => { }, timezone = "Asia/Hong_Kong", }) {
|
|
5035
|
+
const handleClear = () => {
|
|
5036
|
+
setHour(null);
|
|
5037
|
+
setMinute(null);
|
|
5038
|
+
setMeridiem(null);
|
|
5039
|
+
setInputValue("");
|
|
5040
|
+
setShowInput(false);
|
|
5041
|
+
onChange({ hour: null, minute: null, meridiem: null });
|
|
5042
|
+
};
|
|
5043
|
+
const getTimeString = (hour, minute, meridiem) => {
|
|
5044
|
+
if (hour === null || minute === null || meridiem === null) {
|
|
5045
|
+
return "";
|
|
5046
|
+
}
|
|
5047
|
+
// if the hour is 24, set the hour to 0
|
|
5048
|
+
if (hour === 24) {
|
|
5049
|
+
return dayjs().tz(timezone).hour(0).minute(minute).format("HH:mmZ");
|
|
5050
|
+
}
|
|
5051
|
+
// use dayjs to format the time at current timezone
|
|
5052
|
+
// if meridiem is pm, add 12 hours
|
|
5053
|
+
let newHour = hour;
|
|
5054
|
+
if (meridiem === "pm" && hour !== 12) {
|
|
5055
|
+
newHour = hour + 12;
|
|
5056
|
+
}
|
|
5057
|
+
// if the hour is 12, set the meridiem to am, and set the hour to 0
|
|
5058
|
+
else if (meridiem === "am" && hour === 12) {
|
|
5059
|
+
newHour = 0;
|
|
5060
|
+
}
|
|
5061
|
+
return dayjs().tz(timezone).hour(newHour).minute(minute).format("HH:mmZ");
|
|
5062
|
+
};
|
|
5063
|
+
const stringTime = getTimeString(hour, minute, meridiem);
|
|
5064
|
+
const [inputValue, setInputValue] = React.useState("");
|
|
5065
|
+
const [showInput, setShowInput] = React.useState(false);
|
|
5066
|
+
const handleBlur = (text) => {
|
|
5067
|
+
// ignore all non-numeric characters
|
|
5068
|
+
if (!text) {
|
|
5046
5069
|
return;
|
|
5047
5070
|
}
|
|
5048
|
-
|
|
5049
|
-
|
|
5050
|
-
|
|
5071
|
+
const value = text.replace(/[^0-9apm]/g, "");
|
|
5072
|
+
if (value === "") {
|
|
5073
|
+
handleClear();
|
|
5051
5074
|
return;
|
|
5052
5075
|
}
|
|
5053
|
-
if
|
|
5054
|
-
|
|
5055
|
-
|
|
5056
|
-
|
|
5057
|
-
|
|
5058
|
-
|
|
5059
|
-
|
|
5060
|
-
|
|
5076
|
+
// if the value is a valid time, parse it and set the hour, minute, and meridiem
|
|
5077
|
+
// if the value is not a valid time, set the stringTime to the value
|
|
5078
|
+
// first two characters are the hour
|
|
5079
|
+
// next two characters are the minute
|
|
5080
|
+
// final two characters are the meridiem
|
|
5081
|
+
const hour = parseInt(value.slice(0, 2));
|
|
5082
|
+
const minute = parseInt(value.slice(2, 4));
|
|
5083
|
+
const meridiem = value.slice(4, 6);
|
|
5084
|
+
// validate the hour and minute
|
|
5085
|
+
if (isNaN(hour) || isNaN(minute)) {
|
|
5086
|
+
setInputValue("");
|
|
5061
5087
|
return;
|
|
5062
5088
|
}
|
|
5063
|
-
//
|
|
5064
|
-
if (
|
|
5065
|
-
|
|
5066
|
-
|
|
5067
|
-
const numValue = parseInt(newValue, 10);
|
|
5068
|
-
console.log("newValue", newValue, numValue);
|
|
5069
|
-
if (numValue > 12) {
|
|
5070
|
-
const digitValue = parseInt(e.key, 10);
|
|
5071
|
-
setHour(digitValue);
|
|
5072
|
-
onChange({ hour: digitValue, minute, meridiem });
|
|
5073
|
-
return;
|
|
5074
|
-
}
|
|
5075
|
-
// Auto-advance to minutes if we have a valid hour (1-12)
|
|
5076
|
-
if (numValue >= 1 && numValue <= 12) {
|
|
5077
|
-
// Set the hour value
|
|
5078
|
-
setHour(numValue);
|
|
5079
|
-
onChange({ hour: numValue, minute, meridiem });
|
|
5080
|
-
// Move to minute input
|
|
5081
|
-
e.preventDefault();
|
|
5082
|
-
minuteInputRef.current?.focus();
|
|
5083
|
-
}
|
|
5084
|
-
}
|
|
5089
|
+
// if the hour is larger than 24, set the hour to 24
|
|
5090
|
+
if (hour > 24) {
|
|
5091
|
+
setInputValue("");
|
|
5092
|
+
return;
|
|
5085
5093
|
}
|
|
5086
|
-
|
|
5087
|
-
|
|
5088
|
-
|
|
5089
|
-
|
|
5090
|
-
|
|
5091
|
-
|
|
5092
|
-
|
|
5093
|
-
setMinute(digitValue);
|
|
5094
|
-
onChange({ hour, minute: digitValue, meridiem });
|
|
5095
|
-
return;
|
|
5096
|
-
}
|
|
5097
|
-
// Auto-advance to meridiem if we have a valid minute (0-59)
|
|
5098
|
-
if (numValue >= 0 && numValue <= 59) {
|
|
5099
|
-
// Set the minute value
|
|
5100
|
-
setMinute(numValue);
|
|
5101
|
-
onChange({ hour, minute: numValue, meridiem });
|
|
5102
|
-
}
|
|
5103
|
-
}
|
|
5094
|
+
let newHour = hour;
|
|
5095
|
+
let newMinute = minute;
|
|
5096
|
+
let newMeridiem = meridiem;
|
|
5097
|
+
// if the hour is 24, set the meridiem to am, and set the hour to 0
|
|
5098
|
+
if (hour === 24) {
|
|
5099
|
+
newMeridiem = "am";
|
|
5100
|
+
newHour = 0;
|
|
5104
5101
|
}
|
|
5102
|
+
// if the hour is greater than 12, set the meridiem to pm, and subtract 12 from the hour
|
|
5103
|
+
else if (hour > 12) {
|
|
5104
|
+
newMeridiem = "pm";
|
|
5105
|
+
newHour = hour - 12;
|
|
5106
|
+
}
|
|
5107
|
+
// if the hour is 12, set the meridiem to pm, and set the hour to 12
|
|
5108
|
+
else if (hour === 12) {
|
|
5109
|
+
newMeridiem = "pm";
|
|
5110
|
+
newHour = 12;
|
|
5111
|
+
}
|
|
5112
|
+
// if the hour is 0, set the meridiem to am, and set the hour to 12
|
|
5113
|
+
else if (hour === 0) {
|
|
5114
|
+
newMeridiem = "am";
|
|
5115
|
+
newHour = 12;
|
|
5116
|
+
}
|
|
5117
|
+
else {
|
|
5118
|
+
newMeridiem = meridiem ?? "am";
|
|
5119
|
+
newHour = hour;
|
|
5120
|
+
}
|
|
5121
|
+
if (minute > 59) {
|
|
5122
|
+
newMinute = 0;
|
|
5123
|
+
}
|
|
5124
|
+
else {
|
|
5125
|
+
newMinute = minute;
|
|
5126
|
+
}
|
|
5127
|
+
onChange({
|
|
5128
|
+
hour: newHour,
|
|
5129
|
+
minute: newMinute,
|
|
5130
|
+
meridiem: newMeridiem,
|
|
5131
|
+
});
|
|
5132
|
+
setShowInput(false);
|
|
5105
5133
|
};
|
|
5106
|
-
|
|
5107
|
-
|
|
5108
|
-
|
|
5109
|
-
|
|
5110
|
-
};
|
|
5111
|
-
const handleClear = () => {
|
|
5112
|
-
setHour(null);
|
|
5113
|
-
setMinute(null);
|
|
5114
|
-
setMeridiem(null);
|
|
5115
|
-
onChange({ hour: null, minute: null, meridiem: null });
|
|
5116
|
-
// Focus the hour field after clearing
|
|
5117
|
-
hourInputRef.current?.focus();
|
|
5134
|
+
const handleKeyDown = (e) => {
|
|
5135
|
+
if (e.key === "Enter") {
|
|
5136
|
+
handleBlur(e.currentTarget.value);
|
|
5137
|
+
}
|
|
5118
5138
|
};
|
|
5119
|
-
|
|
5139
|
+
const inputRef = React.useRef(null);
|
|
5140
|
+
return (jsxRuntime.jsxs(react.Grid, { justifyContent: "center", alignItems: "center", templateColumns: "200px auto", gap: "2", width: "auto", minWidth: "250px", children: [jsxRuntime.jsx(react.Input, { onKeyDown: handleKeyDown, onChange: (e) => {
|
|
5141
|
+
setInputValue(e.currentTarget.value);
|
|
5142
|
+
}, onBlur: (e) => {
|
|
5143
|
+
handleBlur(e.currentTarget.value);
|
|
5144
|
+
}, value: inputValue, display: showInput ? undefined : "none", ref: inputRef }), jsxRuntime.jsxs(react.Button, { onClick: () => {
|
|
5145
|
+
setShowInput(true);
|
|
5146
|
+
setInputValue(dayjs(`1970-01-01T${getTimeString(hour, minute, meridiem)}`, "hh:mmZ").format("hh:mm a"));
|
|
5147
|
+
inputRef.current?.focus();
|
|
5148
|
+
}, display: showInput ? "none" : "flex", alignItems: "center", justifyContent: "start", variant: "outline", gap: 2, children: [jsxRuntime.jsx(react.Icon, { size: "sm", children: jsxRuntime.jsx(bs.BsClock, {}) }), jsxRuntime.jsx(react.Text, { fontSize: "sm", children: stringTime
|
|
5149
|
+
? dayjs(`1970-01-01T${stringTime}`, "hh:mmZ").format("hh:mm a")
|
|
5150
|
+
: "" })] }), jsxRuntime.jsx(react.Button, { onClick: handleClear, size: "sm", variant: "ghost", children: jsxRuntime.jsx(md.MdCancel, {}) })] }));
|
|
5120
5151
|
}
|
|
5121
5152
|
|
|
5122
5153
|
dayjs.extend(timezone);
|
|
5123
5154
|
const TimePicker = ({ column, schema, prefix }) => {
|
|
5124
5155
|
const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
|
|
5125
5156
|
const { translate, timezone } = useSchemaContext();
|
|
5126
|
-
const { required, gridColumn = "span 4", gridRow = "span 1", timeFormat = "HH:
|
|
5157
|
+
const { required, gridColumn = "span 4", gridRow = "span 1", timeFormat = "HH:mmZ", displayTimeFormat = "hh:mm A", } = schema;
|
|
5127
5158
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
5128
5159
|
const colLabel = `${prefix}${column}`;
|
|
5129
5160
|
const [open, setOpen] = React.useState(false);
|
|
@@ -5131,13 +5162,14 @@ const TimePicker = ({ column, schema, prefix }) => {
|
|
|
5131
5162
|
const displayedTime = dayjs(`1970-01-01T${value}`).tz(timezone).isValid()
|
|
5132
5163
|
? dayjs(`1970-01-01T${value}`).tz(timezone).format(displayTimeFormat)
|
|
5133
5164
|
: "";
|
|
5134
|
-
// Parse the initial time parts from the
|
|
5135
|
-
const parseTime = (
|
|
5136
|
-
if (!
|
|
5165
|
+
// Parse the initial time parts from the time string (HH:mm:ssZ)
|
|
5166
|
+
const parseTime = (time) => {
|
|
5167
|
+
if (!time)
|
|
5137
5168
|
return { hour: 12, minute: 0, meridiem: "am" };
|
|
5138
|
-
const parsed = dayjs(`1970-01-01T${
|
|
5139
|
-
if (!parsed.isValid())
|
|
5169
|
+
const parsed = dayjs(`1970-01-01T${time}`).tz(timezone);
|
|
5170
|
+
if (!parsed.isValid()) {
|
|
5140
5171
|
return { hour: 12, minute: 0, meridiem: "am" };
|
|
5172
|
+
}
|
|
5141
5173
|
let hour = parsed.hour();
|
|
5142
5174
|
const minute = parsed.minute();
|
|
5143
5175
|
const meridiem = hour >= 12 ? "pm" : "am";
|
|
@@ -5157,35 +5189,30 @@ const TimePicker = ({ column, schema, prefix }) => {
|
|
|
5157
5189
|
setMinute(minute);
|
|
5158
5190
|
setMeridiem(meridiem);
|
|
5159
5191
|
}, [value]);
|
|
5160
|
-
|
|
5161
|
-
const toIsoTime = (hour, minute, meridiem) => {
|
|
5192
|
+
const getTimeString = (hour, minute, meridiem) => {
|
|
5162
5193
|
if (hour === null || minute === null || meridiem === null)
|
|
5163
5194
|
return null;
|
|
5164
|
-
let
|
|
5165
|
-
if (meridiem === "
|
|
5166
|
-
|
|
5167
|
-
|
|
5168
|
-
|
|
5169
|
-
return dayjs(`1970-01-01T${h.toString().padStart(2, "0")}:${minute.toString().padStart(2, "0")}:00`)
|
|
5170
|
-
.tz(timezone)
|
|
5171
|
-
.format(timeFormat);
|
|
5195
|
+
let newHour = hour;
|
|
5196
|
+
if (meridiem === "pm" && hour !== 12) {
|
|
5197
|
+
newHour = hour + 12;
|
|
5198
|
+
}
|
|
5199
|
+
return dayjs().tz(timezone).hour(newHour).minute(minute).format(timeFormat);
|
|
5172
5200
|
};
|
|
5173
5201
|
// Handle changes to time parts
|
|
5174
5202
|
const handleTimeChange = ({ hour: newHour, minute: newMinute, meridiem: newMeridiem, }) => {
|
|
5175
5203
|
setHour(newHour);
|
|
5176
5204
|
setMinute(newMinute);
|
|
5177
5205
|
setMeridiem(newMeridiem);
|
|
5178
|
-
const
|
|
5179
|
-
setValue(colLabel,
|
|
5206
|
+
const timeString = getTimeString(newHour, newMinute, newMeridiem);
|
|
5207
|
+
setValue(colLabel, timeString, { shouldValidate: true, shouldDirty: true });
|
|
5180
5208
|
};
|
|
5181
|
-
const containerRef = React.useRef(null);
|
|
5182
5209
|
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
5183
5210
|
gridRow, children: [jsxRuntime.jsxs(react.Popover.Root, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsxRuntime.jsx(react.Popover.Trigger, { asChild: true, children: jsxRuntime.jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
|
|
5184
5211
|
setOpen(true);
|
|
5185
|
-
}, justifyContent: "start", children: [jsxRuntime.jsx(io.IoMdClock, {}), !!value ? `${displayedTime}` : ""] }) }), jsxRuntime.jsx(react.
|
|
5186
|
-
|
|
5187
|
-
|
|
5188
|
-
|
|
5212
|
+
}, justifyContent: "start", children: [jsxRuntime.jsx(io.IoMdClock, {}), !!value ? `${displayedTime}` : ""] }) }), jsxRuntime.jsx(react.Popover.Positioner, { children: jsxRuntime.jsx(react.Popover.Content, { children: jsxRuntime.jsx(react.Popover.Body, { children: jsxRuntime.jsx(TimePicker$1, { hour: hour, setHour: setHour, minute: minute, setMinute: setMinute, meridiem: meridiem, setMeridiem: setMeridiem, onChange: handleTimeChange, meridiemLabel: {
|
|
5213
|
+
am: translate.t(`common.am`, { defaultValue: "AM" }),
|
|
5214
|
+
pm: translate.t(`common.pm`, { defaultValue: "PM" }),
|
|
5215
|
+
} }) }) }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
5189
5216
|
};
|
|
5190
5217
|
|
|
5191
5218
|
function IsoTimePicker({ hour, setHour, minute, setMinute, second, setSecond, onChange = (_newValue) => { }, }) {
|
package/dist/index.mjs
CHANGED
|
@@ -20,7 +20,7 @@ import invariant from 'tiny-invariant';
|
|
|
20
20
|
import { HiColorSwatch, HiOutlineInformationCircle } from 'react-icons/hi';
|
|
21
21
|
import { flexRender, makeStateUpdater, functionalUpdate, useReactTable, getCoreRowModel, getFilteredRowModel, getSortedRowModel, getPaginationRowModel, createColumnHelper } from '@tanstack/react-table';
|
|
22
22
|
import { rankItem } from '@tanstack/match-sorter-utils';
|
|
23
|
-
import { BsExclamationCircleFill } from 'react-icons/bs';
|
|
23
|
+
import { BsExclamationCircleFill, BsClock } from 'react-icons/bs';
|
|
24
24
|
import { useDebounce } from '@uidotdev/usehooks';
|
|
25
25
|
import { useQueryClient, useQuery } from '@tanstack/react-query';
|
|
26
26
|
import { IoReload } from 'react-icons/io5';
|
|
@@ -4094,7 +4094,7 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, showTotalAndLi
|
|
|
4094
4094
|
setOpenSearchResult(true);
|
|
4095
4095
|
}, justifyContent: "start", children: !!watchEnum === false
|
|
4096
4096
|
? ""
|
|
4097
|
-
: translate.t(removeIndex(`${colLabel}.${watchEnum ?? "null"}`)) })), jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsx(PopoverTrigger, {}), jsx(PopoverContent, { children: jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsx(Input, { placeholder: translate.t(`${colLabel}.type_to_search`), onChange: (event) => {
|
|
4097
|
+
: translate.t(removeIndex(`${colLabel}.${watchEnum ?? "null"}`)) })), jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsx(PopoverTrigger, {}), jsx(PopoverContent, { portalled: false, children: jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsx(Input, { placeholder: translate.t(`${colLabel}.type_to_search`), onChange: (event) => {
|
|
4098
4098
|
onSearchChange(event);
|
|
4099
4099
|
setOpenSearchResult(true);
|
|
4100
4100
|
}, autoComplete: "off", ref: ref }), jsx(PopoverTitle, {}), showTotalAndLimit && (jsx(Text, { children: `${translate.t(removeIndex(`${colLabel}.total`))}: ${count}, ${translate.t(removeIndex(`${colLabel}.showing`))} ${limit}` })), jsxs(Grid, { overflow: "auto", maxHeight: "20rem", children: [jsx(Flex, { flexFlow: "column wrap", children: dataList
|
|
@@ -4681,7 +4681,7 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4681
4681
|
setOpenSearchResult(true);
|
|
4682
4682
|
}, children: translate.t(removeIndex(`${colLabel}.add_more`)) })] })), !isMultiple && (jsx(Button, { variant: "outline", onClick: () => {
|
|
4683
4683
|
setOpenSearchResult(true);
|
|
4684
|
-
}, justifyContent: "start", children: queryDefault.isLoading ? jsx(Spinner, { size: "sm" }) : getPickedValue() })), jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsx(PopoverTrigger, {}), jsx(PopoverContent, { children: jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsx(Input, { placeholder: translate.t(removeIndex(`${colLabel}.type_to_search`)), onChange: onSearchChange, autoComplete: "off", ref: ref, value: searchText }), jsx(PopoverTitle, {}), openSearchResult && (jsxs(Fragment, { children: [(isFetching || isLoading || isPending) && jsx(Spinner, {}), isError && (jsx(Icon, { color: "red.400", children: jsx(BiError, {}) })), jsxs(Flex, { justifyContent: "space-between", alignItems: "center", children: [jsxs(Flex, { alignItems: "center", gap: "2", children: [jsx(InfoTip, { children: `${translate.t(removeIndex(`${colLabel}.total`))} ${count}, ${translate.t(removeIndex(`${colLabel}.showing`))} ${limit} ${translate.t(removeIndex(`${colLabel}.per_page`), "per page")}` }), jsxs(Text, { fontSize: "sm", fontWeight: "bold", children: [count, jsxs(Text, { as: "span", fontSize: "xs", ml: "1", color: "gray.500", children: ["/ ", count > 0 ? `${page * limit + 1}-${Math.min((page + 1) * limit, count)}` : '0'] })] })] }), jsx(Box, { children: jsxs("select", { value: limit, onChange: handleLimitChange, style: {
|
|
4684
|
+
}, justifyContent: "start", children: queryDefault.isLoading ? jsx(Spinner, { size: "sm" }) : getPickedValue() })), jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsx(PopoverTrigger, {}), jsx(PopoverContent, { portalled: false, children: jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsx(Input, { placeholder: translate.t(removeIndex(`${colLabel}.type_to_search`)), onChange: onSearchChange, autoComplete: "off", ref: ref, value: searchText }), jsx(PopoverTitle, {}), openSearchResult && (jsxs(Fragment, { children: [(isFetching || isLoading || isPending) && jsx(Spinner, {}), isError && (jsx(Icon, { color: "red.400", children: jsx(BiError, {}) })), jsxs(Flex, { justifyContent: "space-between", alignItems: "center", children: [jsxs(Flex, { alignItems: "center", gap: "2", children: [jsx(InfoTip, { children: `${translate.t(removeIndex(`${colLabel}.total`))} ${count}, ${translate.t(removeIndex(`${colLabel}.showing`))} ${limit} ${translate.t(removeIndex(`${colLabel}.per_page`), "per page")}` }), jsxs(Text, { fontSize: "sm", fontWeight: "bold", children: [count, jsxs(Text, { as: "span", fontSize: "xs", ml: "1", color: "gray.500", children: ["/ ", count > 0 ? `${page * limit + 1}-${Math.min((page + 1) * limit, count)}` : '0'] })] })] }), jsx(Box, { children: jsxs("select", { value: limit, onChange: handleLimitChange, style: {
|
|
4685
4685
|
padding: "4px 8px",
|
|
4686
4686
|
borderRadius: "4px",
|
|
4687
4687
|
border: "1px solid #ccc",
|
|
@@ -5011,99 +5011,130 @@ const TextAreaInput = ({ column, schema, prefix, }) => {
|
|
|
5011
5011
|
function TimePicker$1({ hour, setHour, minute, setMinute, meridiem, setMeridiem, meridiemLabel = {
|
|
5012
5012
|
am: "am",
|
|
5013
5013
|
pm: "pm",
|
|
5014
|
-
}, onChange = (_newValue) => { }, }) {
|
|
5015
|
-
|
|
5016
|
-
|
|
5017
|
-
|
|
5018
|
-
|
|
5019
|
-
|
|
5020
|
-
|
|
5021
|
-
|
|
5022
|
-
|
|
5023
|
-
|
|
5024
|
-
if (
|
|
5025
|
-
|
|
5014
|
+
}, onChange = (_newValue) => { }, timezone = "Asia/Hong_Kong", }) {
|
|
5015
|
+
const handleClear = () => {
|
|
5016
|
+
setHour(null);
|
|
5017
|
+
setMinute(null);
|
|
5018
|
+
setMeridiem(null);
|
|
5019
|
+
setInputValue("");
|
|
5020
|
+
setShowInput(false);
|
|
5021
|
+
onChange({ hour: null, minute: null, meridiem: null });
|
|
5022
|
+
};
|
|
5023
|
+
const getTimeString = (hour, minute, meridiem) => {
|
|
5024
|
+
if (hour === null || minute === null || meridiem === null) {
|
|
5025
|
+
return "";
|
|
5026
|
+
}
|
|
5027
|
+
// if the hour is 24, set the hour to 0
|
|
5028
|
+
if (hour === 24) {
|
|
5029
|
+
return dayjs().tz(timezone).hour(0).minute(minute).format("HH:mmZ");
|
|
5030
|
+
}
|
|
5031
|
+
// use dayjs to format the time at current timezone
|
|
5032
|
+
// if meridiem is pm, add 12 hours
|
|
5033
|
+
let newHour = hour;
|
|
5034
|
+
if (meridiem === "pm" && hour !== 12) {
|
|
5035
|
+
newHour = hour + 12;
|
|
5036
|
+
}
|
|
5037
|
+
// if the hour is 12, set the meridiem to am, and set the hour to 0
|
|
5038
|
+
else if (meridiem === "am" && hour === 12) {
|
|
5039
|
+
newHour = 0;
|
|
5040
|
+
}
|
|
5041
|
+
return dayjs().tz(timezone).hour(newHour).minute(minute).format("HH:mmZ");
|
|
5042
|
+
};
|
|
5043
|
+
const stringTime = getTimeString(hour, minute, meridiem);
|
|
5044
|
+
const [inputValue, setInputValue] = useState("");
|
|
5045
|
+
const [showInput, setShowInput] = useState(false);
|
|
5046
|
+
const handleBlur = (text) => {
|
|
5047
|
+
// ignore all non-numeric characters
|
|
5048
|
+
if (!text) {
|
|
5026
5049
|
return;
|
|
5027
5050
|
}
|
|
5028
|
-
|
|
5029
|
-
|
|
5030
|
-
|
|
5051
|
+
const value = text.replace(/[^0-9apm]/g, "");
|
|
5052
|
+
if (value === "") {
|
|
5053
|
+
handleClear();
|
|
5031
5054
|
return;
|
|
5032
5055
|
}
|
|
5033
|
-
if
|
|
5034
|
-
|
|
5035
|
-
|
|
5036
|
-
|
|
5037
|
-
|
|
5038
|
-
|
|
5039
|
-
|
|
5040
|
-
|
|
5056
|
+
// if the value is a valid time, parse it and set the hour, minute, and meridiem
|
|
5057
|
+
// if the value is not a valid time, set the stringTime to the value
|
|
5058
|
+
// first two characters are the hour
|
|
5059
|
+
// next two characters are the minute
|
|
5060
|
+
// final two characters are the meridiem
|
|
5061
|
+
const hour = parseInt(value.slice(0, 2));
|
|
5062
|
+
const minute = parseInt(value.slice(2, 4));
|
|
5063
|
+
const meridiem = value.slice(4, 6);
|
|
5064
|
+
// validate the hour and minute
|
|
5065
|
+
if (isNaN(hour) || isNaN(minute)) {
|
|
5066
|
+
setInputValue("");
|
|
5041
5067
|
return;
|
|
5042
5068
|
}
|
|
5043
|
-
//
|
|
5044
|
-
if (
|
|
5045
|
-
|
|
5046
|
-
|
|
5047
|
-
const numValue = parseInt(newValue, 10);
|
|
5048
|
-
console.log("newValue", newValue, numValue);
|
|
5049
|
-
if (numValue > 12) {
|
|
5050
|
-
const digitValue = parseInt(e.key, 10);
|
|
5051
|
-
setHour(digitValue);
|
|
5052
|
-
onChange({ hour: digitValue, minute, meridiem });
|
|
5053
|
-
return;
|
|
5054
|
-
}
|
|
5055
|
-
// Auto-advance to minutes if we have a valid hour (1-12)
|
|
5056
|
-
if (numValue >= 1 && numValue <= 12) {
|
|
5057
|
-
// Set the hour value
|
|
5058
|
-
setHour(numValue);
|
|
5059
|
-
onChange({ hour: numValue, minute, meridiem });
|
|
5060
|
-
// Move to minute input
|
|
5061
|
-
e.preventDefault();
|
|
5062
|
-
minuteInputRef.current?.focus();
|
|
5063
|
-
}
|
|
5064
|
-
}
|
|
5069
|
+
// if the hour is larger than 24, set the hour to 24
|
|
5070
|
+
if (hour > 24) {
|
|
5071
|
+
setInputValue("");
|
|
5072
|
+
return;
|
|
5065
5073
|
}
|
|
5066
|
-
|
|
5067
|
-
|
|
5068
|
-
|
|
5069
|
-
|
|
5070
|
-
|
|
5071
|
-
|
|
5072
|
-
|
|
5073
|
-
setMinute(digitValue);
|
|
5074
|
-
onChange({ hour, minute: digitValue, meridiem });
|
|
5075
|
-
return;
|
|
5076
|
-
}
|
|
5077
|
-
// Auto-advance to meridiem if we have a valid minute (0-59)
|
|
5078
|
-
if (numValue >= 0 && numValue <= 59) {
|
|
5079
|
-
// Set the minute value
|
|
5080
|
-
setMinute(numValue);
|
|
5081
|
-
onChange({ hour, minute: numValue, meridiem });
|
|
5082
|
-
}
|
|
5083
|
-
}
|
|
5074
|
+
let newHour = hour;
|
|
5075
|
+
let newMinute = minute;
|
|
5076
|
+
let newMeridiem = meridiem;
|
|
5077
|
+
// if the hour is 24, set the meridiem to am, and set the hour to 0
|
|
5078
|
+
if (hour === 24) {
|
|
5079
|
+
newMeridiem = "am";
|
|
5080
|
+
newHour = 0;
|
|
5084
5081
|
}
|
|
5082
|
+
// if the hour is greater than 12, set the meridiem to pm, and subtract 12 from the hour
|
|
5083
|
+
else if (hour > 12) {
|
|
5084
|
+
newMeridiem = "pm";
|
|
5085
|
+
newHour = hour - 12;
|
|
5086
|
+
}
|
|
5087
|
+
// if the hour is 12, set the meridiem to pm, and set the hour to 12
|
|
5088
|
+
else if (hour === 12) {
|
|
5089
|
+
newMeridiem = "pm";
|
|
5090
|
+
newHour = 12;
|
|
5091
|
+
}
|
|
5092
|
+
// if the hour is 0, set the meridiem to am, and set the hour to 12
|
|
5093
|
+
else if (hour === 0) {
|
|
5094
|
+
newMeridiem = "am";
|
|
5095
|
+
newHour = 12;
|
|
5096
|
+
}
|
|
5097
|
+
else {
|
|
5098
|
+
newMeridiem = meridiem ?? "am";
|
|
5099
|
+
newHour = hour;
|
|
5100
|
+
}
|
|
5101
|
+
if (minute > 59) {
|
|
5102
|
+
newMinute = 0;
|
|
5103
|
+
}
|
|
5104
|
+
else {
|
|
5105
|
+
newMinute = minute;
|
|
5106
|
+
}
|
|
5107
|
+
onChange({
|
|
5108
|
+
hour: newHour,
|
|
5109
|
+
minute: newMinute,
|
|
5110
|
+
meridiem: newMeridiem,
|
|
5111
|
+
});
|
|
5112
|
+
setShowInput(false);
|
|
5085
5113
|
};
|
|
5086
|
-
|
|
5087
|
-
|
|
5088
|
-
|
|
5089
|
-
|
|
5090
|
-
};
|
|
5091
|
-
const handleClear = () => {
|
|
5092
|
-
setHour(null);
|
|
5093
|
-
setMinute(null);
|
|
5094
|
-
setMeridiem(null);
|
|
5095
|
-
onChange({ hour: null, minute: null, meridiem: null });
|
|
5096
|
-
// Focus the hour field after clearing
|
|
5097
|
-
hourInputRef.current?.focus();
|
|
5114
|
+
const handleKeyDown = (e) => {
|
|
5115
|
+
if (e.key === "Enter") {
|
|
5116
|
+
handleBlur(e.currentTarget.value);
|
|
5117
|
+
}
|
|
5098
5118
|
};
|
|
5099
|
-
|
|
5119
|
+
const inputRef = useRef(null);
|
|
5120
|
+
return (jsxs(Grid, { justifyContent: "center", alignItems: "center", templateColumns: "200px auto", gap: "2", width: "auto", minWidth: "250px", children: [jsx(Input, { onKeyDown: handleKeyDown, onChange: (e) => {
|
|
5121
|
+
setInputValue(e.currentTarget.value);
|
|
5122
|
+
}, onBlur: (e) => {
|
|
5123
|
+
handleBlur(e.currentTarget.value);
|
|
5124
|
+
}, value: inputValue, display: showInput ? undefined : "none", ref: inputRef }), jsxs(Button$1, { onClick: () => {
|
|
5125
|
+
setShowInput(true);
|
|
5126
|
+
setInputValue(dayjs(`1970-01-01T${getTimeString(hour, minute, meridiem)}`, "hh:mmZ").format("hh:mm a"));
|
|
5127
|
+
inputRef.current?.focus();
|
|
5128
|
+
}, display: showInput ? "none" : "flex", alignItems: "center", justifyContent: "start", variant: "outline", gap: 2, children: [jsx(Icon, { size: "sm", children: jsx(BsClock, {}) }), jsx(Text, { fontSize: "sm", children: stringTime
|
|
5129
|
+
? dayjs(`1970-01-01T${stringTime}`, "hh:mmZ").format("hh:mm a")
|
|
5130
|
+
: "" })] }), jsx(Button$1, { onClick: handleClear, size: "sm", variant: "ghost", children: jsx(MdCancel, {}) })] }));
|
|
5100
5131
|
}
|
|
5101
5132
|
|
|
5102
5133
|
dayjs.extend(timezone);
|
|
5103
5134
|
const TimePicker = ({ column, schema, prefix }) => {
|
|
5104
5135
|
const { watch, formState: { errors }, setValue, } = useFormContext();
|
|
5105
5136
|
const { translate, timezone } = useSchemaContext();
|
|
5106
|
-
const { required, gridColumn = "span 4", gridRow = "span 1", timeFormat = "HH:
|
|
5137
|
+
const { required, gridColumn = "span 4", gridRow = "span 1", timeFormat = "HH:mmZ", displayTimeFormat = "hh:mm A", } = schema;
|
|
5107
5138
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
5108
5139
|
const colLabel = `${prefix}${column}`;
|
|
5109
5140
|
const [open, setOpen] = useState(false);
|
|
@@ -5111,13 +5142,14 @@ const TimePicker = ({ column, schema, prefix }) => {
|
|
|
5111
5142
|
const displayedTime = dayjs(`1970-01-01T${value}`).tz(timezone).isValid()
|
|
5112
5143
|
? dayjs(`1970-01-01T${value}`).tz(timezone).format(displayTimeFormat)
|
|
5113
5144
|
: "";
|
|
5114
|
-
// Parse the initial time parts from the
|
|
5115
|
-
const parseTime = (
|
|
5116
|
-
if (!
|
|
5145
|
+
// Parse the initial time parts from the time string (HH:mm:ssZ)
|
|
5146
|
+
const parseTime = (time) => {
|
|
5147
|
+
if (!time)
|
|
5117
5148
|
return { hour: 12, minute: 0, meridiem: "am" };
|
|
5118
|
-
const parsed = dayjs(`1970-01-01T${
|
|
5119
|
-
if (!parsed.isValid())
|
|
5149
|
+
const parsed = dayjs(`1970-01-01T${time}`).tz(timezone);
|
|
5150
|
+
if (!parsed.isValid()) {
|
|
5120
5151
|
return { hour: 12, minute: 0, meridiem: "am" };
|
|
5152
|
+
}
|
|
5121
5153
|
let hour = parsed.hour();
|
|
5122
5154
|
const minute = parsed.minute();
|
|
5123
5155
|
const meridiem = hour >= 12 ? "pm" : "am";
|
|
@@ -5137,35 +5169,30 @@ const TimePicker = ({ column, schema, prefix }) => {
|
|
|
5137
5169
|
setMinute(minute);
|
|
5138
5170
|
setMeridiem(meridiem);
|
|
5139
5171
|
}, [value]);
|
|
5140
|
-
|
|
5141
|
-
const toIsoTime = (hour, minute, meridiem) => {
|
|
5172
|
+
const getTimeString = (hour, minute, meridiem) => {
|
|
5142
5173
|
if (hour === null || minute === null || meridiem === null)
|
|
5143
5174
|
return null;
|
|
5144
|
-
let
|
|
5145
|
-
if (meridiem === "
|
|
5146
|
-
|
|
5147
|
-
|
|
5148
|
-
|
|
5149
|
-
return dayjs(`1970-01-01T${h.toString().padStart(2, "0")}:${minute.toString().padStart(2, "0")}:00`)
|
|
5150
|
-
.tz(timezone)
|
|
5151
|
-
.format(timeFormat);
|
|
5175
|
+
let newHour = hour;
|
|
5176
|
+
if (meridiem === "pm" && hour !== 12) {
|
|
5177
|
+
newHour = hour + 12;
|
|
5178
|
+
}
|
|
5179
|
+
return dayjs().tz(timezone).hour(newHour).minute(minute).format(timeFormat);
|
|
5152
5180
|
};
|
|
5153
5181
|
// Handle changes to time parts
|
|
5154
5182
|
const handleTimeChange = ({ hour: newHour, minute: newMinute, meridiem: newMeridiem, }) => {
|
|
5155
5183
|
setHour(newHour);
|
|
5156
5184
|
setMinute(newMinute);
|
|
5157
5185
|
setMeridiem(newMeridiem);
|
|
5158
|
-
const
|
|
5159
|
-
setValue(colLabel,
|
|
5186
|
+
const timeString = getTimeString(newHour, newMinute, newMeridiem);
|
|
5187
|
+
setValue(colLabel, timeString, { shouldValidate: true, shouldDirty: true });
|
|
5160
5188
|
};
|
|
5161
|
-
const containerRef = useRef(null);
|
|
5162
5189
|
return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
5163
5190
|
gridRow, children: [jsxs(Popover.Root, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsx(Popover.Trigger, { asChild: true, children: jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
|
|
5164
5191
|
setOpen(true);
|
|
5165
|
-
}, justifyContent: "start", children: [jsx(IoMdClock, {}), !!value ? `${displayedTime}` : ""] }) }), jsx(
|
|
5166
|
-
|
|
5167
|
-
|
|
5168
|
-
|
|
5192
|
+
}, justifyContent: "start", children: [jsx(IoMdClock, {}), !!value ? `${displayedTime}` : ""] }) }), jsx(Popover.Positioner, { children: jsx(Popover.Content, { children: jsx(Popover.Body, { children: jsx(TimePicker$1, { hour: hour, setHour: setHour, minute: minute, setMinute: setMinute, meridiem: meridiem, setMeridiem: setMeridiem, onChange: handleTimeChange, meridiemLabel: {
|
|
5193
|
+
am: translate.t(`common.am`, { defaultValue: "AM" }),
|
|
5194
|
+
pm: translate.t(`common.pm`, { defaultValue: "PM" }),
|
|
5195
|
+
} }) }) }) })] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
5169
5196
|
};
|
|
5170
5197
|
|
|
5171
5198
|
function IsoTimePicker({ hour, setHour, minute, setMinute, second, setSecond, onChange = (_newValue) => { }, }) {
|
|
@@ -15,6 +15,7 @@ interface TimePickerProps {
|
|
|
15
15
|
am: string;
|
|
16
16
|
pm: string;
|
|
17
17
|
};
|
|
18
|
+
timezone?: string;
|
|
18
19
|
}
|
|
19
|
-
export declare function TimePicker({ hour, setHour, minute, setMinute, meridiem, setMeridiem, meridiemLabel, onChange, }: TimePickerProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export declare function TimePicker({ hour, setHour, minute, setMinute, meridiem, setMeridiem, meridiemLabel, onChange, timezone, }: TimePickerProps): import("react/jsx-runtime").JSX.Element;
|
|
20
21
|
export {};
|