gantt-lib 0.60.1 → 0.60.2

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 CHANGED
@@ -3329,6 +3329,7 @@ var DatePicker = ({
3329
3329
  }) => {
3330
3330
  const [open, setOpen] = (0, import_react9.useState)(false);
3331
3331
  const [inputValue, setInputValue] = (0, import_react9.useState)("");
3332
+ const [draftDate, setDraftDate] = (0, import_react9.useState)(void 0);
3332
3333
  const dateInputRef = (0, import_react9.useRef)(null);
3333
3334
  const segIdxRef = (0, import_react9.useRef)(0);
3334
3335
  const charPosRef = (0, import_react9.useRef)(0);
@@ -3337,13 +3338,18 @@ var DatePicker = ({
3337
3338
  const d = /* @__PURE__ */ new Date(value + "T00:00:00Z");
3338
3339
  return (0, import_date_fns3.isValid)(d) ? d : void 0;
3339
3340
  })();
3341
+ const activeDate = draftDate ?? selectedDate;
3340
3342
  const displayValue = selectedDate ? formatUTCDate(selectedDate, displayFormat) : placeholder;
3341
3343
  (0, import_react9.useEffect)(() => {
3342
3344
  if (value) {
3343
3345
  const d = /* @__PURE__ */ new Date(value + "T00:00:00Z");
3344
- if ((0, import_date_fns3.isValid)(d)) setInputValue(formatUTCDate(d, "dd.MM.yy"));
3346
+ if ((0, import_date_fns3.isValid)(d)) {
3347
+ setInputValue(formatUTCDate(d, "dd.MM.yy"));
3348
+ setDraftDate(void 0);
3349
+ }
3345
3350
  } else {
3346
3351
  setInputValue("");
3352
+ setDraftDate(void 0);
3347
3353
  }
3348
3354
  }, [value]);
3349
3355
  const selectSegByIdx = (0, import_react9.useCallback)((idx) => {
@@ -3388,31 +3394,38 @@ var DatePicker = ({
3388
3394
  const updateFromDate = (0, import_react9.useCallback)((newDate) => {
3389
3395
  if (!(0, import_date_fns3.isValid)(newDate)) return;
3390
3396
  setInputValue(formatUTCDate(newDate, "dd.MM.yy"));
3397
+ setDraftDate(newDate);
3398
+ }, []);
3399
+ const commitDate = (0, import_react9.useCallback)((dateToCommit) => {
3400
+ const nextDate = dateToCommit ?? draftDate ?? selectedDate;
3401
+ if (!nextDate || !(0, import_date_fns3.isValid)(nextDate)) return;
3391
3402
  const iso = [
3392
- newDate.getUTCFullYear(),
3393
- String(newDate.getUTCMonth() + 1).padStart(2, "0"),
3394
- String(newDate.getUTCDate()).padStart(2, "0")
3403
+ nextDate.getUTCFullYear(),
3404
+ String(nextDate.getUTCMonth() + 1).padStart(2, "0"),
3405
+ String(nextDate.getUTCDate()).padStart(2, "0")
3395
3406
  ].join("-");
3407
+ if (iso === value) return;
3396
3408
  onChange?.(iso);
3397
- }, [onChange]);
3409
+ }, [draftDate, onChange, selectedDate, value]);
3398
3410
  const handleCalendarSelect = (0, import_react9.useCallback)(
3399
3411
  (day) => {
3400
3412
  const normalizedDay = businessDays && isWeekend3 && isWeekend3(day) ? snapToBusinessDay(day, 1, isWeekend3) : day;
3401
3413
  updateFromDate(normalizedDay);
3414
+ commitDate(normalizedDay);
3402
3415
  setOpen(false);
3403
3416
  },
3404
- [updateFromDate, businessDays, isWeekend3]
3417
+ [businessDays, commitDate, isWeekend3, updateFromDate]
3405
3418
  );
3406
3419
  const handleDayShift = (0, import_react9.useCallback)(
3407
3420
  (delta) => {
3408
- const base = selectedDate ?? /* @__PURE__ */ new Date();
3421
+ const base = activeDate ?? /* @__PURE__ */ new Date();
3409
3422
  if (businessDays && isWeekend3) {
3410
3423
  updateFromDate(shiftByBusinessDays(base, delta, isWeekend3));
3411
3424
  } else {
3412
3425
  updateFromDate((0, import_date_fns3.addDays)(base, delta));
3413
3426
  }
3414
3427
  },
3415
- [selectedDate, updateFromDate, businessDays, isWeekend3]
3428
+ [activeDate, updateFromDate, businessDays, isWeekend3]
3416
3429
  );
3417
3430
  const handleTriggerKeyDown = (0, import_react9.useCallback)((e) => {
3418
3431
  if (disabled) return;
@@ -3443,13 +3456,14 @@ var DatePicker = ({
3443
3456
  if (e.key === "Enter") {
3444
3457
  e.preventDefault();
3445
3458
  e.stopPropagation();
3459
+ commitDate();
3446
3460
  setOpen(false);
3447
3461
  return;
3448
3462
  }
3449
3463
  if (e.key === "ArrowUp" || e.key === "ArrowDown") {
3450
3464
  e.preventDefault();
3451
3465
  e.stopPropagation();
3452
- const base = selectedDate ?? /* @__PURE__ */ new Date();
3466
+ const base = activeDate ?? /* @__PURE__ */ new Date();
3453
3467
  let newDate = base;
3454
3468
  if (seg.label === "day") newDate = e.key === "ArrowUp" ? (0, import_date_fns3.addDays)(base, 1) : (0, import_date_fns3.subDays)(base, 1);
3455
3469
  if (seg.label === "month") newDate = e.key === "ArrowUp" ? (0, import_date_fns3.addMonths)(base, 1) : (0, import_date_fns3.subMonths)(base, 1);
@@ -3527,8 +3541,14 @@ var DatePicker = ({
3527
3541
  );
3528
3542
  }
3529
3543
  }
3530
- }, [selectedDate, updateFromDate, selectSegByIdx, businessDays, isWeekend3]);
3531
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Popover, { open, onOpenChange: disabled ? void 0 : setOpen, children: [
3544
+ }, [activeDate, businessDays, commitDate, isWeekend3, selectSegByIdx, updateFromDate]);
3545
+ const handleOpenChange = (0, import_react9.useCallback)((nextOpen) => {
3546
+ if (!nextOpen && open) {
3547
+ commitDate();
3548
+ }
3549
+ setOpen(nextOpen);
3550
+ }, [commitDate, open]);
3551
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Popover, { open, onOpenChange: disabled ? void 0 : handleOpenChange, children: [
3532
3552
  /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3533
3553
  "button",
3534
3554
  {
@@ -3564,6 +3584,9 @@ var DatePicker = ({
3564
3584
  onFocus: handleFocus,
3565
3585
  onMouseDown: handleMouseDown,
3566
3586
  onKeyDown: handleKeyDown,
3587
+ onBlur: () => {
3588
+ commitDate();
3589
+ },
3567
3590
  spellCheck: false,
3568
3591
  autoComplete: "off"
3569
3592
  }
@@ -3575,9 +3598,9 @@ var DatePicker = ({
3575
3598
  Calendar,
3576
3599
  {
3577
3600
  mode: "single",
3578
- selected: selectedDate,
3601
+ selected: activeDate,
3579
3602
  onSelect: handleCalendarSelect,
3580
- initialDate: selectedDate,
3603
+ initialDate: activeDate,
3581
3604
  isWeekend: isWeekend3
3582
3605
  }
3583
3606
  )