@taskctrl/canvas-timeline 0.4.0 → 0.4.5

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.
@@ -1,8 +1,8 @@
1
- import { jsx as se, jsxs as Ae, Fragment as At } from "react/jsx-runtime";
2
- import ge, { useRef as x, useCallback as ie, useEffect as he, forwardRef as di, useMemo as oe, useState as Ve, useImperativeHandle as ui } from "react";
3
- import { flushSync as hi } from "react-dom";
1
+ import { jsx as se, jsxs as Ne, Fragment as Nt } from "react/jsx-runtime";
2
+ import ge, { useRef as x, useCallback as ie, useEffect as he, forwardRef as fi, useMemo as oe, useState as Ke, useImperativeHandle as mi } from "react";
3
+ import { flushSync as gi } from "react-dom";
4
4
  import pe from "dayjs";
5
- const we = {
5
+ const Ee = {
6
6
  primary: "#269bf7",
7
7
  trainColors: {},
8
8
  status: { red: "#EF5350", yellow: "#FBBF24", green: "#31c48d" },
@@ -12,7 +12,7 @@ const we = {
12
12
  sidebar: { bg: "#F9FAFB", border: "#E5E7EB", text: "#6c737f" },
13
13
  header: { bg: "#F9FAFB", border: "#E5E7EB", text: "#6c737f" }
14
14
  };
15
- class lt {
15
+ class ut {
16
16
  constructor(e) {
17
17
  Object.defineProperty(this, "visibleTimeStart", {
18
18
  enumerable: !0,
@@ -106,7 +106,7 @@ class lt {
106
106
  return this.groupCount * this.lineHeight;
107
107
  }
108
108
  }
109
- class fi {
109
+ class pi {
110
110
  constructor() {
111
111
  Object.defineProperty(this, "root", {
112
112
  enumerable: !0,
@@ -116,12 +116,12 @@ class fi {
116
116
  });
117
117
  }
118
118
  buildFromItems(e, t, n) {
119
- const r = e.map((u) => ({
120
- item: u,
121
- start: t(u),
122
- end: n(u)
119
+ const s = e.map((d) => ({
120
+ item: d,
121
+ start: t(d),
122
+ end: n(d)
123
123
  }));
124
- this.root = this.buildNode(r);
124
+ this.root = this.buildNode(s);
125
125
  }
126
126
  buildNode(e) {
127
127
  if (e.length === 0)
@@ -129,29 +129,29 @@ class fi {
129
129
  let t = 1 / 0, n = -1 / 0;
130
130
  for (const c of e)
131
131
  c.start < t && (t = c.start), c.end > n && (n = c.end);
132
- const r = (t + n) / 2, u = [], a = [], d = [];
132
+ const s = (t + n) / 2, d = [], a = [], u = [];
133
133
  for (const c of e)
134
- c.end < r ? u.push(c) : c.start > r ? a.push(c) : d.push(c);
134
+ c.end < s ? d.push(c) : c.start > s ? a.push(c) : u.push(c);
135
135
  return {
136
- center: r,
137
- left: this.buildNode(u),
136
+ center: s,
137
+ left: this.buildNode(d),
138
138
  right: this.buildNode(a),
139
- overlapping: d
139
+ overlapping: u
140
140
  };
141
141
  }
142
142
  query(e, t) {
143
143
  const n = [];
144
144
  return this.queryNode(this.root, e, t, n), n;
145
145
  }
146
- queryNode(e, t, n, r) {
146
+ queryNode(e, t, n, s) {
147
147
  if (e !== null) {
148
- for (const u of e.overlapping)
149
- u.start <= n && u.end >= t && r.push(u.item);
150
- t <= e.center && e.left !== null && this.queryNode(e.left, t, n, r), n >= e.center && e.right !== null && this.queryNode(e.right, t, n, r);
148
+ for (const d of e.overlapping)
149
+ d.start <= n && d.end >= t && s.push(d.item);
150
+ t <= e.center && e.left !== null && this.queryNode(e.left, t, n, s), n >= e.center && e.right !== null && this.queryNode(e.right, t, n, s);
151
151
  }
152
152
  }
153
153
  }
154
- class mi {
154
+ class vi {
155
155
  constructor(e, t) {
156
156
  Object.defineProperty(this, "lineHeight", {
157
157
  enumerable: !0,
@@ -177,45 +177,45 @@ class mi {
177
177
  }
178
178
  computeLayout(e, t, n) {
179
179
  this.layoutCache = /* @__PURE__ */ new Map(), this.groupMaxStack = /* @__PURE__ */ new Map();
180
- const r = this.lineHeight * this.itemHeightRatio, u = r * 0.6;
180
+ const s = this.lineHeight * this.itemHeightRatio, d = s * 0.6;
181
181
  if (!t) {
182
- for (const d of e) {
183
- const c = (n == null ? void 0 : n.isParent(d.id)) ?? !1;
184
- this.layoutCache.set(d.id, { stackLevel: 0, itemHeight: c ? u : r }), this.groupMaxStack.set(d.group, 0);
182
+ for (const u of e) {
183
+ const c = (n == null ? void 0 : n.isParent(u.id)) ?? !1;
184
+ this.layoutCache.set(u.id, { stackLevel: 0, itemHeight: c ? d : s }), this.groupMaxStack.set(u.group, 0);
185
185
  }
186
186
  return this.layoutCache;
187
187
  }
188
188
  const a = /* @__PURE__ */ new Map();
189
- for (const d of e) {
190
- let c = a.get(d.group);
191
- c || (c = [], a.set(d.group, c)), c.push(d);
189
+ for (const u of e) {
190
+ let c = a.get(u.group);
191
+ c || (c = [], a.set(u.group, c)), c.push(u);
192
192
  }
193
- for (const [d, c] of a)
194
- n ? this.computeHierarchyLayout(c, n, r, u, d) : this.computeFlatLayout(c, r, d);
193
+ for (const [u, c] of a)
194
+ n ? this.computeHierarchyLayout(c, n, s, d, u) : this.computeFlatLayout(c, s, u);
195
195
  return this.layoutCache;
196
196
  }
197
197
  computeFlatLayout(e, t, n) {
198
- e.sort((a, d) => {
199
- const c = a.start_time - d.start_time;
200
- return c !== 0 ? c : d.end_time - d.start_time - (a.end_time - a.start_time);
198
+ e.sort((a, u) => {
199
+ const c = a.start_time - u.start_time;
200
+ return c !== 0 ? c : u.end_time - u.start_time - (a.end_time - a.start_time);
201
201
  });
202
- const r = [];
203
- let u = 0;
202
+ const s = [];
203
+ let d = 0;
204
204
  for (const a of e) {
205
- let d = -1;
206
- for (let c = 0; c < r.length; c++)
207
- if (r[c] <= a.start_time) {
208
- d = c;
205
+ let u = -1;
206
+ for (let c = 0; c < s.length; c++)
207
+ if (s[c] <= a.start_time) {
208
+ u = c;
209
209
  break;
210
210
  }
211
- d === -1 ? (d = r.length, r.push(a.end_time)) : r[d] = a.end_time, d > u && (u = d), this.layoutCache.set(a.id, { stackLevel: d, itemHeight: t });
211
+ u === -1 ? (u = s.length, s.push(a.end_time)) : s[u] = a.end_time, u > d && (d = u), this.layoutCache.set(a.id, { stackLevel: u, itemHeight: t });
212
212
  }
213
- this.groupMaxStack.set(n, u);
213
+ this.groupMaxStack.set(n, d);
214
214
  }
215
- computeHierarchyLayout(e, t, n, r, u) {
216
- const a = [], d = [];
215
+ computeHierarchyLayout(e, t, n, s, d) {
216
+ const a = [], u = [];
217
217
  for (const g of e)
218
- t.isParent(g.id) ? d.push(g) : a.push(g);
218
+ t.isParent(g.id) ? u.push(g) : a.push(g);
219
219
  a.sort((g, b) => {
220
220
  const T = g.start_time - b.start_time;
221
221
  return T !== 0 ? T : b.end_time - b.start_time - (g.end_time - g.start_time);
@@ -231,11 +231,11 @@ class mi {
231
231
  }
232
232
  b === -1 ? (b = c.length, c.push(g.end_time)) : c[b] = g.end_time, b > v && (v = b), this.layoutCache.set(g.id, { stackLevel: b, itemHeight: n });
233
233
  }
234
- d.sort((g, b) => t.getNestingDepth(b.id) - t.getNestingDepth(g.id));
235
- let M = a.length > 0 ? v + 1 : 0;
236
- for (const g of d)
237
- this.layoutCache.set(g.id, { stackLevel: M, itemHeight: r }), M > v && (v = M), M++;
238
- this.groupMaxStack.set(u, v);
234
+ u.sort((g, b) => t.getNestingDepth(b.id) - t.getNestingDepth(g.id));
235
+ let k = a.length > 0 ? v + 1 : 0;
236
+ for (const g of u)
237
+ this.layoutCache.set(g.id, { stackLevel: k, itemHeight: s }), k > v && (v = k), k++;
238
+ this.groupMaxStack.set(d, v);
239
239
  }
240
240
  getLayout(e) {
241
241
  return this.layoutCache.get(e);
@@ -244,7 +244,7 @@ class mi {
244
244
  return ((this.groupMaxStack.get(e) ?? 0) + 1) * this.lineHeight;
245
245
  }
246
246
  }
247
- class gi {
247
+ class bi {
248
248
  constructor() {
249
249
  Object.defineProperty(this, "parentToChildren", {
250
250
  enumerable: !0,
@@ -280,19 +280,19 @@ class gi {
280
280
  }
281
281
  for (const t of this.childToParent.keys()) {
282
282
  const n = /* @__PURE__ */ new Set();
283
- let r = t;
284
- for (; r !== void 0; ) {
285
- if (n.has(r)) {
286
- const u = this.childToParent.get(t);
283
+ let s = t;
284
+ for (; s !== void 0; ) {
285
+ if (n.has(s)) {
286
+ const d = this.childToParent.get(t);
287
287
  this.childToParent.delete(t);
288
- const a = this.parentToChildren.get(u);
288
+ const a = this.parentToChildren.get(d);
289
289
  if (a) {
290
- const d = a.indexOf(t);
291
- d !== -1 && a.splice(d, 1), a.length === 0 && this.parentToChildren.delete(u);
290
+ const u = a.indexOf(t);
291
+ u !== -1 && a.splice(u, 1), a.length === 0 && this.parentToChildren.delete(d);
292
292
  }
293
293
  break;
294
294
  }
295
- n.add(r), r = this.childToParent.get(r);
295
+ n.add(s), s = this.childToParent.get(s);
296
296
  }
297
297
  }
298
298
  }
@@ -309,10 +309,10 @@ class gi {
309
309
  getDescendants(e) {
310
310
  const t = [], n = [...this.getChildren(e)];
311
311
  for (; n.length > 0; ) {
312
- const r = n.pop();
313
- t.push(r);
314
- const u = this.parentToChildren.get(r);
315
- u && n.push(...u);
312
+ const s = n.pop();
313
+ t.push(s);
314
+ const d = this.parentToChildren.get(s);
315
+ d && n.push(...d);
316
316
  }
317
317
  return t;
318
318
  }
@@ -320,31 +320,31 @@ class gi {
320
320
  const t = this.itemMap.get(e);
321
321
  if (!t)
322
322
  return { start: 0, end: 0 };
323
- let n = t.start_time, r = t.end_time;
324
- const u = this.getDescendants(e);
325
- for (const a of u) {
326
- const d = this.itemMap.get(a);
327
- d && (d.start_time < n && (n = d.start_time), d.end_time > r && (r = d.end_time));
323
+ let n = t.start_time, s = t.end_time;
324
+ const d = this.getDescendants(e);
325
+ for (const a of d) {
326
+ const u = this.itemMap.get(a);
327
+ u && (u.start_time < n && (n = u.start_time), u.end_time > s && (s = u.end_time));
328
328
  }
329
- return { start: n, end: r };
329
+ return { start: n, end: s };
330
330
  }
331
331
  getNestingDepth(e) {
332
332
  const t = this.depthCache.get(e);
333
333
  if (t !== void 0)
334
334
  return t;
335
- let n = 0, r = this.childToParent.get(e);
336
- for (; r !== void 0; )
337
- n++, r = this.childToParent.get(r);
335
+ let n = 0, s = this.childToParent.get(e);
336
+ for (; s !== void 0; )
337
+ n++, s = this.childToParent.get(s);
338
338
  return this.depthCache.set(e, n), n;
339
339
  }
340
340
  getMoveDelta(e, t) {
341
341
  const n = this.itemMap.get(e);
342
342
  if (!n)
343
343
  return [];
344
- const r = t - n.start_time;
344
+ const s = t - n.start_time;
345
345
  return this.getDescendants(e).map((a) => {
346
- const d = this.itemMap.get(a);
347
- return { itemId: a, newStart: d.start_time + r };
346
+ const u = this.itemMap.get(a);
347
+ return { itemId: a, newStart: u.start_time + s };
348
348
  });
349
349
  }
350
350
  getResizeConstraint(e, t) {
@@ -352,78 +352,78 @@ class gi {
352
352
  if (n.length === 0)
353
353
  return t === "left" ? { min: -1 / 0, max: 1 / 0 } : { min: -1 / 0, max: 1 / 0 };
354
354
  if (t === "left") {
355
- let r = 1 / 0;
356
- for (const u of n) {
357
- const a = this.itemMap.get(u);
358
- a && a.start_time < r && (r = a.start_time);
355
+ let s = 1 / 0;
356
+ for (const d of n) {
357
+ const a = this.itemMap.get(d);
358
+ a && a.start_time < s && (s = a.start_time);
359
359
  }
360
- return { min: -1 / 0, max: r };
360
+ return { min: -1 / 0, max: s };
361
361
  } else {
362
- let r = -1 / 0;
363
- for (const u of n) {
364
- const a = this.itemMap.get(u);
365
- a && a.end_time > r && (r = a.end_time);
362
+ let s = -1 / 0;
363
+ for (const d of n) {
364
+ const a = this.itemMap.get(d);
365
+ a && a.end_time > s && (s = a.end_time);
366
366
  }
367
- return { min: r, max: 1 / 0 };
367
+ return { min: s, max: 1 / 0 };
368
368
  }
369
369
  }
370
370
  }
371
- function pi(i, e, t, n, r, u) {
372
- const { x: a, y: d, width: c, height: v } = t, M = u.primary;
373
- i.globalAlpha = 0.15, i.fillStyle = M, i.fillRect(a, d, c, v), i.globalAlpha = 1, i.strokeStyle = M, i.lineWidth = 1.5, i.strokeRect(a, d, c, v);
374
- const g = Math.min(v * 0.5, 6), b = d + v / 2;
375
- i.fillStyle = M, i.beginPath(), i.moveTo(a, b), i.lineTo(a + g, b - g), i.lineTo(a + g * 2, b), i.lineTo(a + g, b + g), i.closePath(), i.fill(), i.beginPath(), i.moveTo(a + c, b), i.lineTo(a + c - g, b - g), i.lineTo(a + c - g * 2, b), i.lineTo(a + c - g, b + g), i.closePath(), i.fill();
371
+ function yi(i, e, t, n, s, d) {
372
+ const { x: a, y: u, width: c, height: v } = t, k = d.primary;
373
+ i.globalAlpha = 0.15, i.fillStyle = k, i.fillRect(a, u, c, v), i.globalAlpha = 1, i.strokeStyle = k, i.lineWidth = 1.5, i.strokeRect(a, u, c, v);
374
+ const g = Math.min(v * 0.5, 6), b = u + v / 2;
375
+ i.fillStyle = k, i.beginPath(), i.moveTo(a, b), i.lineTo(a + g, b - g), i.lineTo(a + g * 2, b), i.lineTo(a + g, b + g), i.closePath(), i.fill(), i.beginPath(), i.moveTo(a + c, b), i.lineTo(a + c - g, b - g), i.lineTo(a + c - g * 2, b), i.lineTo(a + c - g, b + g), i.closePath(), i.fill();
376
376
  const T = e.title;
377
377
  if (T && c > 30) {
378
- i.fillStyle = u.item.text, i.font = '500 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif', i.textBaseline = "middle";
379
- const C = i.measureText(T).width, I = c - g * 4 - 4;
380
- if (I > 20) {
381
- const W = C > I ? T.slice(0, Math.floor(T.length * I / C)) + "..." : T;
382
- i.fillText(W, a + c / 2 - Math.min(C, I) / 2, b);
378
+ i.fillStyle = d.item.text, i.font = '500 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif', i.textBaseline = "middle";
379
+ const C = i.measureText(T).width, R = c - g * 4 - 4;
380
+ if (R > 20) {
381
+ const O = C > R ? T.slice(0, Math.floor(T.length * R / C)) + "..." : T;
382
+ i.fillText(O, a + c / 2 - Math.min(C, R) / 2, b);
383
383
  }
384
384
  }
385
- n.selected && (i.strokeStyle = u.item.selectedRing, i.lineWidth = 2, i.strokeRect(a - 1, d - 1, c + 2, v + 2));
385
+ n.selected && (i.strokeStyle = d.item.selectedRing, i.lineWidth = 2, i.strokeRect(a - 1, u - 1, c + 2, v + 2));
386
386
  }
387
- function Le(i, e, t, n, r, u) {
388
- const a = t.xToTime(i), d = /* @__PURE__ */ new Map();
389
- for (let g = 0; g < u.length; g++)
390
- d.set(u[g].id, g);
387
+ function je(i, e, t, n, s, d) {
388
+ const a = t.xToTime(i), u = /* @__PURE__ */ new Map();
389
+ for (let g = 0; g < d.length; g++)
390
+ u.set(d[g].id, g);
391
391
  const c = n.query(a, a);
392
- let v = null, M = -1 / 0;
392
+ let v = null, k = -1 / 0;
393
393
  for (const g of c) {
394
- const b = d.get(g.group);
394
+ const b = u.get(g.group);
395
395
  if (b === void 0)
396
396
  continue;
397
- const T = r.getLayout(g.id);
397
+ const T = s.getLayout(g.id);
398
398
  if (!T)
399
399
  continue;
400
- const C = t.timeToX(g.start_time), I = t.timeToX(g.end_time) - C;
401
- if (i < C || i > C + I)
400
+ const C = t.timeToX(g.start_time), R = t.timeToX(g.end_time) - C;
401
+ if (i < C || i > C + R)
402
402
  continue;
403
- const z = t.groupIndexToY(b) + T.stackLevel * t.lineHeight + (t.lineHeight - T.itemHeight) / 2, S = T.itemHeight;
404
- e < z || e > z + S || z > M && (M = z, v = g);
403
+ const $ = t.groupIndexToY(b) + T.stackLevel * t.lineHeight + (t.lineHeight - T.itemHeight) / 2, S = T.itemHeight;
404
+ e < $ || e > $ + S || $ > k && (k = $, v = g);
405
405
  }
406
406
  return v;
407
407
  }
408
- function at(i, e, t) {
408
+ function dt(i, e, t) {
409
409
  const n = e.yToGroupIndex(i);
410
410
  return t[n] ?? null;
411
411
  }
412
- function Dt(i, e, t, n = 6) {
413
- const r = t.timeToX(e.start_time), u = t.timeToX(e.end_time);
414
- return i - r <= n ? "left" : u - i <= n ? "right" : "body";
412
+ function Ft(i, e, t, n = 6) {
413
+ const s = t.timeToX(e.start_time), d = t.timeToX(e.end_time);
414
+ return i - s <= n ? "left" : d - i <= n ? "right" : "body";
415
415
  }
416
- function ct(i, e, t) {
417
- const n = window.devicePixelRatio || 1, r = Math.round(e * n), u = Math.round(t * n);
418
- (i.width !== r || i.height !== u) && (i.width = r, i.height = u, i.style.width = `${e}px`, i.style.height = `${t}px`);
416
+ function ht(i, e, t) {
417
+ const n = window.devicePixelRatio || 1, s = Math.round(e * n), d = Math.round(t * n);
418
+ (i.width !== s || i.height !== d) && (i.width = s, i.height = d, i.style.width = `${e}px`, i.style.height = `${t}px`);
419
419
  const a = i.getContext("2d");
420
420
  return a.setTransform(n, 0, 0, n, 0, 0), a;
421
421
  }
422
- function dt(i, e) {
422
+ function ft(i, e) {
423
423
  const t = window.devicePixelRatio || 1;
424
424
  i.clearRect(0, 0, e.width / t, e.height / t);
425
425
  }
426
- class vi {
426
+ class Ti {
427
427
  constructor(e) {
428
428
  Object.defineProperty(this, "dirty", {
429
429
  enumerable: !0,
@@ -459,101 +459,101 @@ class vi {
459
459
  }));
460
460
  }
461
461
  }
462
- class bi {
463
- draw(e, t, n, r, u, a, d) {
462
+ class Si {
463
+ draw(e, t, n, s, d, a, u) {
464
464
  const { firstVisible: c, lastVisible: v } = t.getVisibleGroupRange();
465
465
  for (let S = c; S <= v; S++) {
466
- const _ = t.groupIndexToY(S), B = n[S];
466
+ const F = t.groupIndexToY(S), B = n[S];
467
467
  if (!B)
468
468
  continue;
469
- let Y;
470
- const G = a == null ? void 0 : a(B);
471
- G != null && G.backgroundColor ? Y = G.backgroundColor : Y = S % 2 === 0 ? "#FFFFFF" : r.grid.rowAlt, e.fillStyle = Y, e.fillRect(0, _, t.canvasWidth, t.lineHeight), e.strokeStyle = (G == null ? void 0 : G.borderBottomColor) ?? r.grid.line, e.lineWidth = 0.5, e.beginPath(), e.moveTo(0, _ + t.lineHeight), e.lineTo(t.canvasWidth, _ + t.lineHeight), e.stroke();
469
+ let A;
470
+ const Z = a == null ? void 0 : a(B);
471
+ Z != null && Z.backgroundColor ? A = Z.backgroundColor : A = S % 2 === 0 ? "#FFFFFF" : s.grid.rowAlt, e.fillStyle = A, e.fillRect(0, F, t.canvasWidth, t.lineHeight), e.strokeStyle = (Z == null ? void 0 : Z.borderBottomColor) ?? s.grid.line, e.lineWidth = 0.5, e.beginPath(), e.moveTo(0, F + t.lineHeight), e.lineTo(t.canvasWidth, F + t.lineHeight), e.stroke();
472
472
  }
473
- if (d && d.length > 0)
474
- for (const S of d) {
475
- const _ = t.timeToX(S.start), B = t.timeToX(S.end);
476
- if (B < 0 || _ > t.canvasWidth)
473
+ if (u && u.length > 0)
474
+ for (const S of u) {
475
+ const F = t.timeToX(S.start), B = t.timeToX(S.end);
476
+ if (B < 0 || F > t.canvasWidth)
477
477
  continue;
478
- const Y = Math.max(0, _), G = Math.min(t.canvasWidth, B) - Y, ne = S.opacity ?? 0.12, P = parseInt(S.color.slice(1, 3), 16), L = parseInt(S.color.slice(3, 5), 16), Z = parseInt(S.color.slice(5, 7), 16);
479
- e.fillStyle = `rgb(${Math.round(P * ne + 255 * (1 - ne))},${Math.round(L * ne + 255 * (1 - ne))},${Math.round(Z * ne + 255 * (1 - ne))})`, e.fillRect(Y, 0, G, t.canvasHeight);
478
+ const A = Math.max(0, F), Z = Math.min(t.canvasWidth, B) - A, ne = S.opacity ?? 0.12, P = parseInt(S.color.slice(1, 3), 16), L = parseInt(S.color.slice(3, 5), 16), q = parseInt(S.color.slice(5, 7), 16);
479
+ e.fillStyle = `rgb(${Math.round(P * ne + 255 * (1 - ne))},${Math.round(L * ne + 255 * (1 - ne))},${Math.round(q * ne + 255 * (1 - ne))})`, e.fillRect(A, 0, Z, t.canvasHeight);
480
480
  }
481
- const M = t.visibleTimeStart, g = t.visibleTimeEnd, C = 864e5 / (g - M) * t.canvasWidth;
482
- let I = "day";
483
- C < 2 ? I = "month" : C < 8 && (I = "week");
481
+ const k = t.visibleTimeStart, g = t.visibleTimeEnd, C = 864e5 / (g - k) * t.canvasWidth;
482
+ let R = "day";
483
+ C < 2 ? R = "month" : C < 8 && (R = "week");
484
484
  {
485
- let S = pe(M).startOf("day");
486
- const _ = pe(g).endOf("day");
487
- let B = null, Y = 1, G = 0;
485
+ let S = pe(k).startOf("day");
486
+ const F = pe(g).endOf("day");
487
+ let B = null, A = 1, Z = 0;
488
488
  const ne = [], P = (L) => {
489
- B !== null && (e.fillStyle = B, Y !== 1 && (e.globalAlpha = Y), e.fillRect(G, 0, L - G, t.canvasHeight), Y !== 1 && (e.globalAlpha = 1), B = null, Y = 1);
489
+ B !== null && (e.fillStyle = B, A !== 1 && (e.globalAlpha = A), e.fillRect(Z, 0, L - Z, t.canvasHeight), A !== 1 && (e.globalAlpha = 1), B = null, A = 1);
490
490
  };
491
- for (; S.isBefore(_); ) {
492
- const L = t.timeToX(S.valueOf()), Z = S.toDate(), K = u == null ? void 0 : u(Z);
493
- let te = null, de = 1;
494
- if (K != null && K.backgroundColor)
495
- te = K.backgroundColor, de = K.opacity ?? 1;
491
+ for (; S.isBefore(F); ) {
492
+ const L = t.timeToX(S.valueOf()), q = S.toDate(), J = d == null ? void 0 : d(q);
493
+ let te = null, ue = 1;
494
+ if (J != null && J.backgroundColor)
495
+ te = J.backgroundColor, ue = J.opacity ?? 1;
496
496
  else {
497
- const ve = S.day();
498
- (ve === 0 || ve === 6) && (te = r.grid.weekend);
497
+ const be = S.day();
498
+ (be === 0 || be === 6) && (te = s.grid.weekend);
499
499
  }
500
- K != null && K.borderColor && ne.push({ x: L, color: K.borderColor }), te === B && de === Y || (P(L), te !== null && (B = te, Y = de, G = L)), S = S.add(1, "day");
500
+ J != null && J.borderColor && ne.push({ x: L, color: J.borderColor }), te === B && ue === A || (P(L), te !== null && (B = te, A = ue, Z = L)), S = S.add(1, "day");
501
501
  }
502
502
  B !== null && P(t.timeToX(S.valueOf()));
503
503
  for (const L of ne)
504
504
  e.strokeStyle = L.color, e.lineWidth = 0.5, e.beginPath(), e.moveTo(L.x, 0), e.lineTo(L.x, t.canvasHeight), e.stroke();
505
505
  }
506
- let W = pe(M).startOf(I);
507
- const z = pe(g).add(1, I);
508
- for (e.strokeStyle = r.grid.line, e.lineWidth = 0.5, e.beginPath(); W.isBefore(z); ) {
509
- const S = t.timeToX(W.valueOf());
510
- e.moveTo(S, 0), e.lineTo(S, t.canvasHeight), W = W.add(1, I);
506
+ let O = pe(k).startOf(R);
507
+ const $ = pe(g).add(1, R);
508
+ for (e.strokeStyle = s.grid.line, e.lineWidth = 0.5, e.beginPath(); O.isBefore($); ) {
509
+ const S = t.timeToX(O.valueOf());
510
+ e.moveTo(S, 0), e.lineTo(S, t.canvasHeight), O = O.add(1, R);
511
511
  }
512
- if (e.stroke(), d && d.length > 0)
513
- for (const S of d) {
514
- const _ = t.timeToX(S.start), B = t.timeToX(S.end);
515
- if (!(B < 0 || _ > t.canvasWidth) && (e.strokeStyle = S.color, e.globalAlpha = 0.4, e.lineWidth = 1, e.beginPath(), _ >= 0 && _ <= t.canvasWidth && (e.moveTo(_, 0), e.lineTo(_, t.canvasHeight)), B >= 0 && B <= t.canvasWidth && (e.moveTo(B, 0), e.lineTo(B, t.canvasHeight)), e.stroke(), e.globalAlpha = 1, S.label)) {
516
- const Y = Math.max(0, _), G = Math.min(t.canvasWidth, B) - Y;
512
+ if (e.stroke(), u && u.length > 0)
513
+ for (const S of u) {
514
+ const F = t.timeToX(S.start), B = t.timeToX(S.end);
515
+ if (!(B < 0 || F > t.canvasWidth) && (e.strokeStyle = S.color, e.globalAlpha = 0.4, e.lineWidth = 1, e.beginPath(), F >= 0 && F <= t.canvasWidth && (e.moveTo(F, 0), e.lineTo(F, t.canvasHeight)), B >= 0 && B <= t.canvasWidth && (e.moveTo(B, 0), e.lineTo(B, t.canvasHeight)), e.stroke(), e.globalAlpha = 1, S.label)) {
516
+ const A = Math.max(0, F), Z = Math.min(t.canvasWidth, B) - A;
517
517
  e.save(), e.font = '600 10px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif';
518
- const ne = e.measureText(S.label).width, P = 6, L = ne + P * 2, Z = 18, K = Y + (G - L) / 2, te = 4;
519
- e.fillStyle = S.color, e.globalAlpha = 0.9, e.beginPath(), e.roundRect(K, te, L, Z, 3), e.fill(), e.globalAlpha = 1, e.fillStyle = "#FFFFFF", e.textBaseline = "middle", e.fillText(S.label, K + P, te + Z / 2), e.restore();
518
+ const ne = e.measureText(S.label).width, P = 6, L = ne + P * 2, q = 18, J = A + (Z - L) / 2, te = 4;
519
+ e.fillStyle = S.color, e.globalAlpha = 0.9, e.beginPath(), e.roundRect(J, te, L, q, 3), e.fill(), e.globalAlpha = 1, e.fillStyle = "#FFFFFF", e.textBaseline = "middle", e.fillText(S.label, J + P, te + q / 2), e.restore();
520
520
  }
521
521
  }
522
522
  }
523
523
  }
524
- const Ft = '500 12px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif';
525
- function Yt(i, e) {
524
+ const Ot = '500 12px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif';
525
+ function xt(i, e) {
526
526
  return {
527
527
  /**
528
528
  * Draws a filled rounded rectangle.
529
529
  * Default corner radius is 3px.
530
530
  */
531
- roundRect(t, n, r, u, a = 3) {
532
- i.beginPath(), i.roundRect(t, n, r, u, a), i.fill();
531
+ roundRect(t, n, s, d, a = 3) {
532
+ i.beginPath(), i.roundRect(t, n, s, d, a), i.fill();
533
533
  },
534
534
  /**
535
535
  * Draws text at (x, y) using the standard item font.
536
536
  * If maxWidth is provided and the text is too wide, binary-search truncates it
537
537
  * and appends '...' so it fits within maxWidth.
538
538
  */
539
- fillText(t, n, r, u) {
540
- if (i.font = Ft, u !== void 0 && i.measureText(t).width > u) {
541
- let a = 0, d = t.length;
542
- for (; a < d; ) {
543
- const c = Math.ceil((a + d) / 2), v = t.slice(0, c) + "...";
544
- i.measureText(v).width <= u ? a = c : d = c - 1;
539
+ fillText(t, n, s, d) {
540
+ if (i.font = Ot, d !== void 0 && i.measureText(t).width > d) {
541
+ let a = 0, u = t.length;
542
+ for (; a < u; ) {
543
+ const c = Math.ceil((a + u) / 2), v = t.slice(0, c) + "...";
544
+ i.measureText(v).width <= d ? a = c : u = c - 1;
545
545
  }
546
- i.fillText(t.slice(0, a) + "...", n, r);
546
+ i.fillText(t.slice(0, a) + "...", n, s);
547
547
  } else
548
- i.fillText(t, n, r);
548
+ i.fillText(t, n, s);
549
549
  },
550
550
  /**
551
551
  * Creates a 50/50 linear gradient from color1 (0%–50%) to color2 (50%–100%)
552
552
  * spanning the given x position and width.
553
553
  */
554
- gradient(t, n, r, u) {
554
+ gradient(t, n, s, d) {
555
555
  const a = i.createLinearGradient(t, 0, t + n, 0);
556
- return a.addColorStop(0, r), a.addColorStop(0.5, r), a.addColorStop(0.5, u), a.addColorStop(1, u), a;
556
+ return a.addColorStop(0, s), a.addColorStop(0.5, s), a.addColorStop(0.5, d), a.addColorStop(1, d), a;
557
557
  },
558
558
  /**
559
559
  * Draws a vertical colored bar on the left edge of the item bounds.
@@ -567,124 +567,124 @@ function Yt(i, e) {
567
567
  * Supported types: 'check', 'danger-red', 'danger-yellow'.
568
568
  * Default size is 14px.
569
569
  */
570
- icon(t, n, r, u = 14) {
570
+ icon(t, n, s, d = 14) {
571
571
  i.save();
572
- const a = u / 2;
572
+ const a = d / 2;
573
573
  if (t === "check") {
574
- i.fillStyle = "#31c48d", i.beginPath(), i.arc(n + a, r + a, a, 0, Math.PI * 2), i.fill(), i.strokeStyle = "#ffffff", i.lineWidth = u * 0.12, i.beginPath();
575
- const d = n + a, c = r + a;
576
- i.moveTo(d - a * 0.45, c), i.lineTo(d - a * 0.1, c + a * 0.42), i.lineTo(d + a * 0.45, c - a * 0.35), i.stroke();
574
+ i.fillStyle = "#31c48d", i.beginPath(), i.arc(n + a, s + a, a, 0, Math.PI * 2), i.fill(), i.strokeStyle = "#ffffff", i.lineWidth = d * 0.12, i.beginPath();
575
+ const u = n + a, c = s + a;
576
+ i.moveTo(u - a * 0.45, c), i.lineTo(u - a * 0.1, c + a * 0.42), i.lineTo(u + a * 0.45, c - a * 0.35), i.stroke();
577
577
  } else if (t === "danger-red" || t === "danger-yellow") {
578
- const d = t === "danger-red" ? "#EF5350" : "#FBBF24";
579
- i.fillStyle = d, i.beginPath(), i.moveTo(n + a, r), i.lineTo(n + u, r + u), i.lineTo(n, r + u), i.closePath(), i.fill(), i.fillStyle = "#ffffff";
580
- const c = u * 0.12, v = n + a - c / 2;
581
- i.fillRect(v, r + u * 0.35, c, u * 0.35), i.beginPath(), i.arc(n + a, r + u * 0.82, c * 0.7, 0, Math.PI * 2), i.fill();
578
+ const u = t === "danger-red" ? "#EF5350" : "#FBBF24";
579
+ i.fillStyle = u, i.beginPath(), i.moveTo(n + a, s), i.lineTo(n + d, s + d), i.lineTo(n, s + d), i.closePath(), i.fill(), i.fillStyle = "#ffffff";
580
+ const c = d * 0.12, v = n + a - c / 2;
581
+ i.fillRect(v, s + d * 0.35, c, d * 0.35), i.beginPath(), i.arc(n + a, s + d * 0.82, c * 0.7, 0, Math.PI * 2), i.fill();
582
582
  }
583
583
  i.restore();
584
584
  },
585
585
  /**
586
586
  * Draws a pill-shaped badge with centered white text on a colored background.
587
587
  */
588
- badge(t, n, r, u) {
589
- i.save(), i.font = Ft;
590
- const d = i.measureText(t).width, c = 8, M = 12 + 3 * 2, g = d + c * 2, b = M / 2;
591
- i.fillStyle = u, i.beginPath(), i.roundRect(n, r, g, M, b), i.fill(), i.fillStyle = "#ffffff", i.textAlign = "center", i.textBaseline = "middle", i.fillText(t, n + g / 2, r + M / 2), i.restore();
588
+ badge(t, n, s, d) {
589
+ i.save(), i.font = Ot;
590
+ const u = i.measureText(t).width, c = 8, k = 12 + 3 * 2, g = u + c * 2, b = k / 2;
591
+ i.fillStyle = d, i.beginPath(), i.roundRect(n, s, g, k, b), i.fill(), i.fillStyle = "#ffffff", i.textAlign = "center", i.textBaseline = "middle", i.fillText(t, n + g / 2, s + k / 2), i.restore();
592
592
  }
593
593
  };
594
594
  }
595
- class yi {
596
- draw(e, t, n, r, u, a, d, c, v, M, g, b, T, C) {
597
- const I = (t.visibleTimeEnd - t.visibleTimeStart) * 0.1, W = t.visibleTimeStart - I, z = t.visibleTimeEnd + I, S = u.query(W, z), _ = /* @__PURE__ */ new Map();
595
+ class Mi {
596
+ draw(e, t, n, s, d, a, u, c, v, k, g, b, T, C) {
597
+ const R = (t.visibleTimeEnd - t.visibleTimeStart) * 0.1, O = t.visibleTimeStart - R, $ = t.visibleTimeEnd + R, S = d.query(O, $), F = /* @__PURE__ */ new Map();
598
598
  for (let P = 0; P < n.length; P++)
599
- _.set(n[P].id, P);
600
- const B = new Set(M), Y = /* @__PURE__ */ new Map(), G = -t.lineHeight, ne = t.canvasHeight + t.lineHeight;
599
+ F.set(n[P].id, P);
600
+ const B = new Set(k), A = /* @__PURE__ */ new Map(), Z = -t.lineHeight, ne = t.canvasHeight + t.lineHeight;
601
601
  for (const P of S) {
602
- const L = _.get(P.group);
602
+ const L = F.get(P.group);
603
603
  if (L === void 0)
604
604
  continue;
605
- const Z = a.getLayout(P.id);
606
- if (!Z)
605
+ const q = a.getLayout(P.id);
606
+ if (!q)
607
607
  continue;
608
- const te = t.groupIndexToY(L) + Z.stackLevel * t.lineHeight + (t.lineHeight - Z.itemHeight) / 2, de = Z.itemHeight;
609
- if (te + de < G || te > ne)
608
+ const te = t.groupIndexToY(L) + q.stackLevel * t.lineHeight + (t.lineHeight - q.itemHeight) / 2, ue = q.itemHeight;
609
+ if (te + ue < Z || te > ne)
610
610
  continue;
611
- const ve = t.timeToX(P.start_time), He = t.timeToX(P.end_time) - ve, be = { x: ve, y: te, width: He, height: de };
612
- Y.set(P.id, be);
613
- const Ie = {
611
+ const be = t.timeToX(P.start_time), Re = t.timeToX(P.end_time) - be, ye = { x: be, y: te, width: Re, height: ue };
612
+ A.set(P.id, ye);
613
+ const Pe = {
614
614
  selected: B.has(P.id),
615
615
  hovered: g === P.id,
616
616
  dragging: !1,
617
617
  filtered: P.filtered !== !1
618
618
  };
619
619
  e.save();
620
- const Ye = Yt(e, be);
621
- let Ee;
622
- T && (C != null && C.isParent(P.id)) ? Ee = T : c && (P.type === "control_area_group" || P.type === "construction_train") ? Ee = c : Ee = d, Ee(e, P, be, Ie, Ye), e.restore();
620
+ const xe = xt(e, ye);
621
+ let Ce;
622
+ T && (C != null && C.isParent(P.id)) ? Ce = T : c && (P.type === "control_area_group" || P.type === "construction_train") ? Ce = c : Ce = u, Ce(e, P, ye, Pe, xe), e.restore();
623
623
  }
624
624
  if (b && b.length > 0) {
625
625
  const P = /* @__PURE__ */ new Set();
626
626
  for (const L of b)
627
- Y.has(L.fromItemId) || P.add(L.fromItemId), Y.has(L.toItemId) || P.add(L.toItemId);
627
+ A.has(L.fromItemId) || P.add(L.fromItemId), A.has(L.toItemId) || P.add(L.toItemId);
628
628
  if (P.size > 0) {
629
629
  const L = /* @__PURE__ */ new Map();
630
- for (const Z of r)
631
- P.has(Z.id) && L.set(Z.id, Z);
632
- for (const [Z, K] of L) {
633
- const te = _.get(K.group);
630
+ for (const q of s)
631
+ P.has(q.id) && L.set(q.id, q);
632
+ for (const [q, J] of L) {
633
+ const te = F.get(J.group);
634
634
  if (te === void 0)
635
635
  continue;
636
- const de = a.getLayout(Z);
637
- if (!de)
636
+ const ue = a.getLayout(q);
637
+ if (!ue)
638
638
  continue;
639
- const He = t.groupIndexToY(te) + de.stackLevel * t.lineHeight + (t.lineHeight - de.itemHeight) / 2, be = t.timeToX(K.start_time), Ie = t.timeToX(K.end_time) - be;
640
- Y.set(Z, { x: be, y: He, width: Ie, height: de.itemHeight });
639
+ const Re = t.groupIndexToY(te) + ue.stackLevel * t.lineHeight + (t.lineHeight - ue.itemHeight) / 2, ye = t.timeToX(J.start_time), Pe = t.timeToX(J.end_time) - ye;
640
+ A.set(q, { x: ye, y: Re, width: Pe, height: ue.itemHeight });
641
641
  }
642
642
  }
643
- this.drawDependencies(e, b, Y, g, v);
643
+ this.drawDependencies(e, b, A, g, v);
644
644
  }
645
645
  }
646
- drawDependencies(e, t, n, r, u) {
646
+ drawDependencies(e, t, n, s, d) {
647
647
  for (const a of t) {
648
- const d = n.get(a.fromItemId), c = n.get(a.toItemId);
649
- if (!d || !c)
648
+ const u = n.get(a.fromItemId), c = n.get(a.toItemId);
649
+ if (!u || !c)
650
650
  continue;
651
- const v = r === a.fromItemId || r === a.toItemId;
652
- e.strokeStyle = v ? u.primary : a.color ?? "#94A3B8", e.lineWidth = v ? 2 : 1.5, e.setLineDash([]);
653
- const M = d.x + d.width, g = d.y + d.height / 2, b = c.x, T = c.y + c.height / 2, C = Math.abs(b - M), I = Math.max(C * 0.4, 30);
654
- e.beginPath(), e.moveTo(M, g), e.bezierCurveTo(M + I, g, b - I, T, b, T), e.stroke();
655
- const W = 6;
656
- e.fillStyle = e.strokeStyle, e.beginPath(), e.moveTo(b, T), e.lineTo(b - W, T - W / 2), e.lineTo(b - W, T + W / 2), e.closePath(), e.fill();
651
+ const v = s === a.fromItemId || s === a.toItemId;
652
+ e.strokeStyle = v ? d.primary : a.color ?? "#94A3B8", e.lineWidth = v ? 2 : 1.5, e.setLineDash([]);
653
+ const k = u.x + u.width, g = u.y + u.height / 2, b = c.x, T = c.y + c.height / 2, C = Math.abs(b - k), R = Math.max(C * 0.4, 30);
654
+ e.beginPath(), e.moveTo(k, g), e.bezierCurveTo(k + R, g, b - R, T, b, T), e.stroke();
655
+ const O = 6;
656
+ e.fillStyle = e.strokeStyle, e.beginPath(), e.moveTo(b, T), e.lineTo(b - O, T - O / 2), e.lineTo(b - O, T + O / 2), e.closePath(), e.fill();
657
657
  }
658
658
  }
659
659
  }
660
- class Ti {
661
- draw(e, t, n, r) {
662
- const { cursorX: u, snapX: a, markers: d, interaction: c } = r;
663
- if (d)
664
- for (const v of d) {
665
- const M = t.timeToX(v.date);
666
- if (e.fillStyle = v.color, e.fillRect(M - v.width / 2, 0, v.width, t.canvasHeight), v.label) {
660
+ class ki {
661
+ draw(e, t, n, s) {
662
+ const { cursorX: d, snapX: a, markers: u, interaction: c } = s;
663
+ if (u)
664
+ for (const v of u) {
665
+ const k = t.timeToX(v.date);
666
+ if (e.fillStyle = v.color, e.fillRect(k - v.width / 2, 0, v.width, t.canvasHeight), v.label) {
667
667
  e.save(), e.font = '500 10px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif';
668
- const g = e.measureText(v.label).width, b = 8, T = 200, C = Math.min(g + b * 2, T), I = 20, W = M - C / 2, z = 4;
669
- e.fillStyle = v.color, e.beginPath(), e.roundRect(W, z, C, I, 3), e.fill(), e.fillStyle = "#FFFFFF", e.textBaseline = "middle";
670
- const S = T - b * 2, _ = g > S ? v.label.slice(0, Math.floor(v.label.length * S / g)) + "…" : v.label;
671
- e.fillText(_, W + b, z + I / 2), e.restore();
668
+ const g = e.measureText(v.label).width, b = 8, T = 200, C = Math.min(g + b * 2, T), R = 20, O = k - C / 2, $ = 4;
669
+ e.fillStyle = v.color, e.beginPath(), e.roundRect(O, $, C, R, 3), e.fill(), e.fillStyle = "#FFFFFF", e.textBaseline = "middle";
670
+ const S = T - b * 2, F = g > S ? v.label.slice(0, Math.floor(v.label.length * S / g)) + "…" : v.label;
671
+ e.fillText(F, O + b, $ + R / 2), e.restore();
672
672
  }
673
673
  }
674
- if (u != null && (e.strokeStyle = n.marker.cursor, e.lineWidth = 1, e.beginPath(), e.moveTo(u, 0), e.lineTo(u, t.canvasHeight), e.stroke()), a != null && (e.strokeStyle = n.primary, e.lineWidth = 1, e.setLineDash([4, 4]), e.beginPath(), e.moveTo(a, 0), e.lineTo(a, t.canvasHeight), e.stroke(), e.setLineDash([])), c) {
674
+ if (d != null && (e.strokeStyle = n.marker.cursor, e.lineWidth = 1, e.beginPath(), e.moveTo(d, 0), e.lineTo(d, t.canvasHeight), e.stroke()), a != null && (e.strokeStyle = n.primary, e.lineWidth = 1, e.setLineDash([4, 4]), e.beginPath(), e.moveTo(a, 0), e.lineTo(a, t.canvasHeight), e.stroke(), e.setLineDash([])), c) {
675
675
  c.groupChanged && c.targetGroupY !== void 0 && (e.fillStyle = "rgba(59, 130, 246, 0.08)", e.fillRect(0, c.targetGroupY, t.canvasWidth, t.lineHeight)), e.save(), e.globalAlpha = 0.5;
676
- const v = Yt(e, c.bounds);
676
+ const v = xt(e, c.bounds);
677
677
  c.renderer(e, c.item, c.bounds, { selected: !1, hovered: !1, dragging: !0, filtered: !0 }, v), e.restore();
678
678
  }
679
679
  }
680
680
  }
681
- const _t = 120;
682
- function Si(i) {
681
+ const Wt = 120;
682
+ function wi(i) {
683
683
  let e = i.deltaY || i.deltaX;
684
- return i.deltaMode === 1 ? e *= 15 : i.deltaMode === 2 && (e *= 800), Math.max(-_t, Math.min(_t, e));
684
+ return i.deltaMode === 1 ? e *= 15 : i.deltaMode === 2 && (e *= 800), Math.max(-Wt, Math.min(Wt, e));
685
685
  }
686
- class ki {
687
- constructor(e, t, n, r, u) {
686
+ class Ei {
687
+ constructor(e, t, n, s, d) {
688
688
  Object.defineProperty(this, "onZoom", {
689
689
  enumerable: !0,
690
690
  configurable: !0,
@@ -710,21 +710,21 @@ class ki {
710
710
  configurable: !0,
711
711
  writable: !0,
712
712
  value: void 0
713
- }), this.onZoom = e, this.visibleTimeStart = t, this.visibleTimeEnd = n, this.minZoom = r, this.maxZoom = u;
713
+ }), this.onZoom = e, this.visibleTimeStart = t, this.visibleTimeEnd = n, this.minZoom = s, this.maxZoom = d;
714
714
  }
715
715
  updateBounds(e, t) {
716
716
  this.visibleTimeStart = e, this.visibleTimeEnd = t;
717
717
  }
718
718
  handleWheelZoom(e, t) {
719
- const n = Si(e), r = e.ctrlKey ? 10 : e.metaKey ? 3 : 1, u = n > 0 ? 1 + r * n / 500 : 1 / (1 + r * -n / 500), a = this.visibleTimeEnd - this.visibleTimeStart;
720
- let d = Math.round(a * u);
721
- d = Math.max(this.minZoom, Math.min(this.maxZoom, d));
722
- const c = Math.round(this.visibleTimeStart + (a - d) * t), v = c + d;
719
+ const n = wi(e), s = e.ctrlKey ? 10 : e.metaKey ? 3 : 1, d = n > 0 ? 1 + s * n / 500 : 1 / (1 + s * -n / 500), a = this.visibleTimeEnd - this.visibleTimeStart;
720
+ let u = Math.round(a * d);
721
+ u = Math.max(this.minZoom, Math.min(this.maxZoom, u));
722
+ const c = Math.round(this.visibleTimeStart + (a - u) * t), v = c + u;
723
723
  this.onZoom(c, v);
724
724
  }
725
725
  }
726
- const Mi = 4;
727
- class wi {
726
+ const Ci = 4;
727
+ class Hi {
728
728
  constructor(e) {
729
729
  Object.defineProperty(this, "state", {
730
730
  enumerable: !0,
@@ -743,21 +743,21 @@ class wi {
743
743
  value: !1
744
744
  }), this.dragSnap = e;
745
745
  }
746
- startInteraction(e, t, n, r) {
746
+ startInteraction(e, t, n, s) {
747
747
  this.state = {
748
748
  item: e,
749
749
  mode: t,
750
750
  startX: n,
751
- startY: r,
751
+ startY: s,
752
752
  currentX: n,
753
- currentY: r,
753
+ currentY: s,
754
754
  deltaX: 0,
755
755
  originalGroup: e.group,
756
756
  currentGroup: e.group
757
757
  }, this.activated = !1;
758
758
  }
759
759
  update(e, t) {
760
- this.state && (this.state.currentX = e, this.state.currentY = t, this.state.deltaX = e - this.state.startX, !this.activated && Math.abs(this.state.deltaX) >= Mi && (this.activated = !0));
760
+ this.state && (this.state.currentX = e, this.state.currentY = t, this.state.deltaX = e - this.state.startX, !this.activated && Math.abs(this.state.deltaX) >= Ci && (this.activated = !0));
761
761
  }
762
762
  setCurrentGroup(e) {
763
763
  this.state && (this.state.currentGroup = e);
@@ -765,13 +765,13 @@ class wi {
765
765
  endMove(e) {
766
766
  if (!this.state)
767
767
  return null;
768
- const t = this.state.deltaX / e, n = this.state.item.start_time + t, r = Math.round(n / this.dragSnap) * this.dragSnap, u = this.state.currentGroup;
769
- return this.state = null, this.activated = !1, { newStartTime: r, newGroupId: u };
768
+ const t = this.state.deltaX / e, n = this.state.item.start_time + t, s = Math.round(n / this.dragSnap) * this.dragSnap, d = this.state.currentGroup;
769
+ return this.state = null, this.activated = !1, { newStartTime: s, newGroupId: d };
770
770
  }
771
771
  endResize(e) {
772
772
  if (!this.state)
773
773
  return null;
774
- const t = this.state.deltaX / e, n = this.state.mode === "resize-left" ? "left" : "right", u = (n === "left" ? this.state.item.start_time : this.state.item.end_time) + t, a = Math.round(u / this.dragSnap) * this.dragSnap;
774
+ const t = this.state.deltaX / e, n = this.state.mode === "resize-left" ? "left" : "right", d = (n === "left" ? this.state.item.start_time : this.state.item.end_time) + t, a = Math.round(d / this.dragSnap) * this.dragSnap;
775
775
  return this.state = null, this.activated = !1, { newTime: a, edge: n };
776
776
  }
777
777
  cancel() {
@@ -791,105 +791,105 @@ class wi {
791
791
  return this.state !== null;
792
792
  }
793
793
  }
794
- function ut(i, e, t) {
794
+ function mt(i, e, t) {
795
795
  const n = [];
796
- for (const r of i)
797
- r.id !== e && (n.push(t(r.start_time)), n.push(t(r.end_time)));
796
+ for (const s of i)
797
+ s.id !== e && (n.push(t(s.start_time)), n.push(t(s.end_time)));
798
798
  return n;
799
799
  }
800
- function Ze(i, e, t, n, r) {
800
+ function Je(i, e, t, n, s) {
801
801
  if (e.length === 0)
802
802
  return null;
803
- let u = e[0], a = Math.abs(i - u);
804
- for (let d = 1; d < e.length; d++) {
805
- const c = Math.abs(i - e[d]);
806
- c < a && (a = c, u = e[d]);
803
+ let d = e[0], a = Math.abs(i - d);
804
+ for (let u = 1; u < e.length; u++) {
805
+ const c = Math.abs(i - e[u]);
806
+ c < a && (a = c, d = e[u]);
807
807
  }
808
- return a <= t ? u : null;
808
+ return a <= t ? d : null;
809
809
  }
810
- var jt = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
811
- function Nt(i) {
810
+ var zt = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
811
+ function $t(i) {
812
812
  return i && i.__esModule && Object.prototype.hasOwnProperty.call(i, "default") ? i.default : i;
813
813
  }
814
- var zt = { exports: {} };
814
+ var Gt = { exports: {} };
815
815
  (function(i, e) {
816
816
  (function(t, n) {
817
817
  i.exports = n();
818
- })(jt, function() {
818
+ })(zt, function() {
819
819
  var t = "day";
820
- return function(n, r, u) {
820
+ return function(n, s, d) {
821
821
  var a = function(v) {
822
822
  return v.add(4 - v.isoWeekday(), t);
823
- }, d = r.prototype;
824
- d.isoWeekYear = function() {
823
+ }, u = s.prototype;
824
+ u.isoWeekYear = function() {
825
825
  return a(this).year();
826
- }, d.isoWeek = function(v) {
826
+ }, u.isoWeek = function(v) {
827
827
  if (!this.$utils().u(v)) return this.add(7 * (v - this.isoWeek()), t);
828
- var M, g, b, T, C = a(this), I = (M = this.isoWeekYear(), g = this.$u, b = (g ? u.utc : u)().year(M).startOf("year"), T = 4 - b.isoWeekday(), b.isoWeekday() > 4 && (T += 7), b.add(T, t));
829
- return C.diff(I, "week") + 1;
830
- }, d.isoWeekday = function(v) {
828
+ var k, g, b, T, C = a(this), R = (k = this.isoWeekYear(), g = this.$u, b = (g ? d.utc : d)().year(k).startOf("year"), T = 4 - b.isoWeekday(), b.isoWeekday() > 4 && (T += 7), b.add(T, t));
829
+ return C.diff(R, "week") + 1;
830
+ }, u.isoWeekday = function(v) {
831
831
  return this.$utils().u(v) ? this.day() || 7 : this.day(this.day() % 7 ? v : v - 7);
832
832
  };
833
- var c = d.startOf;
834
- d.startOf = function(v, M) {
835
- var g = this.$utils(), b = !!g.u(M) || M;
836
- return g.p(v) === "isoweek" ? b ? this.date(this.date() - (this.isoWeekday() - 1)).startOf("day") : this.date(this.date() - 1 - (this.isoWeekday() - 1) + 7).endOf("day") : c.bind(this)(v, M);
833
+ var c = u.startOf;
834
+ u.startOf = function(v, k) {
835
+ var g = this.$utils(), b = !!g.u(k) || k;
836
+ return g.p(v) === "isoweek" ? b ? this.date(this.date() - (this.isoWeekday() - 1)).startOf("day") : this.date(this.date() - 1 - (this.isoWeekday() - 1) + 7).endOf("day") : c.bind(this)(v, k);
837
837
  };
838
838
  };
839
839
  });
840
- })(zt);
841
- var Ei = zt.exports;
842
- const Ci = /* @__PURE__ */ Nt(Ei), Ot = 5;
843
- function Wt({ groups: i, width: e, lineHeight: t, scrollTop: n, canvasHeight: r, theme: u, groupRenderer: a, onScroll: d }) {
844
- var W;
845
- const c = x(null), v = x(!1), M = i.length * t, g = r, b = Math.max(0, Math.floor(n / t) - Ot), T = Math.min(i.length - 1, Math.ceil((n + r) / t) + Ot), C = ie((z) => {
846
- v.current || d(z.currentTarget.scrollTop);
847
- }, [d]);
840
+ })(Gt);
841
+ var Ii = Gt.exports;
842
+ const Ri = /* @__PURE__ */ $t(Ii), Bt = 5;
843
+ function Lt({ groups: i, width: e, lineHeight: t, scrollTop: n, canvasHeight: s, theme: d, groupRenderer: a, onScroll: u }) {
844
+ var O;
845
+ const c = x(null), v = x(!1), k = i.length * t, g = s, b = Math.max(0, Math.floor(n / t) - Bt), T = Math.min(i.length - 1, Math.ceil((n + s) / t) + Bt), C = ie(($) => {
846
+ v.current || u($.currentTarget.scrollTop);
847
+ }, [u]);
848
848
  he(() => {
849
849
  c.current && (v.current = !0, c.current.scrollTop = n, requestAnimationFrame(() => {
850
850
  v.current = !1;
851
851
  }));
852
852
  }, [n]);
853
- const I = [];
854
- for (let z = b; z <= T; z++) {
855
- const S = i[z];
856
- S && I.push(se("div", { style: {
853
+ const R = [];
854
+ for (let $ = b; $ <= T; $++) {
855
+ const S = i[$];
856
+ S && R.push(se("div", { style: {
857
857
  position: "absolute",
858
- top: z * t,
858
+ top: $ * t,
859
859
  height: t,
860
860
  width: "100%",
861
861
  overflow: "hidden",
862
862
  display: "flex",
863
863
  alignItems: "stretch",
864
- borderBottom: `1px solid ${((W = u.grid) == null ? void 0 : W.line) ?? "#E5E5E5"}`,
864
+ borderBottom: `1px solid ${((O = d.grid) == null ? void 0 : O.line) ?? "#E5E5E5"}`,
865
865
  boxSizing: "border-box"
866
866
  }, children: a(S) }, S.id));
867
867
  }
868
868
  return se("div", { ref: c, onScroll: C, style: {
869
869
  width: e,
870
870
  height: g,
871
- overflowY: M > r ? "auto" : "hidden",
871
+ overflowY: k > s ? "auto" : "hidden",
872
872
  overflowX: "hidden",
873
873
  position: "relative",
874
- borderRight: `1px solid ${u.sidebar.border}`,
875
- backgroundColor: u.sidebar.bg
876
- }, children: se("div", { style: { height: M, position: "relative" }, children: I }) });
874
+ borderRight: `1px solid ${d.sidebar.border}`,
875
+ backgroundColor: d.sidebar.bg
876
+ }, children: se("div", { style: { height: k, position: "relative" }, children: R }) });
877
877
  }
878
- function Hi(i) {
878
+ function Pi(i) {
879
879
  return null;
880
880
  }
881
- Hi.displayName = "TodayMarker";
882
- function Xt(i) {
881
+ Pi.displayName = "TodayMarker";
882
+ function Yt(i) {
883
883
  return { date: Math.floor(Date.now() / 6e4) * 6e4, color: i.color ?? "#FD7171", width: i.width ?? 6, label: i.label };
884
884
  }
885
- function Ii(i) {
885
+ function Di(i) {
886
886
  return i.interval ?? 1e4;
887
887
  }
888
- function Ri(i) {
888
+ function Xi(i) {
889
889
  return null;
890
890
  }
891
- Ri.displayName = "CustomMarker";
892
- function Bt(i) {
891
+ Xi.displayName = "CustomMarker";
892
+ function At(i) {
893
893
  return {
894
894
  date: i.date,
895
895
  color: i.color ?? "#3B82F6",
@@ -897,378 +897,393 @@ function Bt(i) {
897
897
  label: i.label
898
898
  };
899
899
  }
900
- pe.extend(Ci);
901
- function Pi(i) {
900
+ pe.extend(Ri);
901
+ function _i(i) {
902
902
  return i ? {
903
- ...we,
903
+ ...Ee,
904
904
  ...i,
905
- status: { ...we.status, ...i.status },
906
- grid: { ...we.grid, ...i.grid },
907
- item: { ...we.item, ...i.item },
908
- marker: { ...we.marker, ...i.marker },
909
- sidebar: { ...we.sidebar, ...i.sidebar },
910
- header: { ...we.header, ...i.header }
911
- } : we;
905
+ status: { ...Ee.status, ...i.status },
906
+ grid: { ...Ee.grid, ...i.grid },
907
+ item: { ...Ee.item, ...i.item },
908
+ marker: { ...Ee.marker, ...i.marker },
909
+ sidebar: { ...Ee.sidebar, ...i.sidebar },
910
+ header: { ...Ee.header, ...i.header }
911
+ } : Ee;
912
912
  }
913
- const Lt = 32, $i = ge.memo(di(function(e, t) {
914
- const { groups: n, items: r, defaultTimeStart: u, defaultTimeEnd: a, sidebarWidth: d, lineHeight: c, itemHeightRatio: v, stackItems: M, canMove: g, canChangeGroup: b, canResize: T, dragSnap: C, minZoom: I, maxZoom: W, theme: z, dayStyle: S, rowStyle: _, showCursorLine: B, itemRenderer: Y, groupRenderer: G, sidebarGroupRenderer: ne, dependencies: P, highlights: L, onItemClick: Z, onItemDoubleClick: K, onItemContextMenu: te, onItemMove: de, onItemResize: ve, moveResizeValidator: He, onItemHover: be, onCanvasDoubleClick: Ie, onCanvasContextMenu: Ye, onTimeChange: Ee, onZoom: ht, selected: ft = [], rightSidebarWidth: qe, rightSidebarGroupRenderer: mt, onReady: je, devBadge: xt, children: Te } = e, ye = oe(() => Pi(z), [z]), gt = ie((l, o) => {
913
+ const jt = 32, Vi = ge.memo(fi(function(e, t) {
914
+ const { groups: n, items: s, defaultTimeStart: d, defaultTimeEnd: a, sidebarWidth: u, lineHeight: c, itemHeightRatio: v, stackItems: k, canMove: g, canChangeGroup: b, canResize: T, dragSnap: C, minZoom: R, maxZoom: O, theme: $, dayStyle: S, rowStyle: F, showCursorLine: B, itemRenderer: A, groupRenderer: Z, sidebarGroupRenderer: ne, dependencies: P, highlights: L, onItemClick: q, onItemDoubleClick: J, onItemContextMenu: te, onItemMove: ue, onItemResize: be, moveResizeValidator: Re, onItemHover: ye, onCanvasDoubleClick: Pe, onCanvasContextMenu: xe, onTimeChange: Ce, onZoom: gt, selected: pt = [], rightSidebarWidth: Qe, rightSidebarGroupRenderer: vt, onReady: ze, devBadge: Zt, children: Se } = e, Te = oe(() => _i($), [$]), bt = ie((r, o) => {
915
915
  for (let h = 0; h < o.length; h++)
916
- if (o[h].id === l)
916
+ if (o[h].id === r)
917
917
  return h;
918
918
  return 0;
919
- }, []), Gt = ft.join(","), Ue = oe(() => ft, [Gt]), pt = x(null), vt = x(null), bt = x(null), _e = x(null), yt = x(null), Vt = x(null), [Zt, qt] = Ve(800);
919
+ }, []), qt = pt.join(","), et = oe(() => pt, [qt]), yt = x(null), Tt = x(null), St = x(null), Oe = x(null), Mt = x(null), Ut = x(null), [Kt, Jt] = Ke(800);
920
920
  he(() => {
921
- const l = yt.current;
922
- if (!l)
921
+ const r = Mt.current;
922
+ if (!r)
923
923
  return;
924
924
  const o = new ResizeObserver((h) => {
925
925
  const f = h[0];
926
- f && qt(f.contentRect.width);
926
+ f && Jt(f.contentRect.width);
927
927
  });
928
- return o.observe(l), () => o.disconnect();
928
+ return o.observe(r), () => o.disconnect();
929
929
  }, []);
930
- const Se = Math.max(0, Zt - d - (qe ?? 0)), ke = n.length * c, D = x(new lt({
931
- visibleTimeStart: e.visibleTimeStart ?? u,
930
+ const Me = Math.max(0, Kt - u - (Qe ?? 0)), ke = n.length * c, D = x(new ut({
931
+ visibleTimeStart: e.visibleTimeStart ?? d,
932
932
  visibleTimeEnd: e.visibleTimeEnd ?? a,
933
- canvasWidth: Se,
933
+ canvasWidth: Me,
934
934
  canvasHeight: ke,
935
- sidebarWidth: d,
935
+ sidebarWidth: u,
936
936
  lineHeight: c,
937
937
  groupCount: n.length,
938
938
  buffer: e.buffer ?? 3,
939
939
  scrollTop: 0
940
- })), Ke = x(null), Oe = x(void 0), [Tt, Ut] = Ve(e.visibleTimeStart ?? u), [St, Kt] = Ve(e.visibleTimeEnd ?? a), [kt, Ne] = Ve(0), We = x(null), Re = ie(() => {
941
- const l = D.current;
942
- Ut(l.visibleTimeStart), Kt(l.visibleTimeEnd), Ne(l.scrollTop), We.current = null;
943
- }, []), Je = ie(() => {
944
- We.current === null && (We.current = setTimeout(Re, Lt));
945
- }, [Re]);
940
+ })), tt = x(null), We = x(void 0), ve = x(null), He = x(!1), kt = 4, [wt, Qt] = Ke(e.visibleTimeStart ?? d), [Et, ei] = Ke(e.visibleTimeEnd ?? a), [Ct, $e] = Ke(0), Be = x(null), De = ie(() => {
941
+ const r = D.current;
942
+ Qt(r.visibleTimeStart), ei(r.visibleTimeEnd), $e(r.scrollTop), Be.current = null;
943
+ }, []), it = ie(() => {
944
+ Be.current === null && (Be.current = setTimeout(De, jt));
945
+ }, [De]);
946
946
  he(() => () => {
947
- We.current !== null && clearTimeout(We.current);
947
+ Be.current !== null && clearTimeout(Be.current);
948
948
  }, []);
949
- const Ce = oe(() => {
950
- const l = new gi();
951
- return l.rebuild(r), l;
952
- }, [r]), Qe = oe(() => {
953
- const l = new fi();
954
- return l.buildFromItems(r, (o) => Ce.getEffectiveSpan(o.id).start, (o) => Ce.getEffectiveSpan(o.id).end), l;
955
- }, [r, Ce]), et = oe(() => {
956
- const l = new mi(c, v);
957
- return l.computeLayout(r, M, Ce), l;
958
- }, [r, c, v, M, Ce]), Mt = oe(() => e.summaryRenderer ? e.summaryRenderer : (l, o, h, f, s) => {
959
- pi(l, o, h, f, s, ye);
960
- }, [e.summaryRenderer, ye]), Pe = oe(() => new bi(), []), De = oe(() => new yi(), []), Fe = oe(() => new Ti(), []), Q = oe(() => new wi(C), [C]), ze = oe(() => {
961
- const l = [];
962
- return ge.Children.forEach(Te, (o) => {
949
+ const Ie = oe(() => {
950
+ const r = new bi();
951
+ return r.rebuild(s), r;
952
+ }, [s]), nt = oe(() => {
953
+ const r = new pi();
954
+ return r.buildFromItems(s, (o) => Ie.getEffectiveSpan(o.id).start, (o) => Ie.getEffectiveSpan(o.id).end), r;
955
+ }, [s, Ie]), rt = oe(() => {
956
+ const r = new vi(c, v);
957
+ return r.computeLayout(s, k, Ie), r;
958
+ }, [s, c, v, k, Ie]), Ht = oe(() => e.summaryRenderer ? e.summaryRenderer : (r, o, h, f, l) => {
959
+ yi(r, o, h, f, l, Te);
960
+ }, [e.summaryRenderer, Te]), Xe = oe(() => new Si(), []), _e = oe(() => new Mi(), []), Fe = oe(() => new ki(), []), Q = oe(() => new Hi(C), [C]), Ge = oe(() => {
961
+ const r = [];
962
+ return ge.Children.forEach(Se, (o) => {
963
963
  var f;
964
964
  if (!ge.isValidElement(o))
965
965
  return;
966
966
  const h = (f = o.type) == null ? void 0 : f.displayName;
967
- h === "TodayMarker" ? l.push(Xt(o.props)) : h === "CustomMarker" && l.push(Bt(o.props));
968
- }), l;
969
- }, [Te]), $e = oe(() => ze.map((l) => `${l.date}|${l.color}|${l.width}|${l.label ?? ""}`).join(";"), [ze]), Xe = x(ze);
970
- Xe.current = ze;
971
- const tt = oe(() => {
972
- let l = 0;
973
- return ge.Children.forEach(Te, (o) => {
967
+ h === "TodayMarker" ? r.push(Yt(o.props)) : h === "CustomMarker" && r.push(At(o.props));
968
+ }), r;
969
+ }, [Se]), Ve = oe(() => Ge.map((r) => `${r.date}|${r.color}|${r.width}|${r.label ?? ""}`).join(";"), [Ge]), Le = x(Ge);
970
+ Le.current = Ge;
971
+ const ot = oe(() => {
972
+ let r = 0;
973
+ return ge.Children.forEach(Se, (o) => {
974
974
  var f;
975
975
  if (!ge.isValidElement(o))
976
976
  return;
977
- ((f = o.type) == null ? void 0 : f.displayName) === "TodayMarker" && (l = Ii(o.props));
978
- }), l;
979
- }, [Te]), F = x({
977
+ ((f = o.type) == null ? void 0 : f.displayName) === "TodayMarker" && (r = Di(o.props));
978
+ }), r;
979
+ }, [Se]), _ = x({
980
980
  groups: n,
981
- items: r,
982
- intervalTree: Qe,
983
- layoutEngine: et,
984
- itemRenderer: Y,
985
- groupRenderer: G,
986
- theme: ye,
987
- selected: Ue,
981
+ items: s,
982
+ intervalTree: nt,
983
+ layoutEngine: rt,
984
+ itemRenderer: A,
985
+ groupRenderer: Z,
986
+ theme: Te,
987
+ selected: et,
988
988
  dependencies: P,
989
989
  highlights: L,
990
990
  dayStyle: S,
991
- rowStyle: _,
991
+ rowStyle: F,
992
992
  showCursorLine: B,
993
- canvasWidth: Se,
993
+ canvasWidth: Me,
994
994
  canvasHeight: ke,
995
995
  lineHeight: c,
996
996
  itemHeightRatio: v,
997
- onTimeChange: Ee,
998
- onZoom: ht,
999
- onItemHover: be,
1000
- onItemClick: Z,
1001
- onItemDoubleClick: K,
997
+ onTimeChange: Ce,
998
+ onZoom: gt,
999
+ onItemHover: ye,
1000
+ onItemClick: q,
1001
+ onItemDoubleClick: J,
1002
1002
  onItemContextMenu: te,
1003
- onItemMove: de,
1004
- onItemResize: ve,
1005
- onCanvasDoubleClick: Ie,
1006
- onCanvasContextMenu: Ye,
1003
+ onItemMove: ue,
1004
+ onItemResize: be,
1005
+ onCanvasDoubleClick: Pe,
1006
+ onCanvasContextMenu: xe,
1007
1007
  canMove: g,
1008
1008
  canResize: T,
1009
1009
  canChangeGroup: b,
1010
1010
  dragSnap: C,
1011
- sidebarWidth: d,
1012
- moveResizeValidator: He,
1013
- summaryRenderer: Mt,
1014
- hierarchyEngine: Ce
1011
+ sidebarWidth: u,
1012
+ moveResizeValidator: Re,
1013
+ summaryRenderer: Ht,
1014
+ hierarchyEngine: Ie
1015
1015
  });
1016
- F.current = {
1016
+ _.current = {
1017
1017
  groups: n,
1018
- items: r,
1019
- intervalTree: Qe,
1020
- layoutEngine: et,
1021
- itemRenderer: Y,
1022
- groupRenderer: G,
1023
- theme: ye,
1024
- selected: Ue,
1018
+ items: s,
1019
+ intervalTree: nt,
1020
+ layoutEngine: rt,
1021
+ itemRenderer: A,
1022
+ groupRenderer: Z,
1023
+ theme: Te,
1024
+ selected: et,
1025
1025
  dependencies: P,
1026
1026
  highlights: L,
1027
1027
  dayStyle: S,
1028
- rowStyle: _,
1028
+ rowStyle: F,
1029
1029
  showCursorLine: B,
1030
- canvasWidth: Se,
1030
+ canvasWidth: Me,
1031
1031
  canvasHeight: ke,
1032
1032
  lineHeight: c,
1033
1033
  itemHeightRatio: v,
1034
- onTimeChange: Ee,
1035
- onZoom: ht,
1036
- onItemHover: be,
1037
- onItemClick: Z,
1038
- onItemDoubleClick: K,
1034
+ onTimeChange: Ce,
1035
+ onZoom: gt,
1036
+ onItemHover: ye,
1037
+ onItemClick: q,
1038
+ onItemDoubleClick: J,
1039
1039
  onItemContextMenu: te,
1040
- onItemMove: de,
1041
- onItemResize: ve,
1042
- onCanvasDoubleClick: Ie,
1043
- onCanvasContextMenu: Ye,
1040
+ onItemMove: ue,
1041
+ onItemResize: be,
1042
+ onCanvasDoubleClick: Pe,
1043
+ onCanvasContextMenu: xe,
1044
1044
  canMove: g,
1045
1045
  canResize: T,
1046
1046
  canChangeGroup: b,
1047
1047
  dragSnap: C,
1048
- sidebarWidth: d,
1049
- moveResizeValidator: He,
1050
- summaryRenderer: Mt,
1051
- hierarchyEngine: Ce
1048
+ sidebarWidth: u,
1049
+ moveResizeValidator: Re,
1050
+ summaryRenderer: Ht,
1051
+ hierarchyEngine: Ie
1052
1052
  };
1053
- const Jt = ie(() => {
1054
- const l = pt.current;
1055
- if (!l)
1053
+ const ti = ie(() => {
1054
+ const r = yt.current;
1055
+ if (!r)
1056
1056
  return;
1057
- const o = F.current, h = ct(l, o.canvasWidth, o.canvasHeight);
1058
- dt(h, l), Pe.draw(h, D.current, o.groups, o.theme, o.dayStyle, o.rowStyle, o.highlights);
1059
- }, [Pe]), Qt = ie(() => {
1060
- const l = vt.current;
1061
- if (!l)
1057
+ const o = _.current, h = ht(r, o.canvasWidth, o.canvasHeight);
1058
+ ft(h, r), Xe.draw(h, D.current, o.groups, o.theme, o.dayStyle, o.rowStyle, o.highlights);
1059
+ }, [Xe]), ii = ie(() => {
1060
+ const r = Tt.current;
1061
+ if (!r)
1062
1062
  return;
1063
- const o = F.current, h = ct(l, o.canvasWidth, o.canvasHeight);
1064
- dt(h, l), De.draw(h, D.current, o.groups, o.items, o.intervalTree, o.layoutEngine, o.itemRenderer, o.groupRenderer, o.theme, o.selected, Oe.current, o.dependencies, o.summaryRenderer, o.hierarchyEngine);
1065
- }, [De]), wt = ie((l, o, h) => {
1066
- const f = D.current, s = F.current, m = s.canvasWidth / (f.visibleTimeEnd - f.visibleTimeStart), y = o / m, k = [];
1067
- h === "move" ? (k.push(f.timeToX(l.start_time + y)), k.push(f.timeToX(l.end_time + y))) : h === "resize-left" ? k.push(f.timeToX(l.start_time + y)) : k.push(f.timeToX(l.end_time + y));
1068
- const H = (f.visibleTimeEnd - f.visibleTimeStart) * 0.1, O = s.intervalTree.query(f.visibleTimeStart - H, f.visibleTimeEnd + H), V = ut(O, l.id, (re) => f.timeToX(re));
1069
- for (const re of k) {
1070
- const $ = Ze(re, V, 8, m, s.dragSnap);
1071
- if ($ !== null)
1072
- return $;
1063
+ const o = _.current, h = ht(r, o.canvasWidth, o.canvasHeight);
1064
+ ft(h, r), _e.draw(h, D.current, o.groups, o.items, o.intervalTree, o.layoutEngine, o.itemRenderer, o.groupRenderer, o.theme, o.selected, We.current, o.dependencies, o.summaryRenderer, o.hierarchyEngine);
1065
+ }, [_e]), It = ie((r, o, h) => {
1066
+ const f = D.current, l = _.current, m = l.canvasWidth / (f.visibleTimeEnd - f.visibleTimeStart), y = o / m, M = [];
1067
+ h === "move" ? (M.push(f.timeToX(r.start_time + y)), M.push(f.timeToX(r.end_time + y))) : h === "resize-left" ? M.push(f.timeToX(r.start_time + y)) : M.push(f.timeToX(r.end_time + y));
1068
+ const I = (f.visibleTimeEnd - f.visibleTimeStart) * 0.1, X = l.intervalTree.query(f.visibleTimeStart - I, f.visibleTimeEnd + I), z = mt(X, r.id, (re) => f.timeToX(re));
1069
+ for (const re of M) {
1070
+ const V = Je(re, z, 8, m, l.dragSnap);
1071
+ if (V !== null)
1072
+ return V;
1073
1073
  }
1074
- const J = h === "resize-right" ? l.end_time + y : l.start_time + y, R = Math.round(J / s.dragSnap) * s.dragSnap;
1075
- return f.timeToX(R);
1076
- }, []), ei = ie(() => {
1077
- const l = bt.current;
1078
- if (!l)
1074
+ const G = h === "resize-right" ? r.end_time + y : r.start_time + y, H = Math.round(G / l.dragSnap) * l.dragSnap;
1075
+ return f.timeToX(H);
1076
+ }, []), ni = ie(() => {
1077
+ const r = St.current;
1078
+ if (!r)
1079
1079
  return;
1080
- const o = F.current, h = ct(l, o.canvasWidth, o.canvasHeight);
1081
- dt(h, l);
1082
- const f = D.current, s = Q.getState();
1080
+ const o = _.current, h = ht(r, o.canvasWidth, o.canvasHeight);
1081
+ ft(h, r);
1082
+ const f = D.current, l = Q.getState();
1083
1083
  let m = null;
1084
- if (s) {
1085
- const y = f.timeToX(s.item.start_time), k = f.timeToX(s.item.end_time) - y;
1086
- let H, O;
1087
- s.mode === "resize-left" ? (H = y + s.deltaX, O = k - s.deltaX) : s.mode === "resize-right" ? (H = y, O = k + s.deltaX) : (H = y + s.deltaX, O = k);
1088
- const V = gt(s.currentGroup, o.groups), J = f.groupIndexToY(V), R = s.currentGroup !== s.originalGroup;
1084
+ if (l) {
1085
+ const y = f.timeToX(l.item.start_time), M = f.timeToX(l.item.end_time) - y;
1086
+ let I, X;
1087
+ l.mode === "resize-left" ? (I = y + l.deltaX, X = M - l.deltaX) : l.mode === "resize-right" ? (I = y, X = M + l.deltaX) : (I = y + l.deltaX, X = M);
1088
+ const z = bt(l.currentGroup, o.groups), G = f.groupIndexToY(z), H = l.currentGroup !== l.originalGroup;
1089
1089
  m = {
1090
- item: s.item,
1091
- mode: s.mode,
1092
- bounds: { x: H, y: J + (o.lineHeight - o.lineHeight * o.itemHeightRatio) / 2, width: O, height: o.lineHeight * o.itemHeightRatio },
1090
+ item: l.item,
1091
+ mode: l.mode,
1092
+ bounds: { x: I, y: G + (o.lineHeight - o.lineHeight * o.itemHeightRatio) / 2, width: X, height: o.lineHeight * o.itemHeightRatio },
1093
1093
  renderer: o.itemRenderer,
1094
- targetGroupY: J,
1095
- groupChanged: R
1094
+ targetGroupY: G,
1095
+ groupChanged: H
1096
1096
  };
1097
1097
  }
1098
1098
  Fe.draw(h, f, o.theme, {
1099
- cursorX: o.showCursorLine ? Ke.current : null,
1100
- snapX: s ? wt(s.item, s.deltaX, s.mode) : null,
1101
- markers: Xe.current,
1099
+ cursorX: o.showCursorLine ? tt.current : null,
1100
+ snapX: l ? It(l.item, l.deltaX, l.mode) : null,
1101
+ markers: Le.current,
1102
1102
  interaction: m
1103
1103
  });
1104
- }, [Fe, Q, wt, gt]), it = x(null);
1105
- it.current || (it.current = new vi((l) => {
1106
- l.grid && Jt(), l.items && Qt(), l.overlay && ei();
1104
+ }, [Fe, Q, It, bt]), st = x(null);
1105
+ st.current || (st.current = new Ti((r) => {
1106
+ r.grid && ti(), r.items && ii(), r.overlay && ni();
1107
1107
  }));
1108
- const E = it.current;
1108
+ const E = st.current;
1109
1109
  he(() => () => E.dispose(), [E]), he(() => {
1110
- if (!tt)
1110
+ if (!ot)
1111
1111
  return;
1112
- const l = setInterval(() => {
1112
+ const r = setInterval(() => {
1113
1113
  const o = [];
1114
- ge.Children.forEach(Te, (h) => {
1115
- var s;
1114
+ ge.Children.forEach(Se, (h) => {
1115
+ var l;
1116
1116
  if (!ge.isValidElement(h))
1117
1117
  return;
1118
- const f = (s = h.type) == null ? void 0 : s.displayName;
1119
- f === "TodayMarker" ? o.push(Xt(h.props)) : f === "CustomMarker" && o.push(Bt(h.props));
1120
- }), Xe.current = o, E.markDirty("overlay");
1121
- }, tt);
1122
- return () => clearInterval(l);
1123
- }, [tt, Te, E]), he(() => {
1124
- D.current.update({ canvasWidth: Se, canvasHeight: ke, sidebarWidth: d, lineHeight: c, groupCount: n.length }), E.markAllDirty();
1125
- }, [Se, ke, d, c, n.length, E]), he(() => {
1118
+ const f = (l = h.type) == null ? void 0 : l.displayName;
1119
+ f === "TodayMarker" ? o.push(Yt(h.props)) : f === "CustomMarker" && o.push(At(h.props));
1120
+ }), Le.current = o, E.markDirty("overlay");
1121
+ }, ot);
1122
+ return () => clearInterval(r);
1123
+ }, [ot, Se, E]), he(() => {
1124
+ D.current.update({ canvasWidth: Me, canvasHeight: ke, sidebarWidth: u, lineHeight: c, groupCount: n.length }), E.markAllDirty();
1125
+ }, [Me, ke, u, c, n.length, E]), he(() => {
1126
1126
  E.markDirty("grid"), E.markDirty("items");
1127
- }, [r, n, Ue, ye, S, _, Qe, et, E]);
1128
- const xe = oe(() => {
1129
- var l;
1130
- return ((l = e.highlights) == null ? void 0 : l.map((o) => `${o.start}|${o.end}|${o.color}|${o.label ?? ""}|${o.opacity ?? ""}`).join(";")) ?? "";
1131
- }, [e.highlights]), Et = x(xe);
1127
+ }, [s, n, et, Te, S, F, nt, rt, E]);
1128
+ const Ze = oe(() => {
1129
+ var r;
1130
+ return ((r = e.highlights) == null ? void 0 : r.map((o) => `${o.start}|${o.end}|${o.color}|${o.label ?? ""}|${o.opacity ?? ""}`).join(";")) ?? "";
1131
+ }, [e.highlights]), Rt = x(Ze);
1132
1132
  he(() => {
1133
- xe !== Et.current && (Et.current = xe, E.markDirty("grid"));
1134
- }, [xe, E]);
1135
- const Ct = x($e);
1133
+ Ze !== Rt.current && (Rt.current = Ze, E.markDirty("grid"));
1134
+ }, [Ze, E]);
1135
+ const Pt = x(Ve);
1136
1136
  he(() => {
1137
- $e !== Ct.current && (Ct.current = $e, E.markDirty("overlay"));
1138
- }, [$e, E]);
1139
- const Ht = x(e.visibleTimeStart), It = x(e.visibleTimeEnd);
1140
- e.visibleTimeStart !== void 0 && e.visibleTimeStart !== Ht.current && (Ht.current = e.visibleTimeStart, D.current.update({ visibleTimeStart: e.visibleTimeStart }), E.markAllDirty()), e.visibleTimeEnd !== void 0 && e.visibleTimeEnd !== It.current && (It.current = e.visibleTimeEnd, D.current.update({ visibleTimeEnd: e.visibleTimeEnd }), E.markAllDirty());
1141
- const Be = x(null), nt = ie((l) => {
1142
- Be.current === null && (Be.current = setTimeout(() => {
1143
- var f, s;
1144
- Be.current = null;
1145
- const o = D.current, h = F.current;
1146
- l === "zoom" ? (f = h.onZoom) == null || f.call(h, o.visibleTimeStart, o.visibleTimeEnd) : (s = h.onTimeChange) == null || s.call(h, o.visibleTimeStart, o.visibleTimeEnd);
1147
- }, Lt));
1137
+ Ve !== Pt.current && (Pt.current = Ve, E.markDirty("overlay"));
1138
+ }, [Ve, E]);
1139
+ const Dt = x(e.visibleTimeStart), Xt = x(e.visibleTimeEnd);
1140
+ e.visibleTimeStart !== void 0 && e.visibleTimeStart !== Dt.current && (Dt.current = e.visibleTimeStart, D.current.update({ visibleTimeStart: e.visibleTimeStart }), E.markAllDirty()), e.visibleTimeEnd !== void 0 && e.visibleTimeEnd !== Xt.current && (Xt.current = e.visibleTimeEnd, D.current.update({ visibleTimeEnd: e.visibleTimeEnd }), E.markAllDirty());
1141
+ const Ye = x(null), lt = ie((r) => {
1142
+ Ye.current === null && (Ye.current = setTimeout(() => {
1143
+ var f, l;
1144
+ Ye.current = null;
1145
+ const o = D.current, h = _.current;
1146
+ r === "zoom" ? (f = h.onZoom) == null || f.call(h, o.visibleTimeStart, o.visibleTimeEnd) : (l = h.onTimeChange) == null || l.call(h, o.visibleTimeStart, o.visibleTimeEnd);
1147
+ }, jt));
1148
1148
  }, []);
1149
1149
  he(() => () => {
1150
- Be.current !== null && clearTimeout(Be.current);
1150
+ Ye.current !== null && clearTimeout(Ye.current);
1151
1151
  }, []);
1152
- const Ge = x(null), rt = oe(() => new ki((l, o) => {
1152
+ const qe = x(null), at = oe(() => new Ei((r, o) => {
1153
1153
  var h;
1154
- D.current.update({ visibleTimeStart: l, visibleTimeEnd: o }), (h = Ge.current) == null || h.updateBounds(l, o), E.markAllDirty(), Je(), nt("zoom");
1155
- }, u, a, I, W), []);
1156
- Ge.current = rt;
1157
- const Rt = ie((l) => {
1158
- const o = D.current, h = o.groupCount * o.lineHeight, f = Math.max(0, h - o.canvasHeight), s = Math.max(0, Math.min(f, o.scrollTop + l));
1159
- s !== o.scrollTop && (o.update({ scrollTop: s }), E.markDirty("grid"), E.markDirty("items"), E.markDirty("overlay"), Ne(s));
1160
- }, [E]), ot = ie((l) => {
1161
- var y, k, H;
1162
- const o = D.current, h = o.canvasWidth / (o.visibleTimeEnd - o.visibleTimeStart), f = l / h, s = o.visibleTimeStart + f, m = o.visibleTimeEnd + f;
1163
- o.update({ visibleTimeStart: s, visibleTimeEnd: m }), (y = Ge.current) == null || y.updateBounds(s, m), E.markAllDirty(), hi(() => Re()), (H = (k = F.current).onTimeChange) == null || H.call(k, s, m);
1164
- }, [E, Re]);
1154
+ D.current.update({ visibleTimeStart: r, visibleTimeEnd: o }), (h = qe.current) == null || h.updateBounds(r, o), E.markAllDirty(), it(), lt("zoom");
1155
+ }, d, a, R, O), []);
1156
+ qe.current = at;
1157
+ const Ue = ie((r) => {
1158
+ const o = D.current, h = o.groupCount * o.lineHeight, f = Math.max(0, h - o.canvasHeight), l = Math.max(0, Math.min(f, o.scrollTop + r));
1159
+ l !== o.scrollTop && (o.update({ scrollTop: l }), E.markDirty("grid"), E.markDirty("items"), E.markDirty("overlay"), $e(l));
1160
+ }, [E]), Ae = ie((r) => {
1161
+ var y, M, I;
1162
+ const o = D.current, h = o.canvasWidth / (o.visibleTimeEnd - o.visibleTimeStart), f = r / h, l = o.visibleTimeStart + f, m = o.visibleTimeEnd + f;
1163
+ o.update({ visibleTimeStart: l, visibleTimeEnd: m }), (y = qe.current) == null || y.updateBounds(l, m), E.markAllDirty(), gi(() => De()), (I = (M = _.current).onTimeChange) == null || I.call(M, l, m);
1164
+ }, [E, De]);
1165
1165
  he(() => {
1166
- const l = _e.current;
1167
- if (!l)
1166
+ const r = Oe.current;
1167
+ if (!r)
1168
1168
  return;
1169
1169
  const o = (h) => {
1170
1170
  if (h.ctrlKey || h.metaKey || h.altKey) {
1171
1171
  h.preventDefault();
1172
- const f = l.getBoundingClientRect(), s = (h.clientX - f.left) / f.width;
1173
- rt.handleWheelZoom(h, s);
1172
+ const f = r.getBoundingClientRect(), l = (h.clientX - f.left) / f.width;
1173
+ at.handleWheelZoom(h, l);
1174
1174
  } else if (h.shiftKey)
1175
- h.preventDefault(), ot(h.deltaY);
1175
+ h.preventDefault(), Ae(h.deltaY);
1176
1176
  else {
1177
1177
  const f = h.deltaX;
1178
- f !== 0 && Math.abs(f) > Math.abs(h.deltaY) ? (h.preventDefault(), ot(f)) : h.deltaY !== 0 && Rt(h.deltaY);
1178
+ f !== 0 && Math.abs(f) > Math.abs(h.deltaY) ? (h.preventDefault(), Ae(f)) : h.deltaY !== 0 && Ue(h.deltaY);
1179
1179
  }
1180
1180
  };
1181
- return l.addEventListener("wheel", o, { passive: !1 }), () => l.removeEventListener("wheel", o);
1182
- }, [rt, Rt, ot]);
1183
- const Me = x({ lastDistance: null, lastCenter: null });
1181
+ return r.addEventListener("wheel", o, { passive: !1 }), () => r.removeEventListener("wheel", o);
1182
+ }, [at, Ue, Ae]);
1183
+ const we = x({ lastDistance: null, lastCenter: null });
1184
1184
  he(() => {
1185
- const l = _e.current;
1186
- if (!l)
1185
+ const r = Oe.current;
1186
+ if (!r)
1187
1187
  return;
1188
- const o = (y, k) => Math.abs(y.clientX - k.clientX), h = (y, k, H) => (y.clientX + k.clientX) / 2 - H.left, f = (y) => {
1189
- y.touches.length === 2 && (y.preventDefault(), Me.current.lastDistance = o(y.touches[0], y.touches[1]), Me.current.lastCenter = null);
1190
- }, s = (y) => {
1191
- var k;
1192
- if (y.touches.length === 2 && Me.current.lastDistance !== null) {
1188
+ const o = (y, M) => Math.abs(y.clientX - M.clientX), h = (y, M, I) => (y.clientX + M.clientX) / 2 - I.left, f = (y) => {
1189
+ y.touches.length === 2 && (y.preventDefault(), we.current.lastDistance = o(y.touches[0], y.touches[1]), we.current.lastCenter = null);
1190
+ }, l = (y) => {
1191
+ var M;
1192
+ if (y.touches.length === 2 && we.current.lastDistance !== null) {
1193
1193
  y.preventDefault();
1194
- const H = o(y.touches[0], y.touches[1]), O = l.getBoundingClientRect(), J = h(y.touches[0], y.touches[1], O) / O.width;
1195
- if (H !== 0 && Me.current.lastDistance !== 0) {
1196
- const R = Me.current.lastDistance / H, re = D.current, $ = re.visibleTimeEnd - re.visibleTimeStart;
1197
- let w = $ * R;
1198
- w = Math.max(I, Math.min(W, w));
1199
- const p = re.visibleTimeStart + $ * J, j = p - w * J, A = p + w * (1 - J);
1200
- re.update({ visibleTimeStart: j, visibleTimeEnd: A }), (k = Ge.current) == null || k.updateBounds(j, A), E.markAllDirty(), Je(), nt("zoom");
1194
+ const I = o(y.touches[0], y.touches[1]), X = r.getBoundingClientRect(), G = h(y.touches[0], y.touches[1], X) / X.width;
1195
+ if (I !== 0 && we.current.lastDistance !== 0) {
1196
+ const H = we.current.lastDistance / I, re = D.current, V = re.visibleTimeEnd - re.visibleTimeStart;
1197
+ let w = V * H;
1198
+ w = Math.max(R, Math.min(O, w));
1199
+ const p = re.visibleTimeStart + V * G, j = p - w * G, Y = p + w * (1 - G);
1200
+ re.update({ visibleTimeStart: j, visibleTimeEnd: Y }), (M = qe.current) == null || M.updateBounds(j, Y), E.markAllDirty(), it(), lt("zoom");
1201
1201
  }
1202
- Me.current.lastDistance = H;
1202
+ we.current.lastDistance = I;
1203
1203
  }
1204
1204
  }, m = () => {
1205
- Me.current.lastDistance = null, Me.current.lastCenter = null;
1205
+ we.current.lastDistance = null, we.current.lastCenter = null;
1206
1206
  };
1207
- return l.addEventListener("touchstart", f, { passive: !1 }), l.addEventListener("touchmove", s, { passive: !1 }), l.addEventListener("touchend", m), () => {
1208
- l.removeEventListener("touchstart", f), l.removeEventListener("touchmove", s), l.removeEventListener("touchend", m);
1207
+ return r.addEventListener("touchstart", f, { passive: !1 }), r.addEventListener("touchmove", l, { passive: !1 }), r.addEventListener("touchend", m), () => {
1208
+ r.removeEventListener("touchstart", f), r.removeEventListener("touchmove", l), r.removeEventListener("touchend", m);
1209
1209
  };
1210
- }, [E, Je, nt]);
1211
- const ti = ie((l) => {
1212
- var H;
1213
- const o = l.currentTarget, h = o.getBoundingClientRect(), f = l.clientX - h.left, s = l.clientY - h.top;
1214
- if (Ke.current = f, Q.isPending()) {
1215
- if (Q.update(f, s), Q.isActive()) {
1216
- const O = Q.getState();
1217
- if (O && O.mode === "move" && F.current.canChangeGroup) {
1218
- const V = at(s, D.current, F.current.groups);
1219
- V && Q.setCurrentGroup(V.id);
1210
+ }, [E, it, lt]);
1211
+ const ri = ie((r) => {
1212
+ var I;
1213
+ const o = r.currentTarget, h = o.getBoundingClientRect(), f = r.clientX - h.left, l = r.clientY - h.top;
1214
+ if (tt.current = f, ve.current) {
1215
+ const X = r.clientX - ve.current.startX, z = r.clientY - ve.current.startY;
1216
+ if (!He.current && (Math.abs(X) >= kt || Math.abs(z) >= kt) && (He.current = !0, o.style.cursor = "grabbing", o.setPointerCapture(r.pointerId)), He.current) {
1217
+ const G = r.clientX - ve.current.lastX, H = r.clientY - ve.current.lastY;
1218
+ ve.current.lastX = r.clientX, ve.current.lastY = r.clientY, Math.abs(G) > 0 && Ae(-G), Math.abs(H) > 0 && Ue(-H);
1219
+ }
1220
+ return;
1221
+ }
1222
+ if (Q.isPending()) {
1223
+ if (Q.update(f, l), Q.isActive()) {
1224
+ const X = Q.getState();
1225
+ if (X && X.mode === "move" && _.current.canChangeGroup) {
1226
+ const z = dt(l, D.current, _.current.groups);
1227
+ z && Q.setCurrentGroup(z.id);
1220
1228
  }
1221
1229
  E.markDirty("overlay");
1222
1230
  }
1223
1231
  return;
1224
1232
  }
1225
- F.current.showCursorLine && E.markDirty("overlay");
1226
- const m = F.current, y = Le(f, s, D.current, m.intervalTree, m.layoutEngine, m.groups), k = y == null ? void 0 : y.id;
1227
- if (k !== Oe.current && (Oe.current = k, E.markDirty("items"), (H = m.onItemHover) == null || H.call(m, k ?? null, l.nativeEvent)), y) {
1228
- const O = Dt(f, y, D.current), V = m.canResize;
1229
- O === "left" && (V === "left" || V === "both") || O === "right" && (V === "right" || V === "both") ? o.style.cursor = "col-resize" : m.canMove ? o.style.cursor = "grab" : o.style.cursor = "default";
1233
+ _.current.showCursorLine && E.markDirty("overlay");
1234
+ const m = _.current, y = je(f, l, D.current, m.intervalTree, m.layoutEngine, m.groups), M = y == null ? void 0 : y.id;
1235
+ if (M !== We.current && (We.current = M, E.markDirty("items"), (I = m.onItemHover) == null || I.call(m, M ?? null, r.nativeEvent)), y) {
1236
+ const X = Ft(f, y, D.current), z = m.canResize;
1237
+ X === "left" && (z === "left" || z === "both") || X === "right" && (z === "right" || z === "both") ? o.style.cursor = "col-resize" : m.canMove ? o.style.cursor = "grab" : o.style.cursor = "default";
1230
1238
  } else
1231
1239
  o.style.cursor = "default";
1232
- }, [Q, E]), ii = ie((l) => {
1233
- const o = F.current, h = l.currentTarget.getBoundingClientRect(), f = l.clientX - h.left, s = l.clientY - h.top, m = Le(f, s, D.current, o.intervalTree, o.layoutEngine, o.groups);
1234
- if (!m)
1240
+ }, [Q, E, Ae, Ue]), oi = ie((r) => {
1241
+ const o = _.current, h = r.currentTarget.getBoundingClientRect(), f = r.clientX - h.left, l = r.clientY - h.top, m = je(f, l, D.current, o.intervalTree, o.layoutEngine, o.groups);
1242
+ if (!m) {
1243
+ ve.current = { startX: r.clientX, startY: r.clientY, lastX: r.clientX, lastY: r.clientY }, He.current = !1;
1235
1244
  return;
1236
- const y = Dt(f, m, D.current), k = o.canResize;
1237
- y === "left" && (k === "left" || k === "both") ? Q.startInteraction(m, "resize-left", f, s) : y === "right" && (k === "right" || k === "both") ? Q.startInteraction(m, "resize-right", f, s) : o.canMove && Q.startInteraction(m, "move", f, s);
1238
- }, [Q]), ni = ie((l) => {
1239
- var y, k, H, O, V, J;
1240
- const o = l.currentTarget;
1245
+ }
1246
+ const y = Ft(f, m, D.current), M = o.canResize;
1247
+ y === "left" && (M === "left" || M === "both") ? Q.startInteraction(m, "resize-left", f, l) : y === "right" && (M === "right" || M === "both") ? Q.startInteraction(m, "resize-right", f, l) : o.canMove && Q.startInteraction(m, "move", f, l);
1248
+ }, [Q]), si = ie((r) => {
1249
+ var y, M, I, X, z, G;
1250
+ const o = r.currentTarget;
1251
+ if (ve.current) {
1252
+ const H = He.current;
1253
+ if (ve.current = null, He.current = !1, o.style.cursor = "default", H)
1254
+ return;
1255
+ }
1241
1256
  if (Q.isActive()) {
1242
- const R = Q.getState(), re = D.current, $ = re.canvasWidth / (re.visibleTimeEnd - re.visibleTimeStart);
1243
- if (R) {
1244
- const w = F.current.moveResizeValidator;
1245
- if (R.mode === "move") {
1246
- const p = Q.endMove($);
1257
+ const H = Q.getState(), re = D.current, V = re.canvasWidth / (re.visibleTimeEnd - re.visibleTimeStart);
1258
+ if (H) {
1259
+ const w = _.current.moveResizeValidator;
1260
+ if (H.mode === "move") {
1261
+ const p = Q.endMove(V);
1247
1262
  if (p) {
1248
- const j = D.current, A = F.current, ae = R.deltaX / $, fe = j.timeToX(R.item.start_time + ae), X = j.timeToX(R.item.end_time + ae), q = (j.visibleTimeEnd - j.visibleTimeStart) * 0.1, ee = A.intervalTree.query(j.visibleTimeStart - q, j.visibleTimeEnd + q), N = ut(ee, R.item.id, (me) => j.timeToX(me));
1263
+ const j = D.current, Y = _.current, ae = H.deltaX / V, fe = j.timeToX(H.item.start_time + ae), W = j.timeToX(H.item.end_time + ae), U = (j.visibleTimeEnd - j.visibleTimeStart) * 0.1, ee = Y.intervalTree.query(j.visibleTimeStart - U, j.visibleTimeEnd + U), N = mt(ee, H.item.id, (me) => j.timeToX(me));
1249
1264
  let le = p.newStartTime;
1250
- const U = Ze(fe, N, 8, $, A.dragSnap);
1251
- if (U !== null)
1252
- le = j.xToTime(U);
1265
+ const K = Je(fe, N, 8, V, Y.dragSnap);
1266
+ if (K !== null)
1267
+ le = j.xToTime(K);
1253
1268
  else {
1254
- const me = Ze(X, N, 8, $, A.dragSnap);
1269
+ const me = Je(W, N, 8, V, Y.dragSnap);
1255
1270
  if (me !== null) {
1256
- const ci = R.item.end_time - R.item.start_time;
1257
- le = j.xToTime(me) - ci;
1271
+ const hi = H.item.end_time - H.item.start_time;
1272
+ le = j.xToTime(me) - hi;
1258
1273
  }
1259
1274
  }
1260
- const ce = w ? w("move", R.item.id, le) : le, ue = F.current.hierarchyEngine.getMoveDelta(R.item.id, ce);
1261
- (k = (y = F.current).onItemMove) == null || k.call(y, R.item.id, ce, p.newGroupId, ue.length > 0 ? ue : void 0);
1275
+ const ce = w ? w("move", H.item.id, le) : le, de = _.current.hierarchyEngine.getMoveDelta(H.item.id, ce);
1276
+ (M = (y = _.current).onItemMove) == null || M.call(y, H.item.id, ce, p.newGroupId, de.length > 0 ? de : void 0);
1262
1277
  }
1263
1278
  } else {
1264
- const p = Q.endResize($);
1279
+ const p = Q.endResize(V);
1265
1280
  if (p) {
1266
- const j = D.current, A = F.current, ae = R.deltaX / $, fe = p.edge === "left" ? R.item.start_time + ae : R.item.end_time + ae, X = j.timeToX(fe), q = (j.visibleTimeEnd - j.visibleTimeStart) * 0.1, ee = A.intervalTree.query(j.visibleTimeStart - q, j.visibleTimeEnd + q), N = ut(ee, R.item.id, (me) => j.timeToX(me)), le = Ze(X, N, 8, $, A.dragSnap);
1267
- let U = le !== null ? j.xToTime(le) : p.newTime;
1268
- const ce = F.current.hierarchyEngine.getResizeConstraint(R.item.id, p.edge);
1269
- p.edge === "left" && U > ce.max ? U = ce.max : p.edge === "right" && U < ce.min && (U = ce.min);
1270
- const ue = w ? w("resize", R.item.id, U, p.edge) : U;
1271
- (O = (H = F.current).onItemResize) == null || O.call(H, R.item.id, ue, p.edge);
1281
+ const j = D.current, Y = _.current, ae = H.deltaX / V, fe = p.edge === "left" ? H.item.start_time + ae : H.item.end_time + ae, W = j.timeToX(fe), U = (j.visibleTimeEnd - j.visibleTimeStart) * 0.1, ee = Y.intervalTree.query(j.visibleTimeStart - U, j.visibleTimeEnd + U), N = mt(ee, H.item.id, (me) => j.timeToX(me)), le = Je(W, N, 8, V, Y.dragSnap);
1282
+ let K = le !== null ? j.xToTime(le) : p.newTime;
1283
+ const ce = _.current.hierarchyEngine.getResizeConstraint(H.item.id, p.edge);
1284
+ p.edge === "left" && K > ce.max ? K = ce.max : p.edge === "right" && K < ce.min && (K = ce.min);
1285
+ const de = w ? w("resize", H.item.id, K, p.edge) : K;
1286
+ (X = (I = _.current).onItemResize) == null || X.call(I, H.item.id, de, p.edge);
1272
1287
  }
1273
1288
  }
1274
1289
  }
@@ -1276,161 +1291,161 @@ const Lt = 32, $i = ge.memo(di(function(e, t) {
1276
1291
  return;
1277
1292
  }
1278
1293
  Q.isPending() && Q.cancel();
1279
- const h = o.getBoundingClientRect(), f = l.clientX - h.left, s = l.clientY - h.top, m = Le(f, s, D.current, F.current.intervalTree, F.current.layoutEngine, F.current.groups);
1280
- m && ((J = (V = F.current).onItemClick) == null || J.call(V, m.id, l.nativeEvent));
1281
- }, [Q, E]), ri = ie((l) => {
1282
- var y, k;
1283
- const o = l.currentTarget.getBoundingClientRect(), h = l.clientX - o.left, f = l.clientY - o.top, s = F.current, m = Le(h, f, D.current, s.intervalTree, s.layoutEngine, s.groups);
1294
+ const h = o.getBoundingClientRect(), f = r.clientX - h.left, l = r.clientY - h.top, m = je(f, l, D.current, _.current.intervalTree, _.current.layoutEngine, _.current.groups);
1295
+ m && ((G = (z = _.current).onItemClick) == null || G.call(z, m.id, r.nativeEvent));
1296
+ }, [Q, E]), li = ie((r) => {
1297
+ var y, M;
1298
+ const o = r.currentTarget.getBoundingClientRect(), h = r.clientX - o.left, f = r.clientY - o.top, l = _.current, m = je(h, f, D.current, l.intervalTree, l.layoutEngine, l.groups);
1284
1299
  if (m)
1285
- (y = s.onItemDoubleClick) == null || y.call(s, m.id, l.nativeEvent);
1300
+ (y = l.onItemDoubleClick) == null || y.call(l, m.id, r.nativeEvent);
1286
1301
  else {
1287
- const H = at(f, D.current, s.groups), O = D.current.xToTime(h);
1288
- H && ((k = s.onCanvasDoubleClick) == null || k.call(s, H.id, O));
1302
+ const I = dt(f, D.current, l.groups), X = D.current.xToTime(h);
1303
+ I && ((M = l.onCanvasDoubleClick) == null || M.call(l, I.id, X));
1289
1304
  }
1290
- }, []), oi = ie((l) => {
1291
- var y, k;
1292
- l.preventDefault();
1293
- const o = l.currentTarget.getBoundingClientRect(), h = l.clientX - o.left, f = l.clientY - o.top, s = F.current, m = Le(h, f, D.current, s.intervalTree, s.layoutEngine, s.groups);
1305
+ }, []), ai = ie((r) => {
1306
+ var y, M;
1307
+ r.preventDefault();
1308
+ const o = r.currentTarget.getBoundingClientRect(), h = r.clientX - o.left, f = r.clientY - o.top, l = _.current, m = je(h, f, D.current, l.intervalTree, l.layoutEngine, l.groups);
1294
1309
  if (m)
1295
- (y = s.onItemContextMenu) == null || y.call(s, m.id, l.nativeEvent);
1310
+ (y = l.onItemContextMenu) == null || y.call(l, m.id, r.nativeEvent);
1296
1311
  else {
1297
- const H = at(f, D.current, s.groups), O = D.current.xToTime(h);
1298
- H && ((k = s.onCanvasContextMenu) == null || k.call(s, H.id, O, l.nativeEvent));
1312
+ const I = dt(f, D.current, l.groups), X = D.current.xToTime(h);
1313
+ I && ((M = l.onCanvasContextMenu) == null || M.call(l, I.id, X, r.nativeEvent));
1299
1314
  }
1300
- }, []), si = ie(() => {
1301
- var l, o;
1302
- Ke.current = null, _e.current && (_e.current.style.cursor = "default"), Oe.current !== void 0 && (Oe.current = void 0, E.markDirty("items"), (o = (l = F.current).onItemHover) == null || o.call(l, null, new PointerEvent("pointerleave"))), F.current.showCursorLine && E.markDirty("overlay");
1303
- }, [E]), li = oe(() => {
1304
- const l = [];
1305
- return ge.Children.forEach(Te, (o) => {
1315
+ }, []), ci = ie(() => {
1316
+ var r, o;
1317
+ ve.current = null, He.current = !1, tt.current = null, Oe.current && (Oe.current.style.cursor = "default"), We.current !== void 0 && (We.current = void 0, E.markDirty("items"), (o = (r = _.current).onItemHover) == null || o.call(r, null, new PointerEvent("pointerleave"))), _.current.showCursorLine && E.markDirty("overlay");
1318
+ }, [E]), ui = oe(() => {
1319
+ const r = [];
1320
+ return ge.Children.forEach(Se, (o) => {
1306
1321
  var f;
1307
1322
  if (!ge.isValidElement(o))
1308
1323
  return;
1309
1324
  if (((f = o.type) == null ? void 0 : f.displayName) === "TimelineHeaders") {
1310
- const s = o.props;
1311
- l.push(ge.cloneElement(o, {
1312
- visibleTimeStart: s.visibleTimeStart ?? Tt,
1313
- visibleTimeEnd: s.visibleTimeEnd ?? St,
1314
- canvasWidth: s.canvasWidth ?? Se,
1315
- sidebarWidth: s.sidebarWidth ?? d,
1316
- theme: s.theme ?? ye,
1317
- onZoomToInterval: s.onZoomToInterval ?? ((m, y) => {
1318
- var k, H, O, V;
1319
- D.current.update({ visibleTimeStart: m, visibleTimeEnd: y }), E.markAllDirty(), Re(), (H = (k = F.current).onTimeChange) == null || H.call(k, m, y), (V = (O = F.current).onZoom) == null || V.call(O, m, y);
1325
+ const l = o.props;
1326
+ r.push(ge.cloneElement(o, {
1327
+ visibleTimeStart: l.visibleTimeStart ?? wt,
1328
+ visibleTimeEnd: l.visibleTimeEnd ?? Et,
1329
+ canvasWidth: l.canvasWidth ?? Me,
1330
+ sidebarWidth: l.sidebarWidth ?? u,
1331
+ theme: l.theme ?? Te,
1332
+ onZoomToInterval: l.onZoomToInterval ?? ((m, y) => {
1333
+ var M, I, X, z;
1334
+ D.current.update({ visibleTimeStart: m, visibleTimeEnd: y }), E.markAllDirty(), De(), (I = (M = _.current).onTimeChange) == null || I.call(M, m, y), (z = (X = _.current).onZoom) == null || z.call(X, m, y);
1320
1335
  })
1321
1336
  }));
1322
1337
  }
1323
- }), l;
1324
- }, [Te, Tt, St, Se, d, ye, E, Re]), Pt = x(!1);
1338
+ }), r;
1339
+ }, [Se, wt, Et, Me, u, Te, E, De]), _t = x(!1);
1325
1340
  he(() => {
1326
- Pt.current || (Pt.current = !0, E.markAllDirty());
1327
- }, [E]), ui(t, () => ({
1328
- captureToCanvas({ timeStart: l, timeEnd: o, scale: h, sidebarWidth: f }) {
1329
- const s = F.current, m = 28, y = m * 3, k = s.groups.length * s.lineHeight, H = D.current, O = s.canvasWidth / (H.visibleTimeEnd - H.visibleTimeStart), V = o - l, J = Math.max(s.canvasWidth, Math.round(V * O)), R = (f + J) * h, re = (y + k) * h, $ = document.createElement("canvas");
1330
- $.width = R, $.height = re;
1331
- const w = $.getContext("2d");
1341
+ _t.current || (_t.current = !0, E.markAllDirty());
1342
+ }, [E]), mi(t, () => ({
1343
+ captureToCanvas({ timeStart: r, timeEnd: o, scale: h, sidebarWidth: f }) {
1344
+ const l = _.current, m = 28, y = m * 3, M = l.groups.length * l.lineHeight, I = D.current, X = l.canvasWidth / (I.visibleTimeEnd - I.visibleTimeStart), z = o - r, G = Math.max(l.canvasWidth, Math.round(z * X)), H = (f + G) * h, re = (y + M) * h, V = document.createElement("canvas");
1345
+ V.width = H, V.height = re;
1346
+ const w = V.getContext("2d");
1332
1347
  w.scale(h, h);
1333
- for (let A = 0; A < s.groups.length; A++) {
1334
- const ae = s.groups[A], fe = y + A * s.lineHeight;
1335
- if (s.rowStyle) {
1336
- const N = s.rowStyle(ae);
1337
- N != null && N.backgroundColor && (w.fillStyle = N.backgroundColor, w.fillRect(0, fe, f, s.lineHeight));
1348
+ for (let Y = 0; Y < l.groups.length; Y++) {
1349
+ const ae = l.groups[Y], fe = y + Y * l.lineHeight;
1350
+ if (l.rowStyle) {
1351
+ const N = l.rowStyle(ae);
1352
+ N != null && N.backgroundColor && (w.fillStyle = N.backgroundColor, w.fillRect(0, fe, f, l.lineHeight));
1338
1353
  }
1339
- const X = ae.type;
1340
- let q = "400", ee = 8;
1341
- X === "project" ? q = "700" : X === "CAG" ? q = "600" : X === "CA" && (q = "400", ee = 24), w.fillStyle = "#111", w.font = `${q} 12px sans-serif`, w.textBaseline = "middle", w.fillText(ae.title, ee, fe + s.lineHeight / 2, f - ee - 4);
1354
+ const W = ae.type;
1355
+ let U = "400", ee = 8;
1356
+ W === "project" ? U = "700" : W === "CAG" ? U = "600" : W === "CA" && (U = "400", ee = 24), w.fillStyle = "#111", w.font = `${U} 12px sans-serif`, w.textBaseline = "middle", w.fillText(ae.title, ee, fe + l.lineHeight / 2, f - ee - 4);
1342
1357
  }
1343
- const p = (A, ae, fe) => {
1358
+ const p = (Y, ae, fe) => {
1344
1359
  var ee, N;
1345
- w.fillStyle = ((ee = s.theme.header) == null ? void 0 : ee.bg) ?? "#f5f5f5", w.fillRect(f, A, J, m), w.strokeStyle = ((N = s.theme.grid) == null ? void 0 : N.line) ?? "#e0e0e0", w.lineWidth = 1, w.strokeRect(f, A, J, m);
1346
- let X = pe(l).startOf(fe);
1347
- X.valueOf() < l && (X = X.add(1, fe));
1348
- const q = J / (o - l);
1349
- for (; X.valueOf() < o; ) {
1350
- const le = X.add(1, fe), U = f + (X.valueOf() - l) * q, ue = f + (Math.min(le.valueOf(), o) - l) * q - U;
1351
- w.beginPath(), w.moveTo(U, A), w.lineTo(U, A + m), w.stroke(), w.fillStyle = "#333", w.font = "600 11px sans-serif", w.textBaseline = "middle", w.textAlign = "center", w.fillText(ae(X), U + ue / 2, A + m / 2, ue - 4), X = le;
1360
+ w.fillStyle = ((ee = l.theme.header) == null ? void 0 : ee.bg) ?? "#f5f5f5", w.fillRect(f, Y, G, m), w.strokeStyle = ((N = l.theme.grid) == null ? void 0 : N.line) ?? "#e0e0e0", w.lineWidth = 1, w.strokeRect(f, Y, G, m);
1361
+ let W = pe(r).startOf(fe);
1362
+ W.valueOf() < r && (W = W.add(1, fe));
1363
+ const U = G / (o - r);
1364
+ for (; W.valueOf() < o; ) {
1365
+ const le = W.add(1, fe), K = f + (W.valueOf() - r) * U, de = f + (Math.min(le.valueOf(), o) - r) * U - K;
1366
+ w.beginPath(), w.moveTo(K, Y), w.lineTo(K, Y + m), w.stroke(), w.fillStyle = "#333", w.font = "600 11px sans-serif", w.textBaseline = "middle", w.textAlign = "center", w.fillText(ae(W), K + de / 2, Y + m / 2, de - 4), W = le;
1352
1367
  }
1353
1368
  w.textAlign = "start";
1354
1369
  };
1355
- p(0, (A) => A.format("YYYY"), "year"), p(m, (A) => A.format("MM"), "month"), p(m * 2, (A) => String(A.isoWeek()), "week");
1356
- const j = new lt({
1357
- visibleTimeStart: l,
1370
+ p(0, (Y) => Y.format("YYYY"), "year"), p(m, (Y) => Y.format("MM"), "month"), p(m * 2, (Y) => String(Y.isoWeek()), "week");
1371
+ const j = new ut({
1372
+ visibleTimeStart: r,
1358
1373
  visibleTimeEnd: o,
1359
- canvasWidth: J,
1360
- canvasHeight: k,
1374
+ canvasWidth: G,
1375
+ canvasHeight: M,
1361
1376
  sidebarWidth: 0,
1362
- lineHeight: s.lineHeight,
1363
- groupCount: s.groups.length,
1377
+ lineHeight: l.lineHeight,
1378
+ groupCount: l.groups.length,
1364
1379
  buffer: 1,
1365
1380
  scrollTop: 0
1366
1381
  });
1367
- return w.save(), w.translate(f, y), w.beginPath(), w.rect(0, 0, J, k), w.clip(), Pe.draw(w, j, s.groups, s.theme, s.dayStyle, s.rowStyle, s.highlights), De.draw(w, j, s.groups, s.items, s.intervalTree, s.layoutEngine, s.itemRenderer, s.groupRenderer, s.theme, s.selected, void 0, s.dependencies, s.summaryRenderer, s.hierarchyEngine), Fe.draw(w, j, s.theme, {
1382
+ return w.save(), w.translate(f, y), w.beginPath(), w.rect(0, 0, G, M), w.clip(), Xe.draw(w, j, l.groups, l.theme, l.dayStyle, l.rowStyle, l.highlights), _e.draw(w, j, l.groups, l.items, l.intervalTree, l.layoutEngine, l.itemRenderer, l.groupRenderer, l.theme, l.selected, void 0, l.dependencies, l.summaryRenderer, l.hierarchyEngine), Fe.draw(w, j, l.theme, {
1368
1383
  cursorX: null,
1369
1384
  snapX: null,
1370
- markers: Xe.current,
1385
+ markers: Le.current,
1371
1386
  interaction: null
1372
- }), w.restore(), $;
1387
+ }), w.restore(), V;
1373
1388
  }
1374
- }), [Pe, De, Fe]), he(() => {
1375
- const l = {
1376
- captureToCanvas({ timeStart: o, timeEnd: h, scale: f, sidebarWidth: s }) {
1389
+ }), [Xe, _e, Fe]), he(() => {
1390
+ const r = {
1391
+ captureToCanvas({ timeStart: o, timeEnd: h, scale: f, sidebarWidth: l }) {
1377
1392
  var fe;
1378
- const m = F.current, y = 28, k = y * 3, H = m.groups.length * m.lineHeight, O = D.current, V = m.canvasWidth / (O.visibleTimeEnd - O.visibleTimeStart), J = h - o, R = Math.max(m.canvasWidth, Math.round(J * V)), re = s + R, $ = k + H, w = document.createElement("canvas");
1379
- w.width = re * f, w.height = $ * f;
1393
+ const m = _.current, y = 28, M = y * 3, I = m.groups.length * m.lineHeight, X = D.current, z = m.canvasWidth / (X.visibleTimeEnd - X.visibleTimeStart), G = h - o, H = Math.max(m.canvasWidth, Math.round(G * z)), re = l + H, V = M + I, w = document.createElement("canvas");
1394
+ w.width = re * f, w.height = V * f;
1380
1395
  const p = w.getContext("2d");
1381
- p.scale(f, f), p.fillStyle = "#FFFFFF", p.fillRect(0, 0, re, $), p.save(), p.beginPath(), p.rect(0, 0, s, $), p.clip(), p.fillStyle = "#F9FAFB", p.fillRect(0, 0, s, k), p.strokeStyle = "#E5E7EB", p.lineWidth = 1, p.strokeRect(0, 0, s, k);
1382
- for (let X = 0; X < m.groups.length; X++) {
1383
- const q = m.groups[X], ee = k + X * m.lineHeight, N = (fe = m.rowStyle) == null ? void 0 : fe.call(m, q);
1384
- p.fillStyle = (N == null ? void 0 : N.backgroundColor) ?? (X % 2 === 0 ? "#FFFFFF" : "#F7F7F7"), p.fillRect(0, ee, s, m.lineHeight), p.strokeStyle = "#E5E5E5", p.lineWidth = 0.5, p.beginPath(), p.moveTo(0, ee + m.lineHeight), p.lineTo(s, ee + m.lineHeight), p.stroke();
1385
- const le = q.type ?? "";
1386
- let U = 8, ce = "400", ue = 11;
1387
- le === "project" ? (ce = "700", ue = 12) : le === "control_area_group" ? ce = "600" : le === "control_area" && (U = 24), p.fillStyle = "#374151", p.font = `${ce} ${ue}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`, p.textBaseline = "middle";
1388
- const me = typeof q.title == "string" ? q.title : String(q.title);
1389
- p.fillText(me, U, ee + m.lineHeight / 2, s - U - 8);
1396
+ p.scale(f, f), p.fillStyle = "#FFFFFF", p.fillRect(0, 0, re, V), p.save(), p.beginPath(), p.rect(0, 0, l, V), p.clip(), p.fillStyle = "#F9FAFB", p.fillRect(0, 0, l, M), p.strokeStyle = "#E5E7EB", p.lineWidth = 1, p.strokeRect(0, 0, l, M);
1397
+ for (let W = 0; W < m.groups.length; W++) {
1398
+ const U = m.groups[W], ee = M + W * m.lineHeight, N = (fe = m.rowStyle) == null ? void 0 : fe.call(m, U);
1399
+ p.fillStyle = (N == null ? void 0 : N.backgroundColor) ?? (W % 2 === 0 ? "#FFFFFF" : "#F7F7F7"), p.fillRect(0, ee, l, m.lineHeight), p.strokeStyle = "#E5E5E5", p.lineWidth = 0.5, p.beginPath(), p.moveTo(0, ee + m.lineHeight), p.lineTo(l, ee + m.lineHeight), p.stroke();
1400
+ const le = U.type ?? "";
1401
+ let K = 8, ce = "400", de = 11;
1402
+ le === "project" ? (ce = "700", de = 12) : le === "control_area_group" ? ce = "600" : le === "control_area" && (K = 24), p.fillStyle = "#374151", p.font = `${ce} ${de}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`, p.textBaseline = "middle";
1403
+ const me = typeof U.title == "string" ? U.title : String(U.title);
1404
+ p.fillText(me, K, ee + m.lineHeight / 2, l - K - 8);
1390
1405
  }
1391
- p.strokeStyle = "#E5E7EB", p.lineWidth = 1, p.beginPath(), p.moveTo(s, 0), p.lineTo(s, $), p.stroke(), p.restore(), p.save(), p.beginPath(), p.rect(s, 0, R, k), p.clip();
1392
- const j = h - o, A = [
1406
+ p.strokeStyle = "#E5E7EB", p.lineWidth = 1, p.beginPath(), p.moveTo(l, 0), p.lineTo(l, V), p.stroke(), p.restore(), p.save(), p.beginPath(), p.rect(l, 0, H, M), p.clip();
1407
+ const j = h - o, Y = [
1393
1408
  { unit: "year", row: 0 },
1394
1409
  { unit: "month", row: 1 },
1395
1410
  { unit: "week", row: 2 }
1396
1411
  ];
1397
- for (const { unit: X, row: q } of A) {
1398
- const ee = q * y;
1399
- p.fillStyle = "#F9FAFB", p.fillRect(s, ee, R, y);
1400
- let N = pe(o).startOf(X);
1401
- const le = pe(h).add(1, X);
1412
+ for (const { unit: W, row: U } of Y) {
1413
+ const ee = U * y;
1414
+ p.fillStyle = "#F9FAFB", p.fillRect(l, ee, H, y);
1415
+ let N = pe(o).startOf(W);
1416
+ const le = pe(h).add(1, W);
1402
1417
  for (; N.isBefore(le); ) {
1403
- const U = N.add(1, X), ce = s + (N.valueOf() - o) / j * R, ue = (U.valueOf() - N.valueOf()) / j * R;
1404
- p.strokeStyle = "#E5E7EB", p.lineWidth = 0.5, p.strokeRect(ce, ee, ue, y);
1418
+ const K = N.add(1, W), ce = l + (N.valueOf() - o) / j * H, de = (K.valueOf() - N.valueOf()) / j * H;
1419
+ p.strokeStyle = "#E5E7EB", p.lineWidth = 0.5, p.strokeRect(ce, ee, de, y);
1405
1420
  let me;
1406
- X === "year" ? me = N.format("YYYY") : X === "month" ? me = N.format("MM") : me = `${N.week()}`, p.fillStyle = "#6c737f", p.font = X === "year" ? '600 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif' : '400 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif', p.textBaseline = "middle", p.textAlign = "center", ue > 20 && p.fillText(me, ce + ue / 2, ee + y / 2), N = U;
1421
+ W === "year" ? me = N.format("YYYY") : W === "month" ? me = N.format("MM") : me = `${N.week()}`, p.fillStyle = "#6c737f", p.font = W === "year" ? '600 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif' : '400 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif', p.textBaseline = "middle", p.textAlign = "center", de > 20 && p.fillText(me, ce + de / 2, ee + y / 2), N = K;
1407
1422
  }
1408
1423
  }
1409
- p.textAlign = "start", p.restore(), p.save(), p.beginPath(), p.rect(s, k, R, H), p.clip(), p.translate(s, k);
1410
- const ae = new lt({
1424
+ p.textAlign = "start", p.restore(), p.save(), p.beginPath(), p.rect(l, M, H, I), p.clip(), p.translate(l, M);
1425
+ const ae = new ut({
1411
1426
  visibleTimeStart: o,
1412
1427
  visibleTimeEnd: h,
1413
- canvasWidth: R,
1414
- canvasHeight: H,
1428
+ canvasWidth: H,
1429
+ canvasHeight: I,
1415
1430
  sidebarWidth: 0,
1416
1431
  lineHeight: m.lineHeight,
1417
1432
  groupCount: m.groups.length,
1418
1433
  buffer: 1,
1419
1434
  scrollTop: 0
1420
1435
  });
1421
- return Pe.draw(p, ae, m.groups, m.theme, m.dayStyle, m.rowStyle, m.highlights), De.draw(p, ae, m.groups, m.items, m.intervalTree, m.layoutEngine, m.itemRenderer, m.groupRenderer, m.theme, m.selected, void 0, m.dependencies, m.summaryRenderer, m.hierarchyEngine), Fe.draw(p, ae, m.theme, { cursorX: null, markers: Xe.current }), p.restore(), w;
1436
+ return Xe.draw(p, ae, m.groups, m.theme, m.dayStyle, m.rowStyle, m.highlights), _e.draw(p, ae, m.groups, m.items, m.intervalTree, m.layoutEngine, m.itemRenderer, m.groupRenderer, m.theme, m.selected, void 0, m.dependencies, m.summaryRenderer, m.hierarchyEngine), Fe.draw(p, ae, m.theme, { cursorX: null, markers: Le.current }), p.restore(), w;
1422
1437
  }
1423
1438
  };
1424
- je == null || je(l);
1425
- }, [je, Pe, De, Fe]);
1426
- const ai = {
1439
+ ze == null || ze(r);
1440
+ }, [ze, Xe, _e, Fe]);
1441
+ const di = {
1427
1442
  position: "relative",
1428
- width: Se,
1443
+ width: Me,
1429
1444
  height: ke,
1430
1445
  overflow: "hidden",
1431
1446
  cursor: "default"
1432
- }, st = { position: "absolute", top: 0, left: 0 };
1433
- return Ae("div", { ref: yt, style: { display: "flex", flexDirection: "column", width: "100%", position: "relative" }, children: [xt ? Ae("div", { style: {
1447
+ }, ct = { position: "absolute", top: 0, left: 0 };
1448
+ return Ne("div", { ref: Mt, style: { display: "flex", flexDirection: "column", width: "100%", position: "relative" }, children: [Zt ? Ne("div", { style: {
1434
1449
  position: "absolute",
1435
1450
  top: 0,
1436
1451
  left: 0,
@@ -1444,26 +1459,26 @@ const Lt = 32, $i = ge.memo(di(function(e, t) {
1444
1459
  borderBottomRightRadius: 4,
1445
1460
  pointerEvents: "none",
1446
1461
  userSelect: "none"
1447
- }, children: ["v", "0.4.0", " · ", "11:57:07"] }) : null, li, Ae("div", { ref: Vt, style: { display: "flex", overflow: "hidden" }, children: [se(Wt, { groups: n, width: d, lineHeight: c, scrollTop: kt, canvasHeight: ke, theme: ye, groupRenderer: ne, onScroll: (l) => {
1448
- D.current.update({ scrollTop: l }), E.markDirty("grid"), E.markDirty("items"), E.markDirty("overlay"), Ne(l);
1449
- } }), Ae("div", { ref: _e, style: ai, onPointerMove: ti, onPointerDown: ii, onPointerUp: ni, onDoubleClick: ri, onContextMenu: oi, onPointerLeave: si, children: [se("canvas", { ref: pt, style: { ...st, zIndex: 0 } }), se("canvas", { ref: vt, style: { ...st, zIndex: 1 } }), se("canvas", { ref: bt, style: { ...st, zIndex: 2 } })] }), qe && mt ? se(Wt, { groups: n, width: qe, lineHeight: c, scrollTop: kt, canvasHeight: ke, theme: ye, groupRenderer: mt, onScroll: (l) => {
1450
- D.current.update({ scrollTop: l }), E.markDirty("grid"), E.markDirty("items"), E.markDirty("overlay"), Ne(l);
1462
+ }, children: ["v", "0.4.5", " · ", "09:22:40"] }) : null, ui, Ne("div", { ref: Ut, style: { display: "flex", overflow: "hidden" }, children: [se(Lt, { groups: n, width: u, lineHeight: c, scrollTop: Ct, canvasHeight: ke, theme: Te, groupRenderer: ne, onScroll: (r) => {
1463
+ D.current.update({ scrollTop: r }), E.markDirty("grid"), E.markDirty("items"), E.markDirty("overlay"), $e(r);
1464
+ } }), Ne("div", { ref: Oe, style: di, onPointerMove: ri, onPointerDown: oi, onPointerUp: si, onDoubleClick: li, onContextMenu: ai, onPointerLeave: ci, children: [se("canvas", { ref: yt, style: { ...ct, zIndex: 0 } }), se("canvas", { ref: Tt, style: { ...ct, zIndex: 1 } }), se("canvas", { ref: St, style: { ...ct, zIndex: 2 } })] }), Qe && vt ? se(Lt, { groups: n, width: Qe, lineHeight: c, scrollTop: Ct, canvasHeight: ke, theme: Te, groupRenderer: vt, onScroll: (r) => {
1465
+ D.current.update({ scrollTop: r }), E.markDirty("grid"), E.markDirty("items"), E.markDirty("overlay"), $e(r);
1451
1466
  } }) : null] })] });
1452
1467
  }));
1453
- function Di({ children: i, theme: e, className: t, classNames: n, style: r, visibleTimeStart: u, visibleTimeEnd: a, canvasWidth: d, sidebarWidth: c = 0, onZoomToInterval: v }) {
1454
- const M = ge.Children.map(i, (g) => {
1468
+ function Fi({ children: i, theme: e, className: t, classNames: n, style: s, visibleTimeStart: d, visibleTimeEnd: a, canvasWidth: u, sidebarWidth: c = 0, onZoomToInterval: v }) {
1469
+ const k = ge.Children.map(i, (g) => {
1455
1470
  var T;
1456
1471
  if (!ge.isValidElement(g))
1457
1472
  return g;
1458
1473
  if (((T = g.type) == null ? void 0 : T.displayName) === "DateHeader") {
1459
- const C = g.props, I = ge.cloneElement(g, {
1460
- visibleTimeStart: C.visibleTimeStart ?? u,
1474
+ const C = g.props, R = ge.cloneElement(g, {
1475
+ visibleTimeStart: C.visibleTimeStart ?? d,
1461
1476
  visibleTimeEnd: C.visibleTimeEnd ?? a,
1462
- canvasWidth: C.canvasWidth ?? d,
1477
+ canvasWidth: C.canvasWidth ?? u,
1463
1478
  theme: C.theme ?? e,
1464
1479
  onZoomToInterval: C.onIntervalClick ?? C.onZoomToInterval ?? v
1465
1480
  });
1466
- return Ae("div", { style: { display: "flex" }, children: [se("div", { style: { width: c, flexShrink: 0 } }), se("div", { style: { flex: 1, overflow: "hidden" }, children: I })] });
1481
+ return Ne("div", { style: { display: "flex" }, children: [se("div", { style: { width: c, flexShrink: 0 } }), se("div", { style: { flex: 1, overflow: "hidden" }, children: R })] });
1467
1482
  }
1468
1483
  return g;
1469
1484
  });
@@ -1476,65 +1491,65 @@ function Di({ children: i, theme: e, className: t, classNames: n, style: r, visi
1476
1491
  backgroundColor: (e == null ? void 0 : e.header.bg) ?? "#F9FAFB",
1477
1492
  borderTop: `1px solid ${(e == null ? void 0 : e.header.border) ?? "#E5E7EB"}`,
1478
1493
  borderBottom: `1px solid ${(e == null ? void 0 : e.header.border) ?? "#E5E7EB"}`,
1479
- ...r
1480
- }, children: M });
1494
+ ...s
1495
+ }, children: k });
1481
1496
  }
1482
- Di.displayName = "TimelineHeaders";
1483
- var $t = { exports: {} };
1497
+ Fi.displayName = "TimelineHeaders";
1498
+ var Vt = { exports: {} };
1484
1499
  (function(i, e) {
1485
1500
  (function(t, n) {
1486
1501
  i.exports = n();
1487
- })(jt, function() {
1502
+ })(zt, function() {
1488
1503
  var t = "week", n = "year";
1489
- return function(r, u, a) {
1490
- var d = u.prototype;
1491
- d.week = function(c) {
1504
+ return function(s, d, a) {
1505
+ var u = d.prototype;
1506
+ u.week = function(c) {
1492
1507
  if (c === void 0 && (c = null), c !== null) return this.add(7 * (c - this.week()), "day");
1493
1508
  var v = this.$locale().yearStart || 1;
1494
1509
  if (this.month() === 11 && this.date() > 25) {
1495
- var M = a(this).startOf(n).add(1, n).date(v), g = a(this).endOf(t);
1496
- if (M.isBefore(g)) return 1;
1510
+ var k = a(this).startOf(n).add(1, n).date(v), g = a(this).endOf(t);
1511
+ if (k.isBefore(g)) return 1;
1497
1512
  }
1498
1513
  var b = a(this).startOf(n).date(v).startOf(t).subtract(1, "millisecond"), T = this.diff(b, t, !0);
1499
1514
  return T < 0 ? a(this).startOf("week").week() : Math.ceil(T);
1500
- }, d.weeks = function(c) {
1515
+ }, u.weeks = function(c) {
1501
1516
  return c === void 0 && (c = null), this.week(c);
1502
1517
  };
1503
1518
  };
1504
1519
  });
1505
- })($t);
1506
- var Fi = $t.exports;
1507
- const _i = /* @__PURE__ */ Nt(Fi);
1508
- pe.extend(_i);
1509
- const Oi = {
1520
+ })(Vt);
1521
+ var Oi = Vt.exports;
1522
+ const Wi = /* @__PURE__ */ $t(Oi);
1523
+ pe.extend(Wi);
1524
+ const Bi = {
1510
1525
  year: 30,
1511
1526
  month: 30,
1512
1527
  week: 20,
1513
1528
  day: 15,
1514
1529
  hour: 30
1515
1530
  };
1516
- function Wi({ unit: i, visibleTimeStart: e = 0, visibleTimeEnd: t = 0, canvasWidth: n = 0, theme: r, height: u = 28, className: a, labelFormat: d, onIntervalClick: c, minCellWidth: v, onZoomToInterval: M }) {
1531
+ function Li({ unit: i, visibleTimeStart: e = 0, visibleTimeEnd: t = 0, canvasWidth: n = 0, theme: s, height: d = 28, className: a, labelFormat: u, onIntervalClick: c, minCellWidth: v, onZoomToInterval: k }) {
1517
1532
  const g = oe(() => {
1518
1533
  if (!e || !t || !n)
1519
1534
  return [];
1520
- const T = t - e, C = v ?? Oi[i];
1535
+ const T = t - e, C = v ?? Bi[i];
1521
1536
  if (C > 0) {
1522
1537
  const S = pe(e).startOf(i);
1523
1538
  if ((S.add(1, i).valueOf() - S.valueOf()) / T * n < C)
1524
1539
  return [];
1525
1540
  }
1526
- const I = [];
1527
- let W = pe(e).startOf(i).subtract(1, i);
1528
- const z = pe(t).add(2, i).valueOf();
1529
- for (; W.valueOf() < z; ) {
1530
- const S = W.add(1, i), _ = W.valueOf(), B = S.valueOf(), Y = (_ - e) / T * n, G = (B - _) / T * n, ne = Xi(W, S, i, d);
1531
- I.push({ start: _, end: B, label: ne, left: Y, width: G }), W = S;
1541
+ const R = [];
1542
+ let O = pe(e).startOf(i).subtract(1, i);
1543
+ const $ = pe(t).add(2, i).valueOf();
1544
+ for (; O.valueOf() < $; ) {
1545
+ const S = O.add(1, i), F = O.valueOf(), B = S.valueOf(), A = (F - e) / T * n, Z = (B - F) / T * n, ne = Yi(O, S, i, u);
1546
+ R.push({ start: F, end: B, label: ne, left: A, width: Z }), O = S;
1532
1547
  }
1533
- return I;
1534
- }, [e, t, n, i, d, v]), b = ie((T, C) => {
1535
- c ? c(T, C) : M && M(T, C);
1536
- }, [c, M]);
1537
- return g.length === 0 ? null : se("div", { style: { display: "flex", position: "relative", height: u, overflow: "hidden" }, children: g.map((T) => se("div", { className: a, onClick: () => b(T.start, T.end), style: {
1548
+ return R;
1549
+ }, [e, t, n, i, u, v]), b = ie((T, C) => {
1550
+ c ? c(T, C) : k && k(T, C);
1551
+ }, [c, k]);
1552
+ return g.length === 0 ? null : se("div", { style: { display: "flex", position: "relative", height: d, overflow: "hidden" }, children: g.map((T) => se("div", { className: a, onClick: () => b(T.start, T.end), style: {
1538
1553
  position: "absolute",
1539
1554
  left: T.left,
1540
1555
  width: T.width,
@@ -1542,11 +1557,11 @@ function Wi({ unit: i, visibleTimeStart: e = 0, visibleTimeEnd: t = 0, canvasWid
1542
1557
  display: "flex",
1543
1558
  alignItems: "center",
1544
1559
  justifyContent: "center",
1545
- borderRight: `1px solid ${(r == null ? void 0 : r.header.border) ?? "#E5E7EB"}`,
1546
- borderBottom: `1px solid ${(r == null ? void 0 : r.header.border) ?? "#E5E7EB"}`,
1560
+ borderRight: `1px solid ${(s == null ? void 0 : s.header.border) ?? "#E5E7EB"}`,
1561
+ borderBottom: `1px solid ${(s == null ? void 0 : s.header.border) ?? "#E5E7EB"}`,
1547
1562
  fontSize: 12,
1548
- color: (r == null ? void 0 : r.header.text) ?? "#6c737f",
1549
- backgroundColor: (r == null ? void 0 : r.header.bg) ?? "#F9FAFB",
1563
+ color: (s == null ? void 0 : s.header.text) ?? "#6c737f",
1564
+ backgroundColor: (s == null ? void 0 : s.header.bg) ?? "#F9FAFB",
1550
1565
  overflow: "hidden",
1551
1566
  whiteSpace: "nowrap",
1552
1567
  cursor: "pointer",
@@ -1555,11 +1570,11 @@ function Wi({ unit: i, visibleTimeStart: e = 0, visibleTimeEnd: t = 0, canvasWid
1555
1570
  boxSizing: "border-box"
1556
1571
  }, children: se("span", { children: T.label }) }, T.start)) });
1557
1572
  }
1558
- Wi.displayName = "DateHeader";
1559
- function Xi(i, e, t, n, r) {
1560
- return typeof n == "function" ? n(i.toDate(), e.toDate(), t) : typeof n == "string" ? i.format(n) : Bi(i, t);
1573
+ Li.displayName = "DateHeader";
1574
+ function Yi(i, e, t, n, s) {
1575
+ return typeof n == "function" ? n(i.toDate(), e.toDate(), t) : typeof n == "string" ? i.format(n) : Ai(i, t);
1561
1576
  }
1562
- function Bi(i, e) {
1577
+ function Ai(i, e) {
1563
1578
  switch (e) {
1564
1579
  case "year":
1565
1580
  return i.format("YYYY");
@@ -1573,24 +1588,24 @@ function Bi(i, e) {
1573
1588
  return i.format("HH:mm");
1574
1589
  }
1575
1590
  }
1576
- function Li({ width: i, children: e, style: t }) {
1591
+ function ji({ width: i, children: e, style: t }) {
1577
1592
  const n = () => ({ style: { width: i, ...t } });
1578
- return e ? se(At, { children: e({ getRootProps: n }) }) : se("div", { style: { width: i } });
1593
+ return e ? se(Nt, { children: e({ getRootProps: n }) }) : se("div", { style: { width: i } });
1579
1594
  }
1580
- Li.displayName = "SidebarHeader";
1581
- function Ai({ children: i }) {
1582
- return se(At, { children: i });
1595
+ ji.displayName = "SidebarHeader";
1596
+ function Ni({ children: i }) {
1597
+ return se(Nt, { children: i });
1583
1598
  }
1584
- Ai.displayName = "CustomHeader";
1599
+ Ni.displayName = "CustomHeader";
1585
1600
  export {
1586
- $i as CanvasTimeline,
1587
- Ai as CustomHeader,
1588
- Ri as CustomMarker,
1589
- we as DEFAULT_THEME,
1590
- Wi as DateHeader,
1591
- gi as HierarchyEngine,
1592
- Li as SidebarHeader,
1593
- Di as TimelineHeaders,
1594
- Hi as TodayMarker
1601
+ Vi as CanvasTimeline,
1602
+ Ni as CustomHeader,
1603
+ Xi as CustomMarker,
1604
+ Ee as DEFAULT_THEME,
1605
+ Li as DateHeader,
1606
+ bi as HierarchyEngine,
1607
+ ji as SidebarHeader,
1608
+ Fi as TimelineHeaders,
1609
+ Pi as TodayMarker
1595
1610
  };
1596
1611
  //# sourceMappingURL=canvas-timeline.es.js.map