@art-tools/react-gantt 0.1.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.mjs ADDED
@@ -0,0 +1,3288 @@
1
+ import { Fragment as e, createContext as t, memo as n, startTransition as r, useCallback as i, useContext as a, useEffect as o, useImperativeHandle as s, useLayoutEffect as c, useMemo as l, useRef as u, useState as d } from "react";
2
+ import { flushSync as f } from "react-dom";
3
+ import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
4
+ //#region src/core/lruCache.ts
5
+ var g = class {
6
+ cache = /* @__PURE__ */ new Map();
7
+ capacity;
8
+ constructor(e) {
9
+ this.capacity = e;
10
+ }
11
+ refreshKey(e) {
12
+ if (!this.cache.has(e)) return;
13
+ let t = this.cache.get(e);
14
+ this.cache.delete(e), this.cache.set(e, t);
15
+ }
16
+ get(e) {
17
+ if (this.cache.has(e)) return this.refreshKey(e), this.cache.get(e);
18
+ }
19
+ put(e, t) {
20
+ if (this.refreshKey(e), this.cache.set(e, t), this.cache.size > this.capacity) {
21
+ let [e] = this.cache.keys();
22
+ this.cache.delete(e);
23
+ }
24
+ }
25
+ };
26
+ //#endregion
27
+ //#region src/core/utils.ts
28
+ function _(e, t) {
29
+ let n = new g(t);
30
+ return (t) => {
31
+ let r = n.get(t);
32
+ if (r != null) return r;
33
+ let i = e(t);
34
+ return n.put(t, i), i;
35
+ };
36
+ }
37
+ function v(e, t) {
38
+ return _(e, t);
39
+ }
40
+ //#endregion
41
+ //#region src/core/dateUtils.ts
42
+ var y = 6e4, b = 36e5, x = 864e5, S = {
43
+ minute: y,
44
+ hour: b,
45
+ day: x,
46
+ week: x * 7
47
+ };
48
+ function C(e, t, n) {
49
+ let r = e.getFullYear(), i = e.getMonth(), a = e.getDate();
50
+ switch (t) {
51
+ case "minute": {
52
+ let t = new Date(e);
53
+ t.setSeconds(0, 0);
54
+ let r = Math.round(t.getTime() / y);
55
+ return `mi-${Math.floor(r / n)}`;
56
+ }
57
+ case "hour": {
58
+ let t = new Date(e);
59
+ t.setMinutes(0, 0, 0);
60
+ let r = Math.round(t.getTime() / b);
61
+ return `h-${Math.floor(r / n)}`;
62
+ }
63
+ case "day": {
64
+ let e = Math.floor(Date.UTC(r, i, a) / x);
65
+ return `d-${Math.floor(e / n)}`;
66
+ }
67
+ case "week": {
68
+ let e = new Date(r, i, a), t = e.getDay(), o = t === 0 ? -6 : 1 - t;
69
+ e.setDate(e.getDate() + o);
70
+ let s = Math.floor(e.getTime() / (x * 7));
71
+ return `w-${Math.floor(s / n)}`;
72
+ }
73
+ case "month": {
74
+ let e = r * 12 + i;
75
+ return `mo-${Math.floor(e / n)}`;
76
+ }
77
+ case "quarter": {
78
+ let e = r * 4 + Math.floor(i / 3);
79
+ return `q-${Math.floor(e / n)}`;
80
+ }
81
+ case "year": return `y-${Math.floor(r / n)}`;
82
+ default: throw Error(`Unsupported unit: ${t}`);
83
+ }
84
+ }
85
+ function w(e) {
86
+ let t = e.getDay();
87
+ return t === 0 || t === 6;
88
+ }
89
+ function T(e) {
90
+ return Date.UTC(e.getFullYear(), e.getMonth(), e.getDate()) / x;
91
+ }
92
+ function E(e) {
93
+ let t = new Date(e * x);
94
+ return new Date(t.getUTCFullYear(), t.getUTCMonth(), t.getUTCDate());
95
+ }
96
+ function D(e, t) {
97
+ let n = new Date(e);
98
+ return n.setHours(0, 0, 0, 0), new Date(n.getTime() + t * x);
99
+ }
100
+ function O(e, t) {
101
+ let n = new Date(e);
102
+ switch (t) {
103
+ case "minute": return n.setSeconds(0, 0), n;
104
+ case "hour": return n.setMinutes(0, 0, 0), n;
105
+ case "day": return n.setHours(0, 0, 0, 0), n;
106
+ case "week": {
107
+ n.setHours(0, 0, 0, 0);
108
+ let e = n.getDay(), t = e === 0 ? -6 : 1 - e;
109
+ return n.setDate(n.getDate() + t), n;
110
+ }
111
+ case "month": return n.setHours(0, 0, 0, 0), n.setDate(1), n;
112
+ case "quarter": return n.setHours(0, 0, 0, 0), n.setMonth(Math.floor(n.getMonth() / 3) * 3, 1), n;
113
+ case "year": return n.setHours(0, 0, 0, 0), n.setMonth(0, 1), n;
114
+ default: throw Error(`Unsupported unit: ${t}`);
115
+ }
116
+ }
117
+ function k(e, t, n) {
118
+ let r = S[t];
119
+ if (r !== void 0) return t === "day" || t === "week" ? D(e, r / x * n) : new Date(e.getTime() + n * r);
120
+ let i = new Date(e);
121
+ switch (t) {
122
+ case "month": return i.setMonth(i.getMonth() + n), i;
123
+ case "quarter": return i.setMonth(i.getMonth() + n * 3), i;
124
+ case "year": return i.setFullYear(i.getFullYear() + n), i;
125
+ default: throw Error(`Unsupported unit: ${t}`);
126
+ }
127
+ }
128
+ function A(e, t, n) {
129
+ let r = S[n];
130
+ if (r !== void 0) return (t.getTime() - e.getTime()) / r;
131
+ let i = n === "month" ? 1 : n === "quarter" ? 3 : 12, a = e.getFullYear() * 12 + e.getMonth(), o = t.getFullYear() * 12 + t.getMonth(), s = Math.floor((o - a) / i);
132
+ for (; k(e, n, s).getTime() > t.getTime();) --s;
133
+ for (; k(e, n, s + 1).getTime() <= t.getTime();) s += 1;
134
+ let c = k(e, n, s).getTime(), l = k(e, n, s + 1).getTime();
135
+ return s + (t.getTime() - c) / (l - c);
136
+ }
137
+ function j(e, t, n) {
138
+ let r = S[t];
139
+ if (r !== void 0) return new Date(e.getTime() + n * r);
140
+ let i = Math.floor(n), a = n - i, o = k(e, t, i).getTime(), s = k(e, t, i + 1).getTime();
141
+ return new Date(o + a * (s - o));
142
+ }
143
+ function M(e, t, n = "day", r = 1) {
144
+ return Array.from({ length: t }, (t, i) => k(e, n, i * r));
145
+ }
146
+ function ee(e) {
147
+ let t = e[0];
148
+ if (!t) return null;
149
+ let n = t.startDate, r = t.endDate ?? t.startDate;
150
+ for (let t of e) {
151
+ t.startDate < n && (n = t.startDate);
152
+ let e = t.endDate ?? t.startDate;
153
+ e > r && (r = e);
154
+ }
155
+ return {
156
+ min: n,
157
+ max: r
158
+ };
159
+ }
160
+ var N = v(ee, 3), P = 1440, F = 6e4, I = [0, P], te = /^\s*(\d{1,2}):(\d{2})\s*-\s*(\d{1,2}):(\d{2})\s*$/;
161
+ function ne(e) {
162
+ let t = te.exec(e);
163
+ if (!t) throw Error(`Invalid working-hours range ${JSON.stringify(e)}: expected "H:MM-H:MM", e.g. "8:30-12:00".`);
164
+ let n = Number(t[1]) * 60 + Number(t[2]), r = Number(t[3]) * 60 + Number(t[4]);
165
+ if (n < 0 || n >= 1440) throw Error(`Invalid working-hours range ${JSON.stringify(e)}: start must be within the day.`);
166
+ if (r <= n || r > 1440) throw Error(`Invalid working-hours range ${JSON.stringify(e)}: end must be after start and no later than 24:00.`);
167
+ return [n, r];
168
+ }
169
+ function L(e) {
170
+ if (e === void 0) return I;
171
+ if (e === !1) return [];
172
+ let t = e.map(ne).toSorted((e, t) => e[0] - t[0]), n = [];
173
+ for (let [e, r] of t) {
174
+ let t = n.length > 0 ? n[n.length - 1] : void 0;
175
+ if (t !== void 0 && e <= t) {
176
+ r > t && (n[n.length - 1] = r);
177
+ continue;
178
+ }
179
+ n.push(e, r);
180
+ }
181
+ return n;
182
+ }
183
+ function R(e, t) {
184
+ let n = [], r = 0;
185
+ for (let t = 0; t < e.length; t += 2) n.push(r), r += e[t + 1] - e[t];
186
+ return {
187
+ intervals: e,
188
+ prefix: n,
189
+ totalMinutes: r,
190
+ id: t
191
+ };
192
+ }
193
+ function z() {
194
+ let e = /* @__PURE__ */ new Map();
195
+ return (t) => {
196
+ let n = t.join(","), r = e.get(n);
197
+ if (r) return r;
198
+ let i = R(t, e.size);
199
+ return e.set(n, i), i;
200
+ };
201
+ }
202
+ function re(e) {
203
+ return e === void 0 ? "*" : e === !1 ? "-" : e.join(",");
204
+ }
205
+ function B(e) {
206
+ if (!e) return "";
207
+ let t = [re(e.hours)];
208
+ for (let n = 0; n < 7; n++) {
209
+ let r = e.days?.[n];
210
+ r !== void 0 && t.push(`${n}=${re(r)}`);
211
+ }
212
+ let n = e.dates;
213
+ if (n) for (let e of Object.keys(n).toSorted()) t.push(`${e}=${re(n[e])}`);
214
+ return t.join("|");
215
+ }
216
+ var V = /^(\d{4})-(\d{2})-(\d{2})$/;
217
+ function ie(e) {
218
+ let t = V.exec(e);
219
+ if (!t) throw Error(`Invalid calendar date key ${JSON.stringify(e)}: expected a local civil date, "YYYY-MM-DD".`);
220
+ return T(new Date(Number(t[1]), Number(t[2]) - 1, Number(t[3])));
221
+ }
222
+ function ae(e, t) {
223
+ let n = z(), r = L(e.hours), i = [];
224
+ for (let t = 0; t < 7; t++) {
225
+ let a = e.days?.[t];
226
+ i.push(n(a === void 0 ? r : L(a)));
227
+ }
228
+ let a = /* @__PURE__ */ new Map();
229
+ if (e.dates) for (let [t, r] of Object.entries(e.dates)) a.set(ie(t), n(L(r)));
230
+ let o = [...a.keys()].toSorted((e, t) => e - t), s = 0, c = !0, l = a.size === 0;
231
+ for (let e of i) s += e.totalMinutes, e.totalMinutes !== 0 && e.totalMinutes !== 1440 && (c = !1), e.totalMinutes !== 1440 && (l = !1);
232
+ for (let e of a.values()) e.totalMinutes !== 0 && e.totalMinutes !== 1440 && (c = !1);
233
+ let u = 0;
234
+ for (let e of i) e.totalMinutes > u && (u = e.totalMinutes);
235
+ return {
236
+ key: t,
237
+ byWeekday: i,
238
+ byDate: a,
239
+ overrideDays: o,
240
+ isAlwaysWorking: l,
241
+ isDayGranular: c,
242
+ weekMinutes: s,
243
+ msPerWorkingDay: u * F
244
+ };
245
+ }
246
+ function H(e, t) {
247
+ return e.byDate.get(t) || e.byWeekday[((t + 4) % 7 + 7) % 7];
248
+ }
249
+ function oe(e, t) {
250
+ let n = e.overrideDays, r = 0, i = n.length;
251
+ for (; r < i;) {
252
+ let e = r + i >> 1;
253
+ n[e] < t ? r = e + 1 : i = e;
254
+ }
255
+ return r < n.length ? n[r] : Infinity;
256
+ }
257
+ function se(e, t) {
258
+ let n = e.overrideDays, r = 0, i = n.length;
259
+ for (; r < i;) {
260
+ let e = r + i >> 1;
261
+ n[e] <= t ? r = e + 1 : i = e;
262
+ }
263
+ return r > 0 ? n[r - 1] : -Infinity;
264
+ }
265
+ //#endregion
266
+ //#region src/hooks/useResolvedCalendar.ts
267
+ function ce(e) {
268
+ let t = u(null), n = B(e);
269
+ return (!t.current || t.current.key !== n) && (t.current = {
270
+ key: n,
271
+ value: e ? ae(e, n) : null
272
+ }), t.current.value;
273
+ }
274
+ //#endregion
275
+ //#region src/core/workingTime.ts
276
+ var le = 36e5, ue = 864e5, de = 2e4;
277
+ function fe(e) {
278
+ return (e.getHours() * le + e.getMinutes() * F + e.getSeconds() * 1e3 + e.getMilliseconds()) / F;
279
+ }
280
+ function U(e, t) {
281
+ let n = E(e);
282
+ return new Date(n.getFullYear(), n.getMonth(), n.getDate(), 0, 0, 0, Math.round(t * F));
283
+ }
284
+ function W(e, t) {
285
+ let { intervals: n, prefix: r } = e;
286
+ for (let e = 0, i = 0; e < n.length; e += 2, i++) {
287
+ let a = n[e], o = n[e + 1];
288
+ if (t <= a) return r[i];
289
+ if (t < o) return r[i] + (t - a);
290
+ }
291
+ return e.totalMinutes;
292
+ }
293
+ function pe(e, t) {
294
+ let { intervals: n, prefix: r } = e, i = n.length > 0 ? n[0] : 0;
295
+ for (let e = 0, a = 0; e < n.length && !(r[a] >= t); e += 2, a++) i = n[e] + (t - r[a]);
296
+ return i;
297
+ }
298
+ function me(e, t) {
299
+ let { intervals: n, prefix: r } = e;
300
+ for (let e = 0, i = 0; e < n.length; e += 2, i++) {
301
+ let a = n[e + 1] - n[e];
302
+ if (t < r[i] + a) return n[e] + (t - r[i]);
303
+ }
304
+ return n.length > 0 ? n[n.length - 1] : 0;
305
+ }
306
+ function he(e, t) {
307
+ let { intervals: n } = e;
308
+ for (let e = 0; e < n.length; e += 2) if (t < n[e + 1]) return Math.max(t, n[e]);
309
+ return null;
310
+ }
311
+ function ge(e, t) {
312
+ let { intervals: n } = e, r = null;
313
+ for (let e = 0; e < n.length; e += 2) t > n[e] && (r = Math.min(t, n[e + 1]));
314
+ return r;
315
+ }
316
+ function G(e, t) {
317
+ if (!e || e.isAlwaysWorking) return !0;
318
+ let n = H(e, T(t)), r = fe(t), { intervals: i } = n;
319
+ for (let e = 0; e < i.length; e += 2) if (r >= i[e] && r < i[e + 1]) return !0;
320
+ return !1;
321
+ }
322
+ function K(e, t, n) {
323
+ if (!e || e.isAlwaysWorking || e.weekMinutes === 0 && e.byDate.size === 0) return t;
324
+ let r = T(t), i = fe(t);
325
+ for (let a = 0; a < de; a++) {
326
+ let a = H(e, r);
327
+ if (n === 1) {
328
+ let e = he(a, i);
329
+ if (e !== null) return e === i && r === T(t) ? t : U(r, e);
330
+ r += 1, i = 0;
331
+ continue;
332
+ }
333
+ let o = ge(a, i);
334
+ if (o !== null) return o === i && r === T(t) ? t : U(r, o);
335
+ --r, i = P;
336
+ }
337
+ return t;
338
+ }
339
+ function _e(e, t) {
340
+ if (!e || e.isAlwaysWorking || G(e, t)) return t;
341
+ let n = K(e, t, 1), r = K(e, t, -1);
342
+ return n.getTime() - t.getTime() <= t.getTime() - r.getTime() ? n : r;
343
+ }
344
+ function ve(e, t, n) {
345
+ let r = T(t), i = fe(t), a = n;
346
+ for (let t = 0; t < de; t++) {
347
+ let t = H(e, r), n = W(t, i), o = t.totalMinutes - n;
348
+ if (a <= o) return U(r, pe(t, n + a));
349
+ if (a -= o, r += 1, i = 0, e.weekMinutes > 0 && a > e.weekMinutes) {
350
+ let t = oe(e, r), n = t === Infinity ? Infinity : Math.floor((t - r) / 7), i = Math.ceil(a / e.weekMinutes) - 1, o = Math.min(n, i);
351
+ o > 0 && Number.isFinite(o) && (r += o * 7, a -= o * e.weekMinutes);
352
+ }
353
+ }
354
+ return U(r, i);
355
+ }
356
+ function ye(e, t, n) {
357
+ let r = T(t), i = fe(t), a = n;
358
+ for (let t = 0; t < de; t++) {
359
+ let t = H(e, r), n = W(t, i);
360
+ if (a <= n) return U(r, me(t, n - a));
361
+ if (a -= n, --r, i = P, e.weekMinutes > 0 && a > e.weekMinutes) {
362
+ let t = se(e, r), n = t === -Infinity ? Infinity : Math.floor((r - t) / 7), i = Math.ceil(a / e.weekMinutes) - 1, o = Math.min(n, i);
363
+ o > 0 && Number.isFinite(o) && (r -= o * 7, a -= o * e.weekMinutes);
364
+ }
365
+ }
366
+ return U(r, i);
367
+ }
368
+ function q(e, t, n, r) {
369
+ if (!e) return new Date(t.getTime() + n);
370
+ let i = K(e, t, r ?? (n < 0 ? -1 : 1));
371
+ return n === 0 || e.weekMinutes === 0 && e.byDate.size === 0 ? i : n > 0 ? ve(e, i, n / F) : ye(e, i, -n / F);
372
+ }
373
+ function be(e, t, n) {
374
+ if (!e) return n.getTime() - t.getTime();
375
+ if (n.getTime() < t.getTime()) return -be(e, n, t);
376
+ let r = T(n), i = T(t), a = fe(t), o = 0;
377
+ for (; i < r;) {
378
+ if (a === 0 && e.weekMinutes > 0) {
379
+ let t = oe(e, i), n = Math.floor((Math.min(r, t) - i) / 7);
380
+ if (n > 0) {
381
+ o += n * e.weekMinutes, i += n * 7;
382
+ continue;
383
+ }
384
+ }
385
+ let t = H(e, i);
386
+ o += t.totalMinutes - W(t, a), i += 1, a = 0;
387
+ }
388
+ let s = H(e, i);
389
+ return o += W(s, fe(n)) - W(s, a), o * F;
390
+ }
391
+ var xe = { isNonWorking: !1 };
392
+ function Se(e, t, n) {
393
+ if (!e) {
394
+ let e = t.getDay();
395
+ return e === 0 || e === 6 ? {
396
+ isNonWorking: !0,
397
+ reason: "weekend"
398
+ } : xe;
399
+ }
400
+ if (be(e, t, n) > 0) return xe;
401
+ let r = T(t);
402
+ return e.byDate.has(r) ? {
403
+ isNonWorking: !0,
404
+ reason: "holiday"
405
+ } : H(e, r).totalMinutes === 0 ? {
406
+ isNonWorking: !0,
407
+ reason: "weekend"
408
+ } : {
409
+ isNonWorking: !0,
410
+ reason: "offHours"
411
+ };
412
+ }
413
+ function Ce(e, t) {
414
+ return t === "minute" ? F : t === "hour" ? le : !e || e.msPerWorkingDay === 0 ? ue : e.msPerWorkingDay;
415
+ }
416
+ function we(e, t, n, r, i) {
417
+ return q(e, t, n * Ce(e, r), i);
418
+ }
419
+ //#endregion
420
+ //#region src/core/taskDates.ts
421
+ var Te = {
422
+ calendar: null,
423
+ durationUnit: "day",
424
+ snapToWorking: !0
425
+ };
426
+ function Ee(e, t) {
427
+ return e.type === "milestone" || e.duration === 0 ? e.startDate : e.endDate ? e.endDate : e.duration === void 0 ? e.startDate : we(t.calendar, e.startDate, e.duration, t.durationUnit, 1);
428
+ }
429
+ function De(e, t) {
430
+ return t.getTime() <= e.getTime() ? O(e, "day") : O(/* @__PURE__ */ new Date(t.getTime() - 1), "day");
431
+ }
432
+ function Oe(e) {
433
+ return new Date(e.getFullYear(), e.getMonth(), e.getDate() + 1);
434
+ }
435
+ function ke(e, t) {
436
+ let n = Ee(e, t);
437
+ if (!(n.getTime() <= e.startDate.getTime())) return De(e.startDate, n);
438
+ }
439
+ function Ae(e, t) {
440
+ return be(t.calendar, e.startDate, Ee(e, t)) / Ce(t.calendar, t.durationUnit);
441
+ }
442
+ //#endregion
443
+ //#region src/core/labels.ts
444
+ var je = {
445
+ gantt: "Gantt chart",
446
+ taskList: "Task list",
447
+ timeline: "Timeline",
448
+ expand: "Expand",
449
+ collapse: "Collapse",
450
+ resizeTaskList: "Resize task list",
451
+ deleteDependency: "Delete dependency",
452
+ editTask: (e) => `Edit ${e.name}`,
453
+ addTaskAfter: (e) => `Add task after ${e.name}`,
454
+ deleteTask: (e) => `Delete ${e.name}`,
455
+ bar: (e, { progress: t }) => Fe(e, t)
456
+ };
457
+ function Me(e) {
458
+ return e ? {
459
+ ...je,
460
+ ...e
461
+ } : je;
462
+ }
463
+ function Ne(e) {
464
+ return e.toLocaleDateString(void 0, { dateStyle: "medium" });
465
+ }
466
+ var Pe = {
467
+ task: "task",
468
+ milestone: "milestone",
469
+ summary: "summary"
470
+ };
471
+ function Fe(e, t) {
472
+ let n = Pe[e.type ?? "task"], r = [e.name, n];
473
+ return e.endDate && e.endDate.getTime() !== e.startDate.getTime() ? r.push(`${Ne(e.startDate)} to ${Ne(e.endDate)}`) : r.push(Ne(e.startDate)), e.type !== "milestone" && r.push(`${Math.round(t)}% complete`), r.join(", ");
474
+ }
475
+ function Ie(e, t, n) {
476
+ switch (t) {
477
+ case "minute":
478
+ case "hour": return e.toLocaleString(void 0, {
479
+ dateStyle: "long",
480
+ timeStyle: "short"
481
+ });
482
+ case "day": return e.toLocaleDateString(void 0, { dateStyle: "long" });
483
+ case "week": return `Week of ${e.toLocaleDateString(void 0, { dateStyle: "long" })}`;
484
+ case "month": return e.toLocaleDateString(void 0, {
485
+ month: "long",
486
+ year: "numeric"
487
+ });
488
+ case "quarter": return `Q${Math.floor(e.getMonth() / 3) + 1} ${e.getFullYear()}`;
489
+ case "year": return n > 1 ? `${e.getFullYear()} to ${e.getFullYear() + n - 1}` : String(e.getFullYear());
490
+ }
491
+ }
492
+ //#endregion
493
+ //#region src/core/prepareData.ts
494
+ function Le(e, t = Te) {
495
+ let n = Je(e.values()), r = n.get(null) ?? [], i = [];
496
+ for (let e of r) Ge(e, n, i, t);
497
+ return i;
498
+ }
499
+ function Re(e) {
500
+ let t = /* @__PURE__ */ new Map();
501
+ for (let n of e) t.set(n.id, n);
502
+ return t;
503
+ }
504
+ function ze(e, t) {
505
+ return Be(new Map(e), t);
506
+ }
507
+ function Be(e, t) {
508
+ for (let n of t) switch (n.type) {
509
+ case "update":
510
+ e.has(n.task.id) && e.set(n.task.id, n.task);
511
+ break;
512
+ case "delete":
513
+ e.delete(n.id);
514
+ break;
515
+ case "create":
516
+ e = Ve(e, n.task, n.afterId);
517
+ break;
518
+ }
519
+ return e;
520
+ }
521
+ function Ve(e, t, n) {
522
+ if (n == null) return e.set(t.id, t), e;
523
+ let r = /* @__PURE__ */ new Map();
524
+ e.has(n) || r.set(t.id, t);
525
+ for (let [i, a] of e) r.set(i, a), i === n && r.set(t.id, t);
526
+ return r;
527
+ }
528
+ var He = 32;
529
+ function Ue() {
530
+ return {
531
+ seedTasks: null,
532
+ snapshots: new g(He)
533
+ };
534
+ }
535
+ function We(e, t, n) {
536
+ e.seedTasks !== t && (e.seedTasks = t, e.snapshots = new g(He));
537
+ let r = 0, i = null;
538
+ for (let t = n.cursor; t >= 1; t--) {
539
+ let a = e.snapshots.get(t);
540
+ if (a && a.producedBy === n.transactions[t - 1]) {
541
+ r = t, i = a.map;
542
+ break;
543
+ }
544
+ }
545
+ if (!i) {
546
+ let n = e.snapshots.get(0);
547
+ i = n ? n.map : Re(t), n || e.snapshots.put(0, {
548
+ producedBy: null,
549
+ map: i
550
+ });
551
+ }
552
+ for (let t = r; t < n.cursor; t++) {
553
+ let r = n.transactions[t];
554
+ i = ze(i, r), e.snapshots.put(t + 1, {
555
+ producedBy: r,
556
+ map: i
557
+ });
558
+ }
559
+ return i;
560
+ }
561
+ function Ge(e, t, n, r) {
562
+ let i = t.get(e.id);
563
+ if (!i || i.length === 0) {
564
+ let t = Ke(e, r);
565
+ return n.push(t), t;
566
+ }
567
+ let a = n.length;
568
+ n.push(e);
569
+ let o = [];
570
+ for (let e of i) o.push(Ge(e, t, n, r));
571
+ let s = qe(e, o, r);
572
+ return n[a] = s, s;
573
+ }
574
+ function Ke(e, t) {
575
+ let n = Ee(e, t);
576
+ return e.endDate && e.endDate.getTime() === n.getTime() || !e.endDate && n === e.startDate ? e : {
577
+ ...e,
578
+ endDate: n
579
+ };
580
+ }
581
+ function qe(e, t, n = Te) {
582
+ if (e.type !== "summary" || t.length === 0) return Ke(e, n);
583
+ let r = t[0].startDate, i = Ee(t[0], n), a = 0, o = 0;
584
+ for (let e of t) {
585
+ e.startDate < r && (r = e.startDate);
586
+ let t = Ee(e, n);
587
+ t > i && (i = t), e.type !== "milestone" && (o++, a += e.progress ?? 0);
588
+ }
589
+ let s = o === 0 ? 0 : Math.round(a / o);
590
+ return {
591
+ ...e,
592
+ startDate: r,
593
+ endDate: i,
594
+ progress: s
595
+ };
596
+ }
597
+ function Je(e) {
598
+ let t = /* @__PURE__ */ new Map();
599
+ for (let n of e) {
600
+ let e = n.parentId ?? null, r = t.get(e) ?? [];
601
+ r.push(n), t.set(e, r);
602
+ }
603
+ return t;
604
+ }
605
+ //#endregion
606
+ //#region src/core/queue.ts
607
+ var Ye = class {
608
+ items = [];
609
+ head = 0;
610
+ constructor(e) {
611
+ e && this.items.push(...e);
612
+ }
613
+ get size() {
614
+ return this.items.length - this.head;
615
+ }
616
+ isEmpty() {
617
+ return this.size === 0;
618
+ }
619
+ enqueue(e) {
620
+ this.items.push(e);
621
+ }
622
+ dequeue() {
623
+ if (this.head >= this.items.length) return;
624
+ let e = this.items[this.head];
625
+ return this.head++, this.head > this.items.length >> 1 && (this.items = this.items.slice(this.head), this.head = 0), e;
626
+ }
627
+ };
628
+ //#endregion
629
+ //#region src/core/scheduling.ts
630
+ function Xe(e, t) {
631
+ return {
632
+ start: e.startDate,
633
+ end: Ee(e, t)
634
+ };
635
+ }
636
+ function Ze(e, t) {
637
+ let { start: n, end: r } = Xe(e, t);
638
+ return be(t.calendar, n, r);
639
+ }
640
+ function Qe(e, t, n, r, i) {
641
+ let a = i.calendar;
642
+ switch (t) {
643
+ case "FS": return q(a, e.end, n, 1);
644
+ case "SS": return q(a, e.start, n, 1);
645
+ case "FF": return q(a, q(a, e.end, n, -1), -r, -1);
646
+ case "SF": return q(a, q(a, e.start, n, -1), -r, -1);
647
+ }
648
+ }
649
+ function $e(e) {
650
+ let t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map();
651
+ for (let r of e) {
652
+ let e = t.get(r.from);
653
+ e ? e.push(r.to) : t.set(r.from, [r.to]);
654
+ let i = n.get(r.to);
655
+ i ? i.push(r) : n.set(r.to, [r]);
656
+ }
657
+ return {
658
+ successorsOf: t,
659
+ predecessorDeps: n,
660
+ size: e.length
661
+ };
662
+ }
663
+ function et(e) {
664
+ let t = /* @__PURE__ */ new Map();
665
+ return {
666
+ get: (n) => t.get(n) ?? e.get(n),
667
+ set: (e, n) => {
668
+ t.set(e, n);
669
+ },
670
+ get size() {
671
+ return e.size;
672
+ }
673
+ };
674
+ }
675
+ function tt(e, t, n, r) {
676
+ let i = Ze(e, r), a = Ce(r.calendar, r.durationUnit), o = null;
677
+ for (let s of t.get(e.id) ?? []) {
678
+ let e = n.get(s.from);
679
+ if (!e) continue;
680
+ let t = Qe(Xe(e, r), s.type, (s.lag ?? 0) * a, i, r);
681
+ (o === null || t > o) && (o = t);
682
+ }
683
+ return o === null ? null : K(r.calendar, o, 1);
684
+ }
685
+ function nt(e, t, n) {
686
+ return e.type === "milestone" ? {
687
+ ...e,
688
+ startDate: t,
689
+ endDate: t
690
+ } : {
691
+ ...e,
692
+ startDate: t,
693
+ endDate: q(n.calendar, t, Ze(e, n), 1)
694
+ };
695
+ }
696
+ function rt(e, t, n) {
697
+ let r = n.calendar, i = n.snapToWorking, a = Xe(e, n);
698
+ if (e.type === "milestone") {
699
+ let e = t.kind === "resizeEnd" ? t.endDate : t.startDate, n = i ? _e(r, e) : e;
700
+ return {
701
+ startDate: n,
702
+ endDate: n
703
+ };
704
+ }
705
+ if (t.kind === "move") {
706
+ let e = be(r, a.start, a.end), n = i ? K(r, t.startDate, 1) : t.startDate;
707
+ return {
708
+ startDate: n,
709
+ endDate: q(r, n, e, 1)
710
+ };
711
+ }
712
+ let o = t.kind === "resizeStart" ? t.startDate : a.start, s = t.kind === "resizeEnd" ? t.endDate : a.end, c = i ? K(r, o, 1) : o, l = i ? K(r, s, -1) : s;
713
+ if (be(r, c, l) <= 0) {
714
+ let e = Ce(r, n.durationUnit);
715
+ return t.kind === "resizeStart" ? {
716
+ startDate: q(r, l, -e, -1),
717
+ endDate: l
718
+ } : {
719
+ startDate: c,
720
+ endDate: q(r, c, e, 1)
721
+ };
722
+ }
723
+ return {
724
+ startDate: c,
725
+ endDate: l
726
+ };
727
+ }
728
+ function it(e, t, n, r = Te) {
729
+ let { successorsOf: i, predecessorDeps: a } = t, o = /* @__PURE__ */ new Map(), s = e.get(n);
730
+ if (s) {
731
+ let t = tt(s, a, e, r);
732
+ if (t !== null && t.getTime() > s.startDate.getTime()) {
733
+ let i = nt(s, t, r);
734
+ e.set(n, i), o.set(n, i);
735
+ }
736
+ }
737
+ let c = new Ye([n]), l = (t.size + 1) * (e.size + 1), u = 0;
738
+ for (; !c.isEmpty() && !(u++ > l);) {
739
+ let t = c.dequeue();
740
+ for (let n of i.get(t) ?? []) {
741
+ let t = e.get(n);
742
+ if (!t) continue;
743
+ let i = tt(t, a, e, r);
744
+ if (i === null || i.getTime() <= t.startDate.getTime()) continue;
745
+ let s = nt(t, i, r);
746
+ e.set(n, s), o.set(n, s), c.enqueue(n);
747
+ }
748
+ }
749
+ return o;
750
+ }
751
+ //#endregion
752
+ //#region src/hooks/useTaskList.ts
753
+ var at = {
754
+ transactions: [],
755
+ cursor: 0
756
+ }, ot = [];
757
+ function st(e) {
758
+ r(e);
759
+ }
760
+ function ct(e, t) {
761
+ let n = e.transactions.slice(0, e.cursor);
762
+ return {
763
+ transactions: [...n, t],
764
+ cursor: n.length + 1
765
+ };
766
+ }
767
+ function lt(e, t) {
768
+ return e instanceof Date && t instanceof Date ? e.getTime() === t.getTime() : Object.is(e, t);
769
+ }
770
+ function ut(e, t) {
771
+ let n = new Set([...Object.keys(e), ...Object.keys(t)]);
772
+ for (let r of n) if (!lt(e[r], t[r])) return !1;
773
+ return !0;
774
+ }
775
+ var dt = (e, t = ot, n = {}, r = Te) => {
776
+ let a = u(n);
777
+ a.current = n;
778
+ let s = u(r);
779
+ s.current = r;
780
+ let [c, p] = d(at), m = l(() => $e(t), [t]), h = u(null), g = l(() => (h.current ??= Ue(), We(h.current, e, c)), [e, c]), _ = u(g);
781
+ _.current = g;
782
+ let v = l(() => Le(g, r), [g, r]), y = i((e, t) => {
783
+ let n = _.current.get(e);
784
+ if (!n) return;
785
+ let { startDate: r, endDate: i } = rt(n, t, s.current), a = {
786
+ ...n,
787
+ startDate: r,
788
+ endDate: i
789
+ };
790
+ if (ut(a, n)) return;
791
+ let o = [{
792
+ type: "update",
793
+ task: a
794
+ }];
795
+ if (m.size > 0) {
796
+ let t = et(_.current);
797
+ t.set(e, a);
798
+ let n = it(t, m, e, s.current);
799
+ for (let e of n.values()) o.push({
800
+ type: "update",
801
+ task: e
802
+ });
803
+ }
804
+ st(() => p((e) => ct(e, o)));
805
+ }, [m]), b = i((e, t) => {
806
+ let n = _.current.get(e);
807
+ if (!n) return;
808
+ let r = { ...n };
809
+ if (t.name !== void 0 && (r.name = t.name), t.startDate && (r.startDate = t.startDate), t.endDate && (r.endDate = t.endDate), t.progress !== void 0 && (r.progress = t.progress), ut(r, n)) return;
810
+ let i = [{
811
+ type: "update",
812
+ task: r
813
+ }];
814
+ if ((t.startDate !== void 0 || t.endDate !== void 0) && m.size > 0) {
815
+ let t = et(_.current);
816
+ t.set(e, r);
817
+ let n = it(t, m, e, s.current);
818
+ for (let e of n.values()) i.push({
819
+ type: "update",
820
+ task: e
821
+ });
822
+ }
823
+ st(() => p((e) => ct(e, i)));
824
+ }, [m]), x = i((e, t) => {
825
+ f(() => {
826
+ p((n) => ct(n, [{
827
+ type: "create",
828
+ task: e,
829
+ afterId: t
830
+ }]));
831
+ }), a.current.onTaskCreate?.(e, t);
832
+ }, []), S = i((e) => {
833
+ st(() => p((t) => ct(t, [{
834
+ type: "delete",
835
+ id: e
836
+ }]))), a.current.onTaskDelete?.(e);
837
+ }, []), C = i(() => {
838
+ st(() => p((e) => e.cursor > 0 ? {
839
+ ...e,
840
+ cursor: e.cursor - 1
841
+ } : e));
842
+ }, []), w = i(() => {
843
+ st(() => p((e) => e.cursor < e.transactions.length ? {
844
+ ...e,
845
+ cursor: e.cursor + 1
846
+ } : e));
847
+ }, []), T = c.cursor > 0, E = c.cursor < c.transactions.length, D = u(v);
848
+ D.current = v;
849
+ let O = u(c);
850
+ return o(() => {
851
+ O.current !== c && (O.current = c, a.current.onTasksChange?.(D.current));
852
+ }, [c]), {
853
+ tasksList: v,
854
+ updateTask: b,
855
+ commitTask: y,
856
+ createTask: x,
857
+ deleteTask: S,
858
+ undo: C,
859
+ redo: w,
860
+ canUndo: T,
861
+ canRedo: E
862
+ };
863
+ };
864
+ //#endregion
865
+ //#region src/hooks/useLatestRef.ts
866
+ function J(e) {
867
+ let t = u(e);
868
+ return t.current = e, t;
869
+ }
870
+ //#endregion
871
+ //#region src/hooks/useExpand.ts
872
+ function ft(e) {
873
+ let t = l(() => {
874
+ let t = /* @__PURE__ */ new Set();
875
+ for (let n of e) n.parentId != null && t.add(n.parentId);
876
+ return t;
877
+ }, [e]), [n, r] = d(/* @__PURE__ */ new Set()), a = i((e) => {
878
+ r((t) => {
879
+ let n = new Set(t);
880
+ return n.has(e) ? n.delete(e) : n.add(e), n;
881
+ });
882
+ }, []), o = J(e), s = i((e) => {
883
+ r((t) => {
884
+ if (t.size === 0) return t;
885
+ let n = /* @__PURE__ */ new Map();
886
+ for (let e of o.current) n.set(e.id, e);
887
+ let r = new Set(t), i = !1, a = n.get(e);
888
+ for (; a && a.parentId != null;) r.delete(a.parentId) && (i = !0), a = n.get(a.parentId);
889
+ return i ? r : t;
890
+ });
891
+ }, [o]), c = l(() => {
892
+ let e = /* @__PURE__ */ new Set();
893
+ for (let r of t) n.has(r) || e.add(r);
894
+ return e;
895
+ }, [t, n]);
896
+ return {
897
+ visibleTasks: l(() => {
898
+ if (n.size === 0) return e;
899
+ let t = /* @__PURE__ */ new Set(), r = [];
900
+ for (let i of e) {
901
+ if (i.parentId != null && (t.has(i.parentId) || n.has(i.parentId))) {
902
+ t.add(i.id);
903
+ continue;
904
+ }
905
+ r.push(i);
906
+ }
907
+ return r;
908
+ }, [e, n]),
909
+ expandedIds: c,
910
+ parentIds: t,
911
+ toggleExpand: a,
912
+ revealAncestors: s
913
+ };
914
+ }
915
+ //#endregion
916
+ //#region src/hooks/useIsomorphicLayoutEffect.ts
917
+ var pt = typeof window < "u" ? c : o, mt = {
918
+ scrollTop: 0,
919
+ scrollLeft: 0,
920
+ clientWidth: 0,
921
+ clientHeight: 0
922
+ };
923
+ function ht(e) {
924
+ return {
925
+ scrollTop: e.scrollTop,
926
+ scrollLeft: e.scrollLeft,
927
+ clientWidth: e.clientWidth,
928
+ clientHeight: e.clientHeight
929
+ };
930
+ }
931
+ function gt(e, t, n) {
932
+ return e.scrollTop !== t.scrollTop || e.clientHeight !== t.clientHeight ? !1 : n ? e.scrollLeft === t.scrollLeft && e.clientWidth === t.clientWidth : !0;
933
+ }
934
+ function _t(e, { trackHorizontal: t = !0 } = {}) {
935
+ let n = u(null), r = J(t), [a, s] = d(mt), c = i(() => {
936
+ n.current === null && (n.current = requestAnimationFrame(() => {
937
+ n.current = null;
938
+ let t = e.current;
939
+ if (!t) return;
940
+ let i = ht(t);
941
+ s((e) => gt(e, i, r.current) ? e : i);
942
+ }));
943
+ }, [e, r]);
944
+ return pt(() => {
945
+ let t = e.current;
946
+ t && s((e) => {
947
+ let n = ht(t);
948
+ return gt(e, n, r.current) ? e : n;
949
+ });
950
+ }, [e]), o(() => {
951
+ let t = e.current;
952
+ if (!t || typeof ResizeObserver > "u") return;
953
+ let r = new ResizeObserver(c);
954
+ return r.observe(t), () => {
955
+ r.disconnect(), n.current !== null && (cancelAnimationFrame(n.current), n.current = null);
956
+ };
957
+ }, [c, e]), {
958
+ viewport: a,
959
+ scheduleMeasure: c
960
+ };
961
+ }
962
+ //#endregion
963
+ //#region src/hooks/useScrollSync.ts
964
+ function vt() {
965
+ let e = u(null), t = u(null), n = u(!1), { viewport: r, scheduleMeasure: a } = _t(t);
966
+ return {
967
+ taskListRef: e,
968
+ gridRef: t,
969
+ onTaskListScroll: i(() => {
970
+ n.current || !e.current || !t.current || (n.current = !0, t.current.scrollTop = e.current.scrollTop, n.current = !1, a());
971
+ }, [a]),
972
+ onGridScroll: i(() => {
973
+ t.current && e.current && !n.current && (n.current = !0, e.current.scrollTop = t.current.scrollTop, n.current = !1), a();
974
+ }, [a]),
975
+ viewport: r
976
+ };
977
+ }
978
+ //#endregion
979
+ //#region src/hooks/useEventCallback.ts
980
+ function yt(e) {
981
+ let t = u(e);
982
+ t.current = e;
983
+ let n = i((...e) => t.current?.(...e), []);
984
+ if (e) return n;
985
+ }
986
+ //#endregion
987
+ //#region src/core/scroll.ts
988
+ function bt(e, t, n, r, i = 0) {
989
+ let a = n + r;
990
+ return e - i < n ? Math.max(0, e - i) : e + t + i > a ? e + t + i - r : n;
991
+ }
992
+ //#endregion
993
+ //#region src/core/barUtils.ts
994
+ function xt(e, t = {}, n, r, i = "day") {
995
+ let a = t.startDate ?? e.startDate, o = t.endDate ?? e.endDate ?? a, s = A(n, a, i), c = A(n, o, i);
996
+ return {
997
+ left: s * r,
998
+ width: (c - s) * r,
999
+ progress: t.progress ?? e.progress ?? 0
1000
+ };
1001
+ }
1002
+ function St(e, t, n, r = "day") {
1003
+ return j(t, r, e / n);
1004
+ }
1005
+ //#endregion
1006
+ //#region src/core/scales.ts
1007
+ var Ct = [{
1008
+ unit: "month",
1009
+ step: 1,
1010
+ format: (e) => e.toLocaleString(void 0, {
1011
+ month: "long",
1012
+ year: "numeric"
1013
+ })
1014
+ }, {
1015
+ unit: "day",
1016
+ step: 1,
1017
+ format: (e) => String(e.getDate())
1018
+ }];
1019
+ function wt(e) {
1020
+ return (e ?? Ct).at(-1)?.unit ?? "day";
1021
+ }
1022
+ function Tt(e) {
1023
+ return (e ?? Ct).at(-1)?.step ?? 1;
1024
+ }
1025
+ //#endregion
1026
+ //#region src/core/timeline.ts
1027
+ function Et(e, t, n) {
1028
+ let r = N(e);
1029
+ return r ? Dt(r.min, wt(t), n, Tt(t)) : null;
1030
+ }
1031
+ function Dt(e, t, n, r) {
1032
+ return O(k(O(e, t), t, -n * r), t);
1033
+ }
1034
+ function Ot(e, t = 0, n) {
1035
+ let r = N(e);
1036
+ if (!r) return [];
1037
+ let i = wt(n), a = Tt(n), o = Dt(r.min, i, t, a), s = k(O(r.max, i), i, t * a);
1038
+ return M(o, Math.round(A(o, s, i) / a) + 1, i, a);
1039
+ }
1040
+ //#endregion
1041
+ //#region src/hooks/useRevealTask.ts
1042
+ function kt({ taskListRef: e, gridRef: t, tasksList: n, visibleTasks: r, rowHeight: a, colWidth: o, scales: s, padDays: l, revealAncestors: d }) {
1043
+ let f = J(n), p = J(r), m = u(() => {}), h = u(null), g = (n) => {
1044
+ let r = e.current ?? t.current;
1045
+ if (!r) return;
1046
+ let i = bt(n * a, a, r.scrollTop, r.clientHeight, a);
1047
+ i !== r.scrollTop && (r.scrollTop = i);
1048
+ }, _ = (e) => {
1049
+ let n = t.current, r = Et(p.current, s, l);
1050
+ if (!n || !r) return;
1051
+ let { left: i, width: a } = xt(e, {}, r, o, wt(s)), c = bt(i, a, n.scrollLeft, n.clientWidth, o);
1052
+ c !== n.scrollLeft && (n.scrollLeft = c);
1053
+ };
1054
+ return m.current = (e, t) => {
1055
+ let { vertical: n = !0, horizontal: r = !1 } = t ?? {}, i = p.current.findIndex((t) => t.id === e);
1056
+ if (i < 0) {
1057
+ if (!f.current.some((t) => t.id === e)) return;
1058
+ h.current = {
1059
+ id: e,
1060
+ options: t
1061
+ }, d(e);
1062
+ return;
1063
+ }
1064
+ n && g(i), r && _(p.current[i]);
1065
+ }, c(() => {
1066
+ let e = h.current;
1067
+ e && (h.current = null, m.current(e.id, e.options));
1068
+ }, [r]), i((e, t) => m.current(e, t), []);
1069
+ }
1070
+ //#endregion
1071
+ //#region src/hooks/useZoom.ts
1072
+ function At({ gridRef: e, visibleTasks: t, padDays: n, levels: r, initialIndex: a }) {
1073
+ let o = i((e) => Math.max(0, Math.min(r.length - 1, e)), [r.length]), [s, l] = d(() => o(a)), f = J(s), p = J(t), m = J(n), h = J(r), g = u(null), _ = i((t, n) => {
1074
+ let r = f.current, i = o(r + n);
1075
+ if (i === r) return;
1076
+ let a = e.current, s = h.current[r], c = Et(p.current, s.scales, m.current);
1077
+ a && c ? g.current = {
1078
+ date: j(c, wt(s.scales), t / s.colWidth),
1079
+ viewportOffset: t - a.scrollLeft
1080
+ } : g.current = null, l(i);
1081
+ }, [
1082
+ o,
1083
+ e,
1084
+ f,
1085
+ p,
1086
+ m,
1087
+ h
1088
+ ]), v = i(() => {
1089
+ let t = e.current;
1090
+ return t ? t.scrollLeft + t.clientWidth / 2 : 0;
1091
+ }, [e]), y = i(() => _(v(), 1), [_, v]), b = i(() => _(v(), -1), [_, v]), x = i((e) => _(v(), o(e) - f.current), [
1092
+ _,
1093
+ v,
1094
+ o,
1095
+ f
1096
+ ]);
1097
+ return c(() => {
1098
+ let t = g.current;
1099
+ if (t === null) return;
1100
+ g.current = null;
1101
+ let n = e.current, r = h.current[s], i = Et(p.current, r.scales, m.current);
1102
+ if (!n || !i) return;
1103
+ let a = wt(r.scales), o = A(i, t.date, a) * r.colWidth;
1104
+ n.scrollLeft = Math.max(0, o - t.viewportOffset);
1105
+ }, [s]), {
1106
+ index: s,
1107
+ level: r[s],
1108
+ count: r.length,
1109
+ canZoomIn: s < r.length - 1,
1110
+ canZoomOut: s > 0,
1111
+ zoomIn: y,
1112
+ zoomOut: b,
1113
+ setZoom: x,
1114
+ zoomAt: _
1115
+ };
1116
+ }
1117
+ //#endregion
1118
+ //#region src/core/zoom.ts
1119
+ var jt = (e) => String(e).padStart(2, "0"), Mt = (e) => String(e.getFullYear()), Nt = (e) => `Q${Math.floor(e.getMonth() / 3) + 1}`, Pt = (e) => e.toLocaleString(void 0, {
1120
+ month: "long",
1121
+ year: "numeric"
1122
+ }), Ft = (e) => e.toLocaleString(void 0, { month: "short" }), It = (e) => String(e.getDate()), Lt = (e) => e.toLocaleString(void 0, {
1123
+ weekday: "short",
1124
+ day: "numeric"
1125
+ }), Rt = [
1126
+ {
1127
+ colWidth: 56,
1128
+ scales: [{
1129
+ unit: "year",
1130
+ step: 1,
1131
+ format: Mt
1132
+ }, {
1133
+ unit: "quarter",
1134
+ step: 1,
1135
+ format: Nt
1136
+ }]
1137
+ },
1138
+ {
1139
+ colWidth: 44,
1140
+ scales: [{
1141
+ unit: "year",
1142
+ step: 1,
1143
+ format: Mt
1144
+ }, {
1145
+ unit: "month",
1146
+ step: 1,
1147
+ format: Ft
1148
+ }]
1149
+ },
1150
+ {
1151
+ colWidth: 60,
1152
+ scales: [{
1153
+ unit: "month",
1154
+ step: 1,
1155
+ format: Pt
1156
+ }, {
1157
+ unit: "week",
1158
+ step: 1,
1159
+ format: Lt
1160
+ }]
1161
+ },
1162
+ {
1163
+ colWidth: 40,
1164
+ scales: [{
1165
+ unit: "month",
1166
+ step: 1,
1167
+ format: Pt
1168
+ }, {
1169
+ unit: "day",
1170
+ step: 1,
1171
+ format: It
1172
+ }]
1173
+ },
1174
+ {
1175
+ colWidth: 44,
1176
+ scales: [{
1177
+ unit: "day",
1178
+ step: 1,
1179
+ format: Lt
1180
+ }, {
1181
+ unit: "hour",
1182
+ step: 1,
1183
+ format: (e) => `${jt(e.getHours())}:00`
1184
+ }]
1185
+ }
1186
+ ], zt = 3;
1187
+ function Bt(e, t, n) {
1188
+ return e && e.length > 0 ? e : !t && n === void 0 ? Rt : Rt.map((e, r) => r === 3 ? {
1189
+ scales: t ?? e.scales,
1190
+ colWidth: n ?? e.colWidth
1191
+ } : e);
1192
+ }
1193
+ //#endregion
1194
+ //#region src/hooks/useDependencyDrag.ts
1195
+ var Vt = {
1196
+ end: {
1197
+ start: "FS",
1198
+ end: "FF"
1199
+ },
1200
+ start: {
1201
+ start: "SS",
1202
+ end: "SF"
1203
+ }
1204
+ };
1205
+ function Ht({ gridBodyRef: e, onDependencyCreate: t }) {
1206
+ let n = J(t), [r, a] = d(null), s = J(r), c = u(null), l = u(null), f = u(null), p = i(() => {
1207
+ c.current &&= (window.removeEventListener("mousemove", c.current.move), window.removeEventListener("mouseup", c.current.up), null), l.current !== null && (cancelAnimationFrame(l.current), l.current = null);
1208
+ }, []);
1209
+ return o(() => p, [p]), {
1210
+ drag: r,
1211
+ startDrag: i((t) => {
1212
+ a(t);
1213
+ let n = (t) => {
1214
+ f.current = {
1215
+ x: t.clientX,
1216
+ y: t.clientY
1217
+ }, l.current === null && (l.current = requestAnimationFrame(() => {
1218
+ l.current = null;
1219
+ let t = e.current, n = f.current;
1220
+ if (!t || !n) return;
1221
+ let r = t.getBoundingClientRect();
1222
+ a((e) => e ? {
1223
+ ...e,
1224
+ currentX: n.x - r.left,
1225
+ currentY: n.y - r.top
1226
+ } : null);
1227
+ }));
1228
+ }, r = () => {
1229
+ a(null), p();
1230
+ };
1231
+ c.current = {
1232
+ move: n,
1233
+ up: r
1234
+ }, window.addEventListener("mousemove", n), window.addEventListener("mouseup", r);
1235
+ }, [p, e]),
1236
+ endDrag: i((e, t) => {
1237
+ let r = s.current;
1238
+ if (r && e !== null && t && e !== r.fromTaskId) {
1239
+ let i = Vt[r.handle][t];
1240
+ n.current?.({
1241
+ from: r.fromTaskId,
1242
+ to: e,
1243
+ type: i
1244
+ });
1245
+ }
1246
+ a(null), p();
1247
+ }, [
1248
+ p,
1249
+ s,
1250
+ n
1251
+ ])
1252
+ };
1253
+ }
1254
+ //#endregion
1255
+ //#region src/context/useGanttHandle.ts
1256
+ function Ut(e) {
1257
+ let { createTask: t, updateTask: n, deleteTask: r, undo: i, redo: a, revealTask: o, zoomIn: s, zoomOut: c, setZoom: u } = e;
1258
+ return l(() => ({
1259
+ createTask: t,
1260
+ updateTask: n,
1261
+ deleteTask: r,
1262
+ undo: i,
1263
+ redo: a,
1264
+ revealTask: o,
1265
+ zoomIn: s,
1266
+ zoomOut: c,
1267
+ setZoom: u
1268
+ }), [
1269
+ t,
1270
+ n,
1271
+ r,
1272
+ i,
1273
+ a,
1274
+ o,
1275
+ s,
1276
+ c,
1277
+ u
1278
+ ]);
1279
+ }
1280
+ //#endregion
1281
+ //#region src/context/useColumnApi.ts
1282
+ function Wt({ handle: e, readOnly: t, labels: n, schedulingContext: r, onTaskEditRef: i }) {
1283
+ return l(() => ({
1284
+ ...e,
1285
+ editTask: (e) => i.current?.(e),
1286
+ readOnly: t,
1287
+ labels: n,
1288
+ format: {
1289
+ endDate: (e) => ke(e, r),
1290
+ duration: (e) => Ae(e, r)
1291
+ }
1292
+ }), [
1293
+ e,
1294
+ i,
1295
+ t,
1296
+ n,
1297
+ r
1298
+ ]);
1299
+ }
1300
+ //#endregion
1301
+ //#region src/context/contexts.ts
1302
+ var Gt = t(null);
1303
+ function Kt() {
1304
+ let e = a(Gt);
1305
+ if (!e) throw Error("useGanttConfig must be used within a <GanttProvider>");
1306
+ return e;
1307
+ }
1308
+ var qt = t(je);
1309
+ function Jt() {
1310
+ return a(qt);
1311
+ }
1312
+ var Yt = t(Te);
1313
+ function Xt() {
1314
+ return a(Yt);
1315
+ }
1316
+ var Zt = t(!1);
1317
+ function Qt() {
1318
+ return a(Zt);
1319
+ }
1320
+ var $t = t(null);
1321
+ function en() {
1322
+ let e = a($t);
1323
+ if (!e) throw Error("useGanttTaskState must be used within a <GanttProvider>");
1324
+ return e;
1325
+ }
1326
+ var tn = t(null);
1327
+ function nn() {
1328
+ let e = a(tn);
1329
+ if (!e) throw Error("useGanttTaskActions must be used within a <GanttProvider>");
1330
+ return e;
1331
+ }
1332
+ var rn = t(null);
1333
+ function an() {
1334
+ return a(rn);
1335
+ }
1336
+ var on = t(null);
1337
+ function sn() {
1338
+ let e = a(on);
1339
+ if (!e) throw Error("useGanttScroll must be used within a <GanttProvider>");
1340
+ return e;
1341
+ }
1342
+ var cn = t(null);
1343
+ function ln() {
1344
+ let e = a(cn);
1345
+ if (!e) throw Error("useGanttViewport must be used within a <GanttProvider>");
1346
+ return e;
1347
+ }
1348
+ var un = t(null);
1349
+ function dn() {
1350
+ let e = a(un);
1351
+ if (!e) throw Error("useGanttDependency must be used within a <GanttProvider>");
1352
+ return e;
1353
+ }
1354
+ var fn = t(!1);
1355
+ function pn() {
1356
+ return a(fn);
1357
+ }
1358
+ var mn = t(null);
1359
+ function hn() {
1360
+ return a(mn);
1361
+ }
1362
+ var gn = t(null);
1363
+ function _n() {
1364
+ let e = a(gn);
1365
+ if (!e) throw Error("useGanttZoom must be used within a <GanttProvider>");
1366
+ return e;
1367
+ }
1368
+ //#endregion
1369
+ //#region src/context/GanttProvider.tsx
1370
+ function vn({ tasks: e, rowHeight: t = 36, colWidth: n, height: r, scales: a, padDays: c = 1, zoomLevels: f, defaultZoomIndex: p, onZoomChange: h, zoomWheel: g = !1, zoomKeyboard: _ = !1, dependencies: v = ot, onTaskClick: y, onDependencyCreate: b, onDependencyDelete: x, onTaskCreate: S, onTaskDelete: C, onTaskEdit: w, onTasksChange: T, apiRef: E, labels: D, calendar: O, snapToWorking: k = !0, durationUnit: A = "day", readOnly: j = !1, children: M }) {
1371
+ let [ee, N] = d(null), P = l(() => Me(D), [D]), F = ce(O), I = l(() => ({
1372
+ calendar: F,
1373
+ durationUnit: A,
1374
+ snapToWorking: k
1375
+ }), [
1376
+ F,
1377
+ A,
1378
+ k
1379
+ ]), te = J(w), ne = yt(y), L = yt(x), { tasksList: R, updateTask: z, commitTask: re, createTask: B, deleteTask: V, undo: ie, redo: ae, canUndo: H, canRedo: oe } = dt(e, v, {
1380
+ onTaskCreate: S,
1381
+ onTaskDelete: C,
1382
+ onTasksChange: T
1383
+ }, I), { visibleTasks: se, expandedIds: le, parentIds: ue, toggleExpand: de, revealAncestors: fe } = ft(R), { taskListRef: U, gridRef: W, onTaskListScroll: pe, onGridScroll: me, viewport: he } = vt(), ge = u(null), G = At({
1384
+ gridRef: W,
1385
+ visibleTasks: se,
1386
+ padDays: c,
1387
+ levels: l(() => Bt(f, a, n), [
1388
+ f,
1389
+ a,
1390
+ n
1391
+ ]),
1392
+ initialIndex: p ?? 3
1393
+ }), K = kt({
1394
+ taskListRef: U,
1395
+ gridRef: W,
1396
+ tasksList: R,
1397
+ visibleTasks: se,
1398
+ rowHeight: t,
1399
+ colWidth: G.level.colWidth,
1400
+ scales: G.level.scales,
1401
+ padDays: c,
1402
+ revealAncestors: fe
1403
+ }), _e = J(h);
1404
+ o(() => {
1405
+ _e.current?.({
1406
+ index: G.index,
1407
+ count: G.count
1408
+ });
1409
+ }, [
1410
+ G.index,
1411
+ G.count,
1412
+ _e
1413
+ ]);
1414
+ let ve = i((e, t) => {
1415
+ B(e, t), N(e.id), K(e.id);
1416
+ }, [B, K]), { zoomIn: ye, zoomOut: q, setZoom: be, zoomAt: xe } = G, Se = Ut({
1417
+ createTask: ve,
1418
+ updateTask: z,
1419
+ deleteTask: V,
1420
+ undo: ie,
1421
+ redo: ae,
1422
+ revealTask: K,
1423
+ zoomIn: ye,
1424
+ zoomOut: q,
1425
+ setZoom: be
1426
+ });
1427
+ s(E, () => Se, [Se]);
1428
+ let Ce = Wt({
1429
+ handle: Se,
1430
+ readOnly: j,
1431
+ labels: P,
1432
+ schedulingContext: I,
1433
+ onTaskEditRef: te
1434
+ }), { drag: we, startDrag: Te, endDrag: Ee } = Ht({
1435
+ gridBodyRef: ge,
1436
+ onDependencyCreate: b
1437
+ }), De = l(() => ({
1438
+ rowHeight: t,
1439
+ colWidth: G.level.colWidth,
1440
+ scales: G.level.scales,
1441
+ padDays: c,
1442
+ height: r
1443
+ }), [
1444
+ t,
1445
+ G.level,
1446
+ c,
1447
+ r
1448
+ ]), Oe = l(() => ({
1449
+ zoomIn: ye,
1450
+ zoomOut: q,
1451
+ zoomAt: xe,
1452
+ wheelEnabled: g,
1453
+ keyboardEnabled: _
1454
+ }), [
1455
+ ye,
1456
+ q,
1457
+ xe,
1458
+ g,
1459
+ _
1460
+ ]), ke = l(() => ({
1461
+ tasksList: R,
1462
+ visibleTasks: se,
1463
+ expandedIds: le,
1464
+ parentIds: ue,
1465
+ canUndo: H,
1466
+ canRedo: oe
1467
+ }), [
1468
+ R,
1469
+ se,
1470
+ le,
1471
+ ue,
1472
+ H,
1473
+ oe
1474
+ ]), Ae = l(() => ({
1475
+ updateTask: z,
1476
+ commitTask: re,
1477
+ createTask: ve,
1478
+ deleteTask: V,
1479
+ undo: ie,
1480
+ redo: ae,
1481
+ columnApi: Ce,
1482
+ setSelectedId: N,
1483
+ toggleExpand: de,
1484
+ onTaskClick: ne,
1485
+ revealTask: K
1486
+ }), [
1487
+ z,
1488
+ re,
1489
+ ve,
1490
+ V,
1491
+ ie,
1492
+ ae,
1493
+ Ce,
1494
+ de,
1495
+ ne,
1496
+ K
1497
+ ]), je = l(() => ({
1498
+ taskListRef: U,
1499
+ gridRef: W,
1500
+ gridBodyRef: ge,
1501
+ onTaskListScroll: pe,
1502
+ onGridScroll: me
1503
+ }), [
1504
+ U,
1505
+ W,
1506
+ pe,
1507
+ me
1508
+ ]), Ne = l(() => ({
1509
+ dependencies: v,
1510
+ onDependencyDelete: L,
1511
+ startDrag: Te,
1512
+ endDrag: Ee
1513
+ }), [
1514
+ v,
1515
+ L,
1516
+ Te,
1517
+ Ee
1518
+ ]);
1519
+ return /* @__PURE__ */ m(Gt.Provider, {
1520
+ value: De,
1521
+ children: /* @__PURE__ */ m(Zt.Provider, {
1522
+ value: j,
1523
+ children: /* @__PURE__ */ m(qt.Provider, {
1524
+ value: P,
1525
+ children: /* @__PURE__ */ m(Yt.Provider, {
1526
+ value: I,
1527
+ children: /* @__PURE__ */ m(gn.Provider, {
1528
+ value: Oe,
1529
+ children: /* @__PURE__ */ m(on.Provider, {
1530
+ value: je,
1531
+ children: /* @__PURE__ */ m(tn.Provider, {
1532
+ value: Ae,
1533
+ children: /* @__PURE__ */ m(un.Provider, {
1534
+ value: Ne,
1535
+ children: /* @__PURE__ */ m($t.Provider, {
1536
+ value: ke,
1537
+ children: /* @__PURE__ */ m(rn.Provider, {
1538
+ value: ee,
1539
+ children: /* @__PURE__ */ m(fn.Provider, {
1540
+ value: we !== null,
1541
+ children: /* @__PURE__ */ m(cn.Provider, {
1542
+ value: he,
1543
+ children: /* @__PURE__ */ m(mn.Provider, {
1544
+ value: we,
1545
+ children: M
1546
+ })
1547
+ })
1548
+ })
1549
+ })
1550
+ })
1551
+ })
1552
+ })
1553
+ })
1554
+ })
1555
+ })
1556
+ })
1557
+ })
1558
+ });
1559
+ }
1560
+ //#endregion
1561
+ //#region src/context/GanttSlotsContext.tsx
1562
+ var yn = t({});
1563
+ function bn({ value: e, children: t }) {
1564
+ return /* @__PURE__ */ m(yn.Provider, {
1565
+ value: e,
1566
+ children: t
1567
+ });
1568
+ }
1569
+ function Y() {
1570
+ return a(yn);
1571
+ }
1572
+ //#endregion
1573
+ //#region ../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
1574
+ function xn(e) {
1575
+ var t, n, r = "";
1576
+ if (typeof e == "string" || typeof e == "number") r += e;
1577
+ else if (typeof e == "object") if (Array.isArray(e)) {
1578
+ var i = e.length;
1579
+ for (t = 0; t < i; t++) e[t] && (n = xn(e[t])) && (r && (r += " "), r += n);
1580
+ } else for (n in e) e[n] && (r && (r += " "), r += n);
1581
+ return r;
1582
+ }
1583
+ function Sn() {
1584
+ for (var e, t, n = 0, r = "", i = arguments.length; n < i; n++) (e = arguments[n]) && (t = xn(e)) && (r && (r += " "), r += t);
1585
+ return r;
1586
+ }
1587
+ //#endregion
1588
+ //#region src/core/slots.ts
1589
+ function X(e, t, n) {
1590
+ let r = typeof t == "function" ? t(n) : t;
1591
+ if (!r) return e;
1592
+ let { className: i, style: a, ...o } = r;
1593
+ return {
1594
+ ...e,
1595
+ ...o,
1596
+ className: Sn(e.className, i),
1597
+ style: {
1598
+ ...e.style,
1599
+ ...a
1600
+ }
1601
+ };
1602
+ }
1603
+ var Cn = {
1604
+ calendar: "_calendar_1ksbu_1",
1605
+ row: "_row_1ksbu_19",
1606
+ cell: "_cell_1ksbu_29",
1607
+ cellWeekend: "_cellWeekend_1ksbu_56"
1608
+ };
1609
+ //#endregion
1610
+ //#region src/components/calendar/CalendarRow.tsx
1611
+ function wn(e, t) {
1612
+ let n = [];
1613
+ for (let r = 0; r < e.length; r++) {
1614
+ let i = e[r], a = C(i, t.unit, t.step), o = n[n.length - 1];
1615
+ o && o.key === a ? o.count += 1 : n.push({
1616
+ key: a,
1617
+ start: i,
1618
+ startIndex: r,
1619
+ count: 1
1620
+ });
1621
+ }
1622
+ return n;
1623
+ }
1624
+ function Tn(e, t) {
1625
+ if (!t) return {
1626
+ start: 0,
1627
+ end: e.length
1628
+ };
1629
+ let n = 0, r = e.length;
1630
+ for (; n < r;) {
1631
+ let i = n + r >> 1, a = e[i];
1632
+ a.startIndex + a.count <= t.start ? n = i + 1 : r = i;
1633
+ }
1634
+ let i = n;
1635
+ for (; i < e.length && e[i].startIndex < t.end;) i += 1;
1636
+ return {
1637
+ start: n,
1638
+ end: i
1639
+ };
1640
+ }
1641
+ function En({ scale: e, dates: t, colWidth: n, rowHeight: r, highlightWeekends: i = !1, colRange: a, rowIndex: o, slots: s, slotProps: c }) {
1642
+ let u = Y(), d = s ?? u.timeline?.calendarRow?.slots, { calendar: f } = Xt(), p = c ?? u.timeline?.calendarRow?.slotProps, h = l(() => wn(t, e), [t, e]), g = Tn(h, a), _ = d?.row ?? "div", v = d?.cell ?? "div", y = {
1643
+ scale: e,
1644
+ colWidth: n,
1645
+ rowHeight: r,
1646
+ highlightWeekends: i
1647
+ };
1648
+ return /* @__PURE__ */ m(_, {
1649
+ ...X({
1650
+ className: Cn.row,
1651
+ style: { height: r },
1652
+ role: "row",
1653
+ "aria-rowindex": o
1654
+ }, p?.row, y),
1655
+ children: h.slice(g.start, g.end).map((t) => {
1656
+ let r = i && f ? Se(f, t.start, k(t.start, e.unit, e.step)) : {
1657
+ isNonWorking: !1,
1658
+ reason: void 0
1659
+ }, a = f ? r.isNonWorking : i && w(t.start), o = {
1660
+ scale: e,
1661
+ date: t.start,
1662
+ startIndex: t.startIndex,
1663
+ count: t.count,
1664
+ isNonWorking: a,
1665
+ nonWorkingReason: a ? r.reason ?? "weekend" : void 0,
1666
+ isWeekend: a,
1667
+ colWidth: n
1668
+ };
1669
+ return /* @__PURE__ */ m(v, { ...X({
1670
+ className: Sn(Cn.cell, a && Cn.cellWeekend),
1671
+ style: {
1672
+ left: t.startIndex * n,
1673
+ width: t.count * n
1674
+ },
1675
+ children: e.format(t.start),
1676
+ role: "columnheader",
1677
+ "aria-colindex": t.startIndex + 1,
1678
+ "aria-colspan": t.count,
1679
+ "aria-label": e.ariaFormat ? e.ariaFormat(t.start) : Ie(t.start, e.unit, e.step)
1680
+ }, p?.cell, o) }, t.key);
1681
+ })
1682
+ });
1683
+ }
1684
+ //#endregion
1685
+ //#region src/components/calendar/Calendar.tsx
1686
+ function Dn({ colWidth: e, rowHeight: t, scales: n = Ct, dates: r, colRange: i }) {
1687
+ let a = r.length * e;
1688
+ return /* @__PURE__ */ m("div", {
1689
+ className: Cn.calendar,
1690
+ style: { width: a },
1691
+ role: "rowgroup",
1692
+ children: n.map((n, a) => /* @__PURE__ */ m(En, {
1693
+ scale: n,
1694
+ dates: r,
1695
+ colWidth: e,
1696
+ rowHeight: t,
1697
+ highlightWeekends: n.unit === "day" && n.step === 1,
1698
+ colRange: i,
1699
+ rowIndex: a + 1
1700
+ }, `${n.unit}-${n.step}`))
1701
+ });
1702
+ }
1703
+ //#endregion
1704
+ //#region src/hooks/useAutoScroll.ts
1705
+ var On = 40, kn = 14;
1706
+ function An(e) {
1707
+ let t = e;
1708
+ for (; t;) {
1709
+ let e = getComputedStyle(t);
1710
+ if ((e.overflowX === "auto" || e.overflowX === "scroll") && t.scrollWidth > t.clientWidth) return t;
1711
+ t = t.parentElement;
1712
+ }
1713
+ return document.scrollingElement;
1714
+ }
1715
+ function jn(e) {
1716
+ if (e === document.scrollingElement) return {
1717
+ left: 0,
1718
+ right: window.innerWidth
1719
+ };
1720
+ let t = e.getBoundingClientRect();
1721
+ return {
1722
+ left: t.left,
1723
+ right: t.right
1724
+ };
1725
+ }
1726
+ function Mn(e, t, n) {
1727
+ return n < e + On ? -kn * Math.min(1, (e + On - n) / On) : n > t - On ? kn * Math.min(1, (n - (t - On)) / On) : 0;
1728
+ }
1729
+ function Nn({ enabled: e, onScroll: t }) {
1730
+ let n = u({
1731
+ container: null,
1732
+ scrollTarget: null,
1733
+ startScrollLeft: 0,
1734
+ cursorX: 0,
1735
+ rafId: null
1736
+ }), r = u(t);
1737
+ r.current = t;
1738
+ let a = i(() => r.current(), []), s = i(() => {
1739
+ let e = n.current;
1740
+ if (!e.container) {
1741
+ e.rafId = null;
1742
+ return;
1743
+ }
1744
+ let { left: t, right: r } = jn(e.container), i = Mn(t, r, e.cursorX);
1745
+ i !== 0 && (e.container.scrollLeft += i), e.rafId = requestAnimationFrame(s);
1746
+ }, []), c = i(() => {
1747
+ let e = n.current;
1748
+ e.rafId !== null && cancelAnimationFrame(e.rafId), e.scrollTarget && e.scrollTarget.removeEventListener("scroll", a), e.container = null, e.scrollTarget = null, e.rafId = null;
1749
+ }, [a]), l = i((t) => {
1750
+ if (!e) return;
1751
+ let r = n.current, i = An(t);
1752
+ r.container = i, r.startScrollLeft = i?.scrollLeft ?? 0, i && (r.scrollTarget = i === document.scrollingElement ? window : i, r.scrollTarget.addEventListener("scroll", a, { passive: !0 }), r.rafId = requestAnimationFrame(s));
1753
+ }, [
1754
+ e,
1755
+ a,
1756
+ s
1757
+ ]), d = i((e) => {
1758
+ n.current.cursorX = e;
1759
+ }, []), f = i(() => {
1760
+ let e = n.current;
1761
+ return e.container ? e.container.scrollLeft - e.startScrollLeft : 0;
1762
+ }, []);
1763
+ return o(() => c, [c]), {
1764
+ start: l,
1765
+ stop: c,
1766
+ setCursorX: d,
1767
+ getScrollDelta: f
1768
+ };
1769
+ }
1770
+ //#endregion
1771
+ //#region src/hooks/useDrag.ts
1772
+ function Pn({ onStart: e, onDrag: t, onEnd: n, autoScroll: r = !1 }) {
1773
+ let a = u(!1), s = u(null), c = u(0), l = u(0), d = u(0), f = u(t), p = u(n);
1774
+ f.current = t, p.current = n;
1775
+ let m = u(() => {}), { start: h, stop: g, setCursorX: _, getScrollDelta: v } = Nn({
1776
+ enabled: r,
1777
+ onScroll: () => m.current()
1778
+ }), y = i(() => {
1779
+ if (!a.current || s.current === null) return;
1780
+ let e = l.current - c.current + v();
1781
+ d.current = e, f.current(e, s.current);
1782
+ }, [v]);
1783
+ m.current = y;
1784
+ let b = i((t) => {
1785
+ s.current = e(t), c.current = t.clientX, l.current = t.clientX, d.current = 0, a.current = !0, _(t.clientX), h(t.currentTarget), t.preventDefault(), t.stopPropagation();
1786
+ }, [
1787
+ e,
1788
+ _,
1789
+ h
1790
+ ]);
1791
+ return o(() => {
1792
+ let e = (e) => {
1793
+ !a.current || s.current === null || (l.current = e.clientX, _(e.clientX), y(), e.preventDefault());
1794
+ }, t = () => {
1795
+ a.current && s.current !== null && p.current?.(d.current, s.current), a.current = !1, s.current = null, g();
1796
+ };
1797
+ return window.addEventListener("mousemove", e), window.addEventListener("mouseup", t), () => {
1798
+ window.removeEventListener("mousemove", e), window.removeEventListener("mouseup", t), g();
1799
+ };
1800
+ }, [
1801
+ y,
1802
+ _,
1803
+ g
1804
+ ]), b;
1805
+ }
1806
+ //#endregion
1807
+ //#region src/components/bars/common/DraggableBar.tsx
1808
+ function Fn({ left: e, top: t, width: n, height: r, colWidth: i, dragAnchor: a, className: o, title: s, style: c, onMove: l, onMoveEnd: u, children: d, ...f }) {
1809
+ let p = !l && !u, h = Pn({
1810
+ onStart: () => ({ start: a }),
1811
+ onDrag: (e, { start: t }) => l?.(t + e),
1812
+ onEnd: (e, { start: t }) => {
1813
+ let n = Math.round((t + e) / i) * i;
1814
+ u?.(n);
1815
+ },
1816
+ autoScroll: !0
1817
+ }), g = !!(l || u);
1818
+ return /* @__PURE__ */ m("div", {
1819
+ ...f,
1820
+ className: o,
1821
+ style: {
1822
+ left: e,
1823
+ top: t,
1824
+ width: n,
1825
+ height: r,
1826
+ cursor: p ? "default" : "move",
1827
+ ...c
1828
+ },
1829
+ title: s,
1830
+ onMouseDown: g ? h : void 0,
1831
+ children: d
1832
+ });
1833
+ }
1834
+ var In = {
1835
+ milestone: "_milestone_o4jql_1",
1836
+ milestoneShape: "_milestoneShape_o4jql_5"
1837
+ };
1838
+ //#endregion
1839
+ //#region src/components/bars/milestoneBar/MilestoneBar.tsx
1840
+ function Ln({ size: e, centerLeft: t, top: n, colWidth: r, title: i, a11y: a, onMove: o, onMoveEnd: s, slots: c, slotProps: l }) {
1841
+ let u = Y(), d = c ?? u.bars?.milestoneBar?.slots, f = l ?? u.bars?.milestoneBar?.slotProps, p = {
1842
+ size: e,
1843
+ title: i
1844
+ }, h = d?.root ?? Fn, g = d?.shape ?? "div", _ = X({
1845
+ className: In.milestone,
1846
+ title: i,
1847
+ ...a
1848
+ }, f?.root, p), v = X({
1849
+ className: In.milestoneShape,
1850
+ "aria-hidden": !0
1851
+ }, f?.shape, p);
1852
+ return /* @__PURE__ */ m(h, {
1853
+ left: t - e / 2,
1854
+ top: n,
1855
+ width: e,
1856
+ height: e,
1857
+ colWidth: r,
1858
+ dragAnchor: t,
1859
+ onMove: o,
1860
+ onMoveEnd: s,
1861
+ ..._,
1862
+ children: /* @__PURE__ */ m(g, { ...v })
1863
+ });
1864
+ }
1865
+ var Rn = {
1866
+ barProgress: "_barProgress_1obm3_1",
1867
+ barProgressResizeHandle: "_barProgressResizeHandle_1obm3_10"
1868
+ };
1869
+ //#endregion
1870
+ //#region src/components/bars/progress/BarProgressResizeHandle.tsx
1871
+ function zn({ width: e, onResize: t, onResizeEnd: n, parentWidth: r, slots: i, slotProps: a }) {
1872
+ let o = Y(), s = i ?? o.bars?.barProgressResizeHandle?.slots, c = a ?? o.bars?.barProgressResizeHandle?.slotProps, l = (e, t) => Math.min(Math.max(0, t + e), r), u = Pn({
1873
+ onStart: () => ({ startWidth: e }),
1874
+ onDrag: (e, { startWidth: n }) => t(l(e, n)),
1875
+ onEnd: (e, { startWidth: t }) => n?.(l(e, t))
1876
+ }), d = {
1877
+ width: e,
1878
+ parentWidth: r
1879
+ };
1880
+ return /* @__PURE__ */ m(s?.root ?? "div", { ...X({
1881
+ className: Rn.barProgressResizeHandle,
1882
+ "aria-hidden": !0,
1883
+ tabIndex: -1,
1884
+ onMouseDown: u
1885
+ }, c?.root, d) });
1886
+ }
1887
+ //#endregion
1888
+ //#region src/components/bars/progress/BarProgress.tsx
1889
+ function Bn({ progress: e, width: t, height: n, onProgressChange: r, onProgressEnd: i, slots: a, slotProps: o }) {
1890
+ let s = Y(), c = a ?? s.bars?.barProgress?.slots, l = o ?? s.bars?.barProgress?.slotProps, u = e / 100 * t, d = (e) => e / t * 100, f = {
1891
+ progress: e,
1892
+ width: u,
1893
+ height: n
1894
+ };
1895
+ return /* @__PURE__ */ m(c?.root ?? "div", {
1896
+ ...X({
1897
+ className: Rn.barProgress,
1898
+ style: {
1899
+ width: u,
1900
+ height: n
1901
+ }
1902
+ }, l?.root, f),
1903
+ children: r && /* @__PURE__ */ m(zn, {
1904
+ width: u,
1905
+ parentWidth: t,
1906
+ onResize: (e) => r(d(e)),
1907
+ onResizeEnd: i ? (e) => i(d(e)) : void 0
1908
+ })
1909
+ });
1910
+ }
1911
+ var Vn = {
1912
+ project: "_project_927ph_1",
1913
+ projectInner: "_projectInner_927ph_10",
1914
+ projectContent: "_projectContent_927ph_16"
1915
+ };
1916
+ //#endregion
1917
+ //#region src/components/bars/projectBar/ProjectBar.tsx
1918
+ function Hn({ width: e, height: t, left: n, top: r, colWidth: i, title: a, a11y: o, progress: s, onProgressChange: c, onProgressEnd: l, onMove: u, onMoveEnd: d, slots: f, slotProps: p }) {
1919
+ let g = Y(), _ = f ?? g.bars?.projectBar?.slots, v = p ?? g.bars?.projectBar?.slotProps, y = {
1920
+ width: e,
1921
+ height: t,
1922
+ progress: s,
1923
+ title: a
1924
+ }, b = _?.root ?? Fn, x = _?.inner ?? "div", S = _?.label ?? "div", C = X({
1925
+ className: Vn.project,
1926
+ style: { lineHeight: `${t}px` },
1927
+ ...o
1928
+ }, v?.root, y), w = X({
1929
+ className: Vn.projectInner,
1930
+ "aria-hidden": !0
1931
+ }, v?.inner, y), T = X({
1932
+ className: Vn.projectContent,
1933
+ children: a
1934
+ }, v?.label, y);
1935
+ return /* @__PURE__ */ m(b, {
1936
+ left: n,
1937
+ top: r,
1938
+ width: e,
1939
+ height: t,
1940
+ colWidth: i,
1941
+ dragAnchor: n,
1942
+ onMove: u,
1943
+ onMoveEnd: d,
1944
+ ...C,
1945
+ children: /* @__PURE__ */ h(x, {
1946
+ ...w,
1947
+ children: [/* @__PURE__ */ m(Bn, {
1948
+ width: e,
1949
+ height: t,
1950
+ progress: s,
1951
+ onProgressChange: c,
1952
+ onProgressEnd: l
1953
+ }), /* @__PURE__ */ m(S, { ...T })]
1954
+ })
1955
+ });
1956
+ }
1957
+ var Un = {
1958
+ task: "_task_18g5p_1",
1959
+ taskInner: "_taskInner_18g5p_9",
1960
+ taskContent: "_taskContent_18g5p_15",
1961
+ resizer: "_resizer_18g5p_28",
1962
+ startResizer: "_startResizer_18g5p_59",
1963
+ endResizer: "_endResizer_18g5p_62"
1964
+ };
1965
+ //#endregion
1966
+ //#region src/components/bars/taskBar/TaskResizer.tsx
1967
+ function Wn({ width: e, left: t, colWidth: n, onResize: r, onResizeEnd: i, slots: a, slotProps: o }) {
1968
+ let s = Y(), c = a ?? s.bars?.taskResizer?.slots, l = o ?? s.bars?.taskResizer?.slotProps, u = Pn({
1969
+ onStart: () => ({
1970
+ startWidth: e,
1971
+ startLeft: t
1972
+ }),
1973
+ onDrag: (e, { startWidth: t, startLeft: n }) => {
1974
+ let i = Math.min(e, t);
1975
+ r(t - i, n + i);
1976
+ },
1977
+ onEnd: (e, { startWidth: t, startLeft: r }) => {
1978
+ let a = r + Math.min(e, t);
1979
+ i("start", Math.round(a / n) * n);
1980
+ }
1981
+ }), d = Pn({
1982
+ onStart: () => ({
1983
+ startWidth: e,
1984
+ startLeft: t
1985
+ }),
1986
+ onDrag: (e, { startWidth: t, startLeft: n }) => {
1987
+ r(Math.max(0, t + e), n);
1988
+ },
1989
+ onEnd: (e, { startWidth: t, startLeft: r }) => {
1990
+ let a = r + Math.max(0, t + e);
1991
+ i("end", Math.round(a / n) * n);
1992
+ }
1993
+ }), f = {
1994
+ width: e,
1995
+ left: t
1996
+ }, g = c?.startHandle ?? "button", _ = c?.endHandle ?? "button", v = X({
1997
+ type: "button",
1998
+ "aria-hidden": !0,
1999
+ tabIndex: -1,
2000
+ className: Sn(Un.resizer, Un.startResizer),
2001
+ onMouseDown: u
2002
+ }, l?.startHandle, f), y = X({
2003
+ type: "button",
2004
+ "aria-hidden": !0,
2005
+ tabIndex: -1,
2006
+ className: Sn(Un.resizer, Un.endResizer),
2007
+ onMouseDown: d
2008
+ }, l?.endHandle, f);
2009
+ return /* @__PURE__ */ h(p, { children: [/* @__PURE__ */ m(g, { ...v }), /* @__PURE__ */ m(_, { ...y })] });
2010
+ }
2011
+ //#endregion
2012
+ //#region src/components/bars/taskBar/TaskBar.tsx
2013
+ function Gn({ width: e, height: t, left: n, top: r, colWidth: i, title: a, a11y: o, progress: s = 30, onProgressChange: c, onProgressEnd: l, onResize: u, onResizeEnd: d, onMove: f, onMoveEnd: p, slots: g, slotProps: _ }) {
2014
+ let v = Y(), y = g ?? v.bars?.taskBar?.slots, b = _ ?? v.bars?.taskBar?.slotProps, x = {
2015
+ width: e,
2016
+ height: t,
2017
+ progress: s,
2018
+ title: a
2019
+ }, S = y?.root ?? Fn, C = y?.inner ?? "div", w = y?.label ?? "div", T = X({
2020
+ className: `${Un.task} am-gantt-bar-task`,
2021
+ style: { lineHeight: `${t}px` },
2022
+ ...o
2023
+ }, b?.root, x), E = X({
2024
+ className: Un.taskInner,
2025
+ "aria-hidden": !0
2026
+ }, b?.inner, x), D = X({
2027
+ className: Un.taskContent,
2028
+ title: a,
2029
+ children: a
2030
+ }, b?.label, x);
2031
+ return /* @__PURE__ */ m(S, {
2032
+ left: n,
2033
+ top: r,
2034
+ width: e,
2035
+ height: t,
2036
+ colWidth: i,
2037
+ dragAnchor: n,
2038
+ onMove: f,
2039
+ onMoveEnd: p,
2040
+ ...T,
2041
+ children: /* @__PURE__ */ h(C, {
2042
+ ...E,
2043
+ children: [
2044
+ /* @__PURE__ */ m(Bn, {
2045
+ width: e,
2046
+ height: t,
2047
+ progress: s,
2048
+ onProgressChange: c,
2049
+ onProgressEnd: l
2050
+ }),
2051
+ /* @__PURE__ */ m(w, { ...D }),
2052
+ u && d && /* @__PURE__ */ m(Wn, {
2053
+ width: e,
2054
+ left: n,
2055
+ colWidth: i,
2056
+ onResize: u,
2057
+ onResizeEnd: d
2058
+ })
2059
+ ]
2060
+ })
2061
+ });
2062
+ }
2063
+ var Kn = {
2064
+ handle: "_handle_fw6gu_1",
2065
+ visible: "_visible_fw6gu_18"
2066
+ }, qn = 10 / 2;
2067
+ function Jn({ taskId: e, barLeft: t, barWidth: n, barCenterY: r, show: i, slots: a, slotProps: o }) {
2068
+ let s = Y(), c = a ?? s.bars?.connectorHandles?.slots, l = o ?? s.bars?.connectorHandles?.slotProps, { startDrag: u, endDrag: d } = dn(), f = pn(), { gridBodyRef: g } = sn(), _ = (e, t) => {
2069
+ let n = g.current?.getBoundingClientRect();
2070
+ if (!n) return {
2071
+ x: 0,
2072
+ y: 0
2073
+ };
2074
+ let r = e.currentTarget.getBoundingClientRect();
2075
+ return {
2076
+ x: r.left + r.width / 2 - n.left,
2077
+ y: r.top + r.height / 2 - n.top
2078
+ };
2079
+ }, v = (t, n) => {
2080
+ t.stopPropagation(), t.preventDefault();
2081
+ let { x: r, y: i } = _(t, n);
2082
+ u({
2083
+ fromTaskId: e,
2084
+ handle: n,
2085
+ startX: r,
2086
+ startY: i,
2087
+ currentX: r,
2088
+ currentY: i
2089
+ });
2090
+ }, y = (t, n) => {
2091
+ f && (t.stopPropagation(), d(e, n));
2092
+ }, b = {
2093
+ taskId: e,
2094
+ barLeft: t,
2095
+ barWidth: n,
2096
+ barCenterY: r,
2097
+ show: i,
2098
+ isDragging: f
2099
+ }, x = c?.startHandle ?? "div", S = c?.endHandle ?? "div", C = i || f, w = X({
2100
+ "aria-hidden": !0,
2101
+ tabIndex: -1,
2102
+ className: Sn(Kn.handle, C && Kn.visible),
2103
+ style: {
2104
+ left: t - 10,
2105
+ top: r - qn
2106
+ },
2107
+ onMouseDown: (e) => v(e, "start"),
2108
+ onMouseUp: (e) => y(e, "start")
2109
+ }, l?.startHandle, b), T = X({
2110
+ "aria-hidden": !0,
2111
+ tabIndex: -1,
2112
+ className: Sn(Kn.handle, C && Kn.visible),
2113
+ style: {
2114
+ left: t + n,
2115
+ top: r - qn
2116
+ },
2117
+ onMouseDown: (e) => v(e, "end"),
2118
+ onMouseUp: (e) => y(e, "end")
2119
+ }, l?.endHandle, b);
2120
+ return /* @__PURE__ */ h(p, { children: [/* @__PURE__ */ m(x, { ...w }), /* @__PURE__ */ m(S, { ...T })] });
2121
+ }
2122
+ var Yn = { row: "_row_xikao_1" }, Xn = n(function({ task: e, index: t, origin: n, colWidth: i, rowHeight: a, unit: o, override: s, onOverride: c, onUpdate: l, onCommit: u, onTaskClick: f, rowIndexOffset: p }) {
2123
+ let g = Jt(), _ = Qt(), v = an() === e.id, { left: y, width: b, progress: x } = xt(e, s || {}, n, i, o), S = t * a, C = y, w = a - 12, T = 6 + w / 2, [E, D] = d(!1), O = (e) => ({
2124
+ startDate: St(e, n, i, o),
2125
+ endDate: St(e + b, n, i, o)
2126
+ }), k = (e, t) => ({
2127
+ startDate: St(t, n, i, o),
2128
+ endDate: St(t + e, n, i, o)
2129
+ }), A = (t) => {
2130
+ c(e.id, t);
2131
+ }, j = (e, t) => {
2132
+ r(() => {
2133
+ l(e, t), c(e, null);
2134
+ });
2135
+ }, M = (t) => {
2136
+ r(() => {
2137
+ u(e.id, t), c(e.id, null);
2138
+ });
2139
+ }, ee = (e) => ({
2140
+ kind: "move",
2141
+ startDate: St(e, n, i, o)
2142
+ }), N = _ ? {} : {
2143
+ onMove: (e) => A(O(e)),
2144
+ onMoveEnd: (e) => M(ee(e))
2145
+ }, P = _ ? {} : {
2146
+ onProgressChange: (e) => A({ progress: e }),
2147
+ onProgressEnd: (t) => j(e.id, { progress: t })
2148
+ }, F = _ ? {} : {
2149
+ onResize: (e, t) => A(k(e, t)),
2150
+ onResizeEnd: (e, t) => M(e === "start" ? {
2151
+ kind: "resizeStart",
2152
+ startDate: St(t, n, i, o)
2153
+ } : {
2154
+ kind: "resizeEnd",
2155
+ endDate: St(t, n, i, o)
2156
+ })
2157
+ }, I = {
2158
+ role: "gridcell",
2159
+ "aria-colindex": Math.max(1, Math.floor(C / i) + 1),
2160
+ "aria-colspan": Math.max(1, Math.round(b / i)),
2161
+ "aria-label": g.bar(e, { progress: x }),
2162
+ "aria-selected": v || void 0,
2163
+ title: e.name
2164
+ };
2165
+ return /* @__PURE__ */ h("div", {
2166
+ className: Yn.row,
2167
+ style: {
2168
+ top: S,
2169
+ height: a
2170
+ },
2171
+ onClick: f ? () => f(e) : void 0,
2172
+ onMouseEnter: () => D(!0),
2173
+ onMouseLeave: () => D(!1),
2174
+ role: "row",
2175
+ "aria-rowindex": p + t + 1,
2176
+ children: [
2177
+ !_ && /* @__PURE__ */ m(Jn, {
2178
+ taskId: e.id,
2179
+ barLeft: C,
2180
+ barWidth: b,
2181
+ barCenterY: T,
2182
+ show: E
2183
+ }),
2184
+ e.type === "milestone" && /* @__PURE__ */ m(Ln, {
2185
+ size: w,
2186
+ centerLeft: C,
2187
+ top: 6,
2188
+ colWidth: i,
2189
+ title: e.name,
2190
+ a11y: I,
2191
+ ...N
2192
+ }),
2193
+ e.type === "summary" && /* @__PURE__ */ m(Hn, {
2194
+ left: C,
2195
+ top: 6,
2196
+ width: b,
2197
+ height: w,
2198
+ colWidth: i,
2199
+ title: e.name,
2200
+ a11y: I,
2201
+ progress: x,
2202
+ ...P,
2203
+ ...N
2204
+ }),
2205
+ e.type === "task" || !e.type ? /* @__PURE__ */ m(Gn, {
2206
+ left: C,
2207
+ top: 6,
2208
+ width: b,
2209
+ height: w,
2210
+ colWidth: i,
2211
+ title: e.name,
2212
+ a11y: I,
2213
+ progress: x,
2214
+ ...P,
2215
+ ...N,
2216
+ ...F
2217
+ }) : null
2218
+ ]
2219
+ });
2220
+ });
2221
+ Xn.displayName = "Bar";
2222
+ //#endregion
2223
+ //#region src/components/dependency-links/geometry.ts
2224
+ var Zn = 12, Qn = {};
2225
+ function $n(e) {
2226
+ let t = Infinity, n = Infinity, r = -Infinity, i = -Infinity;
2227
+ for (let a of e) a.x < t && (t = a.x), a.x > r && (r = a.x), a.y < n && (n = a.y), a.y > i && (i = a.y);
2228
+ return {
2229
+ minX: t,
2230
+ minY: n,
2231
+ maxX: r,
2232
+ maxY: i
2233
+ };
2234
+ }
2235
+ function er(e) {
2236
+ if (e.length < 2) return e[0] ?? {
2237
+ x: 0,
2238
+ y: 0
2239
+ };
2240
+ let t = Math.floor((e.length - 1) / 2), n = e[t], r = e[t + 1];
2241
+ return {
2242
+ x: (n.x + r.x) / 2,
2243
+ y: (n.y + r.y) / 2
2244
+ };
2245
+ }
2246
+ function tr(e, t, n, { origin: r, colWidth: i, rowHeight: a, unit: o }) {
2247
+ let { left: s, width: c } = xt(e, t, r, i, o);
2248
+ if (e.type === "milestone") {
2249
+ let t = (a - 12) / 2;
2250
+ return {
2251
+ startX: s - t,
2252
+ endX: s + t,
2253
+ centerY: n,
2254
+ task: e
2255
+ };
2256
+ }
2257
+ return {
2258
+ startX: s,
2259
+ endX: s + c,
2260
+ centerY: n,
2261
+ task: e
2262
+ };
2263
+ }
2264
+ function nr(e, t) {
2265
+ let n = /* @__PURE__ */ new Map(), { rowHeight: r } = t;
2266
+ return e.forEach((e, i) => {
2267
+ n.set(e.id, tr(e, Qn, i * r + r / 2, t));
2268
+ }), n;
2269
+ }
2270
+ function rr(e, t) {
2271
+ let n = (e.x + t.x) / 2;
2272
+ return [
2273
+ e,
2274
+ {
2275
+ x: n,
2276
+ y: e.y
2277
+ },
2278
+ {
2279
+ x: n,
2280
+ y: t.y
2281
+ },
2282
+ t
2283
+ ];
2284
+ }
2285
+ function ir(e, t, n, r) {
2286
+ let i = e.x + n * Zn, a = t.x - r * Zn, o = (e.y + t.y) / 2;
2287
+ return [
2288
+ e,
2289
+ {
2290
+ x: i,
2291
+ y: e.y
2292
+ },
2293
+ {
2294
+ x: i,
2295
+ y: o
2296
+ },
2297
+ {
2298
+ x: a,
2299
+ y: o
2300
+ },
2301
+ {
2302
+ x: a,
2303
+ y: t.y
2304
+ },
2305
+ t
2306
+ ];
2307
+ }
2308
+ function ar(e, t, n) {
2309
+ return [
2310
+ e,
2311
+ {
2312
+ x: n,
2313
+ y: e.y
2314
+ },
2315
+ {
2316
+ x: n,
2317
+ y: t.y
2318
+ },
2319
+ t
2320
+ ];
2321
+ }
2322
+ function or(e, t, n) {
2323
+ let r = t.centerY, i = n.centerY;
2324
+ switch (e) {
2325
+ case "FS": {
2326
+ let e = {
2327
+ x: t.endX,
2328
+ y: r
2329
+ }, a = {
2330
+ x: n.startX,
2331
+ y: i
2332
+ };
2333
+ return n.startX >= t.endX + 2 * Zn ? rr(e, a) : ir(e, a, 1, 1);
2334
+ }
2335
+ case "SS": return ar({
2336
+ x: t.startX,
2337
+ y: r
2338
+ }, {
2339
+ x: n.startX,
2340
+ y: i
2341
+ }, Math.min(t.startX, n.startX) - Zn);
2342
+ case "FF": return ar({
2343
+ x: t.endX,
2344
+ y: r
2345
+ }, {
2346
+ x: n.endX,
2347
+ y: i
2348
+ }, Math.max(t.endX, n.endX) + Zn);
2349
+ case "SF": {
2350
+ let e = {
2351
+ x: t.startX,
2352
+ y: r
2353
+ }, a = {
2354
+ x: n.endX,
2355
+ y: i
2356
+ };
2357
+ return n.endX <= t.startX - 2 * Zn ? rr(e, a) : ir(e, a, -1, -1);
2358
+ }
2359
+ }
2360
+ }
2361
+ function sr({ tasks: e, dependencies: t, ...n }) {
2362
+ let r = nr(e, n), i = [];
2363
+ for (let e of t) {
2364
+ let t = r.get(e.from), n = r.get(e.to);
2365
+ !t || !n || i.push(cr(e, t, n));
2366
+ }
2367
+ let a = null;
2368
+ return {
2369
+ links: i,
2370
+ boxes: r,
2371
+ linksTouching(e) {
2372
+ return a ??= lr(i), a.get(e);
2373
+ }
2374
+ };
2375
+ }
2376
+ function cr(e, t, n) {
2377
+ let r = or(e.type, t, n);
2378
+ return {
2379
+ id: `${e.from}->${e.to}`,
2380
+ type: e.type,
2381
+ points: r,
2382
+ bounds: $n(r),
2383
+ dep: e
2384
+ };
2385
+ }
2386
+ function lr(e) {
2387
+ let t = /* @__PURE__ */ new Map(), n = (e, n) => {
2388
+ let r = t.get(e);
2389
+ r ? r.push(n) : t.set(e, [n]);
2390
+ };
2391
+ return e.forEach((e, t) => {
2392
+ n(String(e.dep.from), t), n(String(e.dep.to), t);
2393
+ }), t;
2394
+ }
2395
+ function ur(e, t, n) {
2396
+ let r = Object.keys(t);
2397
+ if (r.length === 0) return e.links;
2398
+ let i = /* @__PURE__ */ new Map(), a = (r) => {
2399
+ let a = e.boxes.get(r), o = a && t[String(r)];
2400
+ if (!a || !o) return a;
2401
+ let s = i.get(r);
2402
+ return s || (s = tr(a.task, o, a.centerY, n), i.set(r, s)), s;
2403
+ }, o = null;
2404
+ for (let t of r) for (let n of e.linksTouching(t) ?? []) {
2405
+ let { dep: t } = e.links[n], r = a(t.from), i = a(t.to);
2406
+ !r || !i || (o ??= e.links.slice(), o[n] = cr(t, r, i));
2407
+ }
2408
+ return o ?? e.links;
2409
+ }
2410
+ //#endregion
2411
+ //#region src/components/dependency-links/DependencyLinksContext.tsx
2412
+ var dr = t(null);
2413
+ function fr({ tasks: e, dependencies: t, origin: n, colWidth: r, rowHeight: i, unit: a, children: o, overrides: s }) {
2414
+ let c = l(() => sr({
2415
+ tasks: e,
2416
+ dependencies: t,
2417
+ origin: n,
2418
+ colWidth: r,
2419
+ rowHeight: i,
2420
+ unit: a
2421
+ }), [
2422
+ e,
2423
+ t,
2424
+ n,
2425
+ r,
2426
+ i,
2427
+ a
2428
+ ]), u = l(() => ur(c, s, {
2429
+ origin: n,
2430
+ colWidth: r,
2431
+ rowHeight: i,
2432
+ unit: a
2433
+ }), [
2434
+ c,
2435
+ s,
2436
+ n,
2437
+ r,
2438
+ i,
2439
+ a
2440
+ ]);
2441
+ return /* @__PURE__ */ m(dr.Provider, {
2442
+ value: u,
2443
+ children: o
2444
+ });
2445
+ }
2446
+ function pr() {
2447
+ let e = a(dr);
2448
+ if (e === null) throw Error("useDependencyLinks must be used within a <DependencyLinksProvider>");
2449
+ return e;
2450
+ }
2451
+ var Z = {
2452
+ layer: "_layer_1ih9f_1",
2453
+ hitArea: "_hitArea_1ih9f_8",
2454
+ segment: "_segment_1ih9f_15",
2455
+ segmentSelected: "_segmentSelected_1ih9f_21",
2456
+ arrowRight: "_arrowRight_1ih9f_25",
2457
+ arrowLeft: "_arrowLeft_1ih9f_26",
2458
+ arrowSelected: "_arrowSelected_1ih9f_43",
2459
+ lagLabel: "_lagLabel_1ih9f_51",
2460
+ deleteBtn: "_deleteBtn_1ih9f_65"
2461
+ }, Q = 2, mr = 8, hr = 6;
2462
+ function gr(e, t) {
2463
+ return t ? e.minX <= t.maxX && e.maxX >= t.minX && e.minY <= t.maxY && e.maxY >= t.minY : !0;
2464
+ }
2465
+ function _r(e, t) {
2466
+ return e.y === t.y ? {
2467
+ left: Math.min(e.x, t.x) - Q / 2,
2468
+ top: e.y - Q / 2,
2469
+ width: Math.abs(t.x - e.x) + Q,
2470
+ height: Q
2471
+ } : {
2472
+ left: e.x - Q / 2,
2473
+ top: Math.min(e.y, t.y) - Q / 2,
2474
+ width: Q,
2475
+ height: Math.abs(t.y - e.y) + Q
2476
+ };
2477
+ }
2478
+ function vr(e, t) {
2479
+ return e.y === t.y ? {
2480
+ left: Math.min(e.x, t.x) - Q / 2,
2481
+ top: e.y - hr,
2482
+ width: Math.abs(t.x - e.x) + Q,
2483
+ height: Q + hr * 2
2484
+ } : {
2485
+ left: e.x - hr,
2486
+ top: Math.min(e.y, t.y) - Q / 2,
2487
+ width: Q + hr * 2,
2488
+ height: Math.abs(t.y - e.y) + Q
2489
+ };
2490
+ }
2491
+ function yr(e) {
2492
+ let t = [];
2493
+ for (let n = 0; n + 1 < e.length; n++) t.push([e[n], e[n + 1]]);
2494
+ return t;
2495
+ }
2496
+ function br(e) {
2497
+ let t = e[e.length - 1], n = e[e.length - 2], r = t.x >= n.x;
2498
+ return {
2499
+ className: r ? Z.arrowRight : Z.arrowLeft,
2500
+ style: {
2501
+ left: r ? t.x - mr : t.x,
2502
+ top: t.y - mr / 2
2503
+ }
2504
+ };
2505
+ }
2506
+ function xr({ width: t, height: n, onDependencyDelete: r, visibleRect: i, slots: a, slotProps: s }) {
2507
+ let c = Y(), l = a ?? c.dependencies?.links?.slots, u = s ?? c.dependencies?.links?.slotProps, f = Jt(), p = Qt(), g = pr(), [_, v] = d(null), [y, b] = d(null), x = _ ? g.find((e) => e.id === _) : null;
2508
+ if (o(() => {
2509
+ if (!_) return;
2510
+ let e = (e) => {
2511
+ (e.key === "Delete" || e.key === "Backspace") && (x && r?.(x.dep), v(null), b(null));
2512
+ };
2513
+ return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
2514
+ }, [
2515
+ _,
2516
+ x,
2517
+ r
2518
+ ]), g.length === 0) return null;
2519
+ let S = (e, t) => {
2520
+ if (t.stopPropagation(), _ === e) v(null), b(null);
2521
+ else {
2522
+ v(e);
2523
+ let n = t.currentTarget.closest(`.${Z.layer}`)?.getBoundingClientRect();
2524
+ b(n ? {
2525
+ x: t.clientX - n.left,
2526
+ y: t.clientY - n.top
2527
+ } : null);
2528
+ }
2529
+ }, C = (e) => {
2530
+ e.stopPropagation(), x && r?.(x.dep), v(null), b(null);
2531
+ }, w = l?.layer ?? "div", T = l?.segment ?? "div", E = l?.arrow ?? "div", D = l?.lagLabel ?? "div", O = l?.deleteButton ?? "button";
2532
+ return /* @__PURE__ */ h(w, {
2533
+ ...X({
2534
+ className: Z.layer,
2535
+ style: {
2536
+ width: t,
2537
+ height: n
2538
+ },
2539
+ role: "presentation",
2540
+ "aria-hidden": !0,
2541
+ onClick: () => {
2542
+ v(null), b(null);
2543
+ }
2544
+ }, u?.layer, {
2545
+ width: t,
2546
+ height: n,
2547
+ linkCount: g.length
2548
+ }),
2549
+ children: [g.map((t) => {
2550
+ let n = t.id === _;
2551
+ if (!n && !gr(t.bounds, i)) return null;
2552
+ let r = br(t.points), a = yr(t.points), o = t.dep.lag ? er(t.points) : null, s = {
2553
+ link: t,
2554
+ isSelected: n
2555
+ }, c = X({
2556
+ className: `${r.className} ${n ? Z.arrowSelected : ""}`,
2557
+ style: r.style
2558
+ }, u?.arrow, s);
2559
+ return /* @__PURE__ */ h(e, { children: [
2560
+ !p && a.map(([e, n]) => /* @__PURE__ */ m("div", {
2561
+ className: Z.hitArea,
2562
+ style: vr(e, n),
2563
+ onClick: (e) => S(t.id, e)
2564
+ }, `hit-${e.x},${e.y}-${n.x},${n.y}`)),
2565
+ a.map(([e, r], i) => /* @__PURE__ */ m(T, { ...X({
2566
+ className: `${Z.segment} ${n ? Z.segmentSelected : ""}`,
2567
+ style: _r(e, r)
2568
+ }, u?.segment, {
2569
+ link: t,
2570
+ isSelected: n,
2571
+ from: e,
2572
+ to: r,
2573
+ index: i
2574
+ }) }, `seg-${e.x},${e.y}-${r.x},${r.y}`)),
2575
+ /* @__PURE__ */ m(E, { ...c }),
2576
+ o && t.dep.lag !== void 0 && t.dep.lag !== 0 && /* @__PURE__ */ m(D, { ...X({
2577
+ className: Z.lagLabel,
2578
+ style: {
2579
+ left: o.x,
2580
+ top: o.y
2581
+ },
2582
+ children: t.dep.lag > 0 ? `+${t.dep.lag}d` : `${t.dep.lag}d`
2583
+ }, u?.lagLabel, {
2584
+ link: t,
2585
+ isSelected: n,
2586
+ lag: t.dep.lag
2587
+ }) })
2588
+ ] }, t.id);
2589
+ }), !p && x && y && /* @__PURE__ */ m(O, { ...X({
2590
+ className: Z.deleteBtn,
2591
+ type: "button",
2592
+ tabIndex: -1,
2593
+ style: {
2594
+ left: y.x,
2595
+ top: y.y
2596
+ },
2597
+ onClick: C,
2598
+ "aria-label": f.deleteDependency,
2599
+ children: "×"
2600
+ }, u?.deleteButton, { dependency: x.dep }) })]
2601
+ });
2602
+ }
2603
+ var Sr = { preview: "_preview_1jjzd_1" };
2604
+ //#endregion
2605
+ //#region src/components/dependency-links/DependencyPreview.tsx
2606
+ function Cr({ slots: e, slotProps: t }) {
2607
+ let n = Y(), r = e ?? n.dependencies?.preview?.slots, i = t ?? n.dependencies?.preview?.slotProps, a = hn();
2608
+ if (!a) return null;
2609
+ let o = a.currentX - a.startX, s = a.currentY - a.startY, c = Math.hypot(o, s), l = 180 / Math.PI * Math.atan2(s, o);
2610
+ return /* @__PURE__ */ m(r?.root ?? "div", { ...X({
2611
+ className: Sr.preview,
2612
+ style: {
2613
+ left: a.startX,
2614
+ top: a.startY,
2615
+ width: c,
2616
+ transform: `rotate(${l}deg)`
2617
+ },
2618
+ "aria-hidden": !0
2619
+ }, i?.root, {
2620
+ drag: a,
2621
+ length: c,
2622
+ angle: l
2623
+ }) });
2624
+ }
2625
+ var wr = {
2626
+ cols: "_cols_kjab1_1",
2627
+ col: "_col_kjab1_1",
2628
+ colWeekend: "_colWeekend_kjab1_14"
2629
+ };
2630
+ //#endregion
2631
+ //#region src/components/grid/GridColumns.tsx
2632
+ function Tr({ dates: e, colWidth: t, bodyHeight: n, colRange: r, unit: i = "day", step: a = 1, slots: o, slotProps: s }) {
2633
+ let c = Y(), l = o ?? c.timeline?.gridColumn?.slots, u = s ?? c.timeline?.gridColumn?.slotProps, d = l?.column ?? "div", { calendar: f } = Xt(), p = i === "day" || i === "hour" || i === "minute";
2634
+ return /* @__PURE__ */ m("div", {
2635
+ className: wr.cols,
2636
+ role: "presentation",
2637
+ "aria-hidden": !0,
2638
+ children: e.slice(r.start, r.end).map((e, o) => {
2639
+ let s = r.start + o, c = p ? Se(f, e, k(e, i, a)) : {
2640
+ isNonWorking: !1,
2641
+ reason: void 0
2642
+ }, l = f ? c.isNonWorking : i === "day" && w(e), h = {
2643
+ date: e,
2644
+ index: s,
2645
+ isNonWorking: l,
2646
+ nonWorkingReason: l ? c.reason ?? "weekend" : void 0,
2647
+ isWeekend: l,
2648
+ colWidth: t,
2649
+ bodyHeight: n
2650
+ };
2651
+ return /* @__PURE__ */ m(d, { ...X({
2652
+ className: Sn(wr.col, l && wr.colWeekend),
2653
+ style: {
2654
+ left: s * t,
2655
+ width: t,
2656
+ height: n
2657
+ }
2658
+ }, u?.column, h) }, e.getTime());
2659
+ })
2660
+ });
2661
+ }
2662
+ Tr.displayName = "GridColumns";
2663
+ var Er = {
2664
+ gridWrapper: "_gridWrapper_1tr84_1",
2665
+ grid: "_grid_1tr84_1",
2666
+ body: "_body_1tr84_17"
2667
+ };
2668
+ //#endregion
2669
+ //#region src/core/virtualize.ts
2670
+ function Dr(e, t, n, r, i = 0) {
2671
+ if (r <= 0) return {
2672
+ start: 0,
2673
+ end: 0
2674
+ };
2675
+ if (t <= 0 || n <= 0) return {
2676
+ start: 0,
2677
+ end: Math.min(r, 100)
2678
+ };
2679
+ let a = Math.floor(e / n), o = Math.ceil((e + t) / n);
2680
+ return {
2681
+ start: Math.max(0, a - i),
2682
+ end: Math.min(r, o + i)
2683
+ };
2684
+ }
2685
+ //#endregion
2686
+ //#region src/components/grid/Grid.tsx
2687
+ function Or({ slots: e, slotProps: t } = {}) {
2688
+ let n = Y(), r = e ?? n.timeline?.grid?.slots, a = t ?? n.timeline?.grid?.slotProps, { visibleTasks: s } = en(), { updateTask: c, commitTask: u, onTaskClick: f, setSelectedId: p } = nn(), { colWidth: g, rowHeight: _, scales: v, padDays: y, height: b } = Kt(), x = Jt(), { gridRef: S, onGridScroll: C, gridBodyRef: w } = sn(), T = ln(), { dependencies: E, onDependencyDelete: D } = dn(), { zoomAt: O, zoomIn: k, zoomOut: A, wheelEnabled: j, keyboardEnabled: M } = _n();
2689
+ o(() => {
2690
+ let e = S.current;
2691
+ if (!e || !j && !M) return;
2692
+ let t = (t) => {
2693
+ if (!(t.ctrlKey || t.metaKey)) return;
2694
+ t.preventDefault();
2695
+ let n = e.getBoundingClientRect();
2696
+ O(e.scrollLeft + (t.clientX - n.left), t.deltaY < 0 ? 1 : -1);
2697
+ }, n = (e) => {
2698
+ e.key === "+" || e.key === "=" ? (e.preventDefault(), k()) : (e.key === "-" || e.key === "_") && (e.preventDefault(), A());
2699
+ };
2700
+ return j && e.addEventListener("wheel", t, { passive: !1 }), M && (e.tabIndex = 0, e.addEventListener("keydown", n)), () => {
2701
+ e.removeEventListener("wheel", t), e.removeEventListener("keydown", n);
2702
+ };
2703
+ }, [
2704
+ S,
2705
+ j,
2706
+ M,
2707
+ O,
2708
+ k,
2709
+ A,
2710
+ s.length
2711
+ ]);
2712
+ let [ee, N] = d({}), P = i((e) => {
2713
+ p(e.id), f?.(e);
2714
+ }, [p, f]), F = i((e, t) => {
2715
+ N((n) => {
2716
+ if (t === null) {
2717
+ let { [e]: t, ...r } = n;
2718
+ return r;
2719
+ }
2720
+ return {
2721
+ ...n,
2722
+ [e]: {
2723
+ ...n[e],
2724
+ ...t
2725
+ }
2726
+ };
2727
+ });
2728
+ }, []), I = l(() => Ot(s, y, v), [
2729
+ s,
2730
+ y,
2731
+ v
2732
+ ]), te = I[0]?.getTime(), ne = l(() => te == null ? void 0 : new Date(te), [te]);
2733
+ if (!ne) return null;
2734
+ let L = wt(v), R = I.length * g, z = s.length * _, re = (v ?? Ct).length, B = Dr(T.scrollTop, T.clientHeight, _, s.length, 6), V = Dr(T.scrollLeft, T.clientWidth, g, I.length, 4), ie = {
2735
+ minX: V.start * g,
2736
+ maxX: V.end * g,
2737
+ minY: B.start * _,
2738
+ maxY: B.end * _
2739
+ }, ae = r?.root ?? "div", H = r?.body ?? "div", oe = {
2740
+ totalWidth: R,
2741
+ bodyHeight: z,
2742
+ height: b
2743
+ }, se = X({
2744
+ className: Er.gridWrapper,
2745
+ style: b === void 0 ? {} : { height: b },
2746
+ onScroll: C,
2747
+ role: "grid",
2748
+ "aria-label": x.timeline,
2749
+ "aria-rowcount": re + s.length,
2750
+ "aria-colcount": I.length
2751
+ }, a?.root, oe), ce = X({
2752
+ className: Er.body,
2753
+ style: {
2754
+ height: z,
2755
+ width: R
2756
+ },
2757
+ role: "rowgroup"
2758
+ }, a?.body, oe);
2759
+ return /* @__PURE__ */ m(ae, {
2760
+ ref: S,
2761
+ ...se,
2762
+ children: /* @__PURE__ */ h("div", {
2763
+ className: Er.grid,
2764
+ style: { width: R },
2765
+ role: "presentation",
2766
+ children: [/* @__PURE__ */ m(Dn, {
2767
+ colWidth: g,
2768
+ rowHeight: _,
2769
+ dates: I,
2770
+ scales: v,
2771
+ colRange: V
2772
+ }), /* @__PURE__ */ m(fr, {
2773
+ tasks: s,
2774
+ dependencies: E,
2775
+ origin: ne,
2776
+ colWidth: g,
2777
+ rowHeight: _,
2778
+ unit: L,
2779
+ overrides: ee,
2780
+ children: /* @__PURE__ */ h(H, {
2781
+ ref: w,
2782
+ ...ce,
2783
+ children: [
2784
+ /* @__PURE__ */ m(Tr, {
2785
+ dates: I,
2786
+ colWidth: g,
2787
+ bodyHeight: z,
2788
+ colRange: V,
2789
+ unit: L,
2790
+ step: Tt(v)
2791
+ }),
2792
+ /* @__PURE__ */ m(xr, {
2793
+ width: R,
2794
+ height: z,
2795
+ onDependencyDelete: D,
2796
+ visibleRect: ie
2797
+ }),
2798
+ /* @__PURE__ */ m(Cr, {}),
2799
+ s.slice(B.start, B.end).map((e, t) => /* @__PURE__ */ m(Xn, {
2800
+ task: e,
2801
+ index: B.start + t,
2802
+ origin: ne,
2803
+ colWidth: g,
2804
+ rowHeight: _,
2805
+ unit: L,
2806
+ onUpdate: c,
2807
+ onCommit: u,
2808
+ override: ee[e.id],
2809
+ onOverride: F,
2810
+ onTaskClick: P,
2811
+ rowIndexOffset: re
2812
+ }, e.id))
2813
+ ]
2814
+ })
2815
+ })]
2816
+ })
2817
+ });
2818
+ }
2819
+ Or.displayName = "GanttGrid";
2820
+ var kr = { handle: "_handle_1o220_1" };
2821
+ //#endregion
2822
+ //#region src/components/grid/GridResizeHandle.tsx
2823
+ function Ar({ onMouseDown: e, isResizing: t = !1, slots: n, slotProps: r }) {
2824
+ let i = Y(), a = n ?? i.timeline?.gridResizeHandle?.slots, o = r ?? i.timeline?.gridResizeHandle?.slotProps, s = Jt(), c = { isResizing: t };
2825
+ return /* @__PURE__ */ m(a?.root ?? "div", { ...X({
2826
+ className: kr.handle,
2827
+ onMouseDown: e,
2828
+ role: "separator",
2829
+ "aria-orientation": "vertical",
2830
+ "aria-label": s.resizeTaskList
2831
+ }, o?.root, c) });
2832
+ }
2833
+ var $ = {
2834
+ taskList: "_taskList_i76t8_1",
2835
+ header: "_header_i76t8_10",
2836
+ headerCell: "_headerCell_i76t8_22",
2837
+ body: "_body_i76t8_41",
2838
+ rows: "_rows_i76t8_54",
2839
+ row: "_row_i76t8_54",
2840
+ selected: "_selected_i76t8_70",
2841
+ cell: "_cell_i76t8_74",
2842
+ treeCell: "_treeCell_i76t8_91",
2843
+ nameContent: "_nameContent_i76t8_95",
2844
+ expandBtn: "_expandBtn_i76t8_104",
2845
+ expandPlaceholder: "_expandPlaceholder_i76t8_122",
2846
+ divider: "_divider_i76t8_128"
2847
+ };
2848
+ //#endregion
2849
+ //#region src/components/taskList/TaskListHeader.tsx
2850
+ function jr({ columns: e, rowHeight: t, scales: n = Ct, onResizeStart: r, slots: i, slotProps: a }) {
2851
+ let o = n.length * t + 2, s = i?.header ?? "div", c = i?.headerCell ?? "div", l = i?.columnResizeHandle ?? "div";
2852
+ return /* @__PURE__ */ m(s, {
2853
+ ...X({
2854
+ className: $.header,
2855
+ style: {
2856
+ minHeight: o,
2857
+ height: o
2858
+ },
2859
+ role: "row",
2860
+ "aria-rowindex": 1
2861
+ }, a?.header, {
2862
+ columns: e,
2863
+ headerHeight: o
2864
+ }),
2865
+ children: e.map((e, t) => {
2866
+ let n = {
2867
+ column: e,
2868
+ index: t
2869
+ }, i = X({
2870
+ className: $.headerCell,
2871
+ style: e.width ? {
2872
+ width: e.width,
2873
+ flexShrink: 0
2874
+ } : {
2875
+ flex: "1 1 auto",
2876
+ minWidth: 100
2877
+ },
2878
+ role: "columnheader",
2879
+ "aria-colindex": t + 1
2880
+ }, a?.headerCell, n), o = X({
2881
+ className: $.divider,
2882
+ "aria-hidden": !0,
2883
+ onMouseDown: (t) => {
2884
+ let n = t.currentTarget.parentElement;
2885
+ r(e.key, n.offsetWidth, t);
2886
+ }
2887
+ }, a?.columnResizeHandle, n);
2888
+ return /* @__PURE__ */ h(c, {
2889
+ ...i,
2890
+ children: [e.header, /* @__PURE__ */ m(l, { ...o })]
2891
+ }, e.key);
2892
+ })
2893
+ });
2894
+ }
2895
+ //#endregion
2896
+ //#region src/components/taskList/TreeCell.tsx
2897
+ var Mr = 16;
2898
+ function Nr({ taskId: e, depth: t, isParent: n, isExpanded: r, onToggleExpand: i, children: a, slots: o, slotProps: s }) {
2899
+ let c = Jt(), l = {
2900
+ taskId: e,
2901
+ depth: t,
2902
+ isParent: n,
2903
+ isExpanded: r
2904
+ }, u = o?.root ?? "span", d = o?.expandButton ?? "button", f = o?.placeholder ?? "span", p = X({
2905
+ className: $.nameContent,
2906
+ style: { paddingLeft: t * Mr }
2907
+ }, s?.root, l), g = X({
2908
+ className: $.expandBtn,
2909
+ type: "button",
2910
+ onClick: (t) => {
2911
+ t.stopPropagation(), i(e);
2912
+ },
2913
+ "aria-label": r ? c.collapse : c.expand,
2914
+ children: r ? "▾" : "▸"
2915
+ }, s?.expandButton, l), _ = X({
2916
+ className: $.expandPlaceholder,
2917
+ "aria-hidden": !0
2918
+ }, s?.placeholder, l);
2919
+ return /* @__PURE__ */ h(u, {
2920
+ ...p,
2921
+ children: [n ? /* @__PURE__ */ m(d, { ...g }) : /* @__PURE__ */ m(f, { ..._ }), a]
2922
+ });
2923
+ }
2924
+ //#endregion
2925
+ //#region src/components/taskList/TaskListRow.tsx
2926
+ var Pr = 100, Fr = n(function({ task: e, rowHeight: t, rowIndex: n, depth: r, posinset: i, setsize: a, isParent: o, isExpanded: s, isSelected: c, onToggleExpand: l, onSelect: u, columns: d, treeCell: f }) {
2927
+ let { columnApi: p } = nn();
2928
+ return /* @__PURE__ */ m("div", {
2929
+ className: `${$.row} ${c ? $.selected : ""}`,
2930
+ style: { height: t },
2931
+ onClick: () => u(e.id),
2932
+ role: "row",
2933
+ "aria-rowindex": n + 2,
2934
+ "aria-level": r + 1,
2935
+ "aria-posinset": i,
2936
+ "aria-setsize": a,
2937
+ "aria-expanded": o ? s : void 0,
2938
+ "aria-selected": c || void 0,
2939
+ children: d.map((t, n) => /* @__PURE__ */ m("div", {
2940
+ className: `${$.cell} ${t.isTreeColumn ? $.treeCell : ""}`,
2941
+ style: {
2942
+ width: t.width || Pr,
2943
+ flexShrink: 0
2944
+ },
2945
+ role: t.isTreeColumn ? "rowheader" : "gridcell",
2946
+ "aria-colindex": n + 1,
2947
+ children: t.isTreeColumn ? /* @__PURE__ */ m(Nr, {
2948
+ taskId: e.id,
2949
+ depth: r,
2950
+ isParent: o,
2951
+ isExpanded: s,
2952
+ onToggleExpand: l,
2953
+ slots: f?.slots,
2954
+ slotProps: f?.slotProps,
2955
+ children: t.render(e, p)
2956
+ }) : t.render(e, p)
2957
+ }, t.key))
2958
+ });
2959
+ });
2960
+ Fr.displayName = "TaskListRow";
2961
+ //#endregion
2962
+ //#region src/hooks/useColumnWidths.ts
2963
+ function Ir() {
2964
+ let [e, t] = d({}), n = u(null);
2965
+ return {
2966
+ widths: e,
2967
+ onResizeStart: i((e, r, i) => {
2968
+ i.preventDefault(), n.current = {
2969
+ key: e,
2970
+ mouseX: i.clientX,
2971
+ width: r
2972
+ };
2973
+ let a = (e) => {
2974
+ if (!n.current) return;
2975
+ let { key: r, mouseX: i, width: a } = n.current, o = Math.max(60, a + (e.clientX - i));
2976
+ t((e) => ({
2977
+ ...e,
2978
+ [r]: o
2979
+ }));
2980
+ }, o = () => {
2981
+ n.current = null, window.removeEventListener("mousemove", a), window.removeEventListener("mouseup", o);
2982
+ };
2983
+ window.addEventListener("mousemove", a), window.addEventListener("mouseup", o);
2984
+ }, [])
2985
+ };
2986
+ }
2987
+ //#endregion
2988
+ //#region src/components/taskList/TaskList.tsx
2989
+ var Lr = {
2990
+ flex: "1 1 auto",
2991
+ minHeight: 0
2992
+ };
2993
+ function Rr({ columns: e = [], taskList: t }) {
2994
+ let { visibleTasks: n, expandedIds: r, parentIds: a } = en(), { toggleExpand: o, setSelectedId: s, onTaskClick: c, revealTask: u } = nn(), d = an(), { rowHeight: f, scales: p, height: g } = Kt(), _ = Jt(), { taskListRef: v, onTaskListScroll: y } = sn(), { widths: b, onResizeStart: x } = Ir(), S = l(() => e.map((e) => b[e.key] == null ? e : {
2995
+ ...e,
2996
+ width: b[e.key]
2997
+ }), [e, b]), C = J((e) => {
2998
+ s(e);
2999
+ let t = n.find((t) => t.id === e);
3000
+ t && (c?.(t), u(e, {
3001
+ horizontal: !0,
3002
+ vertical: !1
3003
+ }));
3004
+ }), w = i((e) => C.current(e), [C]), T = l(() => {
3005
+ let e = /* @__PURE__ */ new Map();
3006
+ for (let t of n) {
3007
+ let n = t.parentId == null ? -1 : e.get(t.parentId) ?? 0;
3008
+ e.set(t.id, n + 1);
3009
+ }
3010
+ return e;
3011
+ }, [n]), E = l(() => {
3012
+ let e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map();
3013
+ for (let r of n) {
3014
+ let n = r.parentId ?? null, i = (e.get(n) ?? 0) + 1;
3015
+ e.set(n, i), t.set(r.id, {
3016
+ posinset: i,
3017
+ setsize: 0
3018
+ });
3019
+ }
3020
+ for (let r of n) {
3021
+ let n = t.get(r.id);
3022
+ n.setsize = e.get(r.parentId ?? null) ?? 1;
3023
+ }
3024
+ return t;
3025
+ }, [n]), { viewport: D, scheduleMeasure: O } = _t(v, { trackHorizontal: !1 }), k = i(() => {
3026
+ y(), O();
3027
+ }, [y, O]), A = Dr(D.scrollTop, D.clientHeight, f, n.length, 6);
3028
+ return /* @__PURE__ */ h("div", {
3029
+ className: $.taskList,
3030
+ style: { height: g },
3031
+ role: "treegrid",
3032
+ "aria-label": _.taskList,
3033
+ "aria-rowcount": n.length + 1,
3034
+ "aria-colcount": S.length,
3035
+ children: [/* @__PURE__ */ m(jr, {
3036
+ columns: S,
3037
+ rowHeight: f,
3038
+ scales: p,
3039
+ onResizeStart: x,
3040
+ slots: t?.header?.slots,
3041
+ slotProps: t?.header?.slotProps
3042
+ }), /* @__PURE__ */ m("div", {
3043
+ ref: v,
3044
+ className: $.body,
3045
+ style: Lr,
3046
+ onScroll: k,
3047
+ role: "presentation",
3048
+ children: /* @__PURE__ */ h("div", {
3049
+ className: $.rows,
3050
+ role: "rowgroup",
3051
+ children: [
3052
+ /* @__PURE__ */ m("div", {
3053
+ style: { height: A.start * f },
3054
+ role: "presentation",
3055
+ "aria-hidden": "true"
3056
+ }),
3057
+ Array.from({ length: A.end - A.start }, (e, i) => {
3058
+ let s = A.start + i, c = n[s], l = E.get(c.id);
3059
+ return /* @__PURE__ */ m(Fr, {
3060
+ task: c,
3061
+ rowHeight: f,
3062
+ rowIndex: s,
3063
+ depth: T.get(c.id) ?? 0,
3064
+ posinset: l?.posinset ?? 1,
3065
+ setsize: l?.setsize ?? 1,
3066
+ isParent: a.has(c.id),
3067
+ isExpanded: r.has(c.id),
3068
+ isSelected: d === c.id,
3069
+ onToggleExpand: o,
3070
+ onSelect: w,
3071
+ columns: S,
3072
+ treeCell: t?.treeCell
3073
+ }, c.id);
3074
+ }),
3075
+ /* @__PURE__ */ m("div", {
3076
+ style: { height: (n.length - A.end) * f },
3077
+ role: "presentation",
3078
+ "aria-hidden": "true"
3079
+ })
3080
+ ]
3081
+ })
3082
+ })]
3083
+ });
3084
+ }
3085
+ //#endregion
3086
+ //#region src/hooks/useGridResize.ts
3087
+ function zr(e, t) {
3088
+ let [n, r] = d(void 0), a = u(null);
3089
+ return {
3090
+ gridWidth: n,
3091
+ onHandleMouseDown: i((n) => {
3092
+ n.preventDefault();
3093
+ let i = t.current, o = e.current;
3094
+ if (!i || !o) return;
3095
+ a.current = {
3096
+ mouseX: n.clientX,
3097
+ width: i.offsetWidth,
3098
+ containerW: o.offsetWidth
3099
+ };
3100
+ let s = (e) => {
3101
+ if (!a.current) return;
3102
+ let { mouseX: t, width: n, containerW: i } = a.current;
3103
+ r(Math.min(i, Math.max(10, n + (t - e.clientX))));
3104
+ }, c = () => {
3105
+ a.current = null, window.removeEventListener("mousemove", s), window.removeEventListener("mouseup", c);
3106
+ };
3107
+ window.addEventListener("mousemove", s), window.addEventListener("mouseup", c);
3108
+ }, [e, t])
3109
+ };
3110
+ }
3111
+ //#endregion
3112
+ //#region src/components/taskList/ActionsCell.tsx
3113
+ function Br(e) {
3114
+ let t = D(e.startDate, 1);
3115
+ return {
3116
+ id: `task-${Date.now()}`,
3117
+ name: "New task",
3118
+ startDate: t,
3119
+ endDate: D(t, 1),
3120
+ duration: 1,
3121
+ progress: 0,
3122
+ type: "task",
3123
+ parentId: e.parentId ?? null
3124
+ };
3125
+ }
3126
+ function Vr({ task: e, api: t }) {
3127
+ return /* @__PURE__ */ h("div", {
3128
+ style: {
3129
+ display: "flex",
3130
+ gap: "8px"
3131
+ },
3132
+ children: [
3133
+ /* @__PURE__ */ m("button", {
3134
+ type: "button",
3135
+ title: "Edit",
3136
+ "aria-label": t.labels.editTask(e),
3137
+ onClick: (n) => {
3138
+ n.stopPropagation(), t.editTask(e);
3139
+ },
3140
+ children: /* @__PURE__ */ m("span", {
3141
+ "aria-hidden": "true",
3142
+ children: "✎"
3143
+ })
3144
+ }),
3145
+ /* @__PURE__ */ m("button", {
3146
+ type: "button",
3147
+ title: "Add after",
3148
+ "aria-label": t.labels.addTaskAfter(e),
3149
+ onClick: (n) => {
3150
+ n.stopPropagation();
3151
+ let r = Br(e);
3152
+ t.createTask(r, e.id), t.editTask(r);
3153
+ },
3154
+ children: /* @__PURE__ */ m("span", {
3155
+ "aria-hidden": "true",
3156
+ children: "➕"
3157
+ })
3158
+ }),
3159
+ /* @__PURE__ */ m("button", {
3160
+ type: "button",
3161
+ title: "Delete",
3162
+ "aria-label": t.labels.deleteTask(e),
3163
+ style: { fontSize: 9 },
3164
+ onClick: (n) => {
3165
+ n.stopPropagation(), t.deleteTask(e.id);
3166
+ },
3167
+ children: /* @__PURE__ */ m("span", {
3168
+ "aria-hidden": "true",
3169
+ children: "❌"
3170
+ })
3171
+ })
3172
+ ]
3173
+ });
3174
+ }
3175
+ //#endregion
3176
+ //#region src/components/taskList/defaultColumns.tsx
3177
+ var Hr = "__action", Ur = [
3178
+ {
3179
+ key: Hr,
3180
+ header: " ",
3181
+ width: 120,
3182
+ render: (e, t) => /* @__PURE__ */ m(Vr, {
3183
+ task: e,
3184
+ api: t
3185
+ })
3186
+ },
3187
+ {
3188
+ key: "__name",
3189
+ header: "Task Name",
3190
+ render: (e) => e.name,
3191
+ width: 200,
3192
+ isTreeColumn: !0
3193
+ },
3194
+ {
3195
+ key: "__start",
3196
+ header: "Start",
3197
+ width: 90,
3198
+ render: (e) => e.startDate.toLocaleDateString()
3199
+ },
3200
+ {
3201
+ key: "__end",
3202
+ header: "End",
3203
+ width: 90,
3204
+ render: (e, t) => t.format.endDate(e)?.toLocaleDateString() ?? "—"
3205
+ },
3206
+ {
3207
+ key: "__progress",
3208
+ header: "Progress, %",
3209
+ width: 90,
3210
+ render: (e) => `${e.progress ?? 0}%`
3211
+ }
3212
+ ], Wr = Ur.filter((e) => e.key !== Hr);
3213
+ //#endregion
3214
+ //#region src/Gantt.tsx
3215
+ function Gr({ tasks: e, dependencies: t, rowHeight: n, colWidth: r, height: i, scales: a, padDays: o, zoomLevels: s, defaultZoomIndex: c, onZoomChange: d, zoomWheel: f, zoomKeyboard: p, onTaskClick: g, columns: _, defaultTaskListWidth: v = 280, onDependencyCreate: y, onDependencyDelete: b, onTaskCreate: x, onTaskDelete: S, onTaskEdit: C, onTasksChange: w, calendar: T, snapToWorking: E, durationUnit: D, readOnly: O = !1, apiRef: k, hideTaskList: A, taskList: j, bars: M, dependencySlots: ee, timeline: N, labels: P }) {
3216
+ let F = u(null), I = u(null), { gridWidth: te, onHandleMouseDown: ne } = zr(F, I), L = _ ?? (O ? Wr : Ur), R = !A;
3217
+ return /* @__PURE__ */ m(vn, {
3218
+ tasks: e,
3219
+ dependencies: t,
3220
+ rowHeight: n,
3221
+ colWidth: r,
3222
+ height: i,
3223
+ scales: a,
3224
+ padDays: o,
3225
+ zoomLevels: s,
3226
+ defaultZoomIndex: c,
3227
+ onZoomChange: d,
3228
+ zoomWheel: f,
3229
+ zoomKeyboard: p,
3230
+ onTaskClick: g,
3231
+ onDependencyCreate: y,
3232
+ onDependencyDelete: b,
3233
+ onTaskCreate: x,
3234
+ onTaskDelete: S,
3235
+ onTaskEdit: C,
3236
+ onTasksChange: w,
3237
+ apiRef: k,
3238
+ labels: P,
3239
+ calendar: T,
3240
+ snapToWorking: E,
3241
+ durationUnit: D,
3242
+ readOnly: O,
3243
+ children: /* @__PURE__ */ m(bn, {
3244
+ value: l(() => ({
3245
+ bars: M,
3246
+ dependencies: ee,
3247
+ timeline: N
3248
+ }), [
3249
+ M,
3250
+ ee,
3251
+ N
3252
+ ]),
3253
+ children: R ? /* @__PURE__ */ h("div", {
3254
+ ref: F,
3255
+ role: "group",
3256
+ "aria-label": P?.gantt ?? je.gantt,
3257
+ style: { position: "relative" },
3258
+ children: [/* @__PURE__ */ m(Rr, {
3259
+ columns: L,
3260
+ taskList: j
3261
+ }), /* @__PURE__ */ h("div", {
3262
+ ref: I,
3263
+ style: {
3264
+ position: "absolute",
3265
+ top: 0,
3266
+ right: 0,
3267
+ zIndex: 1,
3268
+ display: "flex",
3269
+ flexDirection: "row",
3270
+ background: "var(--am-gantt-grid-bg, #ffffff)",
3271
+ ...te === void 0 ? { left: v } : { width: te }
3272
+ },
3273
+ children: [/* @__PURE__ */ m(Ar, { onMouseDown: ne }), /* @__PURE__ */ m("div", {
3274
+ style: {
3275
+ flex: "1 1 auto",
3276
+ minWidth: 0
3277
+ },
3278
+ children: /* @__PURE__ */ m(Or, {})
3279
+ })]
3280
+ })]
3281
+ }) : /* @__PURE__ */ m(Or, {})
3282
+ })
3283
+ });
3284
+ }
3285
+ //#endregion
3286
+ export { Hr as ACTION_COLUMN_KEY, Dn as Calendar, Ur as DEFAULT_COLUMNS, zt as DEFAULT_ZOOM_INDEX, Rt as DEFAULT_ZOOM_LEVELS, Gr as Gantt, Or as GanttGrid, vn as GanttProvider, bn as GanttSlotsProvider, Ln as MilestoneBar, Hn as ProjectBar, Wr as READ_ONLY_COLUMNS, Gn as TaskBar, Rr as TaskList, De as displayEndDate, Oe as endInstantFromDisplayDate, X as mergeSlotProps, Qt as useGanttReadOnly, Y as useGanttSlots };
3287
+
3288
+ //# sourceMappingURL=index.mjs.map