gantt-lib 0.60.0 → 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.mjs CHANGED
@@ -3244,6 +3244,7 @@ var DatePicker = ({
3244
3244
  }) => {
3245
3245
  const [open, setOpen] = useState3(false);
3246
3246
  const [inputValue, setInputValue] = useState3("");
3247
+ const [draftDate, setDraftDate] = useState3(void 0);
3247
3248
  const dateInputRef = useRef3(null);
3248
3249
  const segIdxRef = useRef3(0);
3249
3250
  const charPosRef = useRef3(0);
@@ -3252,13 +3253,18 @@ var DatePicker = ({
3252
3253
  const d = /* @__PURE__ */ new Date(value + "T00:00:00Z");
3253
3254
  return isValid(d) ? d : void 0;
3254
3255
  })();
3256
+ const activeDate = draftDate ?? selectedDate;
3255
3257
  const displayValue = selectedDate ? formatUTCDate(selectedDate, displayFormat) : placeholder;
3256
3258
  useEffect3(() => {
3257
3259
  if (value) {
3258
3260
  const d = /* @__PURE__ */ new Date(value + "T00:00:00Z");
3259
- if (isValid(d)) setInputValue(formatUTCDate(d, "dd.MM.yy"));
3261
+ if (isValid(d)) {
3262
+ setInputValue(formatUTCDate(d, "dd.MM.yy"));
3263
+ setDraftDate(void 0);
3264
+ }
3260
3265
  } else {
3261
3266
  setInputValue("");
3267
+ setDraftDate(void 0);
3262
3268
  }
3263
3269
  }, [value]);
3264
3270
  const selectSegByIdx = useCallback3((idx) => {
@@ -3303,31 +3309,38 @@ var DatePicker = ({
3303
3309
  const updateFromDate = useCallback3((newDate) => {
3304
3310
  if (!isValid(newDate)) return;
3305
3311
  setInputValue(formatUTCDate(newDate, "dd.MM.yy"));
3312
+ setDraftDate(newDate);
3313
+ }, []);
3314
+ const commitDate = useCallback3((dateToCommit) => {
3315
+ const nextDate = dateToCommit ?? draftDate ?? selectedDate;
3316
+ if (!nextDate || !isValid(nextDate)) return;
3306
3317
  const iso = [
3307
- newDate.getUTCFullYear(),
3308
- String(newDate.getUTCMonth() + 1).padStart(2, "0"),
3309
- String(newDate.getUTCDate()).padStart(2, "0")
3318
+ nextDate.getUTCFullYear(),
3319
+ String(nextDate.getUTCMonth() + 1).padStart(2, "0"),
3320
+ String(nextDate.getUTCDate()).padStart(2, "0")
3310
3321
  ].join("-");
3322
+ if (iso === value) return;
3311
3323
  onChange?.(iso);
3312
- }, [onChange]);
3324
+ }, [draftDate, onChange, selectedDate, value]);
3313
3325
  const handleCalendarSelect = useCallback3(
3314
3326
  (day) => {
3315
3327
  const normalizedDay = businessDays && isWeekend3 && isWeekend3(day) ? snapToBusinessDay(day, 1, isWeekend3) : day;
3316
3328
  updateFromDate(normalizedDay);
3329
+ commitDate(normalizedDay);
3317
3330
  setOpen(false);
3318
3331
  },
3319
- [updateFromDate, businessDays, isWeekend3]
3332
+ [businessDays, commitDate, isWeekend3, updateFromDate]
3320
3333
  );
3321
3334
  const handleDayShift = useCallback3(
3322
3335
  (delta) => {
3323
- const base = selectedDate ?? /* @__PURE__ */ new Date();
3336
+ const base = activeDate ?? /* @__PURE__ */ new Date();
3324
3337
  if (businessDays && isWeekend3) {
3325
3338
  updateFromDate(shiftByBusinessDays(base, delta, isWeekend3));
3326
3339
  } else {
3327
3340
  updateFromDate(addDays(base, delta));
3328
3341
  }
3329
3342
  },
3330
- [selectedDate, updateFromDate, businessDays, isWeekend3]
3343
+ [activeDate, updateFromDate, businessDays, isWeekend3]
3331
3344
  );
3332
3345
  const handleTriggerKeyDown = useCallback3((e) => {
3333
3346
  if (disabled) return;
@@ -3358,13 +3371,14 @@ var DatePicker = ({
3358
3371
  if (e.key === "Enter") {
3359
3372
  e.preventDefault();
3360
3373
  e.stopPropagation();
3374
+ commitDate();
3361
3375
  setOpen(false);
3362
3376
  return;
3363
3377
  }
3364
3378
  if (e.key === "ArrowUp" || e.key === "ArrowDown") {
3365
3379
  e.preventDefault();
3366
3380
  e.stopPropagation();
3367
- const base = selectedDate ?? /* @__PURE__ */ new Date();
3381
+ const base = activeDate ?? /* @__PURE__ */ new Date();
3368
3382
  let newDate = base;
3369
3383
  if (seg.label === "day") newDate = e.key === "ArrowUp" ? addDays(base, 1) : subDays(base, 1);
3370
3384
  if (seg.label === "month") newDate = e.key === "ArrowUp" ? addMonths2(base, 1) : subMonths2(base, 1);
@@ -3442,8 +3456,14 @@ var DatePicker = ({
3442
3456
  );
3443
3457
  }
3444
3458
  }
3445
- }, [selectedDate, updateFromDate, selectSegByIdx, businessDays, isWeekend3]);
3446
- return /* @__PURE__ */ jsxs7(Popover, { open, onOpenChange: disabled ? void 0 : setOpen, children: [
3459
+ }, [activeDate, businessDays, commitDate, isWeekend3, selectSegByIdx, updateFromDate]);
3460
+ const handleOpenChange = useCallback3((nextOpen) => {
3461
+ if (!nextOpen && open) {
3462
+ commitDate();
3463
+ }
3464
+ setOpen(nextOpen);
3465
+ }, [commitDate, open]);
3466
+ return /* @__PURE__ */ jsxs7(Popover, { open, onOpenChange: disabled ? void 0 : handleOpenChange, children: [
3447
3467
  /* @__PURE__ */ jsx10(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx10(
3448
3468
  "button",
3449
3469
  {
@@ -3479,6 +3499,9 @@ var DatePicker = ({
3479
3499
  onFocus: handleFocus,
3480
3500
  onMouseDown: handleMouseDown,
3481
3501
  onKeyDown: handleKeyDown,
3502
+ onBlur: () => {
3503
+ commitDate();
3504
+ },
3482
3505
  spellCheck: false,
3483
3506
  autoComplete: "off"
3484
3507
  }
@@ -3490,9 +3513,9 @@ var DatePicker = ({
3490
3513
  Calendar,
3491
3514
  {
3492
3515
  mode: "single",
3493
- selected: selectedDate,
3516
+ selected: activeDate,
3494
3517
  onSelect: handleCalendarSelect,
3495
- initialDate: selectedDate,
3518
+ initialDate: activeDate,
3496
3519
  isWeekend: isWeekend3
3497
3520
  }
3498
3521
  )