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