@taskctrl/canvas-timeline 0.1.2 → 0.3.0

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