@object-ui/plugin-gantt 17.5.0 → 17.6.0

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
@@ -1,15 +1,15 @@
1
1
  import * as e from "react";
2
2
  import { useCallback as t, useContext as n, useEffect as r, useMemo as i, useRef as a, useState as o } from "react";
3
- import { ComponentRegistry as s, buildExpandFields as c, extractRecords as l, getRecordDisplayName as u, resolveDataSource as d } from "@object-ui/core";
4
- import { ElementDataSourceGate as f, SchemaRendererContext as p, useNavigationOverlay as m, useObjectTranslation as h, useSchemaContext as g } from "@object-ui/react";
5
- import { toast as ee } from "sonner";
6
- import { GanttConfigSchema as te } from "@objectstack/spec/ui";
7
- import { resolveFieldCurrency as ne, useDisplayLocale as _, useLocalization as v } from "@object-ui/i18n";
8
- import { RecordDetailDrawer as re, deriveRecordPageHref as ie } from "@object-ui/plugin-detail";
9
- import { AlertDialog as ae, AlertDialogAction as oe, AlertDialogCancel as se, AlertDialogContent as ce, AlertDialogDescription as le, AlertDialogFooter as ue, AlertDialogHeader as de, AlertDialogTitle as fe, Button as y, cn as pe, useResizeObserver as b } from "@object-ui/components";
10
- import { formatCurrency as me, formatDate as he, formatDateTime as ge, formatNumber as _e, formatPercent as ve, getSemanticColorName as ye, getSemanticHex as x, humanizeLabel as S } from "@object-ui/fields";
11
- import { Activity as be, ArrowRight as xe, ChevronDown as Se, ChevronLeft as Ce, ChevronRight as we, Download as C, FileDown as Te, Lock as Ee, Maximize2 as De, Minimize2 as w, PanelLeft as Oe, PanelLeftClose as ke, Redo2 as T, RefreshCw as E, Save as Ae, Undo2 as je, Wand2 as D, ZoomIn as O, ZoomOut as Me } from "lucide-react";
12
- import { Fragment as Ne, jsx as k, jsxs as A } from "react/jsx-runtime";
3
+ import { ComponentRegistry as s, buildExpandFields as c, convertSortToQueryParams as l, extractRecords as u, getRecordDisplayName as d, resolveDataSource as f } from "@object-ui/core";
4
+ import { ElementDataSourceGate as p, SchemaRendererContext as m, useNavigationOverlay as h, useObjectTranslation as g, useSchemaContext as ee } from "@object-ui/react";
5
+ import { toast as te } from "sonner";
6
+ import { GanttConfigSchema as ne } from "@objectstack/spec/ui";
7
+ import { resolveFieldCurrency as _, useDisplayLocale as v, useLocalization as re } from "@object-ui/i18n";
8
+ import { RecordDetailDrawer as ie, deriveRecordPageHref as ae } from "@object-ui/plugin-detail";
9
+ import { AlertDialog as oe, AlertDialogAction as se, AlertDialogCancel as ce, AlertDialogContent as le, AlertDialogDescription as ue, AlertDialogFooter as de, AlertDialogHeader as fe, AlertDialogTitle as pe, Button as y, cn as me, useResizeObserver as b } from "@object-ui/components";
10
+ import { formatCurrency as he, formatDate as ge, formatDateTime as _e, formatNumber as ve, formatPercent as ye, getSemanticColorName as x, getSemanticHex as S, humanizeLabel as be } from "@object-ui/fields";
11
+ import { Activity as xe, ArrowRight as Se, ChevronDown as Ce, ChevronLeft as we, ChevronRight as Te, Download as C, FileDown as Ee, Lock as De, Maximize2 as Oe, Minimize2 as w, PanelLeft as ke, PanelLeftClose as Ae, Redo2 as T, RefreshCw as E, Save as je, Undo2 as Me, Wand2 as D, ZoomIn as O, ZoomOut as Ne } from "lucide-react";
12
+ import { Fragment as Pe, jsx as k, jsxs as A } from "react/jsx-runtime";
13
13
  //#region src/scheduling.ts
14
14
  var j = 864e5, M = (e) => e.toISOString().slice(0, 10);
15
15
  function N(e, t) {
@@ -19,60 +19,60 @@ function N(e, t) {
19
19
  }
20
20
  return !(t.holidays && t.holidays.has(M(e)));
21
21
  }
22
- function P(e) {
22
+ function Fe(e) {
23
23
  let t = new Date(e);
24
24
  return t.setUTCHours(0, 0, 0, 0), t;
25
25
  }
26
- function Pe(e, t) {
27
- let n = P(e);
26
+ function P(e, t) {
27
+ let n = Fe(e);
28
28
  for (; !N(n, t);) n = new Date(n.getTime() + j);
29
29
  return n.getTime();
30
30
  }
31
- function F(e, t, n) {
31
+ function Ie(e, t, n) {
32
32
  if (t <= e) return 0;
33
- let r = 0, i = P(e), a = P(t).getTime();
33
+ let r = 0, i = Fe(e), a = Fe(t).getTime();
34
34
  for (; i.getTime() < a;) N(i, n) && r++, i = new Date(i.getTime() + j);
35
35
  return r;
36
36
  }
37
- function Fe(e, t, n) {
38
- if (t <= 0) return P(e).getTime();
39
- let r = P(e), i = t;
37
+ function Le(e, t, n) {
38
+ if (t <= 0) return Fe(e).getTime();
39
+ let r = Fe(e), i = t;
40
40
  for (; i > 0;) N(r, n) && i--, r = new Date(r.getTime() + j);
41
41
  return r.getTime();
42
42
  }
43
- function Ie(e, t, n) {
44
- if (t <= 0) return P(e).getTime();
45
- let r = P(e), i = t;
43
+ function Re(e, t, n) {
44
+ if (t <= 0) return Fe(e).getTime();
45
+ let r = Fe(e), i = t;
46
46
  for (; i > 0;) r = /* @__PURE__ */ new Date(r.getTime() - j), N(r, n) && i--;
47
47
  return r.getTime();
48
48
  }
49
- var I = (e) => String(e);
50
- function Le(e) {
49
+ var F = (e) => String(e);
50
+ function I(e) {
51
51
  return e === "ss" || e === "ff" || e === "sf" ? e : "fs";
52
52
  }
53
- function Re(e) {
54
- let t = new Set(e.map((e) => I(e.id))), n = [];
53
+ function ze(e) {
54
+ let t = new Set(e.map((e) => F(e.id))), n = [];
55
55
  for (let r of e) {
56
- let e = I(r.id);
56
+ let e = F(r.id);
57
57
  for (let i of r.dependencies ?? []) {
58
58
  let r = typeof i == "object" && !!i, a = r ? i.id : i;
59
59
  if (a == null || a === "") continue;
60
- let o = I(a);
60
+ let o = F(a);
61
61
  o === e || !t.has(o) || n.push({
62
62
  pred: o,
63
63
  succ: e,
64
- type: Le(r ? i.type : void 0)
64
+ type: I(r ? i.type : void 0)
65
65
  });
66
66
  }
67
67
  }
68
68
  return n;
69
69
  }
70
- function ze(e) {
70
+ function L(e) {
71
71
  let t = /* @__PURE__ */ new Set();
72
- for (let n of e) n.parent != null && n.parent !== "" && t.add(I(n.parent));
72
+ for (let n of e) n.parent != null && n.parent !== "" && t.add(F(n.parent));
73
73
  return t;
74
74
  }
75
- function L(e, t) {
75
+ function Be(e, t) {
76
76
  let n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
77
77
  for (let t of e) n.set(t, 0), r.set(t, []);
78
78
  for (let e of t) r.get(e.pred).push(e.succ), n.set(e.succ, (n.get(e.succ) ?? 0) + 1);
@@ -98,7 +98,7 @@ function L(e, t) {
98
98
  hasCycle: !1
99
99
  };
100
100
  }
101
- function Be(e, t) {
101
+ function Ve(e, t) {
102
102
  let n = {
103
103
  criticalIds: /* @__PURE__ */ new Set(),
104
104
  criticalEdges: /* @__PURE__ */ new Set()
@@ -106,10 +106,10 @@ function Be(e, t) {
106
106
  if (!e.length) return n;
107
107
  let r = /* @__PURE__ */ new Map();
108
108
  for (let n of e) {
109
- let e = t ? F(n.start.getTime(), n.end.getTime(), t) : (n.end.getTime() - n.start.getTime()) / j;
110
- r.set(I(n.id), Number.isFinite(e) && e > 0 ? e : 0);
109
+ let e = t ? Ie(n.start.getTime(), n.end.getTime(), t) : (n.end.getTime() - n.start.getTime()) / j;
110
+ r.set(F(n.id), Number.isFinite(e) && e > 0 ? e : 0);
111
111
  }
112
- let i = Re(e), a = e.map((e) => I(e.id)), { order: o, hasCycle: s } = L(a, i);
112
+ let i = ze(e), a = e.map((e) => F(e.id)), { order: o, hasCycle: s } = Be(a, i);
113
113
  if (s) return n;
114
114
  let c = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map();
115
115
  for (let e of a) c.set(e, []), l.set(e, []);
@@ -140,34 +140,34 @@ function Be(e, t) {
140
140
  criticalEdges: te
141
141
  };
142
142
  }
143
- function Ve(e, t, n) {
143
+ function He(e, t, n) {
144
144
  if (!e.length) return {
145
145
  changes: [],
146
146
  skippedLocked: []
147
147
  };
148
- let r = Re(e), i = e.map((e) => I(e.id)), { order: a, hasCycle: o } = L(i, r);
148
+ let r = ze(e), i = e.map((e) => F(e.id)), { order: a, hasCycle: o } = Be(i, r);
149
149
  if (o) return {
150
150
  changes: [],
151
151
  skippedLocked: []
152
152
  };
153
- let s = ze(e), c = /* @__PURE__ */ new Map();
154
- for (let t of e) c.set(I(t.id), t);
153
+ let s = L(e), c = /* @__PURE__ */ new Map();
154
+ for (let t of e) c.set(F(t.id), t);
155
155
  let l = /* @__PURE__ */ new Map();
156
156
  for (let t of e) {
157
157
  if (t.parent == null || t.parent === "") continue;
158
- let e = I(t.parent), n = l.get(e) ?? [];
158
+ let e = F(t.parent), n = l.get(e) ?? [];
159
159
  n.push(t), l.set(e, n);
160
160
  }
161
161
  let u = n?.summaryExtent === "self", d = (e) => u && e.hasOwnDates !== !1 && !e.locked, f = /* @__PURE__ */ new Map();
162
162
  for (let e of i) f.set(e, []);
163
163
  for (let e of r) f.get(e.succ).push(e);
164
164
  let p = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map();
165
- for (let t of e) p.set(I(t.id), t.start.getTime()), m.set(I(t.id), t.end.getTime());
165
+ for (let t of e) p.set(F(t.id), t.start.getTime()), m.set(F(t.id), t.end.getTime());
166
166
  let h = [];
167
167
  for (let e of a) {
168
168
  let r = c.get(e);
169
169
  if (!r) continue;
170
- let i = t ? F(p.get(e), m.get(e), t) : m.get(e) - p.get(e), a = r.start.getTime(), o = a;
170
+ let i = t ? Ie(p.get(e), m.get(e), t) : m.get(e) - p.get(e), a = r.start.getTime(), o = a;
171
171
  for (let n of f.get(e) ?? []) {
172
172
  let e = p.get(n.pred), r = m.get(n.pred), a;
173
173
  switch (n.type) {
@@ -175,10 +175,10 @@ function Ve(e, t, n) {
175
175
  a = e;
176
176
  break;
177
177
  case "ff":
178
- a = t ? Ie(r, i, t) : r - i;
178
+ a = t ? Re(r, i, t) : r - i;
179
179
  break;
180
180
  case "sf":
181
- a = t ? Ie(e, i, t) : e - i;
181
+ a = t ? Re(e, i, t) : e - i;
182
182
  break;
183
183
  default: a = r;
184
184
  }
@@ -191,19 +191,19 @@ function Ve(e, t, n) {
191
191
  continue;
192
192
  }
193
193
  if (l && !t && n?.snapStart && (o = Math.max(o, n.snapStart(o))), t) {
194
- let n = Pe(o, t);
195
- p.set(e, n), m.set(e, Fe(n, i, t));
194
+ let n = P(o, t);
195
+ p.set(e, n), m.set(e, Le(n, i, t));
196
196
  } else p.set(e, o), m.set(e, o + i);
197
197
  }
198
198
  }
199
199
  if (u) for (let t of e) {
200
- let e = I(t.id);
200
+ let e = F(t.id);
201
201
  if (!s.has(e) || !d(t)) continue;
202
202
  let n = p.get(e) - t.start.getTime();
203
203
  if (n <= 0) continue;
204
204
  let r = [...l.get(e) ?? []];
205
205
  for (; r.length;) {
206
- let e = r.pop(), t = I(e.id);
206
+ let e = r.pop(), t = F(e.id);
207
207
  if (r.push(...l.get(t) ?? []), e.locked) continue;
208
208
  let i = e.start.getTime() + n;
209
209
  if (i > p.get(t)) {
@@ -214,7 +214,7 @@ function Ve(e, t, n) {
214
214
  }
215
215
  let g = [];
216
216
  for (let t of e) {
217
- let e = I(t.id), n = p.get(e), r = m.get(e);
217
+ let e = F(t.id), n = p.get(e), r = m.get(e);
218
218
  (n !== t.start.getTime() || r !== t.end.getTime()) && g.push({
219
219
  id: e,
220
220
  start: new Date(n),
@@ -226,7 +226,7 @@ function Ve(e, t, n) {
226
226
  skippedLocked: h
227
227
  };
228
228
  }
229
- function He(e, t, n) {
229
+ function Ue(e, t, n) {
230
230
  let r = String(t), i = String(n);
231
231
  if (r === i) return !0;
232
232
  let a = /* @__PURE__ */ new Map();
@@ -246,28 +246,28 @@ function He(e, t, n) {
246
246
  }
247
247
  //#endregion
248
248
  //#region src/shifts.ts
249
- var Ue = 6e4;
250
- 1440 * Ue;
251
- var We = 1440;
252
- function Ge(e) {
249
+ var We = 6e4;
250
+ 1440 * We;
251
+ var Ge = 1440;
252
+ function Ke(e) {
253
253
  if (typeof e != "string") return null;
254
254
  let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
255
255
  if (!t) return null;
256
256
  let n = Number(t[1]), r = Number(t[2]);
257
257
  return n < 0 || n > 23 || r < 0 || r > 59 ? null : n * 60 + r;
258
258
  }
259
- function Ke(e) {
259
+ function R(e) {
260
260
  if (!e || !Array.isArray(e.bands) || e.bands.length === 0) return null;
261
- let t = Ge(e.dayStart) ?? 0, n = [];
261
+ let t = Ke(e.dayStart) ?? 0, n = [];
262
262
  for (let t = 0; t < e.bands.length; t++) {
263
- let r = e.bands[t], i = Ge(r.start), a = Ge(r.end);
263
+ let r = e.bands[t], i = Ke(r.start), a = Ke(r.end);
264
264
  if (i == null || a == null || !r.label) return null;
265
- let o = (a - i + We) % We || We;
265
+ let o = (a - i + Ge) % Ge || Ge;
266
266
  n.push({
267
267
  key: r.key ?? `band${t}`,
268
268
  label: r.label,
269
269
  color: r.color,
270
- durMs: o * Ue
270
+ durMs: o * We
271
271
  });
272
272
  }
273
273
  return {
@@ -280,7 +280,7 @@ function qe(e, t) {
280
280
  let n = new Date(e);
281
281
  return n.setHours(0, 0, 0, 0), n.setMinutes(t), n.getTime() > e.getTime() && n.setDate(n.getDate() - 1), n;
282
282
  }
283
- function R(e, t) {
283
+ function Je(e, t) {
284
284
  if (t.bands.length === 0) return null;
285
285
  let n = qe(e, t.dayStartMin).getTime(), r = e.getTime() - n, i = 0;
286
286
  for (let e of t.bands) if (i += e.durMs, r < i) return e;
@@ -288,7 +288,7 @@ function R(e, t) {
288
288
  }
289
289
  //#endregion
290
290
  //#region src/useGanttTranslation.ts
291
- var Je = {
291
+ var z = {
292
292
  "gantt.column.taskName": "Task Name",
293
293
  "gantt.column.start": "Start",
294
294
  "gantt.column.end": "End",
@@ -370,55 +370,55 @@ var Je = {
370
370
  "gantt.lockedHint": "No edit permission",
371
371
  "gantt.writeFailed": "Save failed — the change was rolled back"
372
372
  };
373
- function z(e, t) {
374
- let n = Je[e] || e;
373
+ function Ye(e, t) {
374
+ let n = z[e] || e;
375
375
  if (t) for (let [e, r] of Object.entries(t)) n = n.split(`{{${e}}}`).join(String(r));
376
376
  return n;
377
377
  }
378
- function Ye() {
379
- let e = h();
378
+ function Xe() {
379
+ let e = g();
380
380
  return {
381
381
  t: (t, n) => {
382
382
  let r = e.t(t, n);
383
- return typeof r == "string" && r !== t ? r : z(t, n);
383
+ return typeof r == "string" && r !== t ? r : Ye(t, n);
384
384
  },
385
385
  language: e.language
386
386
  };
387
387
  }
388
388
  //#endregion
389
389
  //#region src/GanttView.tsx
390
- var Xe = 8;
391
- function Ze(e, t) {
390
+ var Ze = 8;
391
+ function Qe(e, t) {
392
392
  if (t.width <= 0) return "move";
393
- let n = Math.min(Xe, t.width / 3), r = e - t.left;
393
+ let n = Math.min(Ze, t.width / 3), r = e - t.left;
394
394
  return r <= n ? "resize-left" : r >= t.width - n ? "resize-right" : "move";
395
395
  }
396
- function Qe(e) {
396
+ function $e(e) {
397
397
  return 110;
398
398
  }
399
- function $e(e) {
399
+ function et(e) {
400
400
  return e < 640 ? 140 : e < 1024 ? 220 : 320;
401
401
  }
402
- function et(e) {
402
+ function tt(e) {
403
403
  return e >= 280;
404
404
  }
405
- function tt(e) {
405
+ function nt(e) {
406
406
  return e < 640 ? 32 : 40;
407
407
  }
408
- var nt = [
408
+ var rt = [
409
409
  "day",
410
410
  "week",
411
411
  "month",
412
412
  "quarter",
413
413
  "year"
414
- ], rt = {
414
+ ], it = {
415
415
  day: 1,
416
416
  week: 7,
417
417
  month: 30.44,
418
418
  quarter: 91.31,
419
419
  year: 365.25
420
- }, it = 864e5;
421
- function at(e, t) {
420
+ }, at = 864e5;
421
+ function ot(e, t) {
422
422
  let n = new Intl.DateTimeFormat("en-US", {
423
423
  timeZone: e,
424
424
  hour12: !1,
@@ -431,7 +431,7 @@ function at(e, t) {
431
431
  }), r = (e) => Number(n.formatToParts(t).find((t) => t.type === e)?.value ?? 0);
432
432
  return Date.UTC(r("year"), r("month") - 1, r("day"), r("hour") % 24, r("minute"), r("second")) - Math.floor(t.getTime() / 1e3) * 1e3;
433
433
  }
434
- function ot(e) {
434
+ function st(e) {
435
435
  let t = {
436
436
  delta: 0,
437
437
  to: (e) => e,
@@ -440,11 +440,11 @@ function ot(e) {
440
440
  };
441
441
  if (!e) return t;
442
442
  try {
443
- at(e, /* @__PURE__ */ new Date());
443
+ ot(e, /* @__PURE__ */ new Date());
444
444
  } catch {
445
445
  return console.warn(`[GanttView] invalid timeZone "${e}" — falling back to the browser zone`), t;
446
446
  }
447
- let n = (t) => at(e, t) - -t.getTimezoneOffset() * 6e4, r = n(/* @__PURE__ */ new Date());
447
+ let n = (t) => ot(e, t) - -t.getTimezoneOffset() * 6e4, r = n(/* @__PURE__ */ new Date());
448
448
  return r === 0 ? t : {
449
449
  delta: r,
450
450
  to: (e) => new Date(e.getTime() + n(e)),
@@ -452,11 +452,11 @@ function ot(e) {
452
452
  now: () => new Date(Date.now() + n(/* @__PURE__ */ new Date()))
453
453
  };
454
454
  }
455
- function st(e, t) {
455
+ function ct(e, t) {
456
456
  let n = new Date(e);
457
457
  return n.setHours(0, 0, 0, 0), t === "week" ? n.setDate(n.getDate() - (n.getDay() + 6) % 7) : t === "month" ? n.setDate(1) : t === "quarter" ? n.setMonth(Math.floor(n.getMonth() / 3) * 3, 1) : t === "year" && n.setMonth(0, 1), n;
458
458
  }
459
- function ct(e, t, n) {
459
+ function lt(e, t, n) {
460
460
  let r = e.length - 1, i = 0;
461
461
  for (; i < r && e[i + 1] < t;) i++;
462
462
  let a = i;
@@ -466,7 +466,7 @@ function ct(e, t, n) {
466
466
  end: a
467
467
  };
468
468
  }
469
- function lt(e, t, n) {
469
+ function ut(e, t, n) {
470
470
  let r = new Date(e);
471
471
  if (n === "day") r.setDate(r.getDate() + t);
472
472
  else if (n === "week") r.setDate(r.getDate() + t * 7);
@@ -478,7 +478,7 @@ function lt(e, t, n) {
478
478
  }
479
479
  return r;
480
480
  }
481
- function ut(e, t, n, r = 2) {
481
+ function dt(e, t, n, r = 2) {
482
482
  return new Promise((i) => {
483
483
  let a = new Blob([e], { type: "image/svg+xml;charset=utf-8" }), o = URL.createObjectURL(a), s = new Image();
484
484
  s.onload = () => {
@@ -491,11 +491,11 @@ function ut(e, t, n, r = 2) {
491
491
  }, s.src = o;
492
492
  });
493
493
  }
494
- function dt(e, t) {
494
+ function ft(e, t) {
495
495
  let n = document.createElement("a");
496
496
  n.href = URL.createObjectURL(e), n.download = t, document.body.appendChild(n), n.click(), n.remove(), setTimeout(() => URL.revokeObjectURL(n.href), 1e3);
497
497
  }
498
- function ft(e, t, n) {
498
+ function pt(e, t, n) {
499
499
  let r = (e) => {
500
500
  let t = new Uint8Array(e.length);
501
501
  for (let n = 0; n < e.length; n++) t[n] = e.charCodeAt(n) & 255;
@@ -510,18 +510,18 @@ function ft(e, t, n) {
510
510
  for (let e of o) d += `${String(e).padStart(10, "0")} 00000 n \n`;
511
511
  return d += `trailer\n<< /Size 6 /Root 1 0 R >>\nstartxref\n${u}\n%%EOF\n`, c(r(d)), new Blob(a, { type: "application/pdf" });
512
512
  }
513
- function pt(e) {
513
+ function mt(e) {
514
514
  let t = e.slice(e.indexOf(",") + 1), n = atob(t), r = new Uint8Array(n.length);
515
515
  for (let e = 0; e < n.length; e++) r[e] = n.charCodeAt(e);
516
516
  return r;
517
517
  }
518
- var mt = "gantt-layout:";
519
- function ht(e) {
518
+ var ht = "gantt-layout:";
519
+ function gt(e) {
520
520
  if (!e || typeof window > "u") return null;
521
521
  try {
522
- let t = window.localStorage.getItem(mt + e);
522
+ let t = window.localStorage.getItem(ht + e);
523
523
  if (!t) return null;
524
- let n = JSON.parse(t), r = n.viewMode && nt.includes(n.viewMode) ? n.viewMode : null;
524
+ let n = JSON.parse(t), r = n.viewMode && rt.includes(n.viewMode) ? n.viewMode : null;
525
525
  if (!r) return null;
526
526
  let i = typeof n.columnWidth == "number" && isFinite(n.columnWidth) ? n.columnWidth : null, a = typeof n.taskListWidth == "number" && isFinite(n.taskListWidth) ? n.taskListWidth : null, o = Array.isArray(n.collapsedIds) ? n.collapsedIds.filter((e) => typeof e == "string") : void 0;
527
527
  return {
@@ -535,22 +535,22 @@ function ht(e) {
535
535
  return null;
536
536
  }
537
537
  }
538
- function gt(e, t) {
538
+ function _t(e, t) {
539
539
  if (!(typeof window > "u")) try {
540
- window.localStorage.setItem(mt + e, JSON.stringify(t));
540
+ window.localStorage.setItem(ht + e, JSON.stringify(t));
541
541
  } catch {}
542
542
  }
543
- function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTaskClick: o, onTaskUpdate: s, onTaskDelete: c, onViewChange: l, onDependencyCreate: u, onBeforeDependencyCreate: d, onDependencyDelete: f, onTaskReorder: p, className: m, inlineEdit: h = !1, autoSchedule: g = !1, rescheduleOnConflict: te = !1, criticalPathDefault: ne = !1, workingCalendar: _, shiftSegments: v, showBaselines: re = !0, readOnly: ie = !1, mobileReadOnly: ae = !1, groupBy: oe, ungroupedLabel: se = "Ungrouped", defaultCollapsedDepth: ce, summaryExtent: le = "children", persistLayoutKey: ue, onLayoutChange: de, onRefresh: fe, refreshing: me = !1, dependencyTypes: he = !0, timeZone: ge, exportFileName: _e, interactions: ve, onBeforeTaskUpdate: ye }) {
544
- let x = e.useMemo(() => ot(ge), [ge]), S = e.useMemo(() => x.delta === 0 ? t : t.map((e) => ({
543
+ function vt({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTaskClick: o, onTaskUpdate: s, onTaskDelete: c, onViewChange: l, onDependencyCreate: u, onBeforeDependencyCreate: d, onDependencyDelete: f, onTaskReorder: p, className: m, inlineEdit: h = !1, autoSchedule: g = !1, rescheduleOnConflict: ee = !1, criticalPathDefault: ne = !1, workingCalendar: _, shiftSegments: v, showBaselines: re = !0, readOnly: ie = !1, mobileReadOnly: ae = !1, groupBy: oe, ungroupedLabel: se = "Ungrouped", defaultCollapsedDepth: ce, summaryExtent: le = "children", persistLayoutKey: ue, onLayoutChange: de, onRefresh: fe, refreshing: pe = !1, dependencyTypes: he = !0, timeZone: ge, exportFileName: _e, interactions: ve, onBeforeTaskUpdate: ye }) {
544
+ let x = e.useMemo(() => st(ge), [ge]), S = e.useMemo(() => x.delta === 0 ? t : t.map((e) => ({
545
545
  ...e,
546
546
  start: x.to(e.start),
547
547
  end: x.to(e.end),
548
548
  baselineStart: e.baselineStart ? x.to(e.baselineStart) : e.baselineStart,
549
549
  baselineEnd: e.baselineEnd ? x.to(e.baselineEnd) : e.baselineEnd
550
- })), [t, x]), j = e.useMemo(() => r && x.delta !== 0 ? x.to(r) : r, [r, x]), M = e.useMemo(() => i && x.delta !== 0 ? x.to(i) : i, [i, x]), N = e.useMemo(() => !a || x.delta === 0 ? a : a.map((e) => ({
550
+ })), [t, x]), be = e.useMemo(() => r && x.delta !== 0 ? x.to(r) : r, [r, x]), j = e.useMemo(() => i && x.delta !== 0 ? x.to(i) : i, [i, x]), M = e.useMemo(() => !a || x.delta === 0 ? a : a.map((e) => ({
551
551
  ...e,
552
552
  date: x.to(new Date(e.date))
553
- })), [a, x]), { t: P, language: Pe } = Ye(), F = Pe || void 0, [Fe, Ie] = e.useState(() => x.now()), I = e.useRef(null), { width: Le } = b(I), Re = Le || (typeof window < "u" ? window.innerWidth : 1024), ze = Re < 640, L = ie || ae && ze, Ue = ve?.move !== !1, We = ve?.resize !== !1, Ge = ve?.progress !== !1, Ke = ve?.link !== !1, R = e.useMemo(() => {
553
+ })), [a, x]), { t: N, language: Fe } = Xe(), P = Fe || void 0, [Ie, Le] = e.useState(() => x.now()), Re = e.useRef(null), { width: F } = b(Re), I = F || (typeof window < "u" ? window.innerWidth : 1024), ze = I < 640, L = ie || ae && ze, Be = ve?.move !== !1, We = ve?.resize !== !1, Ge = ve?.progress !== !1, Ke = ve?.link !== !1, R = e.useMemo(() => {
554
554
  if (!(L || !s)) return x.delta === 0 ? s : (e, t) => {
555
555
  let n = { ...t };
556
556
  n.start instanceof Date && (n.start = x.from(n.start)), n.end instanceof Date && (n.end = x.from(n.end)), s(e, n);
@@ -559,36 +559,36 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
559
559
  L,
560
560
  s,
561
561
  x
562
- ]), Je = L ? void 0 : c, z = L || !Ke ? void 0 : u, at = L || !Ke ? void 0 : f, mt = L ? void 0 : p, _t = !L && h, vt = !L && g, yt = !L && te, B = tt(Re), bt = Qe(Re), xt = e.useRef(void 0);
563
- xt.current === void 0 && (xt.current = ht(ue));
564
- let St = xt.current, [Ct, wt] = e.useState(St ? St.columnWidth : null), [Tt, Et] = e.useState(St ? St.taskListWidth ?? null : null), [V, Dt] = e.useState(n && nt.includes(n) ? n : St?.viewMode ?? "day");
562
+ ]), Je = L ? void 0 : c, z = L || !Ke ? void 0 : u, Ye = L || !Ke ? void 0 : f, ot = L ? void 0 : p, ht = !L && h, vt = !L && g, yt = !L && ee, B = nt(I), bt = $e(I), xt = e.useRef(void 0);
563
+ xt.current === void 0 && (xt.current = gt(ue));
564
+ let St = xt.current, [Ct, wt] = e.useState(St ? St.columnWidth : null), [Tt, Et] = e.useState(St ? St.taskListWidth ?? null : null), [V, Dt] = e.useState(n && rt.includes(n) ? n : St?.viewMode ?? "day");
565
565
  e.useEffect(() => {
566
- n && nt.includes(n) && Dt(n);
566
+ n && rt.includes(n) && Dt(n);
567
567
  }, [n]);
568
568
  let Ot = e.useRef(null), kt = e.useRef(null), At = e.useRef(!0), [jt, Mt] = e.useState(St ? St.taskListCollapsed : !1), Nt = e.useRef(!1);
569
569
  e.useEffect(() => {
570
570
  !Nt.current && ze && (Mt(!0), Nt.current = !0);
571
571
  }, [ze]);
572
- let Pt = Math.max(160, Re - 200), H = jt ? 0 : Tt == null ? $e(Re) : Math.max(160, Math.min(Tt, Pt)), Ft = e.useMemo(() => {
573
- if (Ct != null || M || S.length === 0) return null;
574
- let e = j ? new Date(j) : new Date(Math.min(...S.map((e) => e.start.getTime()))), t = new Date(Math.max(...S.map((e) => e.end.getTime())));
575
- j || e.setDate(e.getDate() - 7), t.setDate(t.getDate() + 14), e = st(e, V), t.setHours(23, 59, 59, 999);
576
- let n = Math.max(1, (t.getTime() - e.getTime()) / it), r = Math.max(0, Re - H);
572
+ let Pt = Math.max(160, I - 200), H = jt ? 0 : Tt == null ? et(I) : Math.max(160, Math.min(Tt, Pt)), Ft = e.useMemo(() => {
573
+ if (Ct != null || j || S.length === 0) return null;
574
+ let e = be ? new Date(be) : new Date(Math.min(...S.map((e) => e.start.getTime()))), t = new Date(Math.max(...S.map((e) => e.end.getTime())));
575
+ be || e.setDate(e.getDate() - 7), t.setDate(t.getDate() + 14), e = ct(e, V), t.setHours(23, 59, 59, 999);
576
+ let n = Math.max(1, (t.getTime() - e.getTime()) / at), r = Math.max(0, I - H);
577
577
  if (r <= 0) return null;
578
- let i = r / n * rt[V];
578
+ let i = r / n * it[V];
579
579
  if (i <= bt) return null;
580
580
  let a = Math.min(i, r * .6);
581
581
  return a > bt ? a : null;
582
582
  }, [
583
583
  Ct,
584
584
  S,
585
+ be,
585
586
  j,
586
- M,
587
587
  V,
588
- Re,
588
+ I,
589
589
  H,
590
590
  bt
591
- ]), It = Ct ?? Ft ?? bt, Lt = It / rt[V], Rt = et(H), [zt, Bt] = e.useState(null), [Vt, Ht] = e.useState({}), [Ut, Wt] = e.useState(null), U = e.useMemo(() => {
591
+ ]), It = Ct ?? Ft ?? bt, Lt = It / it[V], Rt = tt(H), [zt, Bt] = e.useState(null), [Vt, Ht] = e.useState({}), [Ut, Wt] = e.useState(null), U = e.useMemo(() => {
592
592
  if (!oe) return S;
593
593
  let e = /* @__PURE__ */ new Set();
594
594
  for (let t of S) {
@@ -655,7 +655,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
655
655
  Yt.current = W;
656
656
  }, [W]);
657
657
  let Xt = e.useRef(!1), Zt = e.useCallback((e) => {
658
- let t = V === "day" && v && v.bands.length > 0 && v ? Math.min(...v.bands.map((e) => e.durMs)) : it, n = (e, t) => nr.current ? nr.current(e, t) : lt(e, t, "day"), r = new Date(e.originStart), i = new Date(e.originEnd);
658
+ let t = V === "day" && v && v.bands.length > 0 && v ? Math.min(...v.bands.map((e) => e.durMs)) : at, n = (e, t) => nr.current ? nr.current(e, t) : ut(e, t, "day"), r = new Date(e.originStart), i = new Date(e.originEnd);
659
659
  return e.mode === "move" ? (r = n(e.originStart, e.unitDelta), i = new Date(e.originEnd.getTime() + (r.getTime() - e.originStart.getTime()))) : e.mode === "resize-left" ? (r = n(e.originStart, e.unitDelta), i.getTime() - r.getTime() < t && (r = new Date(i.getTime() - t))) : e.mode === "resize-right" && (i = n(e.originEnd, e.unitDelta), i.getTime() - r.getTime() < t && (i = new Date(r.getTime() + t))), {
660
660
  start: r,
661
661
  end: i
@@ -700,7 +700,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
700
700
  let t = new Date(e);
701
701
  t.setHours(0, 0, 0, 0);
702
702
  for (let n = -1; n <= 1; n++) {
703
- let r = t.getTime() + n * it + v.dayStartMin * 6e4;
703
+ let r = t.getTime() + n * at + v.dayStartMin * 6e4;
704
704
  for (let t of v.bands) {
705
705
  if (r >= e) return r;
706
706
  r += t.durMs;
@@ -721,7 +721,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
721
721
  start: r.start ?? n.start,
722
722
  end: r.end ?? n.end
723
723
  });
724
- let { changes: n } = Ve(Qt.current.map((e) => {
724
+ let { changes: n } = He(Qt.current.map((e) => {
725
725
  let n = t.get(String(e.id));
726
726
  return n ? {
727
727
  ...e,
@@ -767,7 +767,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
767
767
  }), [tn]);
768
768
  e.useEffect(() => {
769
769
  if (!W) return;
770
- let e = V === "day" && v && v.bands.length > 0 && v ? Lt * Math.min(...v.bands.map((e) => e.durMs)) / it : Lt, t = (t) => {
770
+ let e = V === "day" && v && v.bands.length > 0 && v ? Lt * Math.min(...v.bands.map((e) => e.durMs)) / at : Lt, t = (t) => {
771
771
  let n = Yt.current;
772
772
  if (!n) return;
773
773
  let r = Math.round((t.clientX - n.originClientX) / Math.max(e, 1));
@@ -879,7 +879,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
879
879
  r != null && r !== "" && e.push([String(r), String(t.id)]);
880
880
  }
881
881
  return e;
882
- }, [S]), xn = e.useCallback((e, t) => String(t.id) === String(e) ? "self" : t.locked ? "locked" : t.type === "group" ? "group" : He(bn, e, t.id) ? "cycle" : null, [bn]), Sn = e.useCallback((e, t) => xn(e, t) === null, [xn]), Cn = e.useRef(null), [G, wn] = e.useState(null), Tn = e.useRef(null);
882
+ }, [S]), xn = e.useCallback((e, t) => String(t.id) === String(e) ? "self" : t.locked ? "locked" : t.type === "group" ? "group" : Ue(bn, e, t.id) ? "cycle" : null, [bn]), Sn = e.useCallback((e, t) => xn(e, t) === null, [xn]), Cn = e.useRef(null), [G, wn] = e.useState(null), Tn = e.useRef(null);
883
883
  e.useEffect(() => {
884
884
  Tn.current = G;
885
885
  }, [G]), e.useEffect(() => {
@@ -898,7 +898,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
898
898
  if (e && e.targetId != null && z) {
899
899
  let t = S.find((t) => String(t.id) === String(e.sourceId)), n = S.find((t) => String(t.id) === String(e.targetId)), r = e.targetEnd ?? "start", i = he ? `${e.sourceEnd === "end" ? "f" : "s"}${r === "end" ? "f" : "s"}` : "fs";
900
900
  t && n && Sn(e.sourceId, n) && (d?.(t, n, i) ?? !0) && z(t, n, i);
901
- } else e && e.rejectedReason && z && ee.error(P(`gantt.link.rejected.${e.rejectedReason}`));
901
+ } else e && e.rejectedReason && z && te.error(N(`gantt.link.rejected.${e.rejectedReason}`));
902
902
  Xt.current = !0, window.setTimeout(() => {
903
903
  Xt.current = !1;
904
904
  }, 0), wn(null);
@@ -913,7 +913,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
913
913
  d,
914
914
  Sn,
915
915
  he,
916
- P
916
+ N
917
917
  ]);
918
918
  let [En, Dn] = e.useState(null), On = e.useRef(null);
919
919
  e.useEffect(() => {
@@ -958,14 +958,14 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
958
958
  taskId: e.id
959
959
  });
960
960
  }, [zn]), Vn = e.useCallback((e, t, n, r) => {
961
- r.preventDefault(), r.stopPropagation(), !(!z && !at) && An({
961
+ r.preventDefault(), r.stopPropagation(), !(!z && !Ye) && An({
962
962
  x: r.clientX,
963
963
  y: r.clientY,
964
964
  sourceId: e,
965
965
  targetId: t,
966
966
  type: n
967
967
  });
968
- }, [z, at]), [Hn, Un] = e.useState(() => new Set(St?.collapsedIds ?? [])), Wn = e.useCallback((e) => {
968
+ }, [z, Ye]), [Hn, Un] = e.useState(() => new Set(St?.collapsedIds ?? [])), Wn = e.useCallback((e) => {
969
969
  Un((t) => {
970
970
  let n = new Set(t), r = String(e);
971
971
  return n.has(r) ? n.delete(r) : n.add(r), n;
@@ -1014,7 +1014,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1014
1014
  for (let a of s) {
1015
1015
  let s = i(a, n);
1016
1016
  (!e || s.start < e) && (e = s.start), (!t || s.end > t) && (t = s.end);
1017
- let c = Math.max(s.end.getTime() - s.start.getTime(), it);
1017
+ let c = Math.max(s.end.getTime() - s.start.getTime(), at);
1018
1018
  r += c * s.progress, o += c;
1019
1019
  }
1020
1020
  n.delete(a), c = {
@@ -1091,14 +1091,14 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1091
1091
  fn,
1092
1092
  pn
1093
1093
  ]), q = e.useMemo(() => {
1094
- let e = j ? new Date(j) : x.now(), t = M ? new Date(M) : x.now();
1095
- return !j && S.length > 0 && (e = new Date(Math.min(...S.map((e) => e.start.getTime()))), e.setDate(e.getDate() - 7)), !M && S.length > 0 && (t = new Date(Math.max(...S.map((e) => e.end.getTime()))), t.setDate(t.getDate() + 14)), e = V === "day" && v && v.bands.length > 0 ? qe(e, v.dayStartMin) : st(e, V), t.setHours(23, 59, 59, 999), {
1094
+ let e = be ? new Date(be) : x.now(), t = j ? new Date(j) : x.now();
1095
+ return !be && S.length > 0 && (e = new Date(Math.min(...S.map((e) => e.start.getTime()))), e.setDate(e.getDate() - 7)), !j && S.length > 0 && (t = new Date(Math.max(...S.map((e) => e.end.getTime()))), t.setDate(t.getDate() + 14)), e = V === "day" && v && v.bands.length > 0 ? qe(e, v.dayStartMin) : ct(e, V), t.setHours(23, 59, 59, 999), {
1096
1096
  start: e,
1097
1097
  end: t
1098
1098
  };
1099
1099
  }, [
1100
+ be,
1100
1101
  j,
1101
- M,
1102
1102
  S,
1103
1103
  V,
1104
1104
  v,
@@ -1119,7 +1119,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1119
1119
  if (qn && v) {
1120
1120
  let t = new Date(q.start);
1121
1121
  for (; t <= q.end;) for (let n of v.bands) {
1122
- let r = n.durMs / it * Lt;
1122
+ let r = n.durMs / at * Lt;
1123
1123
  e.push({
1124
1124
  date: new Date(t),
1125
1125
  label: n.label,
@@ -1133,16 +1133,16 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1133
1133
  }
1134
1134
  let t = new Date(q.start);
1135
1135
  for (; t <= q.end;) {
1136
- let n = lt(t, 1, V);
1136
+ let n = ut(t, 1, V);
1137
1137
  if (Jn && !Yn(t)) {
1138
1138
  t = n;
1139
1139
  continue;
1140
1140
  }
1141
- let r = (n.getTime() - t.getTime()) / it * Lt, i, a;
1142
- V === "day" ? (i = String(t.getDate()), a = t.toLocaleDateString(F, { weekday: "narrow" })) : i = V === "week" ? t.toLocaleDateString(F, {
1141
+ let r = (n.getTime() - t.getTime()) / at * Lt, i, a;
1142
+ V === "day" ? (i = String(t.getDate()), a = t.toLocaleDateString(P, { weekday: "narrow" })) : i = V === "week" ? t.toLocaleDateString(P, {
1143
1143
  month: "numeric",
1144
1144
  day: "numeric"
1145
- }) : V === "month" ? t.toLocaleDateString(F, { month: "short" }) : V === "quarter" ? `Q${Math.floor(t.getMonth() / 3) + 1}` : String(t.getFullYear()), e.push({
1145
+ }) : V === "month" ? t.toLocaleDateString(P, { month: "short" }) : V === "quarter" ? `Q${Math.floor(t.getMonth() / 3) + 1}` : String(t.getFullYear()), e.push({
1146
1146
  date: new Date(t),
1147
1147
  label: i,
1148
1148
  sublabel: a,
@@ -1155,7 +1155,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1155
1155
  q,
1156
1156
  V,
1157
1157
  Lt,
1158
- F,
1158
+ P,
1159
1159
  Jn,
1160
1160
  Yn,
1161
1161
  qn,
@@ -1164,7 +1164,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1164
1164
  let e = Array(J.length + 1), t = 0;
1165
1165
  for (let n = 0; n < J.length; n++) e[n] = t, t += J[n].width;
1166
1166
  return e[J.length] = t, e;
1167
- }, [J]), Xn = Y[Y.length - 1], Zn = e.useMemo(() => J.map((e) => e.date.getTime()), [J]), Qn = e.useMemo(() => J.map((e) => e.realMs == null ? lt(e.date, 1, V).getTime() - e.date.getTime() : e.realMs), [J, V]), X = e.useCallback((e) => {
1167
+ }, [J]), Xn = Y[Y.length - 1], Zn = e.useMemo(() => J.map((e) => e.date.getTime()), [J]), Qn = e.useMemo(() => J.map((e) => e.realMs == null ? ut(e.date, 1, V).getTime() - e.date.getTime() : e.realMs), [J, V]), X = e.useCallback((e) => {
1168
1168
  let t = J.length;
1169
1169
  if (t === 0) return 0;
1170
1170
  let n = e.getTime(), r = 0, i = t - 1, a = 0;
@@ -1207,7 +1207,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1207
1207
  Ot.current = null;
1208
1208
  let t = Z.current;
1209
1209
  if (!t || t.clientWidth === 0) return;
1210
- let n = Math.max(0, t.scrollWidth - t.clientWidth), r = Math.max(0, Math.min(Math.round(X(st(e, V))), n));
1210
+ let n = Math.max(0, t.scrollWidth - t.clientWidth), r = Math.max(0, Math.min(Math.round(X(ct(e, V))), n));
1211
1211
  t.scrollLeft !== r && (t.scrollLeft = r);
1212
1212
  }, [V, X]);
1213
1213
  let tr = e.useCallback((e, t) => {
@@ -1230,7 +1230,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1230
1230
  let r = String(qe(n.date, v.dayStartMin).getTime()), i = e[e.length - 1];
1231
1231
  i && i.key === r ? i.width += n.width : e.push({
1232
1232
  key: r,
1233
- label: n.date.toLocaleDateString(F, {
1233
+ label: n.date.toLocaleDateString(P, {
1234
1234
  month: "short",
1235
1235
  day: "numeric"
1236
1236
  }),
@@ -1245,7 +1245,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1245
1245
  let i = r.date.getFullYear(), a = Math.floor(i / 10) * 10, o = t === "decade" ? String(a) : t === "year" ? String(i) : `${i}-${r.date.getMonth()}`, s = e[e.length - 1];
1246
1246
  s && s.key === o ? s.width += r.width : e.push({
1247
1247
  key: o,
1248
- label: t === "decade" ? `${a}s` : t === "year" ? String(i) : r.date.toLocaleDateString(F, {
1248
+ label: t === "decade" ? `${a}s` : t === "year" ? String(i) : r.date.toLocaleDateString(P, {
1249
1249
  month: "short",
1250
1250
  year: "numeric"
1251
1251
  }),
@@ -1257,10 +1257,10 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1257
1257
  }, [
1258
1258
  J,
1259
1259
  V,
1260
- F,
1260
+ P,
1261
1261
  qn,
1262
1262
  v
1263
- ]), ir = e.useMemo(() => (N ?? []).map((e, t) => {
1263
+ ]), ir = e.useMemo(() => (M ?? []).map((e, t) => {
1264
1264
  let n = e.date instanceof Date ? e.date : new Date(e.date);
1265
1265
  return {
1266
1266
  index: t,
@@ -1270,7 +1270,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1270
1270
  valid: !isNaN(n.getTime()) && n >= q.start && n <= q.end
1271
1271
  };
1272
1272
  }).filter((e) => e.valid), [
1273
- N,
1273
+ M,
1274
1274
  q,
1275
1275
  X
1276
1276
  ]), ar = e.useRef(null), or = e.useRef(null), sr = e.useRef(null), Z = e.useRef(null);
@@ -1319,14 +1319,14 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1319
1319
  let t = new ResizeObserver(gr);
1320
1320
  return t.observe(e), () => t.disconnect();
1321
1321
  }, [gr]);
1322
- let _r = e.useMemo(() => ct(Y, fr.left - 240, fr.left + mr.width + 240), [
1322
+ let _r = e.useMemo(() => lt(Y, fr.left - 240, fr.left + mr.width + 240), [
1323
1323
  Y,
1324
1324
  fr.left,
1325
1325
  mr.width
1326
1326
  ]), vr = e.useMemo(() => {
1327
1327
  let e = rr.map((e) => e.offset);
1328
1328
  return e.push(Xn), e;
1329
- }, [rr, Xn]), yr = e.useMemo(() => ct(vr, fr.left - 240, fr.left + mr.width + 240), [
1329
+ }, [rr, Xn]), yr = e.useMemo(() => lt(vr, fr.left - 240, fr.left + mr.width + 240), [
1330
1330
  vr,
1331
1331
  fr.left,
1332
1332
  mr.width
@@ -1344,7 +1344,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1344
1344
  return document.addEventListener("fullscreenchange", e), () => document.removeEventListener("fullscreenchange", e);
1345
1345
  }, []);
1346
1346
  let Cr = e.useCallback(() => {
1347
- let e = I.current;
1347
+ let e = Re.current;
1348
1348
  e && (document.fullscreenElement ? document.exitFullscreen?.() : e.requestFullscreen?.());
1349
1349
  }, []), wr = e.useRef(null), Tr = e.useCallback((e) => {
1350
1350
  if (e.touches.length === 2) {
@@ -1428,7 +1428,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1428
1428
  e.useEffect(() => () => {
1429
1429
  ur.current.forEach((e) => window.clearTimeout(e)), dr.current?.();
1430
1430
  }, []);
1431
- let Nr = e.useCallback(() => jr(st(x.now(), "week")), [jr, x]), Pr = e.useCallback(() => jr(st(x.now(), "month")), [jr, x]), Fr = e.useRef(null), Ir = e.useRef(null), Lr = e.useRef(null), Rr = e.useRef(null), zr = e.useRef(null), Br = e.useRef(null), Vr = e.useRef(null), Hr = e.useRef(null), Ur = e.useCallback(() => {
1431
+ let Nr = e.useCallback(() => jr(ct(x.now(), "week")), [jr, x]), Pr = e.useCallback(() => jr(ct(x.now(), "month")), [jr, x]), Fr = e.useRef(null), Ir = e.useRef(null), Lr = e.useRef(null), Rr = e.useRef(null), zr = e.useRef(null), Br = e.useRef(null), Vr = e.useRef(null), Hr = e.useRef(null), Ur = e.useCallback(() => {
1432
1432
  let e = sr.current, t = Fr.current, n = Ir.current, r = Lr.current;
1433
1433
  if (e && t && n && r) {
1434
1434
  let i = e.scrollWidth > e.clientWidth + 1;
@@ -1512,7 +1512,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1512
1512
  top: t.scrollTop
1513
1513
  });
1514
1514
  }, Xr = (e, t) => {
1515
- let n = X(e), r = qn && v ? Lt * Math.min(...v.bands.map((e) => e.durMs)) / it : Lt;
1515
+ let n = X(e), r = qn && v ? Lt * Math.min(...v.bands.map((e) => e.durMs)) / at : Lt;
1516
1516
  return {
1517
1517
  left: n,
1518
1518
  width: Math.max(X(t) - n, r, 3)
@@ -1583,7 +1583,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1583
1583
  h.push(`L ${m(f)} ${m(t)}`, `L ${m(p)} ${m(t)}`, `L ${m(p)} ${m(s)}`, `L ${m(d)} ${m(s)}`);
1584
1584
  }
1585
1585
  return h.join(" ");
1586
- }, mi = W?.taskId ?? Ut, [hi, gi] = e.useState(ne), _i = e.useMemo(() => hi ? Be(S, _) : null, [
1586
+ }, mi = W?.taskId ?? Ut, [hi, gi] = e.useState(ne), _i = e.useMemo(() => hi ? Ve(S, _) : null, [
1587
1587
  hi,
1588
1588
  S,
1589
1589
  _
@@ -1595,7 +1595,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1595
1595
  }, [xi]);
1596
1596
  let Ci = e.useCallback(() => {
1597
1597
  if (!R) return;
1598
- let { changes: e, skippedLocked: t } = Ve(S, _, cn);
1598
+ let { changes: e, skippedLocked: t } = He(S, _, cn);
1599
1599
  if (!e.length) {
1600
1600
  Si(!0);
1601
1601
  return;
@@ -1733,15 +1733,15 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1733
1733
  }, [_e]), Di = e.useCallback(async () => {
1734
1734
  let e = Ti();
1735
1735
  if (!e) return;
1736
- let t = await ut(e.svg, e.W, e.H);
1736
+ let t = await dt(e.svg, e.W, e.H);
1737
1737
  t && t.toBlob((e) => {
1738
- e && dt(e, `${Ei()}.png`);
1738
+ e && ft(e, `${Ei()}.png`);
1739
1739
  }, "image/png");
1740
1740
  }, [Ti, Ei]), Oi = e.useCallback(async () => {
1741
1741
  let e = Ti();
1742
1742
  if (!e) return;
1743
- let t = await ut(e.svg, e.W, e.H);
1744
- t && dt(ft(pt(t.toDataURL("image/jpeg", .92)), t.width, t.height), `${Ei()}.pdf`);
1743
+ let t = await dt(e.svg, e.W, e.H);
1744
+ t && ft(pt(mt(t.toDataURL("image/jpeg", .92)), t.width, t.height), `${Ei()}.pdf`);
1745
1745
  }, [Ti, Ei]), [ki, Ai] = e.useState(!1), ji = e.useCallback(() => {
1746
1746
  let e = {
1747
1747
  viewMode: V,
@@ -1750,7 +1750,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1750
1750
  taskListWidth: Tt,
1751
1751
  collapsedIds: Array.from(Hn)
1752
1752
  };
1753
- ue && gt(ue, e), de?.(e), Ai(!0);
1753
+ ue && _t(ue, e), de?.(e), Ai(!0);
1754
1754
  }, [
1755
1755
  V,
1756
1756
  Ct,
@@ -1765,12 +1765,12 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1765
1765
  let e = setTimeout(() => Ai(!1), 1500);
1766
1766
  return () => clearTimeout(e);
1767
1767
  }, [ki]), /* @__PURE__ */ A("div", {
1768
- ref: I,
1769
- className: pe("flex flex-col h-full bg-background overflow-hidden min-w-0", m),
1768
+ ref: Re,
1769
+ className: me("flex flex-col h-full bg-background overflow-hidden min-w-0", m),
1770
1770
  "data-readonly": L ? "true" : void 0,
1771
1771
  "data-mobile-readonly": ae && ze ? "true" : void 0,
1772
1772
  children: [
1773
- /* @__PURE__ */ k("style", { children: "\n .gantt-resize-handle:hover { background-color: rgba(255, 255, 255, 0.4); }\n .gantt-bar-hover:hover { filter: brightness(1.1); }\n .gantt-row-open-btn { opacity: 0; transition: opacity 0.15s ease; }\n /* :where keeps the row-hover reveal at zero specificity so the\n button's own :hover/:focus-visible full-opacity rule can win. */\n :where(.group\\/task-row:hover) .gantt-row-open-btn { opacity: 0.6; }\n .gantt-row-open-btn:hover, .gantt-row-open-btn:focus-visible { opacity: 1; }\n /* 定位闪烁: blink the located bar 3× with a thick ring + colored glow so\n it's hard to miss. The ring is an outline (not box-shadow) and the glow\n is a drop-shadow *filter* — both stay clear of the critical-path bar's\n inline box-shadow, which they'd otherwise clobber. */\n @keyframes gantt-flash {\n 0%, 25%, 50%, 100% {\n outline-color: rgba(37, 99, 235, 0);\n filter: drop-shadow(0 0 0 rgba(37, 99, 235, 0));\n }\n 12%, 37%, 62% {\n outline-color: rgba(37, 99, 235, 1);\n filter: drop-shadow(0 0 9px rgba(37, 99, 235, 0.9));\n }\n }\n .gantt-flash {\n outline: 3px solid transparent;\n outline-offset: 3px;\n border-radius: 2px;\n animation: gantt-flash 1.5s ease-in-out;\n }\n @media (min-width: 640px) {\n .gantt-sm-h50 { height: 50px; }\n .gantt-sm-w20 { width: 80px; }\n .gantt-sm-hidden { display: none; }\n }\n /* The timeline's NATIVE scrollbars are fully hidden — both axes are\n replaced by the self-drawn bars (水平底部 / 垂直右侧). Styling the\n native bar is a dead end: overlay-scrollbar engines (macOS \"show\n while scrolling\", embedded Chromium) ignore ::-webkit-scrollbar\n theming yet still flash their own auto-hiding bar on scroll, which\n doubled up with the self-drawn one (双滚动条). scrollbar-width:none\n is honored by overlay engines too; the ::-webkit rule covers older\n WebKit. Wheel/trackpad/programmatic scrolling is unaffected. */\n [data-testid=\"gantt-timeline\"] { scrollbar-width: none; }\n [data-testid=\"gantt-timeline\"]::-webkit-scrollbar { display: none; width: 0; height: 0; }\n /* The task-list pane scrolls in lockstep with the timeline, so its own\n vertical scrollbar (butted against the divider) was a confusing second\n bar. Hide it — the pane stays wheel/drag-scrollable and synced. */\n .gantt-task-list::-webkit-scrollbar { width: 0; height: 0; }\n .gantt-task-list { scrollbar-width: none; }\n " }),
1773
+ /* @__PURE__ */ k("style", { children: "\n .gantt-resize-handle:hover { background-color: rgba(255, 255, 255, 0.4); }\n .gantt-bar-hover:hover { filter: brightness(1.1); }\n .gantt-row-open-btn { opacity: 0; transition: opacity 0.15s ease; }\n /* :where keeps the row-hover reveal at zero specificity so the\n button's own :hover/:focus-visible full-opacity rule can win. */\n :where(.group\\/task-row:hover) .gantt-row-open-btn { opacity: 0.6; }\n .gantt-row-open-btn:hover, .gantt-row-open-btn:focus-visible { opacity: 1; }\n /* Locate flash: blink the located bar 3× with a thick ring + colored glow so\n it's hard to miss. The ring is an outline (not box-shadow) and the glow\n is a drop-shadow *filter* — both stay clear of the critical-path bar's\n inline box-shadow, which they'd otherwise clobber. */\n @keyframes gantt-flash {\n 0%, 25%, 50%, 100% {\n outline-color: rgba(37, 99, 235, 0);\n filter: drop-shadow(0 0 0 rgba(37, 99, 235, 0));\n }\n 12%, 37%, 62% {\n outline-color: rgba(37, 99, 235, 1);\n filter: drop-shadow(0 0 9px rgba(37, 99, 235, 0.9));\n }\n }\n .gantt-flash {\n outline: 3px solid transparent;\n outline-offset: 3px;\n border-radius: 2px;\n animation: gantt-flash 1.5s ease-in-out;\n }\n @media (min-width: 640px) {\n .gantt-sm-h50 { height: 50px; }\n .gantt-sm-w20 { width: 80px; }\n .gantt-sm-hidden { display: none; }\n }\n /* The timeline's NATIVE scrollbars are fully hidden — both axes are\n replaced by the self-drawn bars (horizontal at the bottom, vertical\n on the right). Styling the native bar is a dead end: overlay-scrollbar\n engines (macOS \"show while scrolling\", embedded Chromium) ignore\n ::-webkit-scrollbar theming yet still flash their own auto-hiding bar\n on scroll, which doubled up with the self-drawn one (two visible\n scrollbars). scrollbar-width:none is honored by overlay engines too;\n the ::-webkit rule covers older WebKit. Wheel/trackpad/programmatic\n scrolling is unaffected. */\n [data-testid=\"gantt-timeline\"] { scrollbar-width: none; }\n [data-testid=\"gantt-timeline\"]::-webkit-scrollbar { display: none; width: 0; height: 0; }\n /* The task-list pane scrolls in lockstep with the timeline, so its own\n vertical scrollbar (butted against the divider) was a confusing second\n bar. Hide it — the pane stays wheel/drag-scrollable and synced. */\n .gantt-task-list::-webkit-scrollbar { width: 0; height: 0; }\n .gantt-task-list { scrollbar-width: none; }\n " }),
1774
1774
  /* @__PURE__ */ A("div", {
1775
1775
  className: "flex flex-col sm:flex-row items-start sm:items-center justify-between gap-2 p-2 border-b bg-card",
1776
1776
  children: [/* @__PURE__ */ A("div", {
@@ -1780,19 +1780,19 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1780
1780
  variant: "ghost",
1781
1781
  size: "icon",
1782
1782
  className: "h-8 w-8",
1783
- "aria-label": P("gantt.toolbar.prevPeriod"),
1784
- children: /* @__PURE__ */ k(Ce, { className: "h-4 w-4" })
1783
+ "aria-label": N("gantt.toolbar.prevPeriod"),
1784
+ children: /* @__PURE__ */ k(we, { className: "h-4 w-4" })
1785
1785
  }),
1786
1786
  /* @__PURE__ */ k(y, {
1787
1787
  variant: "ghost",
1788
1788
  size: "icon",
1789
1789
  className: "h-8 w-8",
1790
- "aria-label": P("gantt.toolbar.nextPeriod"),
1791
- children: /* @__PURE__ */ k(we, { className: "h-4 w-4" })
1790
+ "aria-label": N("gantt.toolbar.nextPeriod"),
1791
+ children: /* @__PURE__ */ k(Te, { className: "h-4 w-4" })
1792
1792
  }),
1793
1793
  /* @__PURE__ */ k("span", {
1794
1794
  className: "font-semibold text-xs sm:text-sm",
1795
- children: q.start.toLocaleDateString(F, {
1795
+ children: q.start.toLocaleDateString(P, {
1796
1796
  month: "long",
1797
1797
  year: "numeric"
1798
1798
  })
@@ -1800,8 +1800,8 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1800
1800
  L && /* @__PURE__ */ A("span", {
1801
1801
  className: "inline-flex items-center gap-1 rounded-full border bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground",
1802
1802
  "data-testid": "gantt-readonly-badge",
1803
- title: P("gantt.readOnlyHint"),
1804
- children: [/* @__PURE__ */ k(Ee, { className: "h-3 w-3" }), P("gantt.readOnly")]
1803
+ title: N("gantt.readOnlyHint"),
1804
+ children: [/* @__PURE__ */ k(De, { className: "h-3 w-3" }), N("gantt.readOnly")]
1805
1805
  })
1806
1806
  ]
1807
1807
  }), /* @__PURE__ */ A("div", {
@@ -1810,15 +1810,15 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1810
1810
  /* @__PURE__ */ k("div", {
1811
1811
  className: "flex bg-muted rounded-md p-1",
1812
1812
  role: "group",
1813
- "aria-label": P("gantt.toolbar.viewMode"),
1814
- children: nt.map((e) => /* @__PURE__ */ k(y, {
1813
+ "aria-label": N("gantt.toolbar.viewMode"),
1814
+ children: rt.map((e) => /* @__PURE__ */ k(y, {
1815
1815
  variant: "ghost",
1816
1816
  size: "sm",
1817
- className: pe("h-6 px-1.5 sm:px-2 text-xs", V === e && "bg-background shadow-sm hover:bg-background"),
1817
+ className: me("h-6 px-1.5 sm:px-2 text-xs", V === e && "bg-background shadow-sm hover:bg-background"),
1818
1818
  onClick: () => er(e),
1819
1819
  "aria-pressed": V === e,
1820
1820
  "data-testid": `gantt-view-mode-${e}`,
1821
- children: P(`gantt.viewMode.${e}`)
1821
+ children: N(`gantt.viewMode.${e}`)
1822
1822
  }, e))
1823
1823
  }),
1824
1824
  /* @__PURE__ */ A("div", {
@@ -1830,12 +1830,12 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1830
1830
  onClick: () => {
1831
1831
  if (It > 15) wt(Math.max(15, It - 10));
1832
1832
  else {
1833
- let e = nt.indexOf(V);
1834
- e < nt.length - 1 && (er(nt[e + 1]), wt(bt));
1833
+ let e = rt.indexOf(V);
1834
+ e < rt.length - 1 && (er(rt[e + 1]), wt(bt));
1835
1835
  }
1836
1836
  },
1837
- "aria-label": P("gantt.toolbar.zoomOut"),
1838
- children: /* @__PURE__ */ k(Me, { className: "h-3 w-3" })
1837
+ "aria-label": N("gantt.toolbar.zoomOut"),
1838
+ children: /* @__PURE__ */ k(Ne, { className: "h-3 w-3" })
1839
1839
  }), /* @__PURE__ */ k(y, {
1840
1840
  variant: "ghost",
1841
1841
  size: "icon",
@@ -1843,11 +1843,11 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1843
1843
  onClick: () => {
1844
1844
  if (It < 120) wt(Math.min(120, It + 10));
1845
1845
  else {
1846
- let e = nt.indexOf(V);
1847
- e > 0 && (er(nt[e - 1]), wt(bt));
1846
+ let e = rt.indexOf(V);
1847
+ e > 0 && (er(rt[e - 1]), wt(bt));
1848
1848
  }
1849
1849
  },
1850
- "aria-label": P("gantt.toolbar.zoomIn"),
1850
+ "aria-label": N("gantt.toolbar.zoomIn"),
1851
1851
  children: /* @__PURE__ */ k(O, { className: "h-3 w-3" })
1852
1852
  })]
1853
1853
  }),
@@ -1856,10 +1856,10 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1856
1856
  size: "icon",
1857
1857
  className: "h-8 w-8",
1858
1858
  onClick: () => Mt((e) => !e),
1859
- "aria-label": P(jt ? "gantt.toolbar.showTaskList" : "gantt.toolbar.hideTaskList"),
1859
+ "aria-label": N(jt ? "gantt.toolbar.showTaskList" : "gantt.toolbar.hideTaskList"),
1860
1860
  "aria-pressed": jt,
1861
1861
  "data-testid": "gantt-toggle-task-list",
1862
- children: k(jt ? Oe : ke, { className: "h-4 w-4" })
1862
+ children: k(jt ? ke : Ae, { className: "h-4 w-4" })
1863
1863
  }),
1864
1864
  /* @__PURE__ */ k(y, {
1865
1865
  variant: "ghost",
@@ -1867,55 +1867,55 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1867
1867
  className: "h-8 px-2 text-xs",
1868
1868
  onClick: kr,
1869
1869
  disabled: Or == null,
1870
- "aria-label": P("gantt.toolbar.jumpToToday"),
1870
+ "aria-label": N("gantt.toolbar.jumpToToday"),
1871
1871
  "data-testid": "gantt-jump-today",
1872
- children: P("gantt.toolbar.today")
1872
+ children: N("gantt.toolbar.today")
1873
1873
  }),
1874
1874
  /* @__PURE__ */ k(y, {
1875
1875
  variant: "ghost",
1876
1876
  size: "sm",
1877
1877
  className: "h-8 px-2 text-xs",
1878
1878
  onClick: Nr,
1879
- "aria-label": P("gantt.toolbar.thisWeek"),
1879
+ "aria-label": N("gantt.toolbar.thisWeek"),
1880
1880
  "data-testid": "gantt-jump-week",
1881
- children: P("gantt.toolbar.thisWeek")
1881
+ children: N("gantt.toolbar.thisWeek")
1882
1882
  }),
1883
1883
  /* @__PURE__ */ k(y, {
1884
1884
  variant: "ghost",
1885
1885
  size: "sm",
1886
1886
  className: "h-8 px-2 text-xs",
1887
1887
  onClick: Pr,
1888
- "aria-label": P("gantt.toolbar.thisMonth"),
1888
+ "aria-label": N("gantt.toolbar.thisMonth"),
1889
1889
  "data-testid": "gantt-jump-month",
1890
- children: P("gantt.toolbar.thisMonth")
1890
+ children: N("gantt.toolbar.thisMonth")
1891
1891
  }),
1892
1892
  fe ? /* @__PURE__ */ k(y, {
1893
1893
  variant: "ghost",
1894
1894
  size: "icon",
1895
1895
  className: "h-8 w-8",
1896
1896
  onClick: () => void fe(),
1897
- disabled: me,
1898
- "aria-label": P("gantt.toolbar.refresh"),
1899
- "aria-busy": me,
1897
+ disabled: pe,
1898
+ "aria-label": N("gantt.toolbar.refresh"),
1899
+ "aria-busy": pe,
1900
1900
  "data-testid": "gantt-refresh",
1901
1901
  children: /* @__PURE__ */ k(E, { className: "h-4 w-4" })
1902
1902
  }) : null,
1903
- R ? /* @__PURE__ */ A(Ne, { children: [/* @__PURE__ */ k(y, {
1903
+ R ? /* @__PURE__ */ A(Pe, { children: [/* @__PURE__ */ k(y, {
1904
1904
  variant: "ghost",
1905
1905
  size: "icon",
1906
1906
  className: "h-8 w-8",
1907
1907
  onClick: fn,
1908
1908
  disabled: !mn,
1909
- "aria-label": P("gantt.toolbar.undo"),
1909
+ "aria-label": N("gantt.toolbar.undo"),
1910
1910
  "data-testid": "gantt-undo",
1911
- children: /* @__PURE__ */ k(je, { className: "h-4 w-4" })
1911
+ children: /* @__PURE__ */ k(Me, { className: "h-4 w-4" })
1912
1912
  }), /* @__PURE__ */ k(y, {
1913
1913
  variant: "ghost",
1914
1914
  size: "icon",
1915
1915
  className: "h-8 w-8",
1916
1916
  onClick: pn,
1917
1917
  disabled: !hn,
1918
- "aria-label": P("gantt.toolbar.redo"),
1918
+ "aria-label": N("gantt.toolbar.redo"),
1919
1919
  "data-testid": "gantt-redo",
1920
1920
  children: /* @__PURE__ */ k(T, { className: "h-4 w-4" })
1921
1921
  })] }) : null,
@@ -1924,18 +1924,18 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1924
1924
  size: "icon",
1925
1925
  className: "h-8 w-8",
1926
1926
  onClick: () => gi((e) => !e),
1927
- "aria-label": P("gantt.toolbar.criticalPath"),
1927
+ "aria-label": N("gantt.toolbar.criticalPath"),
1928
1928
  "aria-pressed": hi,
1929
1929
  "data-testid": "gantt-critical-path",
1930
1930
  style: hi ? { color: $ } : void 0,
1931
- children: /* @__PURE__ */ k(be, { className: "h-4 w-4" })
1931
+ children: /* @__PURE__ */ k(xe, { className: "h-4 w-4" })
1932
1932
  }),
1933
1933
  vt && R ? /* @__PURE__ */ k(y, {
1934
1934
  variant: "ghost",
1935
1935
  size: "icon",
1936
1936
  className: "h-8 w-8",
1937
1937
  onClick: Ci,
1938
- "aria-label": P("gantt.toolbar.autoSchedule"),
1938
+ "aria-label": N("gantt.toolbar.autoSchedule"),
1939
1939
  "data-testid": "gantt-auto-schedule",
1940
1940
  children: /* @__PURE__ */ k(D, { className: "h-4 w-4" })
1941
1941
  }) : null,
@@ -1944,7 +1944,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1944
1944
  size: "icon",
1945
1945
  className: "h-8 w-8",
1946
1946
  onClick: Di,
1947
- "aria-label": P("gantt.toolbar.exportPng"),
1947
+ "aria-label": N("gantt.toolbar.exportPng"),
1948
1948
  "data-testid": "gantt-export-png",
1949
1949
  children: /* @__PURE__ */ k(C, { className: "h-4 w-4" })
1950
1950
  }),
@@ -1953,30 +1953,30 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
1953
1953
  size: "icon",
1954
1954
  className: "h-8 w-8",
1955
1955
  onClick: Oi,
1956
- "aria-label": P("gantt.toolbar.exportPdf"),
1956
+ "aria-label": N("gantt.toolbar.exportPdf"),
1957
1957
  "data-testid": "gantt-export-pdf",
1958
- children: /* @__PURE__ */ k(Te, { className: "h-4 w-4" })
1958
+ children: /* @__PURE__ */ k(Ee, { className: "h-4 w-4" })
1959
1959
  }),
1960
1960
  de || ue ? /* @__PURE__ */ k(y, {
1961
1961
  variant: "ghost",
1962
1962
  size: "icon",
1963
1963
  className: "h-8 w-8",
1964
1964
  onClick: ji,
1965
- "aria-label": P("gantt.toolbar.saveLayout"),
1965
+ "aria-label": N("gantt.toolbar.saveLayout"),
1966
1966
  "aria-pressed": ki,
1967
1967
  "data-testid": "gantt-save-layout",
1968
1968
  style: ki ? { color: $ } : void 0,
1969
- children: /* @__PURE__ */ k(Ae, { className: "h-4 w-4" })
1969
+ children: /* @__PURE__ */ k(je, { className: "h-4 w-4" })
1970
1970
  }) : null,
1971
1971
  /* @__PURE__ */ k(y, {
1972
1972
  variant: "ghost",
1973
1973
  size: "icon",
1974
1974
  className: "h-8 w-8",
1975
1975
  onClick: Cr,
1976
- "aria-label": P(xr ? "gantt.toolbar.exitFullscreen" : "gantt.toolbar.enterFullscreen"),
1976
+ "aria-label": N(xr ? "gantt.toolbar.exitFullscreen" : "gantt.toolbar.enterFullscreen"),
1977
1977
  "aria-pressed": xr,
1978
1978
  "data-testid": "gantt-fullscreen",
1979
- children: k(xr ? w : De, { className: "h-4 w-4" })
1979
+ children: k(xr ? w : Oe, { className: "h-4 w-4" })
1980
1980
  })
1981
1981
  ]
1982
1982
  })]
@@ -2000,7 +2000,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2000
2000
  onPointerDown: (e) => {
2001
2001
  if (e.button !== 0) return;
2002
2002
  e.preventDefault();
2003
- let t = e.clientX, n = H, r = Math.max(160, Re - 200), i = (e) => {
2003
+ let t = e.clientX, n = H, r = Math.max(160, I - 200), i = (e) => {
2004
2004
  let i = Math.max(160, Math.min(n + (e.clientX - t), r));
2005
2005
  Et(i);
2006
2006
  }, a = () => {
@@ -2022,14 +2022,14 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2022
2022
  children: [
2023
2023
  /* @__PURE__ */ k("div", {
2024
2024
  className: "flex-1 truncate",
2025
- children: P("gantt.column.taskName")
2025
+ children: N("gantt.column.taskName")
2026
2026
  }),
2027
- Rt && /* @__PURE__ */ A(Ne, { children: [/* @__PURE__ */ k("div", {
2027
+ Rt && /* @__PURE__ */ A(Pe, { children: [/* @__PURE__ */ k("div", {
2028
2028
  className: "w-16 gantt-sm-w20 text-right",
2029
- children: P("gantt.column.start")
2029
+ children: N("gantt.column.start")
2030
2030
  }), /* @__PURE__ */ k("div", {
2031
2031
  className: "w-16 gantt-sm-w20 text-right",
2032
- children: P("gantt.column.end")
2032
+ children: N("gantt.column.end")
2033
2033
  })] }),
2034
2034
  o && /* @__PURE__ */ k("div", {
2035
2035
  className: "w-6 shrink-0 hidden sm:block",
@@ -2065,7 +2065,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2065
2065
  children: J.slice(_r.start, _r.end).map((e, t) => {
2066
2066
  let n = _r.start + t;
2067
2067
  return /* @__PURE__ */ A("div", {
2068
- className: pe("absolute top-0 bottom-0 flex items-center justify-center gap-1 border-r text-xs text-muted-foreground overflow-hidden", e.isWeekend && "bg-muted/50"),
2068
+ className: me("absolute top-0 bottom-0 flex items-center justify-center gap-1 border-r text-xs text-muted-foreground overflow-hidden", e.isWeekend && "bg-muted/50"),
2069
2069
  style: {
2070
2070
  left: Y[n],
2071
2071
  width: e.width,
@@ -2096,16 +2096,16 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2096
2096
  minWidth: H
2097
2097
  },
2098
2098
  role: "tree",
2099
- "aria-label": P("gantt.aria.taskList"),
2099
+ "aria-label": N("gantt.aria.taskList"),
2100
2100
  children: [
2101
2101
  Q.startIdx > 0 && /* @__PURE__ */ k("div", {
2102
2102
  style: { height: Q.startIdx * B },
2103
2103
  "aria-hidden": "true"
2104
2104
  }),
2105
2105
  K.slice(Q.startIdx, Q.endIdx).map((e) => {
2106
- let t = e.task, n = _t && zt === t.id, r = Hn.has(String(t.id)), i = Ln != null && String(Ln) === String(t.id);
2106
+ let t = e.task, n = ht && zt === t.id, r = Hn.has(String(t.id)), i = Ln != null && String(Ln) === String(t.id);
2107
2107
  return /* @__PURE__ */ A("div", {
2108
- className: pe("group/task-row relative flex items-center border-b px-2 sm:px-4 hover:bg-accent/50 cursor-pointer transition-colors", i && "bg-accent/50"),
2108
+ className: me("group/task-row relative flex items-center border-b px-2 sm:px-4 hover:bg-accent/50 cursor-pointer transition-colors", i && "bg-accent/50"),
2109
2109
  style: {
2110
2110
  height: B,
2111
2111
  touchAction: "manipulation"
@@ -2115,26 +2115,26 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2115
2115
  "aria-level": e.depth + 1,
2116
2116
  "aria-selected": i,
2117
2117
  "aria-expanded": e.hasChildren ? !r : void 0,
2118
- draggable: !!mt && !n && !t.locked,
2119
- onDragStart: mt ? (e) => {
2118
+ draggable: !!ot && !n && !t.locked,
2119
+ onDragStart: ot ? (e) => {
2120
2120
  e.dataTransfer.setData("text/plain", String(t.id)), e.dataTransfer.effectAllowed = "move";
2121
2121
  } : void 0,
2122
- onDragOver: mt ? (e) => {
2122
+ onDragOver: ot ? (e) => {
2123
2123
  e.preventDefault(), e.dataTransfer.dropEffect = "move";
2124
2124
  } : void 0,
2125
- onDrop: mt ? (e) => {
2125
+ onDrop: ot ? (e) => {
2126
2126
  e.preventDefault();
2127
2127
  let n = e.dataTransfer.getData("text/plain");
2128
2128
  if (!n || n === String(t.id)) return;
2129
2129
  let r = Kt.get(n);
2130
- r && String(r.parent ?? "") === String(t.parent ?? "") && mt(r, t);
2130
+ r && String(r.parent ?? "") === String(t.parent ?? "") && ot(r, t);
2131
2131
  } : void 0,
2132
2132
  onContextMenu: (e) => Bn(t, e),
2133
2133
  onClick: () => {
2134
2134
  Rn(t.id), n || Mr(e.start, e.end, t.id);
2135
2135
  },
2136
2136
  onDoubleClick: () => {
2137
- n || (_t && R && !e.isSummary && !t.locked ? (Bt(t.id), Ht({
2137
+ n || (ht && R && !e.isSummary && !t.locked ? (Bt(t.id), Ht({
2138
2138
  title: t.title,
2139
2139
  start: t.start.toLocaleDateString("en-CA"),
2140
2140
  end: t.end.toLocaleDateString("en-CA"),
@@ -2154,9 +2154,9 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2154
2154
  e.stopPropagation(), Wn(t.id);
2155
2155
  },
2156
2156
  "aria-expanded": !r,
2157
- "aria-label": P(r ? "gantt.row.expand" : "gantt.row.collapse"),
2157
+ "aria-label": N(r ? "gantt.row.expand" : "gantt.row.collapse"),
2158
2158
  "data-testid": `gantt-row-toggle-${t.id}`,
2159
- children: k(r ? we : Se, { className: "h-3.5 w-3.5" })
2159
+ children: k(r ? Te : Ce, { className: "h-3.5 w-3.5" })
2160
2160
  }) : /* @__PURE__ */ k("span", {
2161
2161
  className: "w-3 shrink-0",
2162
2162
  style: { marginLeft: -4 },
@@ -2189,17 +2189,17 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2189
2189
  }) : /* @__PURE__ */ A("span", {
2190
2190
  className: "flex flex-col min-w-0",
2191
2191
  children: [/* @__PURE__ */ k("span", {
2192
- className: pe("truncate", e.isSummary && "font-semibold"),
2192
+ className: me("truncate", e.isSummary && "font-semibold"),
2193
2193
  children: t.title
2194
2194
  }), /* @__PURE__ */ A("span", {
2195
2195
  className: "text-[10px] text-muted-foreground gantt-sm-hidden",
2196
2196
  children: [
2197
- e.start.toLocaleDateString(F, {
2197
+ e.start.toLocaleDateString(P, {
2198
2198
  month: "numeric",
2199
2199
  day: "numeric"
2200
2200
  }),
2201
2201
  " → ",
2202
- e.end.toLocaleDateString(F, {
2202
+ e.end.toLocaleDateString(P, {
2203
2203
  month: "numeric",
2204
2204
  day: "numeric"
2205
2205
  })
@@ -2221,7 +2221,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2221
2221
  start: e.target.value
2222
2222
  })),
2223
2223
  onClick: (e) => e.stopPropagation()
2224
- }) : e.start.toLocaleDateString(F, {
2224
+ }) : e.start.toLocaleDateString(P, {
2225
2225
  month: "numeric",
2226
2226
  day: "numeric"
2227
2227
  })
@@ -2239,7 +2239,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2239
2239
  end: e.target.value
2240
2240
  })),
2241
2241
  onClick: (e) => e.stopPropagation()
2242
- }) : e.end.toLocaleDateString(F, {
2242
+ }) : e.end.toLocaleDateString(P, {
2243
2243
  month: "numeric",
2244
2244
  day: "numeric"
2245
2245
  })
@@ -2249,14 +2249,14 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2249
2249
  style: { marginLeft: 4 },
2250
2250
  children: !n && /* @__PURE__ */ k("button", {
2251
2251
  type: "button",
2252
- title: P("gantt.row.open"),
2253
- "aria-label": P("gantt.row.open"),
2252
+ title: N("gantt.row.open"),
2253
+ "aria-label": N("gantt.row.open"),
2254
2254
  "data-testid": `gantt-row-open-${t.id}`,
2255
2255
  className: "gantt-row-open-btn h-6 w-6 rounded-md flex items-center justify-center hover:bg-accent text-muted-foreground hover:text-foreground",
2256
2256
  onClick: (e) => {
2257
2257
  e.stopPropagation(), o(t);
2258
2258
  },
2259
- children: /* @__PURE__ */ k(xe, { className: "h-3.5 w-3.5" })
2259
+ children: /* @__PURE__ */ k(Se, { className: "h-3.5 w-3.5" })
2260
2260
  })
2261
2261
  })
2262
2262
  ]
@@ -2289,14 +2289,14 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2289
2289
  backgroundColor: "rgba(239, 68, 68, 0.8)"
2290
2290
  },
2291
2291
  "data-testid": "gantt-today-marker",
2292
- "aria-label": P("gantt.toolbar.today"),
2292
+ "aria-label": N("gantt.toolbar.today"),
2293
2293
  children: /* @__PURE__ */ k("div", {
2294
2294
  className: "absolute -translate-x-1/2 left-0 text-[10px] font-semibold text-white rounded-sm px-1 py-0.5 whitespace-nowrap z-30",
2295
2295
  style: {
2296
2296
  top: 2,
2297
2297
  backgroundColor: "#ef4444"
2298
2298
  },
2299
- children: P("gantt.toolbar.today")
2299
+ children: N("gantt.toolbar.today")
2300
2300
  })
2301
2301
  }),
2302
2302
  ir.map((e) => /* @__PURE__ */ k("div", {
@@ -2372,7 +2372,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2372
2372
  },
2373
2373
  "data-testid": `gantt-baseline-${r.id}`,
2374
2374
  "aria-hidden": "true"
2375
- }) : null, l = W?.taskId === r.id, u = Qr?.has(String(r.id)) ?? !1, d = $r?.has(String(r.id)) ?? !1, f = l || u || d ? ei(t) : o, p = !!r.locked, m = !!R && !t.isSummary && !p, h = m && Ue, g = m && We, ee = m && Ge, te = h || g, ne = L || p, _ = G != null && G.targetId != null && String(G.targetId) === String(r.id) && String(G.sourceId) !== String(r.id), v = G != null && G.rejectedId != null && String(G.rejectedId) === String(r.id) ? {
2375
+ }) : null, l = W?.taskId === r.id, u = Qr?.has(String(r.id)) ?? !1, d = $r?.has(String(r.id)) ?? !1, f = l || u || d ? ei(t) : o, p = !!r.locked, m = !!R && !t.isSummary && !p, h = m && Be, g = m && We, ee = m && Ge, te = h || g, ne = L || p, _ = G != null && G.targetId != null && String(G.targetId) === String(r.id) && String(G.sourceId) !== String(r.id), v = G != null && G.rejectedId != null && String(G.rejectedId) === String(r.id) ? {
2376
2376
  cursor: "not-allowed",
2377
2377
  boxShadow: "0 0 0 2px hsl(var(--destructive))"
2378
2378
  } : void 0, ie = G ? (e) => {
@@ -2402,7 +2402,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2402
2402
  rejectedId: null,
2403
2403
  rejectedReason: null
2404
2404
  });
2405
- } : void 0, oe = Math.max(1, Math.round((t.end.getTime() - t.start.getTime()) / it)), se = (i + 1) * B + 300 > br && i * B > 300, ce = Ut === r.id && !W && !_n && !G ? /* @__PURE__ */ A("div", {
2405
+ } : void 0, oe = Math.max(1, Math.round((t.end.getTime() - t.start.getTime()) / at)), se = (i + 1) * B + 300 > br && i * B > 300, ce = Ut === r.id && !W && !_n && !G ? /* @__PURE__ */ A("div", {
2406
2406
  className: "absolute z-30 pointer-events-none rounded-md border bg-popover text-popover-foreground px-2.5 py-1.5 text-xs shadow-md whitespace-nowrap",
2407
2407
  style: {
2408
2408
  left: Math.max(f.left + 8, 4),
@@ -2433,18 +2433,18 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2433
2433
  }) : /* @__PURE__ */ A("div", {
2434
2434
  className: "text-muted-foreground",
2435
2435
  children: [
2436
- t.start.toLocaleDateString(F, {
2436
+ t.start.toLocaleDateString(P, {
2437
2437
  month: "short",
2438
2438
  day: "numeric"
2439
2439
  }),
2440
2440
  " → ",
2441
- t.end.toLocaleDateString(F, {
2441
+ t.end.toLocaleDateString(P, {
2442
2442
  month: "short",
2443
2443
  day: "numeric"
2444
2444
  }),
2445
2445
  " · ",
2446
2446
  oe,
2447
- P("gantt.tooltip.days"),
2447
+ N("gantt.tooltip.days"),
2448
2448
  " · ",
2449
2449
  Math.round(t.progress),
2450
2450
  "%"
@@ -2454,7 +2454,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2454
2454
  className: "text-muted-foreground",
2455
2455
  style: { marginTop: 4 },
2456
2456
  "data-testid": `gantt-tooltip-locked-${r.id}`,
2457
- children: ["🚫 ", P("gantt.lockedHint")]
2457
+ children: ["🚫 ", N("gantt.lockedHint")]
2458
2458
  }) : null
2459
2459
  ]
2460
2460
  }) : null;
@@ -2465,7 +2465,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2465
2465
  children: ce
2466
2466
  }, r.id);
2467
2467
  if (t.isSummary) {
2468
- let e = r.color || "#0d9488", n = le === "self" && r.hasOwnDates !== !1, i = !!R && Ue && !p, o = !!R && We && n && !p;
2468
+ let e = r.color || "#0d9488", n = le === "self" && r.hasOwnDates !== !1, i = !!R && Be && !p, o = !!R && We && n && !p;
2469
2469
  return /* @__PURE__ */ A("div", {
2470
2470
  className: "relative border-b hover:bg-accent/50",
2471
2471
  style: { height: B },
@@ -2473,7 +2473,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2473
2473
  children: [
2474
2474
  c,
2475
2475
  /* @__PURE__ */ A("div", {
2476
- className: pe("gantt-bar-hover absolute rounded-sm border shadow-sm flex items-center px-2 select-none group", i && "cursor-grab active:cursor-grabbing", l && "ring-2 ring-primary z-10", _ && "ring-2 ring-primary", cr === r.id && "gantt-flash z-10"),
2476
+ className: me("gantt-bar-hover absolute rounded-sm border shadow-sm flex items-center px-2 select-none group", i && "cursor-grab active:cursor-grabbing", l && "ring-2 ring-primary z-10", _ && "ring-2 ring-primary", cr === r.id && "gantt-flash z-10"),
2477
2477
  style: {
2478
2478
  left: f.left,
2479
2479
  width: f.width,
@@ -2494,7 +2494,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2494
2494
  onPointerDown: (e) => {
2495
2495
  if (e.button === 0) {
2496
2496
  if (o) {
2497
- let t = Ze(e.clientX, e.currentTarget.getBoundingClientRect());
2497
+ let t = Qe(e.clientX, e.currentTarget.getBoundingClientRect());
2498
2498
  if (t !== "move") {
2499
2499
  gn(r, t, e);
2500
2500
  return;
@@ -2521,10 +2521,10 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2521
2521
  borderBottomLeftRadius: "var(--radius-sm)"
2522
2522
  }
2523
2523
  }),
2524
- o && f.width >= 14 && /* @__PURE__ */ A(Ne, { children: [/* @__PURE__ */ k("div", {
2524
+ o && f.width >= 14 && /* @__PURE__ */ A(Pe, { children: [/* @__PURE__ */ k("div", {
2525
2525
  className: "gantt-resize-handle absolute left-0 top-0",
2526
2526
  style: {
2527
- width: Xe,
2527
+ width: Ze,
2528
2528
  height: ii,
2529
2529
  cursor: "ew-resize"
2530
2530
  },
@@ -2536,7 +2536,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2536
2536
  }), /* @__PURE__ */ k("div", {
2537
2537
  className: "gantt-resize-handle absolute right-0 top-0",
2538
2538
  style: {
2539
- width: Xe,
2539
+ width: Ze,
2540
2540
  height: ii,
2541
2541
  cursor: "ew-resize"
2542
2542
  },
@@ -2604,12 +2604,12 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2604
2604
  },
2605
2605
  "data-testid": `gantt-summary-drag-chip-${r.id}`,
2606
2606
  children: [
2607
- Zt(W).start.toLocaleDateString(F, {
2607
+ Zt(W).start.toLocaleDateString(P, {
2608
2608
  month: "numeric",
2609
2609
  day: "numeric"
2610
2610
  }),
2611
2611
  " → ",
2612
- Zt(W).end.toLocaleDateString(F, {
2612
+ Zt(W).end.toLocaleDateString(P, {
2613
2613
  month: "numeric",
2614
2614
  day: "numeric"
2615
2615
  })
@@ -2628,7 +2628,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2628
2628
  children: [
2629
2629
  c,
2630
2630
  /* @__PURE__ */ k("div", {
2631
- className: pe("gantt-bar-hover absolute rotate-45 rounded-[2px] border shadow-sm select-none", h && "cursor-grab active:cursor-grabbing", l && "ring-2 ring-primary z-10", _ && "ring-2 ring-primary", cr === r.id && "gantt-flash z-10"),
2631
+ className: me("gantt-bar-hover absolute rotate-45 rounded-[2px] border shadow-sm select-none", h && "cursor-grab active:cursor-grabbing", l && "ring-2 ring-primary z-10", _ && "ring-2 ring-primary", cr === r.id && "gantt-flash z-10"),
2632
2632
  style: {
2633
2633
  left: f.left - e / 2,
2634
2634
  top: (B - e) / 2,
@@ -2679,7 +2679,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2679
2679
  }),
2680
2680
  c,
2681
2681
  /* @__PURE__ */ A("div", {
2682
- className: pe("gantt-bar-hover absolute rounded-sm bg-primary border shadow-sm flex items-center px-2 group select-none", te && "cursor-grab active:cursor-grabbing", l && "ring-2 ring-primary z-10", _ && "ring-2 ring-primary", cr === r.id && "gantt-flash z-10"),
2682
+ className: me("gantt-bar-hover absolute rounded-sm bg-primary border shadow-sm flex items-center px-2 group select-none", te && "cursor-grab active:cursor-grabbing", l && "ring-2 ring-primary z-10", _ && "ring-2 ring-primary", cr === r.id && "gantt-flash z-10"),
2683
2683
  style: {
2684
2684
  left: f.left,
2685
2685
  width: f.width,
@@ -2700,14 +2700,14 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2700
2700
  onPointerMove: ie,
2701
2701
  onPointerDown: te ? (e) => {
2702
2702
  if (e.button !== 0) return;
2703
- let t = Ze(e.clientX, e.currentTarget.getBoundingClientRect()), n = t !== "move" && g ? t : h ? "move" : null;
2703
+ let t = Qe(e.clientX, e.currentTarget.getBoundingClientRect()), n = t !== "move" && g ? t : h ? "move" : null;
2704
2704
  n && gn(r, n, e);
2705
2705
  } : void 0,
2706
2706
  children: [
2707
- g && f.width >= 14 && /* @__PURE__ */ A(Ne, { children: [/* @__PURE__ */ k("div", {
2707
+ g && f.width >= 14 && /* @__PURE__ */ A(Pe, { children: [/* @__PURE__ */ k("div", {
2708
2708
  className: "gantt-resize-handle absolute left-0 top-0",
2709
2709
  style: {
2710
- width: Xe,
2710
+ width: Ze,
2711
2711
  height: ii,
2712
2712
  cursor: "ew-resize"
2713
2713
  },
@@ -2719,7 +2719,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2719
2719
  }), /* @__PURE__ */ k("div", {
2720
2720
  className: "gantt-resize-handle absolute right-0 top-0",
2721
2721
  style: {
2722
- width: Xe,
2722
+ width: Ze,
2723
2723
  height: ii,
2724
2724
  cursor: "ew-resize"
2725
2725
  },
@@ -2739,7 +2739,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2739
2739
  }
2740
2740
  }),
2741
2741
  ee && f.width >= 30 && /* @__PURE__ */ k("div", {
2742
- className: pe("absolute bottom-0 h-1/2 w-4 -translate-x-1/2 cursor-col-resize flex items-end justify-center pb-px", _n?.taskId === r.id ? "opacity-100" : "opacity-0 group-hover:opacity-100 transition-opacity"),
2742
+ className: me("absolute bottom-0 h-1/2 w-4 -translate-x-1/2 cursor-col-resize flex items-end justify-center pb-px", _n?.taskId === r.id ? "opacity-100" : "opacity-0 group-hover:opacity-100 transition-opacity"),
2743
2743
  style: { left: `${ue}%` },
2744
2744
  "data-testid": `gantt-progress-handle-${r.id}`,
2745
2745
  onPointerDown: (e) => {
@@ -2811,10 +2811,10 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2811
2811
  }),
2812
2812
  /* @__PURE__ */ k("span", {
2813
2813
  className: "absolute inset-0 flex items-center px-2 text-[10px] text-white font-medium truncate opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none",
2814
- children: l ? `${Zt(W).start.toLocaleDateString(F, {
2814
+ children: l ? `${Zt(W).start.toLocaleDateString(P, {
2815
2815
  month: "numeric",
2816
2816
  day: "numeric"
2817
- })} → ${Zt(W).end.toLocaleDateString(F, {
2817
+ })} → ${Zt(W).end.toLocaleDateString(P, {
2818
2818
  month: "numeric",
2819
2819
  day: "numeric"
2820
2820
  })}` : `${Math.round(ue)}%`
@@ -2882,7 +2882,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2882
2882
  if (Math.max(t.sourceIndex, t.targetIndex) < Q.startIdx - 6 || n > Q.endIdx + 6) return null;
2883
2883
  let r = pi(t);
2884
2884
  if (!r) return null;
2885
- let i = mi != null && (String(t.sourceId) === String(mi) || String(t.targetId) === String(mi)), a = _i?.criticalEdges.has(`${String(t.sourceId)}->${String(t.targetId)}`) ?? !1, o = a ? "gantt-link-arrow-critical" : i ? "gantt-link-arrow-active" : "gantt-link-arrow", s = !!(at || z);
2885
+ let i = mi != null && (String(t.sourceId) === String(mi) || String(t.targetId) === String(mi)), a = _i?.criticalEdges.has(`${String(t.sourceId)}->${String(t.targetId)}`) ?? !1, o = a ? "gantt-link-arrow-critical" : i ? "gantt-link-arrow-active" : "gantt-link-arrow", s = !!(Ye || z);
2886
2886
  return /* @__PURE__ */ A(e.Fragment, { children: [/* @__PURE__ */ k("path", {
2887
2887
  d: r,
2888
2888
  fill: "none",
@@ -2925,7 +2925,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
2925
2925
  G && (() => {
2926
2926
  let e = S.find((e) => String(e.id) === String(G.sourceId));
2927
2927
  if (!e) return null;
2928
- let t = G.targetId == null ? null : S.find((e) => String(e.id) === String(G.targetId)), n = (e) => P(`gantt.linkEnd.${e}`), r = t ? `${e.title} (${n(G.sourceEnd)}) → ${t.title} (${n(G.targetEnd ?? "start")})` : `${e.title} (${n(G.sourceEnd)})`;
2928
+ let t = G.targetId == null ? null : S.find((e) => String(e.id) === String(G.targetId)), n = (e) => N(`gantt.linkEnd.${e}`), r = t ? `${e.title} (${n(G.sourceEnd)}) → ${t.title} (${n(G.targetEnd ?? "start")})` : `${e.title} (${n(G.sourceEnd)})`;
2929
2929
  return /* @__PURE__ */ k("div", {
2930
2930
  className: "absolute z-30 pointer-events-none rounded-md border bg-popover text-popover-foreground px-2 py-1 text-[11px] font-medium shadow-md whitespace-nowrap",
2931
2931
  style: {
@@ -3035,9 +3035,9 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
3035
3035
  onClick: () => {
3036
3036
  Dn(null), o(e);
3037
3037
  },
3038
- children: P("gantt.menu.view")
3038
+ children: N("gantt.menu.view")
3039
3039
  }),
3040
- _t && R && t && !t.isSummary && !e.locked && /* @__PURE__ */ k("button", {
3040
+ ht && R && t && !t.isSummary && !e.locked && /* @__PURE__ */ k("button", {
3041
3041
  type: "button",
3042
3042
  role: "menuitem",
3043
3043
  className: n,
@@ -3050,9 +3050,9 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
3050
3050
  progress: String(e.progress)
3051
3051
  });
3052
3052
  },
3053
- children: P("gantt.menu.edit")
3053
+ children: N("gantt.menu.edit")
3054
3054
  }),
3055
- z && t && !t.isMilestone && !e.locked && /* @__PURE__ */ A(Ne, { children: [/* @__PURE__ */ k("button", {
3055
+ z && t && !t.isMilestone && !e.locked && /* @__PURE__ */ A(Pe, { children: [/* @__PURE__ */ k("button", {
3056
3056
  type: "button",
3057
3057
  role: "menuitem",
3058
3058
  className: n,
@@ -3066,7 +3066,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
3066
3066
  relation: "pred"
3067
3067
  });
3068
3068
  },
3069
- children: P("gantt.menu.addPredecessor")
3069
+ children: N("gantt.menu.addPredecessor")
3070
3070
  }), /* @__PURE__ */ k("button", {
3071
3071
  type: "button",
3072
3072
  role: "menuitem",
@@ -3081,17 +3081,17 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
3081
3081
  relation: "succ"
3082
3082
  });
3083
3083
  },
3084
- children: P("gantt.menu.addSuccessor")
3084
+ children: N("gantt.menu.addSuccessor")
3085
3085
  })] }),
3086
3086
  Je && !e.locked && /* @__PURE__ */ k("button", {
3087
3087
  type: "button",
3088
3088
  role: "menuitem",
3089
- className: pe(n, "text-destructive"),
3089
+ className: me(n, "text-destructive"),
3090
3090
  "data-testid": "gantt-context-menu-delete",
3091
3091
  onClick: () => {
3092
3092
  Dn(null), Je(e);
3093
3093
  },
3094
- children: P("gantt.menu.delete")
3094
+ children: N("gantt.menu.delete")
3095
3095
  })
3096
3096
  ]
3097
3097
  });
@@ -3126,30 +3126,30 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
3126
3126
  i && /* @__PURE__ */ A("div", {
3127
3127
  className: "px-3 py-1 text-xs text-muted-foreground",
3128
3128
  "data-testid": "gantt-link-menu-locked",
3129
- children: ["🚫 ", P("gantt.lockedHint")]
3129
+ children: ["🚫 ", N("gantt.lockedHint")]
3130
3130
  }),
3131
3131
  z && he && r.map((r) => /* @__PURE__ */ A("button", {
3132
3132
  type: "button",
3133
3133
  role: "menuitemradio",
3134
3134
  "aria-checked": kn.type === r,
3135
3135
  disabled: i,
3136
- className: pe(n, kn.type === r && "font-semibold", i && "opacity-50 cursor-not-allowed hover:bg-transparent"),
3136
+ className: me(n, kn.type === r && "font-semibold", i && "opacity-50 cursor-not-allowed hover:bg-transparent"),
3137
3137
  "data-testid": `gantt-link-menu-type-${r}`,
3138
3138
  onClick: () => {
3139
3139
  i || (An(null), r !== kn.type && z(e, t, r));
3140
3140
  },
3141
- children: [kn.type === r ? "✓ " : "\xA0\xA0", P(`gantt.linkType.${r}`)]
3141
+ children: [kn.type === r ? "✓ " : "\xA0\xA0", N(`gantt.linkType.${r}`)]
3142
3142
  }, r)),
3143
- at && /* @__PURE__ */ A(Ne, { children: [/* @__PURE__ */ k("div", { className: "my-1 border-t" }), /* @__PURE__ */ k("button", {
3143
+ Ye && /* @__PURE__ */ A(Pe, { children: [/* @__PURE__ */ k("div", { className: "my-1 border-t" }), /* @__PURE__ */ k("button", {
3144
3144
  type: "button",
3145
3145
  role: "menuitem",
3146
3146
  disabled: i,
3147
- className: pe(n, "text-destructive", i && "opacity-50 cursor-not-allowed hover:bg-transparent"),
3147
+ className: me(n, "text-destructive", i && "opacity-50 cursor-not-allowed hover:bg-transparent"),
3148
3148
  "data-testid": "gantt-link-menu-remove",
3149
3149
  onClick: () => {
3150
- i || (An(null), at(e, t));
3150
+ i || (An(null), Ye(e, t));
3151
3151
  },
3152
- children: P("gantt.menu.removeDependency")
3152
+ children: N("gantt.menu.removeDependency")
3153
3153
  })] })
3154
3154
  ]
3155
3155
  });
@@ -3174,7 +3174,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
3174
3174
  children: [
3175
3175
  /* @__PURE__ */ k("div", {
3176
3176
  className: "px-3 py-1 text-xs text-muted-foreground",
3177
- children: Mn.relation === "pred" ? P("gantt.menu.addPredecessor") : P("gantt.menu.addSuccessor")
3177
+ children: Mn.relation === "pred" ? N("gantt.menu.addPredecessor") : N("gantt.menu.addSuccessor")
3178
3178
  }),
3179
3179
  /* @__PURE__ */ k("div", {
3180
3180
  className: "px-2 pb-1",
@@ -3182,14 +3182,14 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
3182
3182
  className: "border rounded px-2 py-1 text-sm w-full bg-background",
3183
3183
  value: Pn,
3184
3184
  onChange: (e) => Fn(e.target.value),
3185
- placeholder: P("gantt.menu.searchTasks"),
3185
+ placeholder: N("gantt.menu.searchTasks"),
3186
3186
  "data-testid": "gantt-dep-picker-search",
3187
3187
  autoFocus: !0
3188
3188
  })
3189
3189
  }),
3190
3190
  i.length === 0 ? /* @__PURE__ */ k("div", {
3191
3191
  className: "px-3 py-1.5 text-muted-foreground",
3192
- children: P("gantt.menu.noCandidates")
3192
+ children: N("gantt.menu.noCandidates")
3193
3193
  }) : i.map((t) => /* @__PURE__ */ k("button", {
3194
3194
  type: "button",
3195
3195
  role: "menuitem",
@@ -3217,13 +3217,13 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
3217
3217
  /* @__PURE__ */ k("div", {
3218
3218
  className: "text-sm font-semibold mb-1",
3219
3219
  "data-testid": "gantt-autoschedule-title",
3220
- children: P("gantt.autoScheduleDlg.title")
3220
+ children: N("gantt.autoScheduleDlg.title")
3221
3221
  }),
3222
3222
  /* @__PURE__ */ A("div", {
3223
3223
  className: "text-sm text-muted-foreground mb-3",
3224
- children: [P("gantt.autoScheduleDlg.body", { count: yi.changes.length }), yi.skipped > 0 && /* @__PURE__ */ A(Ne, { children: [" ", /* @__PURE__ */ k("span", {
3224
+ children: [N("gantt.autoScheduleDlg.body", { count: yi.changes.length }), yi.skipped > 0 && /* @__PURE__ */ A(Pe, { children: [" ", /* @__PURE__ */ k("span", {
3225
3225
  "data-testid": "gantt-autoschedule-skipped",
3226
- children: P("gantt.autoScheduleDlg.skipped", { count: yi.skipped })
3226
+ children: N("gantt.autoScheduleDlg.skipped", { count: yi.skipped })
3227
3227
  })] })]
3228
3228
  }),
3229
3229
  /* @__PURE__ */ A("div", {
@@ -3233,13 +3233,13 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
3233
3233
  className: "px-3 py-1.5 text-sm rounded-md border hover:bg-accent outline-none",
3234
3234
  "data-testid": "gantt-autoschedule-cancel",
3235
3235
  onClick: () => bi(null),
3236
- children: P("gantt.autoScheduleDlg.cancel")
3236
+ children: N("gantt.autoScheduleDlg.cancel")
3237
3237
  }), /* @__PURE__ */ k("button", {
3238
3238
  type: "button",
3239
3239
  className: "px-3 py-1.5 text-sm rounded-md bg-primary text-primary-foreground hover:opacity-90 outline-none",
3240
3240
  "data-testid": "gantt-autoschedule-confirm",
3241
3241
  onClick: wi,
3242
- children: P("gantt.autoScheduleDlg.confirm")
3242
+ children: N("gantt.autoScheduleDlg.confirm")
3243
3243
  })]
3244
3244
  })
3245
3245
  ]
@@ -3249,7 +3249,7 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
3249
3249
  className: "fixed bottom-6 left-1/2 -translate-x-1/2 z-[60] rounded-md border bg-popover text-popover-foreground px-3 py-1.5 text-sm shadow-md",
3250
3250
  role: "status",
3251
3251
  "data-testid": "gantt-autoschedule-clean",
3252
- children: P("gantt.autoScheduleDlg.none")
3252
+ children: N("gantt.autoScheduleDlg.none")
3253
3253
  }),
3254
3254
  an && /* @__PURE__ */ k("div", {
3255
3255
  className: "fixed inset-0 z-[60] flex items-center justify-center bg-black/30",
@@ -3265,11 +3265,11 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
3265
3265
  /* @__PURE__ */ k("div", {
3266
3266
  className: "text-sm font-semibold mb-1",
3267
3267
  "data-testid": "gantt-conflict-title",
3268
- children: P("gantt.conflict.title")
3268
+ children: N("gantt.conflict.title")
3269
3269
  }),
3270
3270
  /* @__PURE__ */ k("div", {
3271
3271
  className: "text-sm text-muted-foreground mb-3",
3272
- children: P("gantt.conflict.body", { count: an.length })
3272
+ children: N("gantt.conflict.body", { count: an.length })
3273
3273
  }),
3274
3274
  /* @__PURE__ */ A("div", {
3275
3275
  className: "flex justify-end gap-2",
@@ -3278,13 +3278,13 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
3278
3278
  className: "px-3 py-1.5 text-sm rounded-md border hover:bg-accent outline-none",
3279
3279
  "data-testid": "gantt-conflict-cancel",
3280
3280
  onClick: () => on(null),
3281
- children: P("gantt.conflict.cancel")
3281
+ children: N("gantt.conflict.cancel")
3282
3282
  }), /* @__PURE__ */ k("button", {
3283
3283
  type: "button",
3284
3284
  className: "px-3 py-1.5 text-sm rounded-md bg-primary text-primary-foreground hover:opacity-90 outline-none",
3285
3285
  "data-testid": "gantt-conflict-confirm",
3286
3286
  onClick: un,
3287
- children: P("gantt.conflict.confirm")
3287
+ children: N("gantt.conflict.confirm")
3288
3288
  })]
3289
3289
  })
3290
3290
  ]
@@ -3295,10 +3295,10 @@ function _t({ tasks: t, viewMode: n, startDate: r, endDate: i, markers: a, onTas
3295
3295
  }
3296
3296
  //#endregion
3297
3297
  //#region src/workload.ts
3298
- function vt(e, t, n, r) {
3298
+ function yt(e, t, n, r) {
3299
3299
  return t.getTime() === e.getTime() ? e.getTime() >= n.getTime() && e.getTime() < r.getTime() : e.getTime() < r.getTime() && t.getTime() > n.getTime();
3300
3300
  }
3301
- function yt(e, t, n) {
3301
+ function B(e, t, n) {
3302
3302
  let { assignee: r, effort: i, capacity: a = 1, unassignedLabel: o = "Unassigned" } = n, s = (e) => typeof a == "function" ? a(e) : a, c = (e) => {
3303
3303
  let t = i ? i(e) : 1;
3304
3304
  return Number.isFinite(t) && t > 0 ? t : 0;
@@ -3315,7 +3315,7 @@ function yt(e, t, n) {
3315
3315
  for (let e of l.values()) {
3316
3316
  let n = s(e.key), r = 0, i = 0, a = t.map((t) => {
3317
3317
  let a = 0;
3318
- for (let n of e.items) vt(n.start, n.end, t.start, t.end) && (a += c(n));
3318
+ for (let n of e.items) yt(n.start, n.end, t.start, t.end) && (a += c(n));
3319
3319
  a > r && (r = a);
3320
3320
  let o = a > n + 1e-9;
3321
3321
  return o && i++, {
@@ -3337,32 +3337,32 @@ function yt(e, t, n) {
3337
3337
  }
3338
3338
  //#endregion
3339
3339
  //#region src/ResourceWorkload.tsx
3340
- var B = {
3340
+ var bt = {
3341
3341
  day: 26,
3342
3342
  week: 56,
3343
3343
  month: 76,
3344
3344
  quarter: 88,
3345
3345
  year: 104
3346
- }, bt = 48, xt = 34, St = 180;
3347
- function Ct(e, t, n) {
3346
+ }, xt = 48, St = 34, Ct = 180;
3347
+ function wt(e, t, n) {
3348
3348
  return t === "day" ? String(e.getDate()) : t === "week" ? e.toLocaleDateString(n, {
3349
3349
  month: "numeric",
3350
3350
  day: "numeric"
3351
3351
  }) : t === "month" ? e.toLocaleDateString(n, { month: "short" }) : t === "year" ? String(e.getFullYear()) : `Q${Math.floor(e.getMonth() / 3) + 1}`;
3352
3352
  }
3353
- function wt({ tasks: t, assignee: n, effort: r, capacity: i = 1, viewMode: a = "day", unassignedLabel: o = "Unassigned", className: s }) {
3354
- let { t: c, language: l } = Ye(), u = l || void 0, d = B[a], f = e.useMemo(() => {
3353
+ function Tt({ tasks: t, assignee: n, effort: r, capacity: i = 1, viewMode: a = "day", unassignedLabel: o = "Unassigned", className: s }) {
3354
+ let { t: c, language: l } = Xe(), u = l || void 0, d = bt[a], f = e.useMemo(() => {
3355
3355
  if (!t.length) return [];
3356
- let e = new Date(Math.min(...t.map((e) => e.start.getTime()))), n = new Date(Math.max(...t.map((e) => e.end.getTime()))), r = st(e, a), i = lt(st(n, a), 1, a), o = [], s = 0;
3356
+ let e = new Date(Math.min(...t.map((e) => e.start.getTime()))), n = new Date(Math.max(...t.map((e) => e.end.getTime()))), r = ct(e, a), i = ut(ct(n, a), 1, a), o = [], s = 0;
3357
3357
  for (; r < i && s++ < 4e3;) {
3358
- let e = lt(r, 1, a);
3358
+ let e = ut(r, 1, a);
3359
3359
  o.push({
3360
3360
  date: new Date(r),
3361
3361
  col: {
3362
3362
  start: new Date(r),
3363
3363
  end: new Date(e)
3364
3364
  },
3365
- label: Ct(r, a, u)
3365
+ label: wt(r, a, u)
3366
3366
  }), r = e;
3367
3367
  }
3368
3368
  return o;
@@ -3370,7 +3370,7 @@ function wt({ tasks: t, assignee: n, effort: r, capacity: i = 1, viewMode: a = "
3370
3370
  t,
3371
3371
  a,
3372
3372
  u
3373
- ]), p = e.useMemo(() => yt(t, f.map((e) => e.col), {
3373
+ ]), p = e.useMemo(() => B(t, f.map((e) => e.col), {
3374
3374
  assignee: n,
3375
3375
  effort: r,
3376
3376
  capacity: i,
@@ -3399,11 +3399,11 @@ function wt({ tasks: t, assignee: n, effort: r, capacity: i = 1, viewMode: a = "
3399
3399
  children: /* @__PURE__ */ A("div", {
3400
3400
  style: {
3401
3401
  display: "flex",
3402
- minWidth: St + h
3402
+ minWidth: Ct + h
3403
3403
  },
3404
3404
  children: [/* @__PURE__ */ A("div", {
3405
3405
  style: {
3406
- width: St,
3406
+ width: Ct,
3407
3407
  flexShrink: 0
3408
3408
  },
3409
3409
  children: [/* @__PURE__ */ k("div", {
@@ -3420,7 +3420,7 @@ function wt({ tasks: t, assignee: n, effort: r, capacity: i = 1, viewMode: a = "
3420
3420
  }), p.map((e) => /* @__PURE__ */ A("div", {
3421
3421
  "data-testid": `resource-row-${e.key}`,
3422
3422
  style: {
3423
- height: bt,
3423
+ height: xt,
3424
3424
  display: "flex",
3425
3425
  flexDirection: "column",
3426
3426
  justifyContent: "center",
@@ -3476,12 +3476,12 @@ function wt({ tasks: t, assignee: n, effort: r, capacity: i = 1, viewMode: a = "
3476
3476
  children: e.label
3477
3477
  }, t))
3478
3478
  }), p.map((e) => {
3479
- let t = xt * (1 - Math.min(e.capacity / m, 1));
3479
+ let t = St * (1 - Math.min(e.capacity / m, 1));
3480
3480
  return /* @__PURE__ */ A("div", {
3481
3481
  style: {
3482
3482
  position: "relative",
3483
3483
  display: "flex",
3484
- height: bt,
3484
+ height: xt,
3485
3485
  borderBottom: "1px solid hsl(var(--border) / 0.5)"
3486
3486
  },
3487
3487
  children: [/* @__PURE__ */ k("div", {
@@ -3496,7 +3496,7 @@ function wt({ tasks: t, assignee: n, effort: r, capacity: i = 1, viewMode: a = "
3496
3496
  zIndex: 1
3497
3497
  }
3498
3498
  }), e.cells.map((t, n) => {
3499
- let r = Math.max(t.load > 0 ? 2 : 0, xt * Math.min(t.load / m, 1));
3499
+ let r = Math.max(t.load > 0 ? 2 : 0, St * Math.min(t.load / m, 1));
3500
3500
  return /* @__PURE__ */ k("div", {
3501
3501
  "data-testid": `resource-cell-${e.key}-${n}`,
3502
3502
  "data-load": t.load,
@@ -3536,7 +3536,7 @@ function wt({ tasks: t, assignee: n, effort: r, capacity: i = 1, viewMode: a = "
3536
3536
  }
3537
3537
  //#endregion
3538
3538
  //#region src/QuickFilterBar.tsx
3539
- var Tt = {
3539
+ var Et = {
3540
3540
  display: "flex",
3541
3541
  flexWrap: "wrap",
3542
3542
  alignItems: "center",
@@ -3545,7 +3545,7 @@ var Tt = {
3545
3545
  borderBottom: "1px solid hsl(var(--border))",
3546
3546
  background: "hsl(var(--background))",
3547
3547
  fontSize: 13
3548
- }, Et = {
3548
+ }, V = {
3549
3549
  display: "inline-flex",
3550
3550
  alignItems: "center",
3551
3551
  gap: 6,
@@ -3558,7 +3558,7 @@ var Tt = {
3558
3558
  cursor: "pointer",
3559
3559
  whiteSpace: "nowrap",
3560
3560
  lineHeight: "28px"
3561
- }, V = {
3561
+ }, Dt = {
3562
3562
  position: "absolute",
3563
3563
  top: "calc(100% + 4px)",
3564
3564
  left: 0,
@@ -3572,7 +3572,7 @@ var Tt = {
3572
3572
  background: "hsl(var(--popover, var(--background)))",
3573
3573
  color: "hsl(var(--popover-foreground, var(--foreground)))",
3574
3574
  boxShadow: "0 8px 24px rgba(0,0,0,0.18)"
3575
- }, Dt = {
3575
+ }, Ot = {
3576
3576
  display: "flex",
3577
3577
  alignItems: "center",
3578
3578
  gap: 8,
@@ -3581,7 +3581,7 @@ var Tt = {
3581
3581
  cursor: "pointer",
3582
3582
  userSelect: "none"
3583
3583
  };
3584
- function Ot({ checked: e }) {
3584
+ function kt({ checked: e }) {
3585
3585
  return /* @__PURE__ */ k("span", {
3586
3586
  "aria-hidden": !0,
3587
3587
  style: {
@@ -3601,7 +3601,7 @@ function Ot({ checked: e }) {
3601
3601
  children: e ? "✓" : ""
3602
3602
  });
3603
3603
  }
3604
- function kt({ filter: e, selected: t, onChange: n, labels: i }) {
3604
+ function At({ filter: e, selected: t, onChange: n, labels: i }) {
3605
3605
  let [s, c] = o(!1), l = a(null);
3606
3606
  r(() => {
3607
3607
  if (!s) return;
@@ -3627,7 +3627,7 @@ function kt({ filter: e, selected: t, onChange: n, labels: i }) {
3627
3627
  children: [/* @__PURE__ */ A("button", {
3628
3628
  type: "button",
3629
3629
  style: {
3630
- ...Et,
3630
+ ...V,
3631
3631
  borderColor: d > 0 ? "hsl(var(--primary))" : "hsl(var(--border))",
3632
3632
  color: d > 0 ? "hsl(var(--primary))" : "hsl(var(--foreground))"
3633
3633
  },
@@ -3645,26 +3645,26 @@ function kt({ filter: e, selected: t, onChange: n, labels: i }) {
3645
3645
  })]
3646
3646
  }), s && /* @__PURE__ */ k("div", {
3647
3647
  role: "listbox",
3648
- style: V,
3648
+ style: Dt,
3649
3649
  "data-testid": `quick-filter-panel-${e.field}`,
3650
3650
  children: e.options.length === 0 ? /* @__PURE__ */ k("div", {
3651
3651
  style: {
3652
- ...Dt,
3652
+ ...Ot,
3653
3653
  cursor: "default",
3654
3654
  opacity: .6
3655
3655
  },
3656
3656
  children: i.empty
3657
- }) : /* @__PURE__ */ A(Ne, { children: [
3657
+ }) : /* @__PURE__ */ A(Pe, { children: [
3658
3658
  /* @__PURE__ */ A("div", {
3659
3659
  role: "option",
3660
3660
  "aria-selected": f,
3661
3661
  style: {
3662
- ...Dt,
3662
+ ...Ot,
3663
3663
  fontWeight: 600
3664
3664
  },
3665
3665
  "data-testid": `quick-filter-all-${e.field}`,
3666
3666
  onClick: () => m(),
3667
- children: [/* @__PURE__ */ k(Ot, { checked: f }), /* @__PURE__ */ k("span", { children: i.all })]
3667
+ children: [/* @__PURE__ */ k(kt, { checked: f }), /* @__PURE__ */ k("span", { children: i.all })]
3668
3668
  }),
3669
3669
  /* @__PURE__ */ k("div", { style: {
3670
3670
  height: 1,
@@ -3677,27 +3677,27 @@ function kt({ filter: e, selected: t, onChange: n, labels: i }) {
3677
3677
  role: "option",
3678
3678
  "aria-selected": n,
3679
3679
  style: {
3680
- ...Dt,
3680
+ ...Ot,
3681
3681
  background: n ? "hsl(var(--accent, var(--muted)))" : "transparent"
3682
3682
  },
3683
3683
  "data-testid": `quick-filter-option-${e.field}-${t.value}`,
3684
3684
  onClick: () => p(t.value),
3685
- children: [/* @__PURE__ */ k(Ot, { checked: n }), /* @__PURE__ */ k("span", { children: t.label })]
3685
+ children: [/* @__PURE__ */ k(kt, { checked: n }), /* @__PURE__ */ k("span", { children: t.label })]
3686
3686
  }, t.value);
3687
3687
  })
3688
3688
  ] })
3689
3689
  })]
3690
3690
  });
3691
3691
  }
3692
- var At = ({ filters: e, value: t, onChange: n, onClear: r, resultCount: i, totalCount: a, labels: o, className: s }) => {
3692
+ var jt = ({ filters: e, value: t, onChange: n, onClear: r, resultCount: i, totalCount: a, labels: o, className: s }) => {
3693
3693
  if (!e.length) return null;
3694
3694
  let c = o?.all ?? "All", l = o?.empty ?? "No options", u = o?.clear ?? "Clear", d = e.some((e) => (t[e.field]?.length ?? 0) > 0);
3695
3695
  return /* @__PURE__ */ A("div", {
3696
- style: Tt,
3696
+ style: Et,
3697
3697
  className: s,
3698
3698
  "data-testid": "quick-filter-bar",
3699
3699
  children: [
3700
- e.map((e) => /* @__PURE__ */ k(kt, {
3700
+ e.map((e) => /* @__PURE__ */ k(At, {
3701
3701
  filter: e,
3702
3702
  selected: t[e.field] ?? [],
3703
3703
  onChange: (t) => n(e.field, t),
@@ -3709,7 +3709,7 @@ var At = ({ filters: e, value: t, onChange: n, onClear: r, resultCount: i, total
3709
3709
  d && /* @__PURE__ */ k("button", {
3710
3710
  type: "button",
3711
3711
  style: {
3712
- ...Et,
3712
+ ...V,
3713
3713
  height: 28,
3714
3714
  color: "hsl(var(--muted-foreground))"
3715
3715
  },
@@ -3730,7 +3730,7 @@ var At = ({ filters: e, value: t, onChange: n, onClear: r, resultCount: i, total
3730
3730
  };
3731
3731
  //#endregion
3732
3732
  //#region src/ObjectGantt.tsx
3733
- function jt(e) {
3733
+ function Mt(e) {
3734
3734
  if (e == null) return;
3735
3735
  let t = String(e).toLowerCase().trim();
3736
3736
  if (t === "milestone") return "milestone";
@@ -3738,7 +3738,7 @@ function jt(e) {
3738
3738
  if (t === "summary" || t === "project" || t === "phase") return "summary";
3739
3739
  if (t === "task") return "task";
3740
3740
  }
3741
- var Mt = {
3741
+ var Nt = {
3742
3742
  fs: "fs",
3743
3743
  ss: "ss",
3744
3744
  ff: "ff",
@@ -3751,7 +3751,7 @@ var Mt = {
3751
3751
  end_to_end: "ff",
3752
3752
  start_to_end: "sf"
3753
3753
  };
3754
- function Nt(e) {
3754
+ function Pt(e) {
3755
3755
  if (e == null || e === "") return [];
3756
3756
  if (typeof e == "string") return e.split(",").map((e) => e.trim()).filter(Boolean);
3757
3757
  if (typeof e == "number") return [e];
@@ -3761,7 +3761,7 @@ function Nt(e) {
3761
3761
  if (typeof n == "object") {
3762
3762
  let e = n.id ?? n._id ?? n.task ?? n.target;
3763
3763
  if (e == null || e === "") continue;
3764
- let r = Mt[String(n.type ?? "").toLowerCase().replace(/-/g, "_")];
3764
+ let r = Nt[String(n.type ?? "").toLowerCase().replace(/-/g, "_")];
3765
3765
  t.push(r ? {
3766
3766
  id: e,
3767
3767
  type: r
@@ -3770,7 +3770,7 @@ function Nt(e) {
3770
3770
  }
3771
3771
  return t;
3772
3772
  }
3773
- function Pt(e) {
3773
+ function H(e) {
3774
3774
  return e.data ? e.data : e.staticData ? {
3775
3775
  provider: "value",
3776
3776
  items: e.staticData
@@ -3779,15 +3779,6 @@ function Pt(e) {
3779
3779
  object: e.objectName
3780
3780
  } : null;
3781
3781
  }
3782
- function H(e) {
3783
- if (e) {
3784
- if (typeof e == "string") {
3785
- let t = e.split(" "), n = t[0], r = t[1]?.toLowerCase() === "desc" ? "desc" : "asc";
3786
- return { [n]: r };
3787
- }
3788
- if (Array.isArray(e)) return e.reduce((e, t) => (t.field && t.order && (e[t.field] = t.order), e), {});
3789
- }
3790
- }
3791
3782
  function Ft(e) {
3792
3783
  let t = e instanceof Error ? e.message : String(e ?? ""), n = t.indexOf("{");
3793
3784
  if (n >= 0) try {
@@ -3822,6 +3813,7 @@ function It(e) {
3822
3813
  capacity: e.capacity,
3823
3814
  quickFilters: e.quickFilters,
3824
3815
  autoZoomToFilter: e.autoZoomToFilter,
3816
+ viewMode: e.viewMode,
3825
3817
  timeSegments: e.timeSegments,
3826
3818
  interactions: e.interactions,
3827
3819
  exportFileName: e.exportFileName,
@@ -3829,45 +3821,45 @@ function It(e) {
3829
3821
  dependencyTypes: e.dependencyTypes
3830
3822
  }, t;
3831
3823
  if (e.gantt && (t = e.gantt), t) {
3832
- let e = te.safeParse(t);
3824
+ let e = ne.safeParse(t);
3833
3825
  return e.success || console.warn("[ObjectGantt] Invalid gantt configuration:", e.error.format()), t;
3834
3826
  }
3835
3827
  return null;
3836
3828
  }
3837
- var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick: g, onBeforeTaskUpdate: te, ...y }) => {
3838
- let [b, be] = o([]), [xe, Se] = o(!0), [Ce, we] = o(null), [C, Te] = o(null), { currency: Ee } = v(), De = _(), { t: w } = Ye(), Oe = t((e) => {
3839
- ee.error(w("gantt.writeFailed"), { description: Ft(e) ?? void 0 });
3840
- }, [w]), ke = Pt(e), T = i(() => ke, [JSON.stringify(ke)]), E = It(e), Ae = T?.provider === "value", je = n(p)?.apiFetch, D = i(() => d(T, s ?? null, { fetch: je }), [
3829
+ var Lt = ({ schema: e, dataSource: s, className: p, onTaskClick: g, onRowClick: ee, onBeforeTaskUpdate: ne, ...y }) => {
3830
+ let [b, xe] = o([]), [Se, Ce] = o(!0), [we, Te] = o(null), [C, Ee] = o(null), { currency: De } = re(), Oe = v(), { t: w } = Xe(), ke = t((e) => {
3831
+ te.error(w("gantt.writeFailed"), { description: Ft(e) ?? void 0 });
3832
+ }, [w]), Ae = H(e), T = i(() => Ae, [JSON.stringify(Ae)]), E = It(e), je = T?.provider === "value", Me = n(m)?.apiFetch, D = i(() => f(T, s ?? null, { fetch: Me }), [
3841
3833
  T,
3842
3834
  s,
3843
- je
3844
- ]), O = T?.provider === "object" ? T.object : e.objectName ?? "", [Me, Ne] = o(!1), j = a(0), M = t(async ({ silent: t = !1 } = {}) => {
3835
+ Me
3836
+ ]), O = T?.provider === "object" ? T.object : e.objectName ?? "", [Ne, Pe] = o(!1), j = a(0), M = t(async ({ silent: t = !1 } = {}) => {
3845
3837
  let n = ++j.current, r = () => j.current === n;
3846
3838
  try {
3847
- if (t ? Ne(!0) : Se(!0), y.data && Array.isArray(y.data)) {
3848
- r() && be(y.data);
3839
+ if (t ? Pe(!0) : Ce(!0), y.data && Array.isArray(y.data)) {
3840
+ r() && xe(y.data);
3849
3841
  return;
3850
3842
  }
3851
- if (Ae && T?.provider === "value") {
3852
- r() && be(T.items);
3843
+ if (je && T?.provider === "value") {
3844
+ r() && xe(T.items);
3853
3845
  return;
3854
3846
  }
3855
3847
  if (!D || typeof D.find != "function") throw Error("DataSource required for object/api providers");
3856
3848
  let n = c(C?.fields), i = await D.find(O, {
3857
3849
  $filter: e.filter,
3858
- $orderby: H(e.sort),
3850
+ $orderby: l(e.sort),
3859
3851
  ...n.length > 0 ? { $expand: n } : {}
3860
3852
  });
3861
- r() && be(l(i));
3853
+ r() && xe(u(i));
3862
3854
  } catch (e) {
3863
- t ? console.error("[ObjectGantt] Failed to refresh data:", e) : r() && we(e);
3855
+ t ? console.error("[ObjectGantt] Failed to refresh data:", e) : r() && Te(e);
3864
3856
  } finally {
3865
- t ? Ne(!1) : Se(!1);
3857
+ t ? Pe(!1) : Ce(!1);
3866
3858
  }
3867
3859
  }, [
3868
3860
  D,
3869
3861
  O,
3870
- Ae,
3862
+ je,
3871
3863
  T,
3872
3864
  e.filter,
3873
3865
  e.sort,
@@ -3876,11 +3868,11 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
3876
3868
  r(() => {
3877
3869
  M();
3878
3870
  }, [M]), r(() => {
3879
- !Ae && D && (async () => {
3871
+ !je && D && (async () => {
3880
3872
  try {
3881
3873
  if (!D || !O) return;
3882
3874
  let e = await D.getObjectSchema(O);
3883
- Te(e);
3875
+ Ee(e);
3884
3876
  } catch (e) {
3885
3877
  console.error("Failed to fetch object schema:", e);
3886
3878
  }
@@ -3888,12 +3880,12 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
3888
3880
  }, [
3889
3881
  O,
3890
3882
  D,
3891
- Ae,
3883
+ je,
3892
3884
  T
3893
3885
  ]);
3894
3886
  let N = i(() => {
3895
3887
  if (!E || !b.length) return [];
3896
- let { startDateField: e, endDateField: t, titleField: n, progressField: r, dependenciesField: i, colorField: a, borderColorField: o, parentField: s, typeField: c, lockField: l, tooltipFields: d, baselineStartField: f, baselineEndField: p, quickFilters: m } = E, h = C?.fields ?? {}, g = /* @__PURE__ */ new Map();
3888
+ let { startDateField: e, endDateField: t, titleField: n, progressField: r, dependenciesField: i, colorField: a, borderColorField: o, parentField: s, typeField: c, lockField: l, tooltipFields: u, baselineStartField: f, baselineEndField: p, quickFilters: m } = E, h = C?.fields ?? {}, g = /* @__PURE__ */ new Map();
3897
3889
  for (let e of m ?? []) {
3898
3890
  if (!e?.field || !Array.isArray(e.options) || !e.options.length) continue;
3899
3891
  let t = /* @__PURE__ */ new Map();
@@ -3916,11 +3908,11 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
3916
3908
  e?.contact && [e.contact.first_name, e.contact.last_name].filter(Boolean).join(" ")
3917
3909
  ];
3918
3910
  for (let e of t) if (e != null && String(e).trim() !== "") return String(e);
3919
- return u(C, e);
3920
- }, _ = (e, t) => {
3911
+ return d(C, e);
3912
+ }, ne = (e, t) => {
3921
3913
  if (t) return t;
3922
3914
  let n = h[e] ?? h[e.split(".")[0]];
3923
- return n?.label ? n.label : S(e);
3915
+ return n?.label ? n.label : be(e);
3924
3916
  }, v = (e, t) => {
3925
3917
  if (e == null || e === "") return "—";
3926
3918
  let n = h[t] ?? h[t.split(".")[0]], r = n?.type, i = n?.options;
@@ -3933,18 +3925,18 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
3933
3925
  if (n != null) return n;
3934
3926
  }
3935
3927
  if (r == null && typeof e == "string") {
3936
- if (/^\d{4}-\d{2}-\d{2}$/.test(e)) return he(e, void 0, { locale: De });
3937
- if (/^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}/.test(e) && !isNaN(new Date(e).getTime())) return ge(e, { locale: De });
3928
+ if (/^\d{4}-\d{2}-\d{2}$/.test(e)) return ge(e, void 0, { locale: Oe });
3929
+ if (/^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}/.test(e) && !isNaN(new Date(e).getTime())) return _e(e, { locale: Oe });
3938
3930
  }
3939
3931
  switch (r) {
3940
- case "date": return he(e, void 0, { locale: De });
3941
- case "datetime": return ge(e, { locale: De });
3932
+ case "date": return ge(e, void 0, { locale: Oe });
3933
+ case "datetime": return _e(e, { locale: Oe });
3942
3934
  case "number":
3943
3935
  case "integer":
3944
3936
  case "float":
3945
- case "decimal": return _e(Number(e), void 0, De);
3946
- case "currency": return me(Number(e), ne(n, Ee), De);
3947
- case "percent": return ve(Number(e), void 0, De);
3937
+ case "decimal": return ve(Number(e), void 0, Oe);
3938
+ case "currency": return he(Number(e), _(n, De), Oe);
3939
+ case "percent": return ye(Number(e), void 0, Oe);
3948
3940
  case "boolean":
3949
3941
  case "checkbox": return e ? "Yes" : "No";
3950
3942
  default:
@@ -3966,14 +3958,14 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
3966
3958
  return String(e);
3967
3959
  }
3968
3960
  }, re = (e) => {
3969
- if (!d || !d.length) return;
3961
+ if (!u || !u.length) return;
3970
3962
  let t = [];
3971
- for (let n of d) {
3963
+ for (let n of u) {
3972
3964
  let r = typeof n == "string" ? n : n?.field;
3973
3965
  if (!r) continue;
3974
3966
  let i = typeof n == "object" ? n.label : void 0, a = ee(e, r);
3975
3967
  a == null || a === "" || Array.isArray(a) && a.length === 0 || t.push({
3976
- label: _(r, i),
3968
+ label: ne(r, i),
3977
3969
  value: v(a, r)
3978
3970
  });
3979
3971
  }
@@ -3984,11 +3976,11 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
3984
3976
  if (!ae) {
3985
3977
  let e = n.status ?? n.state ?? n.priority ?? n.severity;
3986
3978
  if (e != null && e !== "") {
3987
- let t = ye(void 0, e);
3988
- t && (ae = x(t));
3979
+ let t = x(void 0, e);
3980
+ t && (ae = S(t));
3989
3981
  }
3990
3982
  }
3991
- let oe = o ? n[o] : void 0, se = oe != null && oe !== "" ? x(String(oe), String(oe)) : void 0;
3983
+ let oe = o ? n[o] : void 0, se = oe != null && oe !== "" ? S(String(oe), String(oe)) : void 0;
3992
3984
  return {
3993
3985
  id: n.id || n._id || `task-${u}`,
3994
3986
  title: _,
@@ -3996,9 +3988,9 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
3996
3988
  end: m ? new Date(m) : /* @__PURE__ */ new Date(),
3997
3989
  hasOwnDates: !!(d && m),
3998
3990
  progress: Math.min(100, Math.max(0, v || 0)),
3999
- dependencies: Nt(ie),
3991
+ dependencies: Pt(ie),
4000
3992
  parent: s ? n[s] ?? null : void 0,
4001
- type: c ? jt(n[c]) : void 0,
3993
+ type: c ? Mt(n[c]) : void 0,
4002
3994
  locked: l ? !!n[l] : void 0,
4003
3995
  color: ae,
4004
3996
  borderColor: se,
@@ -4012,9 +4004,9 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4012
4004
  b,
4013
4005
  E,
4014
4006
  C,
4015
- De,
4016
- Ee
4017
- ]), P = i(() => {
4007
+ Oe,
4008
+ De
4009
+ ]), Fe = i(() => {
4018
4010
  let e = E?.groupByField;
4019
4011
  if (!e) return;
4020
4012
  let t = C?.fields ?? {}, n = (e, t) => {
@@ -4044,7 +4036,7 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4044
4036
  label: r(i)
4045
4037
  };
4046
4038
  };
4047
- }, [E?.groupByField, C]), Pe = i(() => {
4039
+ }, [E?.groupByField, C]), P = i(() => {
4048
4040
  let e = E?.assigneeField;
4049
4041
  if (!e) return;
4050
4042
  let t = C?.fields ?? {}, n = (e, t) => {
@@ -4074,19 +4066,19 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4074
4066
  label: r(i)
4075
4067
  };
4076
4068
  };
4077
- }, [E?.assigneeField, C]), F = i(() => {
4069
+ }, [E?.assigneeField, C]), Ie = i(() => {
4078
4070
  let e = E?.effortField;
4079
4071
  if (e) return (t) => {
4080
4072
  let n = t.data?.[e], r = Number(n);
4081
4073
  return Number.isFinite(r) && r > 0 ? r : 1;
4082
4074
  };
4083
- }, [E?.effortField]), Fe = i(() => {
4075
+ }, [E?.effortField]), Le = i(() => {
4084
4076
  let t = e.skipWeekends, n = e.holidays;
4085
4077
  if (!(!t && (!n || n.length === 0))) return {
4086
4078
  skipWeekends: !!t,
4087
4079
  holidays: n && n.length ? new Set(n) : void 0
4088
4080
  };
4089
- }, [e]), Ie = i(() => Ke(E?.timeSegments), [E?.timeSegments]), I = t((e, t) => {
4081
+ }, [e]), Re = i(() => R(E?.timeSegments), [E?.timeSegments]), F = t((e, t) => {
4090
4082
  if (!e || !t) return null;
4091
4083
  let n = e;
4092
4084
  for (let e of t.split(".")) {
@@ -4099,19 +4091,19 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4099
4091
  return String(e.id ?? e._id ?? e.value ?? e.name ?? "");
4100
4092
  }
4101
4093
  return String(n);
4102
- }, []), Le = E?.quickFilters, [Re, ze] = o({});
4094
+ }, []), I = E?.quickFilters, [ze, L] = o({});
4103
4095
  r(() => {
4104
- if (!Le?.length || !s || typeof s.find != "function") return;
4096
+ if (!I?.length || !s || typeof s.find != "function") return;
4105
4097
  let e = C?.fields ?? {}, t = !1;
4106
4098
  return (async () => {
4107
4099
  let n = {};
4108
- for (let t of Le) {
4100
+ for (let t of I) {
4109
4101
  if (t.options) continue;
4110
4102
  let r = e[t.field] ?? e[t.field.split(".")[0]], i = r?.type;
4111
4103
  if (i !== "lookup" && i !== "master_detail") continue;
4112
4104
  let a = r?.reference_to ?? r?.reference ?? r?.referenceTo;
4113
4105
  if (a) try {
4114
- let e = await s.find(a, { $top: 1e3 }), r = l(e);
4106
+ let e = await s.find(a, { $top: 1e3 }), r = u(e);
4115
4107
  n[t.field] = r.map((e) => ({
4116
4108
  value: String(e.id ?? e._id ?? e.value ?? ""),
4117
4109
  label: String(e.name ?? e.label ?? e.title ?? e.id ?? e._id ?? "")
@@ -4120,7 +4112,7 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4120
4112
  console.warn(`[ObjectGantt] Failed to load quick-filter options for "${t.field}":`, e);
4121
4113
  }
4122
4114
  }
4123
- t || ze((e) => ({
4115
+ t || L((e) => ({
4124
4116
  ...e,
4125
4117
  ...n
4126
4118
  }));
@@ -4128,15 +4120,15 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4128
4120
  t = !0;
4129
4121
  };
4130
4122
  }, [
4131
- JSON.stringify(Le),
4123
+ JSON.stringify(I),
4132
4124
  s,
4133
4125
  C
4134
4126
  ]);
4135
- let L = i(() => {
4136
- if (!Le?.length) return [];
4127
+ let Be = i(() => {
4128
+ if (!I?.length) return [];
4137
4129
  let e = C?.fields ?? {};
4138
- return Le.map((t) => {
4139
- let n = e[t.field] ?? e[t.field.split(".")[0]], r = t.label ?? n?.label ?? S(t.field), i;
4130
+ return I.map((t) => {
4131
+ let n = e[t.field] ?? e[t.field.split(".")[0]], r = t.label ?? n?.label ?? be(t.field), i;
4140
4132
  if (t.options?.length) i = t.options.map((e) => typeof e == "object" ? {
4141
4133
  value: String(e.value),
4142
4134
  label: String(e.label ?? e.value)
@@ -4148,11 +4140,11 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4148
4140
  value: String(e.value ?? e),
4149
4141
  label: String(e.label ?? e.value ?? e)
4150
4142
  }));
4151
- else if (Re[t.field]?.length) i = Re[t.field];
4143
+ else if (ze[t.field]?.length) i = ze[t.field];
4152
4144
  else {
4153
4145
  let e = /* @__PURE__ */ new Map();
4154
4146
  for (let n of b) {
4155
- let r = I(n, t.field);
4147
+ let r = F(n, t.field);
4156
4148
  if (r != null && !e.has(r)) {
4157
4149
  let i = n;
4158
4150
  for (let e of t.field.split(".")) i = i?.[e];
@@ -4172,15 +4164,15 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4172
4164
  };
4173
4165
  });
4174
4166
  }, [
4175
- Le,
4167
+ I,
4176
4168
  C,
4177
- Re,
4169
+ ze,
4178
4170
  b,
4179
- I
4180
- ]), Be = e.persistLayout === !1 ? void 0 : `${e.objectName || (T?.provider === "object" ? T.object : "") || "gantt"}:${e.viewName || "default"}`, Ve = Be ? `gantt-layout:${Be}:filters` : null, [He, Ue] = o(() => {
4181
- if (!Ve || typeof window > "u") return {};
4171
+ F
4172
+ ]), Ve = e.persistLayout === !1 ? void 0 : `${e.objectName || (T?.provider === "object" ? T.object : "") || "gantt"}:${e.viewName || "default"}`, He = Ve ? `gantt-layout:${Ve}:filters` : null, [Ue, We] = o(() => {
4173
+ if (!He || typeof window > "u") return {};
4182
4174
  try {
4183
- let e = JSON.parse(window.localStorage.getItem(Ve) || "null");
4175
+ let e = JSON.parse(window.localStorage.getItem(He) || "null");
4184
4176
  if (!e || typeof e != "object" || Array.isArray(e)) return {};
4185
4177
  let t = {};
4186
4178
  for (let [n, r] of Object.entries(e)) Array.isArray(r) && (t[n] = r.filter((e) => typeof e == "string"));
@@ -4188,31 +4180,31 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4188
4180
  } catch {
4189
4181
  return {};
4190
4182
  }
4191
- }), We = t(() => {
4192
- if (!(!Ve || typeof window > "u")) try {
4193
- window.localStorage.setItem(Ve, JSON.stringify(He));
4183
+ }), Ge = t(() => {
4184
+ if (!(!He || typeof window > "u")) try {
4185
+ window.localStorage.setItem(He, JSON.stringify(Ue));
4194
4186
  } catch {}
4195
- }, [Ve, He]), Ge = t((e, t) => {
4196
- Ue((n) => ({
4187
+ }, [He, Ue]), Ke = t((e, t) => {
4188
+ We((n) => ({
4197
4189
  ...n,
4198
4190
  [e]: t
4199
4191
  }));
4200
- }, []), qe = t(() => Ue({}), []), R = t((e) => !!E?.objectField && !String(e?.[E.objectField] ?? "").trim(), [E?.objectField]), Je = t((e) => {
4192
+ }, []), qe = t(() => We({}), []), Je = t((e) => !!E?.objectField && !String(e?.[E.objectField] ?? "").trim(), [E?.objectField]), z = t((e) => {
4201
4193
  let t = (E?.objectField ? String(e[E.objectField] ?? "").trim() : "") || O, n = e.id ?? e._id;
4202
4194
  if (!t || n == null) return null;
4203
- let r = O ? ie(O, n) : null;
4195
+ let r = O ? ae(O, n) : null;
4204
4196
  return {
4205
4197
  objectName: t,
4206
4198
  recordId: n,
4207
4199
  href: !O || t === O ? r : r?.replace(`/${O}/record/`, `/${t}/record/`) ?? null
4208
4200
  };
4209
- }, [E?.objectField, O]), z = i(() => {
4210
- let e = Object.entries(He).filter(([, e]) => e.length > 0);
4201
+ }, [E?.objectField, O]), Ye = i(() => {
4202
+ let e = Object.entries(Ue).filter(([, e]) => e.length > 0);
4211
4203
  if (!e.length) return N;
4212
4204
  let t = new Map(N.map((e) => [String(e.id), e])), n = /* @__PURE__ */ new Set();
4213
4205
  for (let r of N) {
4214
4206
  if (!e.every(([e, t]) => {
4215
- let n = I(r.data, e);
4207
+ let n = F(r.data, e);
4216
4208
  return n != null && t.includes(n);
4217
4209
  })) continue;
4218
4210
  let i = r;
@@ -4221,9 +4213,9 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4221
4213
  return N.filter((e) => n.has(String(e.id)));
4222
4214
  }, [
4223
4215
  N,
4224
- He,
4225
- I
4226
- ]), Xe = i(() => {
4216
+ Ue,
4217
+ F
4218
+ ]), Ze = i(() => {
4227
4219
  if (E?.autoZoomToFilter !== !1 || !N.length) return null;
4228
4220
  let e = N[0].start.getTime(), t = N[0].end.getTime();
4229
4221
  for (let n of N) e = Math.min(e, n.start.getTime()), t = Math.max(t, n.end.getTime());
@@ -4231,66 +4223,66 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4231
4223
  start: new Date(e),
4232
4224
  end: new Date(t)
4233
4225
  };
4234
- }, [N, E?.autoZoomToFilter]), Ze = e.navigation ?? {
4226
+ }, [N, E?.autoZoomToFilter]), Qe = e.navigation ?? {
4235
4227
  mode: "drawer",
4236
4228
  width: "min(960px, 60vw)"
4237
- }, Qe = Ze.mode === "drawer" || Ze.mode === "modal" || Ze.mode === "split" || Ze.mode === "popover", $e = m({
4238
- navigation: Ze,
4229
+ }, $e = Qe.mode === "drawer" || Qe.mode === "modal" || Qe.mode === "split" || Qe.mode === "popover", et = h({
4230
+ navigation: Qe,
4239
4231
  objectName: e.objectName,
4240
- onRowClick: Qe ? void 0 : g
4241
- }), [et, tt] = o(null), nt = $e.isOverlay && $e.isOpen ? $e.selectedRecord : null;
4232
+ onRowClick: $e ? void 0 : ee
4233
+ }), [tt, nt] = o(null), rt = et.isOverlay && et.isOpen ? et.selectedRecord : null;
4242
4234
  r(() => {
4243
- if (!nt) {
4244
- tt(null);
4235
+ if (!rt) {
4236
+ nt(null);
4245
4237
  return;
4246
4238
  }
4247
- let e = Je(nt);
4239
+ let e = z(rt);
4248
4240
  if (!e) {
4249
- tt(null);
4241
+ nt(null);
4250
4242
  return;
4251
4243
  }
4252
4244
  let { objectName: t, recordId: n } = e;
4253
4245
  if (T?.provider !== "api" && t === O || !s || typeof s.findOne != "function") {
4254
- tt(null);
4246
+ nt(null);
4255
4247
  return;
4256
4248
  }
4257
4249
  let r = `${t}:${n}`, i = !1;
4258
4250
  return (async () => {
4259
4251
  try {
4260
4252
  let [e, a] = await Promise.all([s.findOne(t, String(n)), typeof s.getObjectSchema == "function" ? s.getObjectSchema(t).catch(() => null) : Promise.resolve(null)]);
4261
- i || tt(e ? {
4253
+ i || nt(e ? {
4262
4254
  key: r,
4263
4255
  record: e,
4264
4256
  schema: a
4265
4257
  } : null);
4266
4258
  } catch (e) {
4267
- console.error("[ObjectGantt] Failed to fetch drawer record, falling back to row payload:", e), i || tt(null);
4259
+ console.error("[ObjectGantt] Failed to fetch drawer record, falling back to row payload:", e), i || nt(null);
4268
4260
  }
4269
4261
  })(), () => {
4270
4262
  i = !0;
4271
4263
  };
4272
4264
  }, [
4273
- nt,
4274
- Je,
4265
+ rt,
4266
+ z,
4275
4267
  T?.provider,
4276
4268
  O,
4277
4269
  s
4278
4270
  ]);
4279
- let rt = t(async (e, t) => {
4271
+ let it = t(async (e, t) => {
4280
4272
  if (!E || !D || typeof D.update != "function") return;
4281
4273
  let { startDateField: n, endDateField: r, titleField: i, progressField: a } = E, o = {};
4282
4274
  if (t.start instanceof Date && (o[n] = t.start.toISOString()), t.end instanceof Date && (o[r] = t.end.toISOString()), typeof t.title == "string" && i && (o[i] = t.title), typeof t.progress == "number" && a && (o[a] = t.progress), Object.keys(o).length === 0) return;
4283
4275
  let s = e.data?.id ?? e.data?._id ?? e.id;
4284
4276
  if (s == null) return;
4285
4277
  let c = b;
4286
- be((e) => e.map((e) => String(e.id ?? e._id) === String(s) ? {
4278
+ xe((e) => e.map((e) => String(e.id ?? e._id) === String(s) ? {
4287
4279
  ...e,
4288
4280
  ...o
4289
4281
  } : e));
4290
4282
  try {
4291
4283
  await D.update(O, String(s), o), M({ silent: !0 });
4292
4284
  } catch (e) {
4293
- console.error("[ObjectGantt] Failed to persist task update:", e), be(c), Oe(e);
4285
+ console.error("[ObjectGantt] Failed to persist task update:", e), xe(c), ke(e);
4294
4286
  }
4295
4287
  }, [
4296
4288
  E,
@@ -4298,25 +4290,25 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4298
4290
  O,
4299
4291
  b,
4300
4292
  M,
4301
- Oe
4302
- ]), it = (e, t) => {
4293
+ ke
4294
+ ]), at = (e, t) => {
4303
4295
  let n = t.some((e) => typeof e == "object" && e.type && e.type !== "fs");
4304
4296
  return !n && typeof e == "string" ? t.map((e) => String(typeof e == "object" ? e.id : e)).join(",") : n ? t.map((e) => typeof e == "object" ? e.type && e.type !== "fs" ? {
4305
4297
  id: e.id,
4306
4298
  type: e.type
4307
4299
  } : e.id : e) : t.map((e) => typeof e == "object" ? e.id : e);
4308
- }, at = t(async (e, t, n) => {
4300
+ }, ot = t(async (e, t, n) => {
4309
4301
  let r = E?.dependenciesField;
4310
4302
  if (!r || !D || typeof D.update != "function") return;
4311
- let i = it(t, n), a = b;
4312
- be((t) => t.map((t) => String(t.id ?? t._id) === String(e) ? {
4303
+ let i = at(t, n), a = b;
4304
+ xe((t) => t.map((t) => String(t.id ?? t._id) === String(e) ? {
4313
4305
  ...t,
4314
4306
  [r]: i
4315
4307
  } : t));
4316
4308
  try {
4317
4309
  await D.update(O, String(e), { [r]: i }), M({ silent: !0 });
4318
4310
  } catch (e) {
4319
- console.error("[ObjectGantt] Failed to persist dependency:", e), be(a), Oe(e);
4311
+ console.error("[ObjectGantt] Failed to persist dependency:", e), xe(a), ke(e);
4320
4312
  }
4321
4313
  }, [
4322
4314
  E,
@@ -4324,69 +4316,69 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4324
4316
  O,
4325
4317
  b,
4326
4318
  M,
4327
- Oe
4328
- ]), ot = t(async (e, t, n = "fs") => {
4319
+ ke
4320
+ ]), st = t(async (e, t, n = "fs") => {
4329
4321
  let r = e.data?.id ?? e.data?._id ?? e.id, i = t.data?.id ?? t.data?._id ?? t.id;
4330
4322
  if (r == null || i == null) return;
4331
4323
  let a = E?.dependenciesField;
4332
4324
  if (!a) return;
4333
- let o = b.find((e) => String(e.id ?? e._id) === String(i))?.[a], s = Nt(o), c = (e) => String(typeof e == "object" ? e.id : e), l = s.find((e) => c(e) === String(r)), u = l && typeof l == "object" ? l.type ?? "fs" : "fs";
4325
+ let o = b.find((e) => String(e.id ?? e._id) === String(i))?.[a], s = Pt(o), c = (e) => String(typeof e == "object" ? e.id : e), l = s.find((e) => c(e) === String(r)), u = l && typeof l == "object" ? l.type ?? "fs" : "fs";
4334
4326
  if (l && u === n) return;
4335
4327
  let d = n === "fs" ? r : {
4336
4328
  id: r,
4337
4329
  type: n
4338
4330
  }, f = l ? s.map((e) => c(e) === String(r) ? d : e) : [...s, d];
4339
- await at(i, o, f);
4331
+ await ot(i, o, f);
4340
4332
  }, [
4341
4333
  E,
4342
4334
  b,
4343
- at
4344
- ]), st = t(async (e, t) => {
4335
+ ot
4336
+ ]), ct = t(async (e, t) => {
4345
4337
  let n = e.data?.id ?? e.data?._id ?? e.id, r = t.data?.id ?? t.data?._id ?? t.id;
4346
4338
  if (n == null || r == null) return;
4347
4339
  let i = E?.dependenciesField;
4348
4340
  if (!i) return;
4349
- let a = b.find((e) => String(e.id ?? e._id) === String(r))?.[i], o = Nt(a), s = (e) => String(typeof e == "object" ? e.id : e), c = o.filter((e) => s(e) !== String(n));
4350
- c.length !== o.length && await at(r, a, c);
4341
+ let a = b.find((e) => String(e.id ?? e._id) === String(r))?.[i], o = Pt(a), s = (e) => String(typeof e == "object" ? e.id : e), c = o.filter((e) => s(e) !== String(n));
4342
+ c.length !== o.length && await ot(r, a, c);
4351
4343
  }, [
4352
4344
  E,
4353
4345
  b,
4354
- at
4355
- ]), [ct, lt] = o(null), [ut, dt] = o(!1), ft = t((e) => {
4356
- lt(e);
4357
- }, []), pt = t(async () => {
4358
- if (!ct) return;
4346
+ ot
4347
+ ]), [lt, ut] = o(null), [dt, ft] = o(!1), pt = t((e) => {
4348
+ ut(e);
4349
+ }, []), mt = t(async () => {
4350
+ if (!lt) return;
4359
4351
  if (!D?.delete) {
4360
- lt(null);
4352
+ ut(null);
4361
4353
  return;
4362
4354
  }
4363
- let e = ct.data?.id ?? ct.data?._id ?? ct.id;
4355
+ let e = lt.data?.id ?? lt.data?._id ?? lt.id;
4364
4356
  if (e == null) {
4365
- lt(null);
4357
+ ut(null);
4366
4358
  return;
4367
4359
  }
4368
- dt(!0);
4360
+ ft(!0);
4369
4361
  let t = b;
4370
- be((t) => t.filter((t) => String(t.id ?? t._id) !== String(e)));
4362
+ xe((t) => t.filter((t) => String(t.id ?? t._id) !== String(e)));
4371
4363
  try {
4372
4364
  if (await D.delete(O, String(e)) === !1) throw Error(w("gantt.writeFailed"));
4373
- lt(null), M({ silent: !0 });
4365
+ ut(null), M({ silent: !0 });
4374
4366
  } catch (e) {
4375
- console.error("[ObjectGantt] Failed to delete:", e), be(t), lt(null), Oe(e);
4367
+ console.error("[ObjectGantt] Failed to delete:", e), xe(t), ut(null), ke(e);
4376
4368
  } finally {
4377
- dt(!1);
4369
+ ft(!1);
4378
4370
  }
4379
4371
  }, [
4380
- ct,
4372
+ lt,
4381
4373
  D,
4382
4374
  O,
4383
4375
  b,
4384
4376
  M,
4385
- Oe,
4377
+ ke,
4386
4378
  w
4387
4379
  ]);
4388
- return xe ? /* @__PURE__ */ k("div", {
4389
- className: f,
4380
+ return Se ? /* @__PURE__ */ k("div", {
4381
+ className: p,
4390
4382
  children: /* @__PURE__ */ k("div", {
4391
4383
  className: "flex items-center justify-center h-96",
4392
4384
  children: /* @__PURE__ */ k("div", {
@@ -4394,24 +4386,24 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4394
4386
  children: "Loading Gantt chart..."
4395
4387
  })
4396
4388
  })
4397
- }) : Ce ? /* @__PURE__ */ k("div", {
4398
- className: f,
4389
+ }) : we ? /* @__PURE__ */ k("div", {
4390
+ className: p,
4399
4391
  children: /* @__PURE__ */ k("div", {
4400
4392
  className: "flex items-center justify-center h-96",
4401
4393
  children: /* @__PURE__ */ A("div", {
4402
4394
  className: "text-destructive",
4403
- children: ["Error: ", Ce.message]
4395
+ children: ["Error: ", we.message]
4404
4396
  })
4405
4397
  })
4406
4398
  }) : E ? /* @__PURE__ */ A("div", {
4407
- className: pe("flex h-full min-h-0 flex-col", f),
4399
+ className: me("flex h-full min-h-0 flex-col", p),
4408
4400
  children: [
4409
- L.length > 0 && /* @__PURE__ */ k(At, {
4410
- filters: L,
4411
- value: He,
4412
- onChange: Ge,
4401
+ Be.length > 0 && /* @__PURE__ */ k(jt, {
4402
+ filters: Be,
4403
+ value: Ue,
4404
+ onChange: Ke,
4413
4405
  onClear: qe,
4414
- resultCount: z.length,
4406
+ resultCount: Ye.length,
4415
4407
  totalCount: N.length,
4416
4408
  labels: {
4417
4409
  all: w("gantt.quickFilter.all"),
@@ -4422,61 +4414,62 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4422
4414
  }),
4423
4415
  /* @__PURE__ */ k("div", {
4424
4416
  className: "flex-1 min-h-[420px]",
4425
- children: E?.resourceView && Pe ? /* @__PURE__ */ k(wt, {
4426
- tasks: z,
4427
- assignee: Pe,
4428
- effort: F,
4417
+ children: E?.resourceView && P ? /* @__PURE__ */ k(Tt, {
4418
+ tasks: Ye,
4419
+ assignee: P,
4420
+ effort: Ie,
4429
4421
  capacity: E?.capacity ?? 1,
4430
- viewMode: e.viewMode || "day"
4431
- }) : /* @__PURE__ */ k(_t, {
4432
- tasks: z,
4433
- startDate: Xe?.start,
4434
- endDate: Xe?.end,
4422
+ viewMode: E?.viewMode || "day"
4423
+ }) : /* @__PURE__ */ k(vt, {
4424
+ tasks: Ye,
4425
+ viewMode: E?.viewMode,
4426
+ startDate: Ze?.start,
4427
+ endDate: Ze?.end,
4435
4428
  onTaskClick: (e) => {
4436
- R(e.data) || $e.handleClick(e.data), h?.(e.data);
4429
+ Je(e.data) || et.handleClick(e.data), g?.(e.data);
4437
4430
  },
4438
- onTaskUpdate: rt,
4439
- onTaskDelete: ft,
4440
- onDependencyCreate: E?.dependenciesField ? ot : void 0,
4441
- onDependencyDelete: E?.dependenciesField ? st : void 0,
4431
+ onTaskUpdate: it,
4432
+ onTaskDelete: pt,
4433
+ onDependencyCreate: E?.dependenciesField ? st : void 0,
4434
+ onDependencyDelete: E?.dependenciesField ? ct : void 0,
4442
4435
  markers: e.markers,
4443
4436
  autoSchedule: !!E?.dependenciesField,
4444
4437
  rescheduleOnConflict: !!E?.dependenciesField,
4445
4438
  criticalPathDefault: !!e.criticalPath,
4446
- workingCalendar: Fe,
4447
- shiftSegments: Ie,
4439
+ workingCalendar: Le,
4440
+ shiftSegments: Re,
4448
4441
  showBaselines: e.showBaselines !== !1,
4449
4442
  readOnly: !!e.readOnly,
4450
4443
  mobileReadOnly: e.mobileReadOnly !== !1,
4451
- persistLayoutKey: Be,
4452
- onLayoutChange: Ve ? We : void 0,
4453
- groupBy: P,
4444
+ persistLayoutKey: Ve,
4445
+ onLayoutChange: He ? Ge : void 0,
4446
+ groupBy: Fe,
4454
4447
  defaultCollapsedDepth: E?.defaultCollapsedDepth,
4455
4448
  summaryExtent: E?.summaryExtent,
4456
4449
  interactions: E?.interactions,
4457
4450
  dependencyTypes: E?.dependencyTypes,
4458
4451
  timeZone: E?.timeZone,
4459
- onBeforeTaskUpdate: te,
4452
+ onBeforeTaskUpdate: ne,
4460
4453
  exportFileName: String(E?.exportFileName ?? e.label ?? C?.label ?? e.objectName ?? "") || void 0,
4461
4454
  inlineEdit: !0,
4462
4455
  onRefresh: (T?.provider === "object" || T?.provider === "api") && typeof D?.find == "function" ? () => M({ silent: !0 }) : void 0,
4463
- refreshing: Me
4456
+ refreshing: Ne
4464
4457
  })
4465
4458
  }),
4466
- $e.isOverlay && $e.isOpen && $e.selectedRecord && (() => {
4467
- let t = $e.selectedRecord, n = Je(t);
4468
- if (!n || R(t)) return null;
4469
- let { objectName: r, recordId: i } = n, a = n.href ?? void 0, o = E?.titleField ? String(t[E.titleField] ?? w("gantt.drawer.fallbackTitle")) : w("gantt.drawer.fallbackTitle"), c = !!e.readOnly || (E?.lockField ? !!t[E.lockField] : !1), l = et?.key === `${r}:${i}` ? et : null, u = l?.record ?? t, d = l?.schema ?? (r === O ? C : void 0), f = l && s ? s : D;
4470
- return /* @__PURE__ */ k(re, {
4459
+ et.isOverlay && et.isOpen && et.selectedRecord && (() => {
4460
+ let t = et.selectedRecord, n = z(t);
4461
+ if (!n || Je(t)) return null;
4462
+ let { objectName: r, recordId: i } = n, a = n.href ?? void 0, o = E?.titleField ? String(t[E.titleField] ?? w("gantt.drawer.fallbackTitle")) : w("gantt.drawer.fallbackTitle"), c = !!e.readOnly || (E?.lockField ? !!t[E.lockField] : !1), l = tt?.key === `${r}:${i}` ? tt : null, u = l?.record ?? t, d = l?.schema ?? (r === O ? C : void 0), f = l && s ? s : D;
4463
+ return /* @__PURE__ */ k(ie, {
4471
4464
  open: !0,
4472
- onClose: $e.close,
4465
+ onClose: et.close,
4473
4466
  title: o,
4474
4467
  record: u,
4475
4468
  objectName: r,
4476
4469
  recordId: i,
4477
4470
  dataSource: f ?? void 0,
4478
4471
  objectSchema: d,
4479
- width: $e.width,
4472
+ width: et.width,
4480
4473
  fullPageHref: a,
4481
4474
  onFieldSave: c ? void 0 : async (e, t) => {
4482
4475
  if (f?.update) {
@@ -4486,13 +4479,13 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4486
4479
  let t = Ft(e);
4487
4480
  throw t ? Error(t) : e;
4488
4481
  }
4489
- l && tt((n) => n && n.key === l.key ? {
4482
+ l && nt((n) => n && n.key === l.key ? {
4490
4483
  ...n,
4491
4484
  record: {
4492
4485
  ...n.record,
4493
4486
  [e]: t
4494
4487
  }
4495
- } : n), be((n) => n.map((n) => String(n.id ?? n._id) === String(i) ? {
4488
+ } : n), xe((n) => n.map((n) => String(n.id ?? n._id) === String(i) ? {
4496
4489
  ...n,
4497
4490
  [e]: t
4498
4491
  } : n)), M({ silent: !0 });
@@ -4503,34 +4496,34 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4503
4496
  try {
4504
4497
  if (await D.delete(r, String(i)) === !1) throw Error(w("gantt.writeFailed"));
4505
4498
  } catch (e) {
4506
- throw Oe(e), e;
4499
+ throw ke(e), e;
4507
4500
  }
4508
- be((e) => e.filter((e) => String(e.id ?? e._id) !== String(i)));
4501
+ xe((e) => e.filter((e) => String(e.id ?? e._id) !== String(i)));
4509
4502
  }
4510
4503
  }
4511
4504
  });
4512
4505
  })(),
4513
- /* @__PURE__ */ k(ae, {
4514
- open: !!ct,
4506
+ /* @__PURE__ */ k(oe, {
4507
+ open: !!lt,
4515
4508
  onOpenChange: (e) => {
4516
- !e && !ut && lt(null);
4509
+ !e && !dt && ut(null);
4517
4510
  },
4518
- children: /* @__PURE__ */ A(ce, { children: [/* @__PURE__ */ A(de, { children: [/* @__PURE__ */ k(fe, { children: w("gantt.delete.title") }), /* @__PURE__ */ k(le, { children: ct ? w("gantt.delete.body", { title: ct.title }) : null })] }), /* @__PURE__ */ A(ue, { children: [/* @__PURE__ */ k(se, {
4519
- disabled: ut,
4511
+ children: /* @__PURE__ */ A(le, { children: [/* @__PURE__ */ A(fe, { children: [/* @__PURE__ */ k(pe, { children: w("gantt.delete.title") }), /* @__PURE__ */ k(ue, { children: lt ? w("gantt.delete.body", { title: lt.title }) : null })] }), /* @__PURE__ */ A(de, { children: [/* @__PURE__ */ k(ce, {
4512
+ disabled: dt,
4520
4513
  children: w("gantt.delete.cancel")
4521
- }), /* @__PURE__ */ k(oe, {
4514
+ }), /* @__PURE__ */ k(se, {
4522
4515
  onClick: (e) => {
4523
- e.preventDefault(), pt();
4516
+ e.preventDefault(), mt();
4524
4517
  },
4525
- disabled: ut,
4518
+ disabled: dt,
4526
4519
  "data-testid": "gantt-delete-confirm",
4527
4520
  className: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
4528
- children: w(ut ? "gantt.delete.deleting" : "gantt.delete.confirm")
4521
+ children: w(dt ? "gantt.delete.deleting" : "gantt.delete.confirm")
4529
4522
  })] })] })
4530
4523
  })
4531
4524
  ]
4532
4525
  }) : /* @__PURE__ */ k("div", {
4533
- className: f,
4526
+ className: p,
4534
4527
  children: /* @__PURE__ */ k("div", {
4535
4528
  className: "flex items-center justify-center h-96",
4536
4529
  children: /* @__PURE__ */ k("div", {
@@ -4543,8 +4536,8 @@ var Lt = ({ schema: e, dataSource: s, className: f, onTaskClick: h, onRowClick:
4543
4536
  filter: !0,
4544
4537
  sort: !0
4545
4538
  }, zt = ({ schema: e }) => {
4546
- let { dataSource: t } = g() || {};
4547
- return /* @__PURE__ */ k(f, {
4539
+ let { dataSource: t } = ee() || {};
4540
+ return /* @__PURE__ */ k(p, {
4548
4541
  schema: e,
4549
4542
  mapping: Rt,
4550
4543
  dataSource: t,
@@ -4588,4 +4581,4 @@ s.register("object-gantt", zt, {
4588
4581
  }]
4589
4582
  });
4590
4583
  //#endregion
4591
- export { _t as GanttView, Lt as ObjectGantt, zt as ObjectGanttRenderer, At as QuickFilterBar, wt as ResourceWorkload, R as bandAt, yt as computeWorkload, Nt as normalizeDependencies, Ke as normalizeShiftSegments, jt as normalizeTaskType, Ge as parseHHMM, qe as shiftDayStart };
4584
+ export { vt as GanttView, Lt as ObjectGantt, zt as ObjectGanttRenderer, jt as QuickFilterBar, Tt as ResourceWorkload, Je as bandAt, B as computeWorkload, Pt as normalizeDependencies, R as normalizeShiftSegments, Mt as normalizeTaskType, Ke as parseHHMM, qe as shiftDayStart };