@underverse-ui/underverse 1.0.130 → 1.0.132
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/api-reference.json +1 -1
- package/dist/index.cjs +380 -56
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.js +380 -56
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6043,12 +6043,12 @@ var Popover = ({
|
|
|
6043
6043
|
top: 0,
|
|
6044
6044
|
left: 0,
|
|
6045
6045
|
transform: "translate3d(0, 0, 0)",
|
|
6046
|
-
zIndex:
|
|
6046
|
+
zIndex: 99999,
|
|
6047
6047
|
visibility: "hidden",
|
|
6048
6048
|
pointerEvents: "none",
|
|
6049
6049
|
willChange: "transform"
|
|
6050
6050
|
},
|
|
6051
|
-
className: "z-
|
|
6051
|
+
className: "z-[99999]",
|
|
6052
6052
|
children: /* @__PURE__ */ jsx23(
|
|
6053
6053
|
"div",
|
|
6054
6054
|
{
|
|
@@ -8331,7 +8331,8 @@ __export(date_exports, {
|
|
|
8331
8331
|
formatTimeAgo: () => formatTimeAgo,
|
|
8332
8332
|
getDayOfWeek: () => getDayOfWeek,
|
|
8333
8333
|
isToday: () => isToday,
|
|
8334
|
-
isYesterday: () => isYesterday
|
|
8334
|
+
isYesterday: () => isYesterday,
|
|
8335
|
+
parseDateString: () => parseDateString
|
|
8335
8336
|
});
|
|
8336
8337
|
var localeMap = {
|
|
8337
8338
|
en: "en-US",
|
|
@@ -8530,6 +8531,44 @@ function formatDateSmart(date, locale = "en") {
|
|
|
8530
8531
|
}
|
|
8531
8532
|
return formatDateTime(date, locale);
|
|
8532
8533
|
}
|
|
8534
|
+
function parseDateString(str, locale = "en") {
|
|
8535
|
+
if (!str) return null;
|
|
8536
|
+
const cleaned = str.trim();
|
|
8537
|
+
if (!cleaned) return null;
|
|
8538
|
+
const parts = cleaned.split(/[\/\-\.\s]+/).filter(Boolean);
|
|
8539
|
+
if (parts.length !== 3) return null;
|
|
8540
|
+
let day = 0;
|
|
8541
|
+
let month = 0;
|
|
8542
|
+
let year = 0;
|
|
8543
|
+
if (locale === "vi") {
|
|
8544
|
+
day = parseInt(parts[0], 10);
|
|
8545
|
+
month = parseInt(parts[1], 10);
|
|
8546
|
+
year = parseInt(parts[2], 10);
|
|
8547
|
+
} else if (locale === "ja" || locale === "ko") {
|
|
8548
|
+
year = parseInt(parts[0], 10);
|
|
8549
|
+
month = parseInt(parts[1], 10);
|
|
8550
|
+
day = parseInt(parts[2], 10);
|
|
8551
|
+
} else {
|
|
8552
|
+
if (parts[0].length === 4) {
|
|
8553
|
+
year = parseInt(parts[0], 10);
|
|
8554
|
+
month = parseInt(parts[1], 10);
|
|
8555
|
+
day = parseInt(parts[2], 10);
|
|
8556
|
+
} else {
|
|
8557
|
+
month = parseInt(parts[0], 10);
|
|
8558
|
+
day = parseInt(parts[1], 10);
|
|
8559
|
+
year = parseInt(parts[2], 10);
|
|
8560
|
+
}
|
|
8561
|
+
}
|
|
8562
|
+
if (isNaN(day) || isNaN(month) || isNaN(year)) return null;
|
|
8563
|
+
if (year < 100) {
|
|
8564
|
+
year += year >= 50 ? 1900 : 2e3;
|
|
8565
|
+
}
|
|
8566
|
+
const parsedDate = new Date(year, month - 1, day);
|
|
8567
|
+
if (parsedDate.getFullYear() === year && parsedDate.getMonth() === month - 1 && parsedDate.getDate() === day) {
|
|
8568
|
+
return parsedDate;
|
|
8569
|
+
}
|
|
8570
|
+
return null;
|
|
8571
|
+
}
|
|
8533
8572
|
|
|
8534
8573
|
// src/components/DatePicker.tsx
|
|
8535
8574
|
import { Calendar, ChevronLeft as ChevronLeft2, ChevronRight as ChevronRight3, Sparkles, X as XIcon } from "lucide-react";
|
|
@@ -8562,8 +8601,83 @@ var DatePicker = ({
|
|
|
8562
8601
|
const [viewMode, setViewMode] = React30.useState("calendar");
|
|
8563
8602
|
const [localRequiredError, setLocalRequiredError] = React30.useState();
|
|
8564
8603
|
const triggerRef = React30.useRef(null);
|
|
8604
|
+
const inputRef = React30.useRef(null);
|
|
8565
8605
|
const wheelContainerRef = React30.useRef(null);
|
|
8566
8606
|
const wheelDeltaRef = React30.useRef(0);
|
|
8607
|
+
const [isFocused, setIsFocused] = React30.useState(false);
|
|
8608
|
+
const [inputValue, setInputValue] = React30.useState("");
|
|
8609
|
+
React30.useEffect(() => {
|
|
8610
|
+
if (value) {
|
|
8611
|
+
const parsed = parseDateString(inputValue, locale);
|
|
8612
|
+
const isSame = parsed && parsed.getTime() === value.getTime();
|
|
8613
|
+
if (!isSame) {
|
|
8614
|
+
setInputValue(formatDateShort(value, locale));
|
|
8615
|
+
}
|
|
8616
|
+
} else if (!isFocused) {
|
|
8617
|
+
setInputValue("");
|
|
8618
|
+
}
|
|
8619
|
+
}, [value, locale, isFocused]);
|
|
8620
|
+
const handleInputChange = (e) => {
|
|
8621
|
+
const text = e.target.value;
|
|
8622
|
+
setInputValue(text);
|
|
8623
|
+
const parsedDate = parseDateString(text, locale);
|
|
8624
|
+
if (parsedDate) {
|
|
8625
|
+
if (!isDateDisabled(parsedDate)) {
|
|
8626
|
+
onChange(parsedDate);
|
|
8627
|
+
setViewDate(parsedDate);
|
|
8628
|
+
setLocalRequiredError(void 0);
|
|
8629
|
+
}
|
|
8630
|
+
}
|
|
8631
|
+
};
|
|
8632
|
+
const handleInputBlur = () => {
|
|
8633
|
+
setIsFocused(false);
|
|
8634
|
+
if (!inputValue.trim()) {
|
|
8635
|
+
if (required) {
|
|
8636
|
+
setLocalRequiredError(tv("required"));
|
|
8637
|
+
} else {
|
|
8638
|
+
onChange(void 0);
|
|
8639
|
+
setLocalRequiredError(void 0);
|
|
8640
|
+
}
|
|
8641
|
+
} else {
|
|
8642
|
+
const parsedDate = parseDateString(inputValue, locale);
|
|
8643
|
+
if (parsedDate && !isDateDisabled(parsedDate)) {
|
|
8644
|
+
onChange(parsedDate);
|
|
8645
|
+
setInputValue(formatDateShort(parsedDate, locale));
|
|
8646
|
+
setLocalRequiredError(void 0);
|
|
8647
|
+
} else {
|
|
8648
|
+
if (value) {
|
|
8649
|
+
setInputValue(formatDateShort(value, locale));
|
|
8650
|
+
setLocalRequiredError(void 0);
|
|
8651
|
+
} else {
|
|
8652
|
+
setInputValue("");
|
|
8653
|
+
if (required) {
|
|
8654
|
+
setLocalRequiredError(tv("required"));
|
|
8655
|
+
}
|
|
8656
|
+
}
|
|
8657
|
+
}
|
|
8658
|
+
}
|
|
8659
|
+
};
|
|
8660
|
+
const handleInputKeyDown = (e) => {
|
|
8661
|
+
if (e.key === "Enter") {
|
|
8662
|
+
e.preventDefault();
|
|
8663
|
+
const parsedDate = parseDateString(inputValue, locale);
|
|
8664
|
+
if (parsedDate && !isDateDisabled(parsedDate)) {
|
|
8665
|
+
onChange(parsedDate);
|
|
8666
|
+
setInputValue(formatDateShort(parsedDate, locale));
|
|
8667
|
+
setViewDate(parsedDate);
|
|
8668
|
+
setIsOpen(false);
|
|
8669
|
+
setLocalRequiredError(void 0);
|
|
8670
|
+
} else if (!inputValue.trim() && !required) {
|
|
8671
|
+
onChange(void 0);
|
|
8672
|
+
setIsOpen(false);
|
|
8673
|
+
setLocalRequiredError(void 0);
|
|
8674
|
+
} else {
|
|
8675
|
+
setIsOpen(false);
|
|
8676
|
+
}
|
|
8677
|
+
} else if (e.key === "Escape") {
|
|
8678
|
+
setIsOpen(false);
|
|
8679
|
+
}
|
|
8680
|
+
};
|
|
8567
8681
|
const normalizeToLocalDay = React30.useCallback((date) => {
|
|
8568
8682
|
if (!date) return null;
|
|
8569
8683
|
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
@@ -8954,7 +9068,7 @@ var DatePicker = ({
|
|
|
8954
9068
|
{
|
|
8955
9069
|
id: labelId,
|
|
8956
9070
|
htmlFor: resolvedId,
|
|
8957
|
-
onClick: () =>
|
|
9071
|
+
onClick: () => inputRef.current?.focus(),
|
|
8958
9072
|
className: cn(
|
|
8959
9073
|
labelSize,
|
|
8960
9074
|
"font-semibold transition-colors duration-300 cursor-pointer",
|
|
@@ -9003,12 +9117,12 @@ var DatePicker = ({
|
|
|
9003
9117
|
"animate-in fade-in-0 zoom-in-95 slide-in-from-top-2 duration-300"
|
|
9004
9118
|
),
|
|
9005
9119
|
trigger: /* @__PURE__ */ jsxs24(
|
|
9006
|
-
"
|
|
9120
|
+
"div",
|
|
9007
9121
|
{
|
|
9008
9122
|
ref: triggerRef,
|
|
9009
|
-
type: "button",
|
|
9010
|
-
disabled,
|
|
9011
9123
|
id: resolvedId,
|
|
9124
|
+
role: "button",
|
|
9125
|
+
"aria-label": value ? formatDateDisplay(value) : placeholder || t("placeholder"),
|
|
9012
9126
|
"aria-labelledby": labelId,
|
|
9013
9127
|
"aria-required": required,
|
|
9014
9128
|
"aria-invalid": !!effectiveError,
|
|
@@ -9016,17 +9130,18 @@ var DatePicker = ({
|
|
|
9016
9130
|
"group flex w-full items-center justify-between border bg-background/80 backdrop-blur-sm",
|
|
9017
9131
|
"rounded-full",
|
|
9018
9132
|
sizeStyles8[size].trigger,
|
|
9019
|
-
"border-border/
|
|
9020
|
-
|
|
9021
|
-
|
|
9022
|
-
|
|
9133
|
+
disabled ? "border-border/40 opacity-50 cursor-not-allowed" : [
|
|
9134
|
+
"border-border/60 hover:border-primary/40",
|
|
9135
|
+
"focus-within:ring-2 focus-within:ring-primary/50 focus-within:ring-offset-2 focus-within:ring-offset-background focus-within:border-transparent focus-within:hover:border-transparent",
|
|
9136
|
+
"hover:bg-accent/10 hover:shadow-lg hover:shadow-primary/5 hover:-translate-y-0.5"
|
|
9137
|
+
],
|
|
9023
9138
|
"transition-all duration-300 ease-out",
|
|
9024
|
-
isOpen && "ring-2 ring-primary/30 border-primary/50 shadow-lg shadow-primary/10",
|
|
9025
|
-
effectiveError && "border-destructive/60 focus-
|
|
9139
|
+
isOpen && !isFocused && "ring-2 ring-primary/30 border-primary/50 shadow-lg shadow-primary/10",
|
|
9140
|
+
effectiveError && "border-destructive/60 focus-within:ring-destructive/50 bg-destructive/5",
|
|
9026
9141
|
className
|
|
9027
9142
|
),
|
|
9028
9143
|
children: [
|
|
9029
|
-
/* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-2.5", children: [
|
|
9144
|
+
/* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-2.5 flex-1 min-w-0", children: [
|
|
9030
9145
|
/* @__PURE__ */ jsx35(
|
|
9031
9146
|
"div",
|
|
9032
9147
|
{
|
|
@@ -9038,14 +9153,31 @@ var DatePicker = ({
|
|
|
9038
9153
|
}
|
|
9039
9154
|
),
|
|
9040
9155
|
/* @__PURE__ */ jsx35(
|
|
9041
|
-
"
|
|
9156
|
+
"input",
|
|
9042
9157
|
{
|
|
9043
|
-
|
|
9044
|
-
|
|
9158
|
+
ref: inputRef,
|
|
9159
|
+
type: "text",
|
|
9160
|
+
disabled,
|
|
9161
|
+
placeholder: placeholder || t("placeholder"),
|
|
9162
|
+
value: isFocused ? inputValue : value ? formatDateDisplay(value) : "",
|
|
9163
|
+
onChange: handleInputChange,
|
|
9164
|
+
onFocus: () => {
|
|
9165
|
+
setIsFocused(true);
|
|
9166
|
+
if (!disabled) setIsOpen(true);
|
|
9167
|
+
},
|
|
9168
|
+
onBlur: handleInputBlur,
|
|
9169
|
+
onKeyDown: handleInputKeyDown,
|
|
9170
|
+
onClick: (e) => {
|
|
9171
|
+
if (isOpen) {
|
|
9172
|
+
e.stopPropagation();
|
|
9173
|
+
}
|
|
9174
|
+
},
|
|
9175
|
+
className: "w-full bg-transparent border-none outline-none focus:outline-none p-0 text-foreground font-medium placeholder-muted-foreground/60 min-w-0"
|
|
9045
9176
|
}
|
|
9046
|
-
)
|
|
9177
|
+
),
|
|
9178
|
+
/* @__PURE__ */ jsx35("span", { className: "sr-only", children: value ? formatDateDisplay(value) : placeholder || t("placeholder") })
|
|
9047
9179
|
] }),
|
|
9048
|
-
/* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-1", children: [
|
|
9180
|
+
/* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-1 shrink-0", children: [
|
|
9049
9181
|
value && /* @__PURE__ */ jsx35(
|
|
9050
9182
|
"span",
|
|
9051
9183
|
{
|
|
@@ -9105,7 +9237,8 @@ var DateRangePicker = ({
|
|
|
9105
9237
|
disablePastDates = false,
|
|
9106
9238
|
minDate,
|
|
9107
9239
|
maxDate,
|
|
9108
|
-
size = "md"
|
|
9240
|
+
size = "md",
|
|
9241
|
+
disabled = false
|
|
9109
9242
|
}) => {
|
|
9110
9243
|
const locale = useSmartLocale();
|
|
9111
9244
|
const t = useSmartTranslations("DatePicker");
|
|
@@ -9115,6 +9248,165 @@ var DateRangePicker = ({
|
|
|
9115
9248
|
const [localRequiredError, setLocalRequiredError] = React30.useState();
|
|
9116
9249
|
const wheelContainerRef = React30.useRef(null);
|
|
9117
9250
|
const wheelDeltaRef = React30.useRef(0);
|
|
9251
|
+
const triggerRef = React30.useRef(null);
|
|
9252
|
+
const inputRef = React30.useRef(null);
|
|
9253
|
+
const [isFocused, setIsFocused] = React30.useState(false);
|
|
9254
|
+
const [inputValue, setInputValue] = React30.useState("");
|
|
9255
|
+
const todayDate = React30.useMemo(() => {
|
|
9256
|
+
const today = /* @__PURE__ */ new Date();
|
|
9257
|
+
return new Date(today.getFullYear(), today.getMonth(), today.getDate());
|
|
9258
|
+
}, []);
|
|
9259
|
+
const getRangeString = React30.useCallback((s, e) => {
|
|
9260
|
+
if (!s) return "";
|
|
9261
|
+
const startStr = formatDateShort(s, locale);
|
|
9262
|
+
if (!e) return `${startStr} - `;
|
|
9263
|
+
return `${startStr} - ${formatDateShort(e, locale)}`;
|
|
9264
|
+
}, [locale]);
|
|
9265
|
+
React30.useEffect(() => {
|
|
9266
|
+
if (startDate) {
|
|
9267
|
+
const parts = inputValue.split(/\s*-\s*/);
|
|
9268
|
+
const inputStart = parts[0] ? parseDateString(parts[0], locale) : null;
|
|
9269
|
+
const inputEnd = parts[1] ? parseDateString(parts[1], locale) : null;
|
|
9270
|
+
const startSame = inputStart && startDate && inputStart.getTime() === startDate.getTime();
|
|
9271
|
+
const endSame = !endDate && !inputEnd || endDate && inputEnd && endDate.getTime() === inputEnd.getTime();
|
|
9272
|
+
if (!(startSame && endSame)) {
|
|
9273
|
+
setInputValue(getRangeString(startDate, endDate));
|
|
9274
|
+
}
|
|
9275
|
+
} else if (!isFocused) {
|
|
9276
|
+
setInputValue("");
|
|
9277
|
+
}
|
|
9278
|
+
}, [startDate, endDate, locale, isFocused, getRangeString]);
|
|
9279
|
+
const handleInputChange = (e) => {
|
|
9280
|
+
const text = e.target.value;
|
|
9281
|
+
setInputValue(text);
|
|
9282
|
+
const parts = text.split(/\s*-\s*/);
|
|
9283
|
+
if (parts.length === 2) {
|
|
9284
|
+
const s = parseDateString(parts[0], locale);
|
|
9285
|
+
const eVal = parseDateString(parts[1], locale);
|
|
9286
|
+
if (s) {
|
|
9287
|
+
const isStartDisabled = disablePastDates && s < todayDate || !!minDay && s < minDay || !!maxDay && s > maxDay;
|
|
9288
|
+
if (!isStartDisabled) {
|
|
9289
|
+
setTempStart(s);
|
|
9290
|
+
if (eVal) {
|
|
9291
|
+
const isEndDisabled = disablePastDates && eVal < todayDate || !!minDay && eVal < minDay || !!maxDay && eVal > maxDay;
|
|
9292
|
+
if (!isEndDisabled && s <= eVal) {
|
|
9293
|
+
setTempEnd(eVal);
|
|
9294
|
+
onChange(s, eVal);
|
|
9295
|
+
setViewDate(s);
|
|
9296
|
+
setLocalRequiredError(void 0);
|
|
9297
|
+
} else {
|
|
9298
|
+
setTempEnd(null);
|
|
9299
|
+
onChange(s, null);
|
|
9300
|
+
}
|
|
9301
|
+
} else {
|
|
9302
|
+
setTempEnd(null);
|
|
9303
|
+
onChange(s, null);
|
|
9304
|
+
}
|
|
9305
|
+
}
|
|
9306
|
+
}
|
|
9307
|
+
} else if (parts.length === 1 && parts[0].trim()) {
|
|
9308
|
+
const s = parseDateString(parts[0], locale);
|
|
9309
|
+
if (s) {
|
|
9310
|
+
const isStartDisabled = disablePastDates && s < todayDate || !!minDay && s < minDay || !!maxDay && s > maxDay;
|
|
9311
|
+
if (!isStartDisabled) {
|
|
9312
|
+
setTempStart(s);
|
|
9313
|
+
setTempEnd(null);
|
|
9314
|
+
onChange(s, null);
|
|
9315
|
+
}
|
|
9316
|
+
}
|
|
9317
|
+
}
|
|
9318
|
+
};
|
|
9319
|
+
const handleInputBlur = () => {
|
|
9320
|
+
setIsFocused(false);
|
|
9321
|
+
if (!inputValue.trim()) {
|
|
9322
|
+
if (required) {
|
|
9323
|
+
setLocalRequiredError(tv("required"));
|
|
9324
|
+
} else {
|
|
9325
|
+
setTempStart(null);
|
|
9326
|
+
setTempEnd(null);
|
|
9327
|
+
onChange(void 0, void 0);
|
|
9328
|
+
setLocalRequiredError(void 0);
|
|
9329
|
+
}
|
|
9330
|
+
} else {
|
|
9331
|
+
const parts = inputValue.split(/\s*-\s*/);
|
|
9332
|
+
const s = parts[0] ? parseDateString(parts[0], locale) : null;
|
|
9333
|
+
const eVal = parts[1] ? parseDateString(parts[1], locale) : null;
|
|
9334
|
+
if (s) {
|
|
9335
|
+
const isStartDisabled = disablePastDates && s < todayDate || !!minDay && s < minDay || !!maxDay && s > maxDay;
|
|
9336
|
+
if (!isStartDisabled) {
|
|
9337
|
+
if (eVal) {
|
|
9338
|
+
const isEndDisabled = disablePastDates && eVal < todayDate || !!minDay && eVal < minDay || !!maxDay && eVal > maxDay;
|
|
9339
|
+
if (!isEndDisabled && s <= eVal) {
|
|
9340
|
+
setTempStart(s);
|
|
9341
|
+
setTempEnd(eVal);
|
|
9342
|
+
onChange(s, eVal);
|
|
9343
|
+
setInputValue(getRangeString(s, eVal));
|
|
9344
|
+
setLocalRequiredError(void 0);
|
|
9345
|
+
return;
|
|
9346
|
+
}
|
|
9347
|
+
} else {
|
|
9348
|
+
setTempStart(s);
|
|
9349
|
+
setTempEnd(null);
|
|
9350
|
+
onChange(s, null);
|
|
9351
|
+
setInputValue(getRangeString(s, null));
|
|
9352
|
+
setLocalRequiredError(void 0);
|
|
9353
|
+
return;
|
|
9354
|
+
}
|
|
9355
|
+
}
|
|
9356
|
+
}
|
|
9357
|
+
if (startDate) {
|
|
9358
|
+
setTempStart(normalizeToLocal(startDate));
|
|
9359
|
+
setTempEnd(normalizeToLocal(endDate));
|
|
9360
|
+
setInputValue(getRangeString(startDate, endDate));
|
|
9361
|
+
setLocalRequiredError(void 0);
|
|
9362
|
+
} else {
|
|
9363
|
+
setTempStart(null);
|
|
9364
|
+
setTempEnd(null);
|
|
9365
|
+
setInputValue("");
|
|
9366
|
+
if (required) {
|
|
9367
|
+
setLocalRequiredError(tv("required"));
|
|
9368
|
+
}
|
|
9369
|
+
}
|
|
9370
|
+
}
|
|
9371
|
+
};
|
|
9372
|
+
const handleInputKeyDown = (e) => {
|
|
9373
|
+
if (e.key === "Enter") {
|
|
9374
|
+
e.preventDefault();
|
|
9375
|
+
const parts = inputValue.split(/\s*-\s*/);
|
|
9376
|
+
const s = parts[0] ? parseDateString(parts[0], locale) : null;
|
|
9377
|
+
const eVal = parts[1] ? parseDateString(parts[1], locale) : null;
|
|
9378
|
+
if (s) {
|
|
9379
|
+
const isStartDisabled = disablePastDates && s < todayDate || !!minDay && s < minDay || !!maxDay && s > maxDay;
|
|
9380
|
+
if (!isStartDisabled) {
|
|
9381
|
+
if (eVal) {
|
|
9382
|
+
const isEndDisabled = disablePastDates && eVal < todayDate || !!minDay && eVal < minDay || !!maxDay && eVal > maxDay;
|
|
9383
|
+
if (!isEndDisabled && s <= eVal) {
|
|
9384
|
+
setTempStart(s);
|
|
9385
|
+
setTempEnd(eVal);
|
|
9386
|
+
onChange(s, eVal);
|
|
9387
|
+
setInputValue(getRangeString(s, eVal));
|
|
9388
|
+
setViewDate(s);
|
|
9389
|
+
setIsOpen(false);
|
|
9390
|
+
setLocalRequiredError(void 0);
|
|
9391
|
+
return;
|
|
9392
|
+
}
|
|
9393
|
+
} else {
|
|
9394
|
+
setTempStart(s);
|
|
9395
|
+
setTempEnd(null);
|
|
9396
|
+
onChange(s, null);
|
|
9397
|
+
setInputValue(getRangeString(s, null));
|
|
9398
|
+
setViewDate(s);
|
|
9399
|
+
setIsOpen(false);
|
|
9400
|
+
setLocalRequiredError(void 0);
|
|
9401
|
+
return;
|
|
9402
|
+
}
|
|
9403
|
+
}
|
|
9404
|
+
}
|
|
9405
|
+
setIsOpen(false);
|
|
9406
|
+
} else if (e.key === "Escape") {
|
|
9407
|
+
setIsOpen(false);
|
|
9408
|
+
}
|
|
9409
|
+
};
|
|
9118
9410
|
const sizeStyles8 = {
|
|
9119
9411
|
sm: {
|
|
9120
9412
|
trigger: "px-2.5 py-1.5 text-sm h-8 md:h-7 md:text-xs md:py-1",
|
|
@@ -9393,10 +9685,6 @@ var DateRangePicker = ({
|
|
|
9393
9685
|
);
|
|
9394
9686
|
}) });
|
|
9395
9687
|
};
|
|
9396
|
-
const todayDate = React30.useMemo(() => {
|
|
9397
|
-
const today = /* @__PURE__ */ new Date();
|
|
9398
|
-
return new Date(today.getFullYear(), today.getMonth(), today.getDate());
|
|
9399
|
-
}, []);
|
|
9400
9688
|
const isTodayUnavailable = !!minDay && todayDate < minDay || !!maxDay && todayDate > maxDay;
|
|
9401
9689
|
const panel = /* @__PURE__ */ jsxs24("div", { ref: wheelContainerRef, className: "w-full", children: [
|
|
9402
9690
|
/* @__PURE__ */ jsxs24("div", { className: cn("flex items-center justify-between px-1", sizeStyles8[size].headerMargin), children: [
|
|
@@ -9531,7 +9819,14 @@ var DateRangePicker = ({
|
|
|
9531
9819
|
{
|
|
9532
9820
|
id: labelId,
|
|
9533
9821
|
htmlFor: resolvedId,
|
|
9534
|
-
|
|
9822
|
+
onClick: () => inputRef.current?.focus(),
|
|
9823
|
+
className: cn(
|
|
9824
|
+
size === "sm" ? "text-xs" : size === "lg" ? "text-base" : "text-sm",
|
|
9825
|
+
"font-medium transition-colors duration-300",
|
|
9826
|
+
disabled ? "text-muted-foreground cursor-not-allowed" : "text-foreground group-focus-within:text-primary hover:text-primary cursor-pointer",
|
|
9827
|
+
effectiveError && "text-destructive",
|
|
9828
|
+
labelClassName
|
|
9829
|
+
),
|
|
9535
9830
|
children: [
|
|
9536
9831
|
label,
|
|
9537
9832
|
required && /* @__PURE__ */ jsx35("span", { className: "text-destructive ml-1", children: "*" })
|
|
@@ -9547,6 +9842,7 @@ var DateRangePicker = ({
|
|
|
9547
9842
|
onChange: () => {
|
|
9548
9843
|
},
|
|
9549
9844
|
required,
|
|
9845
|
+
disabled,
|
|
9550
9846
|
onInvalid: (e) => {
|
|
9551
9847
|
e.preventDefault();
|
|
9552
9848
|
setLocalRequiredError(tv("required"));
|
|
@@ -9560,6 +9856,7 @@ var DateRangePicker = ({
|
|
|
9560
9856
|
open: isOpen,
|
|
9561
9857
|
onOpenChange: setIsOpen,
|
|
9562
9858
|
placement: "bottom-start",
|
|
9859
|
+
disabled,
|
|
9563
9860
|
contentWidth: sizeStyles8[size].contentWidth,
|
|
9564
9861
|
contentClassName: cn(
|
|
9565
9862
|
"p-0",
|
|
@@ -9570,25 +9867,29 @@ var DateRangePicker = ({
|
|
|
9570
9867
|
"animate-in fade-in-0 zoom-in-95 slide-in-from-top-2 duration-300"
|
|
9571
9868
|
),
|
|
9572
9869
|
trigger: /* @__PURE__ */ jsxs24(
|
|
9573
|
-
"
|
|
9870
|
+
"div",
|
|
9574
9871
|
{
|
|
9872
|
+
ref: triggerRef,
|
|
9575
9873
|
id: resolvedId,
|
|
9576
|
-
|
|
9874
|
+
role: "button",
|
|
9875
|
+
"aria-label": tempStart ? displayLabel : placeholder,
|
|
9577
9876
|
"aria-labelledby": labelId,
|
|
9578
9877
|
"aria-required": required,
|
|
9579
9878
|
"aria-invalid": !!effectiveError,
|
|
9580
9879
|
className: cn(
|
|
9581
9880
|
"group flex w-full items-center justify-between rounded-full border bg-background/80 backdrop-blur-sm",
|
|
9582
9881
|
sizeStyles8[size].trigger,
|
|
9583
|
-
"border-border/
|
|
9584
|
-
|
|
9585
|
-
|
|
9882
|
+
disabled ? "border-border/40 opacity-50 cursor-not-allowed" : [
|
|
9883
|
+
"border-border/60 hover:border-primary/40",
|
|
9884
|
+
"focus-within:ring-2 focus-within:ring-primary/50 focus-within:ring-offset-2 focus-within:ring-offset-background focus-within:border-transparent focus-within:hover:border-transparent",
|
|
9885
|
+
"hover:bg-accent/10 hover:shadow-lg hover:shadow-primary/5 hover:-translate-y-0.5"
|
|
9886
|
+
],
|
|
9586
9887
|
"transition-all duration-300 ease-out",
|
|
9587
|
-
isOpen && "ring-2 ring-primary/30 border-primary/50 shadow-lg shadow-primary/10",
|
|
9588
|
-
effectiveError && "border-destructive/60 focus-
|
|
9888
|
+
isOpen && !isFocused && "ring-2 ring-primary/30 border-primary/50 shadow-lg shadow-primary/10",
|
|
9889
|
+
effectiveError && "border-destructive/60 focus-within:ring-destructive/50 bg-destructive/5"
|
|
9589
9890
|
),
|
|
9590
9891
|
children: [
|
|
9591
|
-
/* @__PURE__ */ jsxs24("div", { className: cn("flex items-center", size === "sm" ? "gap-1.5" : "gap-2.5"), children: [
|
|
9892
|
+
/* @__PURE__ */ jsxs24("div", { className: cn("flex items-center flex-1 min-w-0", size === "sm" ? "gap-1.5" : "gap-2.5"), children: [
|
|
9592
9893
|
/* @__PURE__ */ jsx35(
|
|
9593
9894
|
"div",
|
|
9594
9895
|
{
|
|
@@ -9600,16 +9901,29 @@ var DateRangePicker = ({
|
|
|
9600
9901
|
}
|
|
9601
9902
|
),
|
|
9602
9903
|
/* @__PURE__ */ jsx35(
|
|
9603
|
-
"
|
|
9904
|
+
"input",
|
|
9604
9905
|
{
|
|
9605
|
-
|
|
9606
|
-
|
|
9607
|
-
|
|
9608
|
-
|
|
9609
|
-
|
|
9610
|
-
|
|
9906
|
+
ref: inputRef,
|
|
9907
|
+
type: "text",
|
|
9908
|
+
disabled,
|
|
9909
|
+
placeholder,
|
|
9910
|
+
value: isFocused ? inputValue : tempStart ? displayLabel : "",
|
|
9911
|
+
onChange: handleInputChange,
|
|
9912
|
+
onFocus: () => {
|
|
9913
|
+
setIsFocused(true);
|
|
9914
|
+
if (!disabled) setIsOpen(true);
|
|
9915
|
+
},
|
|
9916
|
+
onBlur: handleInputBlur,
|
|
9917
|
+
onKeyDown: handleInputKeyDown,
|
|
9918
|
+
onClick: (e) => {
|
|
9919
|
+
if (isOpen) {
|
|
9920
|
+
e.stopPropagation();
|
|
9921
|
+
}
|
|
9922
|
+
},
|
|
9923
|
+
className: "w-full bg-transparent border-none outline-none focus:outline-none p-0 text-foreground font-medium placeholder-muted-foreground/60 min-w-0"
|
|
9611
9924
|
}
|
|
9612
|
-
)
|
|
9925
|
+
),
|
|
9926
|
+
/* @__PURE__ */ jsx35("span", { className: "sr-only", children: tempStart ? displayLabel : placeholder })
|
|
9613
9927
|
] }),
|
|
9614
9928
|
/* @__PURE__ */ jsx35("span", { className: cn("transition-all duration-300 text-muted-foreground group-hover:text-foreground", isOpen && "rotate-180 text-primary"), children: /* @__PURE__ */ jsx35("svg", { className: cn(sizeStyles8[size].navIcon), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2.5, children: /* @__PURE__ */ jsx35("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) })
|
|
9615
9929
|
]
|
|
@@ -24187,7 +24501,8 @@ var SlashCommand = Extension.create({
|
|
|
24187
24501
|
showOnCreate: true,
|
|
24188
24502
|
interactive: true,
|
|
24189
24503
|
trigger: "manual",
|
|
24190
|
-
placement: "bottom-start"
|
|
24504
|
+
placement: "bottom-start",
|
|
24505
|
+
zIndex: 99999
|
|
24191
24506
|
});
|
|
24192
24507
|
},
|
|
24193
24508
|
onUpdate(props) {
|
|
@@ -24482,7 +24797,8 @@ var EmojiSuggestion = Extension3.create({
|
|
|
24482
24797
|
showOnCreate: true,
|
|
24483
24798
|
interactive: true,
|
|
24484
24799
|
trigger: "manual",
|
|
24485
|
-
placement: "bottom-start"
|
|
24800
|
+
placement: "bottom-start",
|
|
24801
|
+
zIndex: 99999
|
|
24486
24802
|
});
|
|
24487
24803
|
},
|
|
24488
24804
|
onUpdate(props) {
|
|
@@ -26964,7 +27280,15 @@ var BubbleMenuContent = ({
|
|
|
26964
27280
|
/* @__PURE__ */ jsx82(ToolbarButton, { onClick: () => applyImageWidthPreset(editor, "lg"), active: imageWidthPreset === "lg", title: t("toolbar.imageWidthLg"), children: /* @__PURE__ */ jsx82("span", { className: "text-[10px] font-semibold", children: "L" }) }),
|
|
26965
27281
|
/* @__PURE__ */ jsx82("div", { className: "w-px h-6 bg-border/50 mx-1" }),
|
|
26966
27282
|
/* @__PURE__ */ jsx82(ToolbarButton, { onClick: () => resetImageSize(editor), title: t("toolbar.imageResetSize"), children: /* @__PURE__ */ jsx82(RotateCcw3, { className: "w-4 h-4" }) }),
|
|
26967
|
-
/* @__PURE__ */ jsx82(
|
|
27283
|
+
/* @__PURE__ */ jsx82(
|
|
27284
|
+
ToolbarButton,
|
|
27285
|
+
{
|
|
27286
|
+
onClick: () => deleteSelectedImage(editor),
|
|
27287
|
+
title: t("toolbar.imageDelete"),
|
|
27288
|
+
className: "text-destructive hover:text-destructive",
|
|
27289
|
+
children: /* @__PURE__ */ jsx82(Trash23, { className: "w-4 h-4" })
|
|
27290
|
+
}
|
|
27291
|
+
)
|
|
26968
27292
|
] });
|
|
26969
27293
|
}
|
|
26970
27294
|
if (showTypographyPanel) {
|
|
@@ -27154,7 +27478,15 @@ var BubbleMenuContent = ({
|
|
|
27154
27478
|
),
|
|
27155
27479
|
/* @__PURE__ */ jsx82(ToolbarButton, { onClick: () => setActiveColorPalette("text"), title: t("colors.textColor"), children: /* @__PURE__ */ jsx82(TextColorIcon, { color: currentTextColor }) }),
|
|
27156
27480
|
/* @__PURE__ */ jsx82(ToolbarButton, { onClick: () => setActiveColorPalette("highlight"), active: editor.isActive("highlight"), title: t("colors.highlight"), children: /* @__PURE__ */ jsx82(HighlightColorIcon, { color: currentHighlightColor }) }),
|
|
27157
|
-
isInTable2 && /* @__PURE__ */ jsx82(
|
|
27481
|
+
isInTable2 && /* @__PURE__ */ jsx82(
|
|
27482
|
+
ToolbarButton,
|
|
27483
|
+
{
|
|
27484
|
+
onClick: () => setActiveColorPalette("cell-bg"),
|
|
27485
|
+
active: Boolean(currentCellBgColor),
|
|
27486
|
+
title: t("tableMenu.cellBackground") || "Cell background",
|
|
27487
|
+
children: /* @__PURE__ */ jsx82(CellBgColorIcon, { color: currentCellBgColor })
|
|
27488
|
+
}
|
|
27489
|
+
),
|
|
27158
27490
|
/* @__PURE__ */ jsx82(
|
|
27159
27491
|
ToolbarButton,
|
|
27160
27492
|
{
|
|
@@ -27235,22 +27567,14 @@ var CustomBubbleMenu = ({
|
|
|
27235
27567
|
"div",
|
|
27236
27568
|
{
|
|
27237
27569
|
ref: menuRef,
|
|
27238
|
-
className: "fixed z-
|
|
27570
|
+
className: "fixed z-99999 flex rounded-xl border border-border/40 bg-card text-card-foreground shadow-lg backdrop-blur-sm overflow-hidden animate-in fade-in-0 zoom-in-95",
|
|
27239
27571
|
style: {
|
|
27240
27572
|
top: `${position.top}px`,
|
|
27241
27573
|
left: `${position.left}px`,
|
|
27242
27574
|
transform: "translate(-50%, -100%)"
|
|
27243
27575
|
},
|
|
27244
27576
|
onMouseDown: (e) => e.preventDefault(),
|
|
27245
|
-
children: /* @__PURE__ */ jsx82(
|
|
27246
|
-
BubbleMenuContent,
|
|
27247
|
-
{
|
|
27248
|
-
editor,
|
|
27249
|
-
onKeepOpenChange: setKeepOpen,
|
|
27250
|
-
fontSizes,
|
|
27251
|
-
lineHeights
|
|
27252
|
-
}
|
|
27253
|
-
)
|
|
27577
|
+
children: /* @__PURE__ */ jsx82(BubbleMenuContent, { editor, onKeepOpenChange: setKeepOpen, fontSizes, lineHeights })
|
|
27254
27578
|
}
|
|
27255
27579
|
),
|
|
27256
27580
|
document.body
|
|
@@ -27290,7 +27614,7 @@ var CustomFloatingMenu = ({ editor }) => {
|
|
|
27290
27614
|
/* @__PURE__ */ jsx82(
|
|
27291
27615
|
"div",
|
|
27292
27616
|
{
|
|
27293
|
-
className: "fixed z-
|
|
27617
|
+
className: "fixed z-99999 rounded-2xl border border-border/50 bg-card text-card-foreground shadow-lg backdrop-blur-sm overflow-hidden animate-in fade-in-0 slide-in-from-bottom-2",
|
|
27294
27618
|
style: {
|
|
27295
27619
|
top: `${position.top}px`,
|
|
27296
27620
|
left: `${position.left}px`,
|