@umriss-ui/schedule 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/dist/schedule.css +1 -1
- package/dist/schedule.js +245 -245
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -15,6 +15,34 @@ moves from here under the rule above.
|
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
+
## 0.1.8 – Core 0.9.0 (Sep. 2026)
|
|
19
|
+
|
|
20
|
+
Admits `@umriss-ui/core` 0.9, which only adds a token; the peer range moves to `^0.9.0`. Nothing else changes.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 0.1.7 – Core 0.8.0: a fold that turns (Sep. 2026)
|
|
25
|
+
|
|
26
|
+
Needs `@umriss-ui/core` 0.8: it reads core's pressed surfaces and motion tokens; the peer range moves to `^0.8.0`.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- **The lane-group fold is core's `AngleGlyph`** – the same chevron, at the
|
|
31
|
+
one stroke width (1.4 instead of 1.5).
|
|
32
|
+
|
|
33
|
+
- **The fold chevron of a lane group has a surface.** Under the pointer it now
|
|
34
|
+
takes the sunken surface of core's quiet keys, and a stronger one while
|
|
35
|
+
pressed, like the table's expander; it only darkened its type before. Its
|
|
36
|
+
focus is the ring alone - the ring no longer darkens the type as well.
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- **The fold chevron of a lane group turns.** Its transition named a curve token
|
|
41
|
+
that does not exist (`--u-ease-standard`), which made the whole declaration
|
|
42
|
+
invalid, so the chevron has always jumped. It now reads `--u-ease-out`.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
18
46
|
## 0.1.6 – Core 0.7.0 (Sep. 2026)
|
|
19
47
|
|
|
20
48
|
### Changed
|
package/dist/schedule.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer umriss.tokens,umriss.base,umriss.components;@layer umriss.base{._text_1hv7a_23{font-family:var(--u-font-sans);font-size:var(--u-text-md);line-height:var(--u-leading-normal);color:var(--u-color-text);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}._field_1hv7a_34{caret-color:var(--u-color-accent)}._scroll_1hv7a_40{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--u-color-text) 25%,transparent) transparent}._scroll_1hv7a_40::-webkit-scrollbar{width:10px;height:10px}._scroll_1hv7a_40::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--u-color-text) 22%,transparent);border-radius:var(--u-radius-full);border:3px solid transparent;background-clip:content-box}._scroll_1hv7a_40::-webkit-scrollbar-track{background:transparent}}@layer umriss.components{._ring_1hv7a_65:focus-visible{outline:none;box-shadow:var(--u-focus-ring)}@media(pointer:coarse){._field_1hv7a_34._field_1hv7a_34{font-size:16px}}._field_1hv7a_34:-webkit-autofill,._field_1hv7a_34:-webkit-autofill:hover,._field_1hv7a_34:-webkit-autofill:focus{-webkit-box-shadow:inset 0 0 0 1000px var(--u-color-surface),0 0 0 1px var(--u-edge-color-strong);-webkit-text-fill-color:var(--u-color-text);caret-color:var(--u-color-accent)}}@layer umriss.tokens,umriss.base,umriss.components;@layer umriss.components{.
|
|
1
|
+
@layer umriss.tokens,umriss.base,umriss.components;@layer umriss.base{._text_1hv7a_23{font-family:var(--u-font-sans);font-size:var(--u-text-md);line-height:var(--u-leading-normal);color:var(--u-color-text);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}._field_1hv7a_34{caret-color:var(--u-color-accent)}._scroll_1hv7a_40{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--u-color-text) 25%,transparent) transparent}._scroll_1hv7a_40::-webkit-scrollbar{width:10px;height:10px}._scroll_1hv7a_40::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--u-color-text) 22%,transparent);border-radius:var(--u-radius-full);border:3px solid transparent;background-clip:content-box}._scroll_1hv7a_40::-webkit-scrollbar-track{background:transparent}}@layer umriss.components{._ring_1hv7a_65:focus-visible{outline:none;box-shadow:var(--u-focus-ring)}@media(pointer:coarse){._field_1hv7a_34._field_1hv7a_34{font-size:16px}}._field_1hv7a_34:-webkit-autofill,._field_1hv7a_34:-webkit-autofill:hover,._field_1hv7a_34:-webkit-autofill:focus{-webkit-box-shadow:inset 0 0 0 1000px var(--u-color-surface),0 0 0 1px var(--u-edge-color-strong);-webkit-text-fill-color:var(--u-color-text);caret-color:var(--u-color-accent)}}@layer umriss.tokens,umriss.base,umriss.components;@layer umriss.components{._root_p2o7g_4,._root_p2o7g_4:before,._root_p2o7g_4:after{box-sizing:border-box}._corner_p2o7g_18,._corner_p2o7g_18:before,._corner_p2o7g_18:after{box-sizing:border-box}._dayBand_p2o7g_22,._dayBand_p2o7g_22:before,._dayBand_p2o7g_22:after{box-sizing:border-box}._tickBand_p2o7g_23,._tickBand_p2o7g_23:before,._tickBand_p2o7g_23:after{box-sizing:border-box}._day_p2o7g_22,._day_p2o7g_22:before,._day_p2o7g_22:after{box-sizing:border-box}._dayLabel_p2o7g_46,._dayLabel_p2o7g_46:before,._dayLabel_p2o7g_46:after{box-sizing:border-box}._tick_p2o7g_23,._tick_p2o7g_23:before,._tick_p2o7g_23:after{box-sizing:border-box}._tickLabel_p2o7g_64,._tickLabel_p2o7g_64:before,._tickLabel_p2o7g_64:after{box-sizing:border-box}._headers_p2o7g_72,._headers_p2o7g_72:before,._headers_p2o7g_72:after{box-sizing:border-box}._header_p2o7g_72,._header_p2o7g_72:before,._header_p2o7g_72:after{box-sizing:border-box}._headerLabel_p2o7g_90,._headerLabel_p2o7g_90:before,._headerLabel_p2o7g_90:after{box-sizing:border-box}._headerCount_p2o7g_103,._headerCount_p2o7g_103:before,._headerCount_p2o7g_103:after{box-sizing:border-box}._chevron_p2o7g_112,._chevron_p2o7g_112:before,._chevron_p2o7g_112:after{box-sizing:border-box}._plot_p2o7g_170,._plot_p2o7g_170:before,._plot_p2o7g_170:after{box-sizing:border-box}._layer_p2o7g_176,._layer_p2o7g_176:before,._layer_p2o7g_176:after{box-sizing:border-box}._grip_p2o7g_185,._grip_p2o7g_185:before,._grip_p2o7g_185:after{box-sizing:border-box}._ghostLabel_p2o7g_195,._ghostLabel_p2o7g_195:before,._ghostLabel_p2o7g_195:after{box-sizing:border-box}._finding_p2o7g_208,._finding_p2o7g_208:before,._finding_p2o7g_208:after{box-sizing:border-box}._refusal_p2o7g_216,._refusal_p2o7g_216:before,._refusal_p2o7g_216:after{box-sizing:border-box}._tooltip_p2o7g_220,._tooltip_p2o7g_220:before,._tooltip_p2o7g_220:after{box-sizing:border-box}._tooltipHead_p2o7g_238,._tooltipHead_p2o7g_238:before,._tooltipHead_p2o7g_238:after{box-sizing:border-box}._tooltipTimes_p2o7g_243,._tooltipTimes_p2o7g_243:before,._tooltipTimes_p2o7g_243:after{box-sizing:border-box}._now_p2o7g_252,._now_p2o7g_252:before,._now_p2o7g_252:after{box-sizing:border-box}._barLabel_p2o7g_266,._barLabel_p2o7g_266:before,._barLabel_p2o7g_266:after{box-sizing:border-box}._barLabelText_p2o7g_279,._barLabelText_p2o7g_279:before,._barLabelText_p2o7g_279:after{box-sizing:border-box}._root_p2o7g_4{display:grid;grid-template-rows:28px minmax(0,1fr) 28px;width:100%;font-size:var(--u-text-sm);background:var(--u-color-surface);box-shadow:var(--u-edge);border-radius:var(--u-radius-md);corner-shape:squircle;overflow:hidden;font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none}._corner_p2o7g_18{background:var(--u-color-surface)}._dayBand_p2o7g_22,._tickBand_p2o7g_23{position:relative;overflow:hidden;color:var(--u-color-text-muted);font-size:var(--u-text-xs)}._dayBand_p2o7g_22{border-bottom:1px solid var(--u-hairline-strong)}._tickBand_p2o7g_23{border-top:1px solid var(--u-hairline-strong)}._day_p2o7g_22{position:absolute;top:0;bottom:0;border-left:1px solid var(--u-hairline-strong);overflow:hidden}._dayLabel_p2o7g_46{position:absolute;left:var(--u-space-2);top:50%;transform:translateY(-50%);white-space:nowrap;color:var(--u-color-text);font-weight:var(--u-weight-medium)}._tick_p2o7g_23{position:absolute;top:0;bottom:0;width:1px;background:var(--u-hairline)}._tickLabel_p2o7g_64{position:absolute;top:50%;left:0;transform:translate(-50%,-50%);white-space:nowrap}._headers_p2o7g_72{position:relative;overflow:hidden;border-right:1px solid var(--u-hairline-strong)}._header_p2o7g_72{display:flex;align-items:center;gap:var(--u-space-2);padding-right:var(--u-space-3);border-bottom:1px solid var(--u-hairline);overflow:hidden;white-space:nowrap}._headerLabel_p2o7g_90{min-width:0;overflow:hidden;text-overflow:ellipsis}._header_p2o7g_72[data-row=groupHead],._header_p2o7g_72[data-row=miniature]{font-weight:var(--u-weight-medium)}._headerCount_p2o7g_103{flex:none;color:var(--u-color-text-muted);font-size:var(--u-text-xs);font-variant-numeric:tabular-nums}._chevron_p2o7g_112{flex:none;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;border:none;border-radius:var(--u-radius-xs);corner-shape:squircle;background:transparent;color:var(--u-color-text-secondary);cursor:pointer;transition:background-color var(--u-transition),color var(--u-transition)}._chevron_p2o7g_112:hover{background:var(--u-color-surface-sunken);color:var(--u-color-text)}._chevron_p2o7g_112:active{background:var(--u-color-surface-pressed)}._chevron_p2o7g_112:focus-visible{outline:none;box-shadow:var(--u-focus-ring)}._chevron_p2o7g_112 svg{box-sizing:border-box}._chevron_p2o7g_112 svg{transition:transform var(--u-transition-path)}._chevron_p2o7g_112 svg[data-open]{box-sizing:border-box}._chevron_p2o7g_112 svg[data-open]{transform:rotate(90deg)}@media(prefers-reduced-motion:reduce){._chevron_p2o7g_112 svg{transition:none}}._header_p2o7g_72[data-refused]{color:var(--u-color-text-muted)}._plot_p2o7g_170{position:relative;overflow:hidden;touch-action:none}._layer_p2o7g_176{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block;pointer-events:none}._grip_p2o7g_185{position:absolute;width:9px;margin-left:-4px;border-radius:var(--u-radius-xs);corner-shape:squircle;background:var(--u-color-surface);box-shadow:inset 0 0 0 1.5px var(--u-color-text);cursor:ew-resize}._ghostLabel_p2o7g_195{position:absolute;display:inline-flex;gap:var(--u-space-2);padding:1px var(--u-space-2);border-radius:var(--u-radius-sm);corner-shape:squircle;background:var(--u-color-text);color:var(--u-color-surface);font-size:var(--u-text-xs);white-space:nowrap;pointer-events:none}._finding_p2o7g_208{font-weight:var(--u-weight-semibold);color:var(--u-color-danger-subtle)}._refusal_p2o7g_216{font-weight:var(--u-weight-semibold)}._tooltip_p2o7g_220{position:absolute;z-index:1;display:flex;flex-direction:column;gap:1px;max-width:260px;padding:var(--u-space-2) var(--u-space-3);border-radius:var(--u-radius-sm);corner-shape:squircle;background:var(--u-color-surface);box-shadow:var(--u-shadow-overlay);color:var(--u-color-text-secondary);font-size:var(--u-text-xs);line-height:var(--u-leading-tight);pointer-events:none;white-space:nowrap}._tooltipHead_p2o7g_238{color:var(--u-color-text);font-weight:var(--u-weight-semibold)}._tooltipTimes_p2o7g_243{color:var(--u-color-text)}._tooltip_p2o7g_220 ._finding_p2o7g_208{color:var(--u-color-danger-text)}._now_p2o7g_252{position:absolute;top:0;width:0;height:0;margin-left:-4px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid var(--u-color-accent)}._barLabel_p2o7g_266{position:absolute;display:flex;align-items:center;padding:0 var(--u-space-1);overflow:hidden;font-size:var(--u-text-xs);line-height:var(--u-leading-tight);pointer-events:none}._barLabelText_p2o7g_279{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}._barLabel_p2o7g_266[data-on=dark]{color:var(--u-color-on-accent)}._barLabel_p2o7g_266[data-on=light]{color:var(--u-color-text)}}
|
package/dist/schedule.js
CHANGED
|
@@ -2,32 +2,32 @@ import "./schedule.css";
|
|
|
2
2
|
var He = Object.defineProperty;
|
|
3
3
|
var Ye = (n, t, e) => t in n ? He(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
|
|
4
4
|
var f = (n, t, e) => Ye(n, typeof t != "symbol" ? t + "" : t, e);
|
|
5
|
-
import { jsxs as Y, Fragment as
|
|
6
|
-
import { useContext as fe, createContext as pe, useRef as
|
|
7
|
-
import { toOperatingTimeClamped as
|
|
8
|
-
import { useFormats as ge, useWording as
|
|
9
|
-
const
|
|
5
|
+
import { jsxs as Y, Fragment as Wt, jsx as k } from "react/jsx-runtime";
|
|
6
|
+
import { useContext as fe, createContext as pe, useRef as O, useEffect as x, forwardRef as Xe, useState as it, useId as Ke, useLayoutEffect as vt, useImperativeHandle as Ue, useSyncExternalStore as ze, useMemo as W } from "react";
|
|
7
|
+
import { toOperatingTimeClamped as B, resolveColours as We, removedIntervals as qe, localOffset as me, MINUTE as q, calendarFrom as j, toWallClock as U, DAY as st, timeStep as je, operatingTimeTicks as Ve, HOUR as Tt, LinearScale as Ze, subscribeTheme as Je } from "@umriss-ui/charts";
|
|
8
|
+
import { useFormats as ge, useWording as we, AngleGlyph as Qe } from "@umriss-ui/core";
|
|
9
|
+
const ke = pe(null), ve = pe(null);
|
|
10
10
|
function ye() {
|
|
11
11
|
return fe(ve);
|
|
12
12
|
}
|
|
13
|
-
function
|
|
14
|
-
const t = fe(
|
|
13
|
+
function ts(n) {
|
|
14
|
+
const t = fe(ke);
|
|
15
15
|
if (t === null)
|
|
16
16
|
throw new Error(`@umriss-ui/schedule: <${n}> must be used inside a <Schedule>.`);
|
|
17
17
|
return t;
|
|
18
18
|
}
|
|
19
19
|
function Ct(n, t, e, s, o) {
|
|
20
|
-
const i =
|
|
21
|
-
|
|
20
|
+
const i = ts(n), r = O(null);
|
|
21
|
+
x(() => (r.current = e(i, t), () => {
|
|
22
22
|
r.current !== null && o(i, r.current), r.current = null;
|
|
23
|
-
}), [i]),
|
|
23
|
+
}), [i]), x(() => {
|
|
24
24
|
r.current !== null && s(i, r.current, t);
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
-
function
|
|
27
|
+
function es(n) {
|
|
28
28
|
Ct("Lane", n, (t, e) => t.registerLane(e), (t, e, s) => t.updateLane(e, s), (t, e) => t.unregisterLane(e));
|
|
29
29
|
}
|
|
30
|
-
function
|
|
30
|
+
function ss(n) {
|
|
31
31
|
Ct("LaneGroup", n, (t, e) => t.registerGroup(e), (t, e, s) => t.updateGroup(e, s), (t, e) => t.unregisterGroup(e));
|
|
32
32
|
}
|
|
33
33
|
function be(n, t) {
|
|
@@ -39,7 +39,7 @@ function ht(n) {
|
|
|
39
39
|
i === "provisional" ? (t = !0, e = !1) : i === "fixed" ? (e = !0, t = !1) : i === "muted" ? s = !0 : i === "open" && (o = !0);
|
|
40
40
|
return { dashed: t, hatched: e, muted: s, open: o };
|
|
41
41
|
}
|
|
42
|
-
const
|
|
42
|
+
const ns = 24, os = 4, is = 3, yt = 4;
|
|
43
43
|
function qt(n) {
|
|
44
44
|
const { lanes: t, groups: e, collapsed: s, laneHeight: o } = n, i = new Map(e.map((m) => [m.id, m])), r = (m) => m !== void 0 && i.has(m) ? m : void 0, a = /* @__PURE__ */ new Map(), u = (m) => {
|
|
45
45
|
const C = [];
|
|
@@ -61,16 +61,16 @@ function qt(n) {
|
|
|
61
61
|
let p = [], g = null, b = 0;
|
|
62
62
|
const I = (m) => (l.push({ ...m, top: b }), b += m.height, l.length - 1), _ = (m) => m.find((C) => s.has(C)), S = () => {
|
|
63
63
|
if (g === null) return;
|
|
64
|
-
const { row: m, lanes: C } = g, L = l[m], E = Math.max(L.height, C.length *
|
|
64
|
+
const { row: m, lanes: C } = g, L = l[m], E = Math.max(L.height, C.length * os + 2 * yt);
|
|
65
65
|
l[m] = { ...L, height: E }, b += E - L.height;
|
|
66
|
-
const F = E - 2 * yt, R = Math.max(
|
|
66
|
+
const F = E - 2 * yt, R = Math.max(is, Math.floor(F / C.length));
|
|
67
67
|
C.forEach((V, ot) => {
|
|
68
|
-
const
|
|
68
|
+
const z = c.get(V) ?? [];
|
|
69
69
|
d.set(V, {
|
|
70
70
|
top: L.top + yt + ot * R,
|
|
71
71
|
height: R,
|
|
72
72
|
miniature: !0,
|
|
73
|
-
group:
|
|
73
|
+
group: z[z.length - 1]
|
|
74
74
|
});
|
|
75
75
|
}), g = null;
|
|
76
76
|
};
|
|
@@ -92,7 +92,7 @@ function qt(n) {
|
|
|
92
92
|
depth: p.length - 1,
|
|
93
93
|
within: [...p],
|
|
94
94
|
lanes: (a.get(F) ?? []).length,
|
|
95
|
-
height:
|
|
95
|
+
height: ns
|
|
96
96
|
});
|
|
97
97
|
}
|
|
98
98
|
if (L !== void 0) {
|
|
@@ -117,7 +117,7 @@ function qt(n) {
|
|
|
117
117
|
}
|
|
118
118
|
return S(), { rows: l, slots: d, height: b };
|
|
119
119
|
}
|
|
120
|
-
function
|
|
120
|
+
function rs(n, t) {
|
|
121
121
|
if (t.size === 0) return n;
|
|
122
122
|
const e = /* @__PURE__ */ new Set();
|
|
123
123
|
for (const s of n) t.has(s) || e.add(s);
|
|
@@ -137,7 +137,7 @@ function nt(n, t) {
|
|
|
137
137
|
function Lt(n, t) {
|
|
138
138
|
return n.slots.get(t) ?? null;
|
|
139
139
|
}
|
|
140
|
-
function
|
|
140
|
+
function as(n, t) {
|
|
141
141
|
const e = nt(n, t);
|
|
142
142
|
if (e === null) return null;
|
|
143
143
|
if (e.kind === "lane") return e.lane ?? null;
|
|
@@ -169,7 +169,7 @@ function jt(n, t) {
|
|
|
169
169
|
return { ...n, lane: t.lane };
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
|
-
function
|
|
172
|
+
function _n(n, t) {
|
|
173
173
|
return {
|
|
174
174
|
id: t,
|
|
175
175
|
task: n.task,
|
|
@@ -180,19 +180,19 @@ function An(n, t) {
|
|
|
180
180
|
...n.teardown === void 0 ? {} : { teardown: n.teardown }
|
|
181
181
|
};
|
|
182
182
|
}
|
|
183
|
-
const
|
|
183
|
+
const ls = 6, Me = 3, et = 2, Vt = 3, Zt = 3;
|
|
184
184
|
function N(n, t) {
|
|
185
|
-
return Math.round(n.scale.toPx(
|
|
185
|
+
return Math.round(n.scale.toPx(B(t, n.calendar)));
|
|
186
186
|
}
|
|
187
187
|
function ct(n, t) {
|
|
188
188
|
const e = Lt(n.rows, t);
|
|
189
189
|
return e === null ? null : { ...e, top: e.top - n.scrollY };
|
|
190
190
|
}
|
|
191
191
|
function Jt(n, t) {
|
|
192
|
-
return
|
|
192
|
+
return as(n.rows, t + n.scrollY);
|
|
193
193
|
}
|
|
194
194
|
function Te(n, t, e, s, o) {
|
|
195
|
-
const i = s.miniature ? 0 :
|
|
195
|
+
const i = s.miniature ? 0 : ls, r = s.miniature ? 0 : Zt * Vt, a = Math.max(s.miniature ? 1 : 4, s.height - 2 * i - r), u = s.top - n.scrollY + Math.floor((s.height - a) / 2), c = ut(t);
|
|
196
196
|
return {
|
|
197
197
|
subtask: t,
|
|
198
198
|
lane: e,
|
|
@@ -211,7 +211,7 @@ function Ce(n, t, e) {
|
|
|
211
211
|
const s = Math.max(0, (6 - (n.outerTo - n.outerFrom)) / 2);
|
|
212
212
|
return t < n.outerFrom - s || t > n.outerTo + s ? null : t < n.mainFrom ? "setup" : t > n.mainTo ? "teardown" : "main";
|
|
213
213
|
}
|
|
214
|
-
function
|
|
214
|
+
function hs(n, t, e, s = 5) {
|
|
215
215
|
if (e < n.y || e > n.y + n.height) return null;
|
|
216
216
|
const o = Math.abs(t - n.mainFrom), i = Math.abs(t - n.mainTo);
|
|
217
217
|
return Math.min(o, i) > s ? null : o <= i ? "from" : "to";
|
|
@@ -219,13 +219,13 @@ function ls(n, t, e, s = 5) {
|
|
|
219
219
|
function Le(n, t, e) {
|
|
220
220
|
return n.outerTo >= 0 && n.outerFrom <= t && n.y + n.height >= 0 && n.y <= e;
|
|
221
221
|
}
|
|
222
|
-
const
|
|
223
|
-
function
|
|
222
|
+
const us = 64;
|
|
223
|
+
function cs(n, t) {
|
|
224
224
|
if (n.miniature) return null;
|
|
225
225
|
const e = ht(n.subtask.appearance).hatched ? et + Me + 1 : 0, s = Math.max(n.mainFrom + e, 0), o = Math.min(n.mainTo - e, t) - s;
|
|
226
|
-
return o <
|
|
226
|
+
return o < us ? null : { x: s, width: o, y: n.y, height: n.height };
|
|
227
227
|
}
|
|
228
|
-
const
|
|
228
|
+
const ds = 10;
|
|
229
229
|
function Qt(n, t, e) {
|
|
230
230
|
const s = Math.round(t.y + t.height / 2);
|
|
231
231
|
return n === "centre" || e.y === t.y ? s : Math.round(e.y > t.y ? t.y + t.height - 1 : t.y + 1);
|
|
@@ -235,7 +235,7 @@ function bt(n, t, e, s, o) {
|
|
|
235
235
|
if (i === "straight")
|
|
236
236
|
return { transport: t, kind: i, ends: a, x1: u, y1: l, x2: c, y2: d, c1x: u, c2x: c, points: [u, l, c, d] };
|
|
237
237
|
if (i === "orthogonal") {
|
|
238
|
-
const _ = u +
|
|
238
|
+
const _ = u + ds, S = l === d ? _ : Math.round((_ + c) / 2);
|
|
239
239
|
return { transport: t, kind: i, ends: a, x1: u, y1: l, x2: c, y2: d, c1x: u, c2x: c, points: l === d ? [u, l, c, d] : [u, l, S, l, S, d, c, d] };
|
|
240
240
|
}
|
|
241
241
|
const p = Math.max(14, Math.abs(c - u) / 2), g = u + p, b = c - p, I = [];
|
|
@@ -248,7 +248,7 @@ function bt(n, t, e, s, o) {
|
|
|
248
248
|
}
|
|
249
249
|
return { transport: t, kind: "curve", ends: a, x1: u, y1: l, x2: c, y2: d, c1x: g, c2x: b, points: I };
|
|
250
250
|
}
|
|
251
|
-
function
|
|
251
|
+
function fs(n, t, e) {
|
|
252
252
|
let s = 1 / 0;
|
|
253
253
|
const o = n.points;
|
|
254
254
|
for (let i = 0; i + 3 < o.length; i += 2) {
|
|
@@ -278,7 +278,7 @@ function At(n) {
|
|
|
278
278
|
}
|
|
279
279
|
return t;
|
|
280
280
|
}
|
|
281
|
-
function
|
|
281
|
+
function ps(n) {
|
|
282
282
|
const t = /* @__PURE__ */ new Map(), e = /* @__PURE__ */ new Map();
|
|
283
283
|
for (const s of n) {
|
|
284
284
|
const o = ut(s), i = e.get(s.lane) ?? [];
|
|
@@ -301,10 +301,10 @@ function _t(n, t) {
|
|
|
301
301
|
}
|
|
302
302
|
return s;
|
|
303
303
|
}
|
|
304
|
-
function
|
|
304
|
+
function Fn(n, t) {
|
|
305
305
|
return { overlaps: At(n), lateTransports: _t(n, t) };
|
|
306
306
|
}
|
|
307
|
-
class
|
|
307
|
+
class ms {
|
|
308
308
|
/** `changed` is called after every registration change. */
|
|
309
309
|
constructor(t) {
|
|
310
310
|
f(this, "nextId", 1);
|
|
@@ -373,7 +373,7 @@ class ps {
|
|
|
373
373
|
for (const s of e.tasks) this.tasks.set(s.id, s);
|
|
374
374
|
} else
|
|
375
375
|
this.transports.push(...e.data);
|
|
376
|
-
return this.subtaskById = new Map(this.subtasks.map((e) => [e.id, e])), this.overlaps = At(this.subtasks), this.lateById = new Map(_t(this.subtasks, this.transports).map((e) => [e.transport, e])), this.depth =
|
|
376
|
+
return this.subtaskById = new Map(this.subtasks.map((e) => [e.id, e])), this.overlaps = At(this.subtasks), this.lateById = new Map(_t(this.subtasks, this.transports).map((e) => [e.transport, e])), this.depth = ps(this.subtasks), !0;
|
|
377
377
|
}
|
|
378
378
|
/** The task a transport belongs to: its departing subtask's. */
|
|
379
379
|
taskOfTransport(t) {
|
|
@@ -399,7 +399,7 @@ class ps {
|
|
|
399
399
|
};
|
|
400
400
|
}
|
|
401
401
|
}
|
|
402
|
-
const
|
|
402
|
+
const gs = {
|
|
403
403
|
line: "var(--u-hairline)",
|
|
404
404
|
lineStrong: "var(--u-hairline-strong)",
|
|
405
405
|
text: "var(--u-color-text)",
|
|
@@ -411,10 +411,10 @@ const ms = {
|
|
|
411
411
|
use in CSS, so a cap and the label beside it are one colour. */
|
|
412
412
|
onAccent: "var(--u-color-on-accent)"
|
|
413
413
|
};
|
|
414
|
-
function
|
|
414
|
+
function ws(n, t) {
|
|
415
415
|
const e = {};
|
|
416
416
|
for (const i of t.tasks.values()) e[`task:${i.id}`] = i.color;
|
|
417
|
-
const s =
|
|
417
|
+
const s = We(n, { ...gs, ...e }), o = /* @__PURE__ */ new Map();
|
|
418
418
|
for (const i of t.tasks.values()) o.set(i.id, s[`task:${i.id}`] ?? i.color);
|
|
419
419
|
return {
|
|
420
420
|
line: s.line,
|
|
@@ -454,7 +454,7 @@ function se(n, t, e) {
|
|
|
454
454
|
}
|
|
455
455
|
function ks(n, t) {
|
|
456
456
|
const { data: e, view: s } = t, o = s.viewport();
|
|
457
|
-
|
|
457
|
+
Ms(n, t, o), Ts(n, t);
|
|
458
458
|
for (const i of e.layers) {
|
|
459
459
|
const r = new Set(i.data);
|
|
460
460
|
if (i.kind === "transports")
|
|
@@ -463,14 +463,14 @@ function ks(n, t) {
|
|
|
463
463
|
for (const a of s.boxes) r.has(a.subtask) && Ie(n, t, a, 1);
|
|
464
464
|
}
|
|
465
465
|
for (const i of e.overlaps) Ae(n, t, o, i);
|
|
466
|
-
|
|
466
|
+
Es(n, t, o), Ns(n, t);
|
|
467
467
|
}
|
|
468
|
-
function
|
|
468
|
+
function vs(n, t) {
|
|
469
469
|
const { view: e, hover: s } = t, o = e.viewport();
|
|
470
470
|
if (t.ghost === null) {
|
|
471
471
|
if (s.kind === "subtask") {
|
|
472
472
|
const l = e.boxById.get(s.subtask.id);
|
|
473
|
-
l !== void 0 &&
|
|
473
|
+
l !== void 0 && Ds(n, t, l);
|
|
474
474
|
} else if (s.kind === "transport") {
|
|
475
475
|
const l = e.paths.find((d) => d.transport === s.transport);
|
|
476
476
|
l !== void 0 && Mt(n, t, l, !0);
|
|
@@ -478,7 +478,7 @@ function ws(n, t) {
|
|
|
478
478
|
return;
|
|
479
479
|
}
|
|
480
480
|
const { ghost: i, overlaps: r, late: a } = t.ghost;
|
|
481
|
-
|
|
481
|
+
ys(n, t, o, t.ghost.refusedLanes);
|
|
482
482
|
const u = Se(o, i);
|
|
483
483
|
if (u === null) return;
|
|
484
484
|
for (const l of r) Ae(n, t, o, l);
|
|
@@ -490,19 +490,19 @@ function ws(n, t) {
|
|
|
490
490
|
const p = l.from === i.id ? bt(o, l, u, d, e.options) : bt(o, l, d, u, e.options);
|
|
491
491
|
Mt(n, t, p, !0, c.has(l.id));
|
|
492
492
|
}
|
|
493
|
-
Ie(n, t, u, 0.55), n.strokeStyle = t.colours.text, n.lineWidth = 1, n.setLineDash([3, 2]), n.strokeRect(u.outerFrom + 0.5, u.y + 0.5, Math.max(1, u.outerTo - u.outerFrom - 1), u.height - 1), n.setLineDash([]), t.ghost.tether !== null &&
|
|
493
|
+
Ie(n, t, u, 0.55), n.strokeStyle = t.colours.text, n.lineWidth = 1, n.setLineDash([3, 2]), n.strokeRect(u.outerFrom + 0.5, u.y + 0.5, Math.max(1, u.outerTo - u.outerFrom - 1), u.height - 1), n.setLineDash([]), t.ghost.tether !== null && bs(n, t, u, t.ghost.tether);
|
|
494
494
|
}
|
|
495
|
-
function
|
|
495
|
+
function ys(n, t, e, s) {
|
|
496
496
|
if (s.size === 0) return;
|
|
497
497
|
const { width: o, height: i } = t.view;
|
|
498
498
|
for (const r of s) {
|
|
499
499
|
const a = ct(e, r);
|
|
500
500
|
if (a === null) continue;
|
|
501
501
|
const { top: u, height: c } = a;
|
|
502
|
-
u + c < 0 || u > i || (n.globalAlpha = 0.6, n.fillStyle = t.colours.surface, n.fillRect(0, u, o, c), n.globalAlpha = 1,
|
|
502
|
+
u + c < 0 || u > i || (n.globalAlpha = 0.6, n.fillStyle = t.colours.surface, n.fillRect(0, u, o, c), n.globalAlpha = 1, _s(n, 0, u, o, c, t.colours.muted, 0.7, Is, 1));
|
|
503
503
|
}
|
|
504
504
|
}
|
|
505
|
-
function
|
|
505
|
+
function bs(n, t, e, s) {
|
|
506
506
|
const o = Math.max(e.outerFrom, Math.min(e.outerTo, s.x)), i = Math.max(e.y, Math.min(e.y + e.height, s.y));
|
|
507
507
|
Math.hypot(s.x - o, s.y - i) < 2 || (n.strokeStyle = t.colours.text, n.lineWidth = 1, n.setLineDash([2, 3]), n.beginPath(), n.moveTo(o + 0.5, i + 0.5), n.lineTo(s.x + 0.5, s.y + 0.5), n.stroke(), n.setLineDash([]));
|
|
508
508
|
}
|
|
@@ -510,7 +510,7 @@ function Se(n, t) {
|
|
|
510
510
|
const e = Lt(n.rows, t.lane);
|
|
511
511
|
return e === null ? null : Te(n, t, t.lane, e, 0);
|
|
512
512
|
}
|
|
513
|
-
function
|
|
513
|
+
function Ms(n, t, e) {
|
|
514
514
|
const { view: s, colours: o, bands: i } = t, { width: r, height: a } = s;
|
|
515
515
|
n.lineWidth = 1, n.strokeStyle = o.line, n.beginPath();
|
|
516
516
|
for (const l of i.ticks)
|
|
@@ -539,11 +539,11 @@ function bs(n, t, e) {
|
|
|
539
539
|
n.stroke(), n.setLineDash([]);
|
|
540
540
|
}
|
|
541
541
|
}
|
|
542
|
-
function
|
|
542
|
+
function Ts(n, t) {
|
|
543
543
|
const e = t.view.nowX();
|
|
544
544
|
e !== null && (n.fillStyle = t.colours.accent, n.fillRect(e, 0, 2, t.view.height));
|
|
545
545
|
}
|
|
546
|
-
function
|
|
546
|
+
function Cs(n, t, e, s) {
|
|
547
547
|
const o = t.colours.tasks.get(e.subtask.task) ?? t.colours.muted;
|
|
548
548
|
n.fillStyle = o;
|
|
549
549
|
for (const [i, r] of [
|
|
@@ -555,21 +555,21 @@ function Ts(n, t, e, s) {
|
|
|
555
555
|
}
|
|
556
556
|
function Ft(n, t, e) {
|
|
557
557
|
if (n.dashed) return { fill: null, onDark: !1 };
|
|
558
|
-
const s = n.muted ?
|
|
558
|
+
const s = n.muted ? Ls(t, e.surface, 0.5) : t;
|
|
559
559
|
return { fill: s, onDark: ee(s, e.onAccent) > ee(s, e.text) };
|
|
560
560
|
}
|
|
561
|
-
function
|
|
561
|
+
function Ls(n, t, e) {
|
|
562
562
|
const s = at(n), o = at(t);
|
|
563
563
|
if (s === null || o === null) return n;
|
|
564
564
|
const i = (r) => Math.round(s[r] + (o[r] - s[r]) * e);
|
|
565
565
|
return `rgb(${i(0)}, ${i(1)}, ${i(2)})`;
|
|
566
566
|
}
|
|
567
|
-
const
|
|
567
|
+
const Ss = 2;
|
|
568
568
|
function Ie(n, t, e, s) {
|
|
569
569
|
const { view: o, colours: i } = t;
|
|
570
570
|
if (!Le(e, o.width, o.height)) return;
|
|
571
571
|
if (e.miniature) {
|
|
572
|
-
|
|
572
|
+
Cs(n, t, e, s);
|
|
573
573
|
return;
|
|
574
574
|
}
|
|
575
575
|
const r = ht(e.subtask.appearance), a = i.tasks.get(e.subtask.task) ?? i.muted, u = Ft(r, a, i), c = e.y, l = e.height, d = Math.max(1, e.mainTo - e.mainFrom), p = u.onDark ? i.onAccent : i.text;
|
|
@@ -582,24 +582,24 @@ function Ie(n, t, e, s) {
|
|
|
582
582
|
u.fill !== null && (n.globalAlpha = s, n.fillStyle = u.fill, n.fillRect(e.mainFrom, c, d, l));
|
|
583
583
|
const g = e.subtask.progress;
|
|
584
584
|
if (g !== void 0) {
|
|
585
|
-
const b = Math.min(4, Math.max(2, Math.round(l / 6))), I = c + l - b -
|
|
585
|
+
const b = Math.min(4, Math.max(2, Math.round(l / 6))), I = c + l - b - Ss, _ = Math.round(d * Math.max(0, Math.min(1, g)));
|
|
586
586
|
n.fillStyle = u.fill === null ? a : p, n.globalAlpha = 0.3 * s, n.fillRect(e.mainFrom, I, d, b), n.globalAlpha = s, _ > 0 && n.fillRect(e.mainFrom, I, _, b);
|
|
587
587
|
}
|
|
588
588
|
if (r.hatched) {
|
|
589
589
|
const b = Math.max(1, Math.min(Me, Math.floor((d - 2 * et) / 3))), I = d >= 4 * b ? et : 0, _ = l >= 4 * et ? et : 0;
|
|
590
590
|
n.globalAlpha = s, n.fillStyle = p, n.fillRect(e.mainFrom + I, c + _, b, l - 2 * _), n.fillRect(e.mainTo - I - b, c + _, b, l - 2 * _);
|
|
591
591
|
}
|
|
592
|
-
r.open &&
|
|
592
|
+
r.open && Fs(n, e, c, l, i.surface, o.width), r.dashed && (n.globalAlpha = s, n.strokeStyle = a, n.setLineDash([4, 3]), n.strokeRect(e.mainFrom + 0.5, c + 0.5, d - 1, l - 1), n.setLineDash([])), n.globalAlpha = 1, e.depth > 0 && s === 1 && (n.strokeStyle = i.surface, n.strokeRect(e.outerFrom - 0.5, c - 0.5, e.outerTo - e.outerFrom + 1, l + 1));
|
|
593
593
|
}
|
|
594
|
-
const
|
|
595
|
-
function
|
|
594
|
+
const Is = 6, As = 16;
|
|
595
|
+
function _s(n, t, e, s, o, i, r, a, u) {
|
|
596
596
|
n.save(), n.beginPath(), n.rect(t, e, s, o), n.clip(), n.globalAlpha = 0.5 * r, n.strokeStyle = i, n.lineWidth = u, n.beginPath();
|
|
597
597
|
for (let c = t - o; c < t + s + o; c += a)
|
|
598
598
|
n.moveTo(c, e + o), n.lineTo(c + o, e);
|
|
599
599
|
n.stroke(), n.restore();
|
|
600
600
|
}
|
|
601
|
-
function
|
|
602
|
-
const r = t.mainFrom < 0, a = t.mainTo > i, u = Math.max(1, Math.min(t.mainTo, i) - Math.max(t.mainFrom, 0)), c = Math.min(
|
|
601
|
+
function Fs(n, t, e, s, o, i) {
|
|
602
|
+
const r = t.mainFrom < 0, a = t.mainTo > i, u = Math.max(1, Math.min(t.mainTo, i) - Math.max(t.mainFrom, 0)), c = Math.min(As, u);
|
|
603
603
|
r && ne(n, 0, c, e, s, o, 1), a && ne(n, i, -c, e, s, o, 1);
|
|
604
604
|
}
|
|
605
605
|
function ne(n, t, e, s, o, i, r) {
|
|
@@ -623,7 +623,7 @@ function Mt(n, t, e, s, o) {
|
|
|
623
623
|
])
|
|
624
624
|
n.beginPath(), n.arc(d, p, u ? 3 : 2.5, 0, Math.PI * 2), n.fill();
|
|
625
625
|
}
|
|
626
|
-
function
|
|
626
|
+
function Es(n, t, e) {
|
|
627
627
|
const { data: s } = t;
|
|
628
628
|
if (s.lateById.size !== 0) {
|
|
629
629
|
n.fillStyle = t.colours.alarm;
|
|
@@ -648,12 +648,12 @@ function Ae(n, t, e, s) {
|
|
|
648
648
|
a !== null && n.fillRect(i, a.top - e.scrollY + 1, r - i, 3);
|
|
649
649
|
}
|
|
650
650
|
}
|
|
651
|
-
function
|
|
651
|
+
function Ds(n, t, e) {
|
|
652
652
|
const { colours: s } = t, o = ht(e.subtask.appearance), i = Ft(o, s.tasks.get(e.subtask.task) ?? s.muted, s);
|
|
653
|
-
n.globalAlpha =
|
|
653
|
+
n.globalAlpha = Ps, n.fillStyle = i.onDark ? s.onAccent : s.text, n.fillRect(e.outerFrom, e.y, Math.max(1, e.outerTo - e.outerFrom), e.height), n.globalAlpha = 1;
|
|
654
654
|
}
|
|
655
|
-
const
|
|
656
|
-
function
|
|
655
|
+
const Ps = 0.2;
|
|
656
|
+
function Ns(n, t) {
|
|
657
657
|
const e = t.selectedTask;
|
|
658
658
|
if (e !== null) {
|
|
659
659
|
n.strokeStyle = t.colours.text;
|
|
@@ -666,22 +666,22 @@ function Ps(n, t) {
|
|
|
666
666
|
}
|
|
667
667
|
}
|
|
668
668
|
}
|
|
669
|
-
const rt = 32,
|
|
669
|
+
const rt = 32, Gs = 18;
|
|
670
670
|
function ie(n, t) {
|
|
671
671
|
if (!(t > 2 * rt)) return 0;
|
|
672
672
|
const e = rt - n, s = n - (t - rt), o = Math.max(e, s);
|
|
673
673
|
if (o <= 0) return 0;
|
|
674
|
-
const i = Math.min(1, o / rt), r =
|
|
674
|
+
const i = Math.min(1, o / rt), r = Gs * i * i;
|
|
675
675
|
return e > 0 ? -r : r;
|
|
676
676
|
}
|
|
677
|
-
function
|
|
677
|
+
function Rs(n, t, e, s) {
|
|
678
678
|
const o = /* @__PURE__ */ new Set();
|
|
679
679
|
if (s === void 0) return o;
|
|
680
680
|
for (const i of n)
|
|
681
681
|
i !== e && (s(t, i) || o.add(i));
|
|
682
682
|
return o;
|
|
683
683
|
}
|
|
684
|
-
function
|
|
684
|
+
function $s(n, t) {
|
|
685
685
|
const { step: e, offset: s } = typeof t == "number" ? { step: t, offset: 0 } : t;
|
|
686
686
|
if (!(e > 0) || !Number.isFinite(n)) return n;
|
|
687
687
|
const o = me(n) + s;
|
|
@@ -700,7 +700,7 @@ function le(n) {
|
|
|
700
700
|
return "nothing";
|
|
701
701
|
}
|
|
702
702
|
}
|
|
703
|
-
const he = 3,
|
|
703
|
+
const he = 3, Os = 10, xs = 600;
|
|
704
704
|
class Bs {
|
|
705
705
|
constructor(t) {
|
|
706
706
|
f(this, "gesture", { kind: "none" });
|
|
@@ -838,7 +838,7 @@ class Bs {
|
|
|
838
838
|
askRefused(t, e) {
|
|
839
839
|
if (!this.host.view.options.intents.includes(e === null ? "place" : "lane")) return ae;
|
|
840
840
|
const s = this.host.data.lanes.map((o) => o.id);
|
|
841
|
-
return
|
|
841
|
+
return Rs(s, t, e, this.host.handlers().canMoveTo);
|
|
842
842
|
}
|
|
843
843
|
/** What a press at a point would start, given the intents the caller handles. */
|
|
844
844
|
modeAt(t, e) {
|
|
@@ -846,7 +846,7 @@ class Bs {
|
|
|
846
846
|
for (let i = s.boxes.length - 1; i >= 0; i--) {
|
|
847
847
|
const r = s.boxes[i];
|
|
848
848
|
if (o.includes("stretch")) {
|
|
849
|
-
const a =
|
|
849
|
+
const a = hs(r, t, e);
|
|
850
850
|
if (a !== null) return { mode: a === "from" ? "stretch-from" : "stretch-to", subtask: r.subtask };
|
|
851
851
|
}
|
|
852
852
|
if (Ce(r, t, e) !== null)
|
|
@@ -863,7 +863,7 @@ class Bs {
|
|
|
863
863
|
}
|
|
864
864
|
const o = this.gesture;
|
|
865
865
|
if (o.kind === "pending" && o.pointerId === t.pointerId) {
|
|
866
|
-
if (Math.hypot(e - o.x0, s - o.y0) < (t.pointerType === "touch" ?
|
|
866
|
+
if (Math.hypot(e - o.x0, s - o.y0) < (t.pointerType === "touch" ? Os : he)) return;
|
|
867
867
|
if (o.mode === "pan" || o.subtask === null)
|
|
868
868
|
this.gesture = { kind: "pan", pointerId: o.pointerId, lastX: o.x0, lastY: o.y0 }, this.setCursor("grabbing");
|
|
869
869
|
else {
|
|
@@ -1107,7 +1107,7 @@ class Bs {
|
|
|
1107
1107
|
let c = i.from;
|
|
1108
1108
|
const l = o.viewport().scale, d = l.fromPx(e) - t.t0;
|
|
1109
1109
|
if (a.includes("move") && Math.abs(d * l.m) >= he) {
|
|
1110
|
-
const g = j(o.options.calendar), b =
|
|
1110
|
+
const g = j(o.options.calendar), b = B(i.from, g) + d, I = g.intervals.length === 0 ? b : U(Math.max(0, Math.min(g.total, b)), g);
|
|
1111
1111
|
c = this.snapInside(I, r);
|
|
1112
1112
|
}
|
|
1113
1113
|
let p = t.ghost.lane;
|
|
@@ -1132,8 +1132,8 @@ class Bs {
|
|
|
1132
1132
|
on to the seam, where time counts again. An intent never asks for a time
|
|
1133
1133
|
the plant does not run. */
|
|
1134
1134
|
snapInside(t, e) {
|
|
1135
|
-
const s =
|
|
1136
|
-
return o.intervals.length === 0 ? s : U(
|
|
1135
|
+
const s = $s(t, e), o = j(this.host.view.options.calendar);
|
|
1136
|
+
return o.intervals.length === 0 ? s : U(B(s, o), o);
|
|
1137
1137
|
}
|
|
1138
1138
|
intentsOf(t, e, s) {
|
|
1139
1139
|
const o = [], i = this.host.view.options.intents, r = t.id;
|
|
@@ -1157,17 +1157,17 @@ class Bs {
|
|
|
1157
1157
|
return { overlaps: At(r).filter(a), late: _t(c, u) };
|
|
1158
1158
|
}
|
|
1159
1159
|
}
|
|
1160
|
-
const _e = [],
|
|
1161
|
-
function
|
|
1160
|
+
const _e = [], Hs = 56;
|
|
1161
|
+
function Ys(n, t = Hs) {
|
|
1162
1162
|
return n > 0 ? Math.min(st, Math.max(15 * q, je(n * t, 1))) : 15 * q;
|
|
1163
1163
|
}
|
|
1164
|
-
function
|
|
1164
|
+
function Xs(n, t, e = _e) {
|
|
1165
1165
|
const [s, o] = Fe(n, e);
|
|
1166
1166
|
return Ve(e, s, o, t, me(s)).filter(
|
|
1167
1167
|
(i) => i.operatingTime >= n[0] && i.operatingTime <= n[1]
|
|
1168
1168
|
);
|
|
1169
1169
|
}
|
|
1170
|
-
function
|
|
1170
|
+
function Ks(n, t = _e) {
|
|
1171
1171
|
const [e, s] = Fe(n, t), o = [], i = new Date(e);
|
|
1172
1172
|
for (i.setHours(0, 0, 0, 0); i.getTime() < s && o.length < 400; ) {
|
|
1173
1173
|
const r = i.getTime();
|
|
@@ -1176,19 +1176,19 @@ function Xs(n, t = _e) {
|
|
|
1176
1176
|
o.push({
|
|
1177
1177
|
start: r,
|
|
1178
1178
|
end: a,
|
|
1179
|
-
from:
|
|
1180
|
-
to:
|
|
1179
|
+
from: B(r, t),
|
|
1180
|
+
to: B(a, t)
|
|
1181
1181
|
});
|
|
1182
1182
|
}
|
|
1183
1183
|
return o;
|
|
1184
1184
|
}
|
|
1185
|
-
function
|
|
1185
|
+
function Us(n, t, e, s) {
|
|
1186
1186
|
const o = n[1] - n[0];
|
|
1187
1187
|
if (!(o > 0)) return [n[0], n[1]];
|
|
1188
1188
|
const i = Math.min(s.max, Math.max(s.min, o * e)), r = (t - n[0]) / o, a = t - r * i;
|
|
1189
1189
|
return [a, a + i];
|
|
1190
1190
|
}
|
|
1191
|
-
function
|
|
1191
|
+
function zs(n, t) {
|
|
1192
1192
|
return [n[0] + t, n[1] + t];
|
|
1193
1193
|
}
|
|
1194
1194
|
function Fe(n, t) {
|
|
@@ -1234,11 +1234,11 @@ class Ws {
|
|
|
1234
1234
|
setOptions(t, e) {
|
|
1235
1235
|
const s = t.calendar !== this.options.calendar, o = this.options.calendar;
|
|
1236
1236
|
if (this.options = t, e !== null)
|
|
1237
|
-
this.domain = [
|
|
1237
|
+
this.domain = [B(e[0], t.calendar), B(e[1], t.calendar)];
|
|
1238
1238
|
else if (s) {
|
|
1239
1239
|
const i = j(o), r = (a) => {
|
|
1240
1240
|
const u = i.intervals.length === 0 ? a : Math.max(0, Math.min(i.total, a));
|
|
1241
|
-
return
|
|
1241
|
+
return B(U(u, i), t.calendar) + (a - u);
|
|
1242
1242
|
};
|
|
1243
1243
|
this.domain = [r(this.domain[0]), r(this.domain[1])];
|
|
1244
1244
|
}
|
|
@@ -1262,14 +1262,14 @@ class Ws {
|
|
|
1262
1262
|
/** The fine band's step at the current zoom. */
|
|
1263
1263
|
step() {
|
|
1264
1264
|
const t = this.domain[1] - this.domain[0];
|
|
1265
|
-
return
|
|
1265
|
+
return Ys(this.width > 0 ? t / this.width : t);
|
|
1266
1266
|
}
|
|
1267
1267
|
/** Lays the rows out, clamps the scroll, and lays the data out anew. */
|
|
1268
1268
|
layout() {
|
|
1269
1269
|
this.rows = qt({
|
|
1270
1270
|
lanes: this.data.lanes,
|
|
1271
1271
|
groups: this.data.groups,
|
|
1272
|
-
collapsed:
|
|
1272
|
+
collapsed: rs(this.collapsed, this.openForGesture),
|
|
1273
1273
|
laneHeight: this.options.laneHeight
|
|
1274
1274
|
}), this.scrollY = Math.max(0, Math.min(this.maxScroll(), this.scrollY));
|
|
1275
1275
|
const t = this.viewport();
|
|
@@ -1292,11 +1292,11 @@ class Ws {
|
|
|
1292
1292
|
if (this.width <= 0) return { days: [], ticks: [], step: t };
|
|
1293
1293
|
const e = this.viewport().scale, s = this.options.calendar;
|
|
1294
1294
|
return {
|
|
1295
|
-
days:
|
|
1295
|
+
days: Ks(this.domain, s).map((o) => {
|
|
1296
1296
|
const i = Math.round(e.toPx(o.from));
|
|
1297
1297
|
return { start: o.start, x: i, width: Math.round(e.toPx(o.to)) - i };
|
|
1298
1298
|
}),
|
|
1299
|
-
ticks:
|
|
1299
|
+
ticks: Xs(this.domain, t, s).map((o) => ({ wallClock: o.wallClock, x: Math.round(e.toPx(o.operatingTime)) })),
|
|
1300
1300
|
step: t
|
|
1301
1301
|
};
|
|
1302
1302
|
}
|
|
@@ -1304,7 +1304,7 @@ class Ws {
|
|
|
1304
1304
|
nowX() {
|
|
1305
1305
|
const t = this.options.now;
|
|
1306
1306
|
if (t === null || this.width <= 0) return null;
|
|
1307
|
-
const e = Math.round(this.viewport().scale.toPx(
|
|
1307
|
+
const e = Math.round(this.viewport().scale.toPx(B(t, this.options.calendar)));
|
|
1308
1308
|
return e >= 0 && e <= this.width ? e : null;
|
|
1309
1309
|
}
|
|
1310
1310
|
hitAt(t, e) {
|
|
@@ -1314,7 +1314,7 @@ class Ws {
|
|
|
1314
1314
|
}
|
|
1315
1315
|
let s = null, o = 4;
|
|
1316
1316
|
for (const r of this.paths) {
|
|
1317
|
-
const a =
|
|
1317
|
+
const a = fs(r, t, e);
|
|
1318
1318
|
a <= o && (o = a, s = r);
|
|
1319
1319
|
}
|
|
1320
1320
|
if (s !== null) return { kind: "transport", transport: s.transport };
|
|
@@ -1355,7 +1355,7 @@ class Ws {
|
|
|
1355
1355
|
neither - a scroll through the lanes is no news about the time. */
|
|
1356
1356
|
pan(t, e) {
|
|
1357
1357
|
const s = this.domain[0], o = this.scrollY, i = this.domain[1] - s;
|
|
1358
|
-
this.width > 0 && t !== 0 && (this.domain =
|
|
1358
|
+
this.width > 0 && t !== 0 && (this.domain = zs(this.domain, t / this.width * i)), this.scrollY = Math.max(0, Math.min(this.maxScroll(), this.scrollY + e));
|
|
1359
1359
|
const r = this.domain[0] !== s;
|
|
1360
1360
|
return { moved: r || this.scrollY !== o, time: r };
|
|
1361
1361
|
}
|
|
@@ -1363,7 +1363,7 @@ class Ws {
|
|
|
1363
1363
|
zoomAt(t, e) {
|
|
1364
1364
|
if (this.width <= 0 || !Number.isFinite(e)) return !1;
|
|
1365
1365
|
const s = this.domain, o = this.viewport().scale.fromPx(t);
|
|
1366
|
-
return this.domain =
|
|
1366
|
+
return this.domain = Us(this.domain, o, e, this.options.zoomLimits), s[0] !== this.domain[0] || s[1] !== this.domain[1];
|
|
1367
1367
|
}
|
|
1368
1368
|
}
|
|
1369
1369
|
const ue = {
|
|
@@ -1382,9 +1382,9 @@ const ue = {
|
|
|
1382
1382
|
now: null,
|
|
1383
1383
|
bars: []
|
|
1384
1384
|
};
|
|
1385
|
-
class
|
|
1385
|
+
class qs {
|
|
1386
1386
|
constructor() {
|
|
1387
|
-
f(this, "data", new
|
|
1387
|
+
f(this, "data", new ms(() => this.viewChanged()));
|
|
1388
1388
|
f(this, "view", new Ws(this.data));
|
|
1389
1389
|
f(this, "gestures");
|
|
1390
1390
|
f(this, "handlersNow", {});
|
|
@@ -1563,7 +1563,7 @@ class zs {
|
|
|
1563
1563
|
const e = this.colours;
|
|
1564
1564
|
return t.boxes.flatMap((s) => {
|
|
1565
1565
|
if (!Le(s, t.width, t.height)) return [];
|
|
1566
|
-
const o =
|
|
1566
|
+
const o = cs(s, t.width);
|
|
1567
1567
|
if (o === null) return [];
|
|
1568
1568
|
const i = e === null ? void 0 : e.tasks.get(s.subtask.task), r = i === void 0 || e === null ? !0 : Ft(ht(s.subtask.appearance), i, e).onDark;
|
|
1569
1569
|
return [{ subtask: s.subtask, ...o, dark: r }];
|
|
@@ -1621,7 +1621,7 @@ class zs {
|
|
|
1621
1621
|
}
|
|
1622
1622
|
draw() {
|
|
1623
1623
|
if (this.root === null) return;
|
|
1624
|
-
this.colours === null && (this.colours =
|
|
1624
|
+
this.colours === null && (this.colours = ws(this.root, this.data), this.publish());
|
|
1625
1625
|
const { width: t, height: e } = this.view, s = se(this.dataCanvas, t, e), o = se(this.overlayCanvas, t, e);
|
|
1626
1626
|
if (s === null || o === null || t === 0) return;
|
|
1627
1627
|
const i = {
|
|
@@ -1634,72 +1634,72 @@ class zs {
|
|
|
1634
1634
|
hover: this.gestures.hover,
|
|
1635
1635
|
ghost: this.gestures.ghostDrawing()
|
|
1636
1636
|
};
|
|
1637
|
-
ks(s, i),
|
|
1638
|
-
}
|
|
1639
|
-
}
|
|
1640
|
-
const
|
|
1641
|
-
root:
|
|
1642
|
-
corner:
|
|
1643
|
-
dayBand:
|
|
1644
|
-
tickBand:
|
|
1645
|
-
day:
|
|
1646
|
-
dayLabel:
|
|
1647
|
-
tick:
|
|
1648
|
-
tickLabel:
|
|
1649
|
-
headers:
|
|
1650
|
-
header:
|
|
1651
|
-
headerLabel:
|
|
1652
|
-
headerCount:
|
|
1653
|
-
chevron:
|
|
1654
|
-
plot:
|
|
1655
|
-
layer:
|
|
1656
|
-
grip:
|
|
1657
|
-
ghostLabel:
|
|
1658
|
-
finding:
|
|
1659
|
-
refusal:
|
|
1660
|
-
tooltip:
|
|
1661
|
-
tooltipHead:
|
|
1662
|
-
tooltipTimes:
|
|
1637
|
+
ks(s, i), vs(o, i);
|
|
1638
|
+
}
|
|
1639
|
+
}
|
|
1640
|
+
const js = "_root_p2o7g_4 _text_1hv7a_23", Vs = "_corner_p2o7g_18", Zs = "_dayBand_p2o7g_22", Js = "_tickBand_p2o7g_23", Qs = "_day_p2o7g_22", tn = "_dayLabel_p2o7g_46", en = "_tick_p2o7g_23", sn = "_tickLabel_p2o7g_64", nn = "_headers_p2o7g_72", on = "_header_p2o7g_72", rn = "_headerLabel_p2o7g_90", an = "_headerCount_p2o7g_103", ln = "_chevron_p2o7g_112", hn = "_plot_p2o7g_170", un = "_layer_p2o7g_176", cn = "_grip_p2o7g_185", dn = "_ghostLabel_p2o7g_195", fn = "_finding_p2o7g_208", pn = "_refusal_p2o7g_216", mn = "_tooltip_p2o7g_220", gn = "_tooltipHead_p2o7g_238", wn = "_tooltipTimes_p2o7g_243", kn = "_now_p2o7g_252", vn = "_barLabel_p2o7g_266", yn = "_barLabelText_p2o7g_279", v = {
|
|
1641
|
+
root: js,
|
|
1642
|
+
corner: Vs,
|
|
1643
|
+
dayBand: Zs,
|
|
1644
|
+
tickBand: Js,
|
|
1645
|
+
day: Qs,
|
|
1646
|
+
dayLabel: tn,
|
|
1647
|
+
tick: en,
|
|
1648
|
+
tickLabel: sn,
|
|
1649
|
+
headers: nn,
|
|
1650
|
+
header: on,
|
|
1651
|
+
headerLabel: rn,
|
|
1652
|
+
headerCount: an,
|
|
1653
|
+
chevron: ln,
|
|
1654
|
+
plot: hn,
|
|
1655
|
+
layer: un,
|
|
1656
|
+
grip: cn,
|
|
1657
|
+
ghostLabel: dn,
|
|
1658
|
+
finding: fn,
|
|
1659
|
+
refusal: pn,
|
|
1660
|
+
tooltip: mn,
|
|
1661
|
+
tooltipHead: gn,
|
|
1662
|
+
tooltipTimes: wn,
|
|
1663
1663
|
now: kn,
|
|
1664
|
-
barLabel:
|
|
1665
|
-
barLabelText:
|
|
1664
|
+
barLabel: vn,
|
|
1665
|
+
barLabelText: yn
|
|
1666
1666
|
};
|
|
1667
|
-
function
|
|
1668
|
-
const t = ge(), e =
|
|
1667
|
+
function bn({ target: n }) {
|
|
1668
|
+
const t = ge(), e = we(), s = (l) => t.time(new Date(l), !1), o = (l) => {
|
|
1669
1669
|
const d = Math.round(l / q), p = Math.floor(d / 60), g = d % 60;
|
|
1670
1670
|
return [p > 0 ? e.hoursShort(p) : "", g > 0 || p === 0 ? e.minutesShort(g) : ""].filter(Boolean).join(" ");
|
|
1671
1671
|
};
|
|
1672
1672
|
if (n.kind === "subtask") {
|
|
1673
1673
|
const { subtask: l, task: d } = n;
|
|
1674
|
-
return /* @__PURE__ */ Y(
|
|
1675
|
-
/* @__PURE__ */
|
|
1676
|
-
/* @__PURE__ */
|
|
1677
|
-
/* @__PURE__ */
|
|
1678
|
-
(l.setup ?? 0) > 0 && /* @__PURE__ */
|
|
1679
|
-
(l.teardown ?? 0) > 0 && /* @__PURE__ */
|
|
1680
|
-
n.overlapping.map((p) => /* @__PURE__ */
|
|
1681
|
-
n.lateTransports.map((p) => /* @__PURE__ */
|
|
1674
|
+
return /* @__PURE__ */ Y(Wt, { children: [
|
|
1675
|
+
/* @__PURE__ */ k("span", { className: v.tooltipHead, children: (d == null ? void 0 : d.name) ?? l.task }),
|
|
1676
|
+
/* @__PURE__ */ k("span", { children: l.name ?? l.id }),
|
|
1677
|
+
/* @__PURE__ */ k("span", { className: v.tooltipTimes, children: e.scheduleGhostTimes(s(l.from), s(l.to)) }),
|
|
1678
|
+
(l.setup ?? 0) > 0 && /* @__PURE__ */ k("span", { children: `${e.scheduleSetup} ${o(l.setup)}` }),
|
|
1679
|
+
(l.teardown ?? 0) > 0 && /* @__PURE__ */ k("span", { children: `${e.scheduleTeardown} ${o(l.teardown)}` }),
|
|
1680
|
+
n.overlapping.map((p) => /* @__PURE__ */ k("span", { className: v.finding, children: e.scheduleOverlapWith(p.name ?? p.id) }, p.id)),
|
|
1681
|
+
n.lateTransports.map((p) => /* @__PURE__ */ k("span", { className: v.finding, children: e.scheduleLateBy(o(p.shortBy)) }, p.transport))
|
|
1682
1682
|
] });
|
|
1683
1683
|
}
|
|
1684
1684
|
const { transport: i, task: r, from: a, to: u, late: c } = n;
|
|
1685
|
-
return /* @__PURE__ */ Y(
|
|
1686
|
-
/* @__PURE__ */
|
|
1687
|
-
/* @__PURE__ */
|
|
1688
|
-
/* @__PURE__ */
|
|
1689
|
-
c !== void 0 && /* @__PURE__ */
|
|
1685
|
+
return /* @__PURE__ */ Y(Wt, { children: [
|
|
1686
|
+
/* @__PURE__ */ k("span", { className: v.tooltipHead, children: (r == null ? void 0 : r.name) ?? (r == null ? void 0 : r.id) ?? i.id }),
|
|
1687
|
+
/* @__PURE__ */ k("span", { children: e.scheduleRoute((a == null ? void 0 : a.name) ?? i.from, (u == null ? void 0 : u.name) ?? i.to) }),
|
|
1688
|
+
/* @__PURE__ */ k("span", { children: `${e.scheduleTransport} ${o(i.duration)}` }),
|
|
1689
|
+
c !== void 0 && /* @__PURE__ */ k("span", { className: v.finding, children: e.scheduleLateBy(o(c.shortBy)) })
|
|
1690
1690
|
] });
|
|
1691
1691
|
}
|
|
1692
|
-
const
|
|
1692
|
+
const Mn = [], ce = { min: Tt, max: 28 * st }, Tn = [], de = 20, En = Xe(function(t, e) {
|
|
1693
1693
|
const {
|
|
1694
1694
|
ariaLabel: s,
|
|
1695
1695
|
initialDomain: o,
|
|
1696
1696
|
height: i = 400,
|
|
1697
1697
|
laneHeight: r = lt,
|
|
1698
1698
|
headerWidth: a = 160,
|
|
1699
|
-
calendar: u =
|
|
1699
|
+
calendar: u = Tn,
|
|
1700
1700
|
zoomLimits: c,
|
|
1701
1701
|
snap: l = "ticks",
|
|
1702
|
-
intents: d =
|
|
1702
|
+
intents: d = Mn,
|
|
1703
1703
|
onIntent: p,
|
|
1704
1704
|
canMoveTo: g,
|
|
1705
1705
|
onInteraction: b,
|
|
@@ -1714,78 +1714,78 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
|
|
|
1714
1714
|
attach: R = "centre",
|
|
1715
1715
|
ends: V = "dot",
|
|
1716
1716
|
label: ot,
|
|
1717
|
-
tooltip:
|
|
1717
|
+
tooltip: z,
|
|
1718
1718
|
now: Z,
|
|
1719
1719
|
className: Et,
|
|
1720
1720
|
style: Ee,
|
|
1721
1721
|
children: De
|
|
1722
|
-
} = t, [
|
|
1723
|
-
|
|
1722
|
+
} = t, [w] = it(() => new qs()), Dt = Ke(), Pt = O(null), Nt = O(null), Gt = O(null), Rt = O(null), X = ge(), K = we(), [dt, ft] = o, $t = (c == null ? void 0 : c.min) ?? ce.min, Ot = (c == null ? void 0 : c.max) ?? ce.max, xt = O(null), Bt = typeof l == "object" ? l.step : null, Ht = typeof l == "object" ? l.offset : null, Yt = typeof l == "object" ? null : l, [Pe, Ne] = it(() => Date.now());
|
|
1723
|
+
x(() => {
|
|
1724
1724
|
if (Z !== !0) return;
|
|
1725
1725
|
const h = setInterval(() => Ne(Date.now()), q);
|
|
1726
1726
|
return () => clearInterval(h);
|
|
1727
1727
|
}, [Z]);
|
|
1728
1728
|
const Xt = Z === !0 ? Pe : typeof Z == "number" ? Z : null;
|
|
1729
1729
|
vt(() => {
|
|
1730
|
-
const h = `${dt}|${ft}`, y =
|
|
1731
|
-
|
|
1732
|
-
const A = Yt ?? { step:
|
|
1733
|
-
|
|
1734
|
-
{ laneHeight: r, calendar: u, zoomLimits: { min: $t, max:
|
|
1730
|
+
const h = `${dt}|${ft}`, y = xt.current !== h;
|
|
1731
|
+
xt.current = h;
|
|
1732
|
+
const A = Yt ?? { step: Bt ?? 0, offset: Ht ?? 0 };
|
|
1733
|
+
w.setOptions(
|
|
1734
|
+
{ laneHeight: r, calendar: u, zoomLimits: { min: $t, max: Ot }, snap: A, intents: d, now: Xt, route: F, attach: R, ends: V },
|
|
1735
1735
|
y ? [dt, ft] : null
|
|
1736
1736
|
);
|
|
1737
|
-
}, [
|
|
1738
|
-
|
|
1739
|
-
}, [
|
|
1740
|
-
const Ge =
|
|
1741
|
-
|
|
1737
|
+
}, [w, dt, ft, r, u, $t, Ot, Yt, Bt, Ht, d, Xt, F, R, V]), x(() => {
|
|
1738
|
+
w.setHandlers({ onIntent: p, canMoveTo: g, onInteraction: b, onSelectedTaskChange: _, onCollapsedGroupsChange: C, onDomainChange: L });
|
|
1739
|
+
}, [w, p, g, b, _, C, L]);
|
|
1740
|
+
const Ge = O(m);
|
|
1741
|
+
x(() => {
|
|
1742
1742
|
const h = Ge.current;
|
|
1743
|
-
h !== void 0 &&
|
|
1744
|
-
}, [
|
|
1745
|
-
|
|
1746
|
-
}, [
|
|
1743
|
+
h !== void 0 && w.setDefaultCollapsedGroups(h);
|
|
1744
|
+
}, [w]), x(() => {
|
|
1745
|
+
w.setCollapsedGroups(S);
|
|
1746
|
+
}, [w, S]), Ue(
|
|
1747
1747
|
e,
|
|
1748
1748
|
() => ({
|
|
1749
|
-
positionAt: (h, y) =>
|
|
1750
|
-
clientPointOf: (h, y) =>
|
|
1751
|
-
visibleDomain: () =>
|
|
1749
|
+
positionAt: (h, y) => w.positionAt(h, y),
|
|
1750
|
+
clientPointOf: (h, y) => w.clientPointOf(h, y),
|
|
1751
|
+
visibleDomain: () => w.visibleDomain()
|
|
1752
1752
|
}),
|
|
1753
|
-
[
|
|
1754
|
-
),
|
|
1755
|
-
|
|
1756
|
-
}, [
|
|
1757
|
-
|
|
1758
|
-
}, [
|
|
1753
|
+
[w]
|
|
1754
|
+
), x(() => {
|
|
1755
|
+
w.setControlledTask(I);
|
|
1756
|
+
}, [w, I]), x(() => {
|
|
1757
|
+
w.setPlacing(E ?? null);
|
|
1758
|
+
}, [w, E]), x(() => {
|
|
1759
1759
|
const h = Pt.current, y = Nt.current, A = Gt.current, $ = Rt.current;
|
|
1760
1760
|
if (!h || !y || !A || !$) return;
|
|
1761
|
-
|
|
1761
|
+
w.bind(h, y, A, $);
|
|
1762
1762
|
const D = y.getBoundingClientRect();
|
|
1763
|
-
|
|
1763
|
+
w.resize(D.width, D.height);
|
|
1764
1764
|
const P = new ResizeObserver((G) => {
|
|
1765
|
-
var
|
|
1766
|
-
const tt = (
|
|
1767
|
-
tt !== void 0 &&
|
|
1765
|
+
var zt;
|
|
1766
|
+
const tt = (zt = G[G.length - 1]) == null ? void 0 : zt.contentRect;
|
|
1767
|
+
tt !== void 0 && w.resize(tt.width, tt.height);
|
|
1768
1768
|
});
|
|
1769
1769
|
P.observe(y);
|
|
1770
|
-
const J = (G) =>
|
|
1770
|
+
const J = (G) => w.wheel(G);
|
|
1771
1771
|
h.addEventListener("wheel", J, { passive: !1 });
|
|
1772
1772
|
const Q = (G) => {
|
|
1773
|
-
G.key === "Escape" &&
|
|
1773
|
+
G.key === "Escape" && w.cancelEdit() && G.preventDefault();
|
|
1774
1774
|
};
|
|
1775
1775
|
return window.addEventListener("keydown", Q), () => {
|
|
1776
|
-
window.removeEventListener("keydown", Q), h.removeEventListener("wheel", J), P.disconnect(),
|
|
1776
|
+
window.removeEventListener("keydown", Q), h.removeEventListener("wheel", J), P.disconnect(), w.unbind();
|
|
1777
1777
|
};
|
|
1778
|
-
}, [
|
|
1779
|
-
const T =
|
|
1778
|
+
}, [w]);
|
|
1779
|
+
const T = ze(w.subscribe, w.getSnapshot, w.getServerSnapshot), Re = (h, y) => {
|
|
1780
1780
|
const A = new Date(h);
|
|
1781
1781
|
return y >= 200 ? X.dateLong(A) : y >= 84 ? X.date(A) : y >= 44 ? X.dateShort(A) : "";
|
|
1782
|
-
}, M = T.ghost, pt = (h) => `${Dt}-row-${encodeURIComponent(h.key)}`, $e =
|
|
1782
|
+
}, M = T.ghost, pt = (h) => `${Dt}-row-${encodeURIComponent(h.key)}`, $e = W(() => {
|
|
1783
1783
|
const h = /* @__PURE__ */ new Map();
|
|
1784
1784
|
for (const y of T.headers)
|
|
1785
1785
|
for (const A of y.within)
|
|
1786
1786
|
y.kind === "groupHead" && A === y.group || h.set(A, [...h.get(A) ?? [], pt(y)]);
|
|
1787
1787
|
return h;
|
|
1788
|
-
}, [T.headers, Dt]),
|
|
1788
|
+
}, [T.headers, Dt]), Oe = W(() => new Set((M == null ? void 0 : M.refusedLanes) ?? []), [M == null ? void 0 : M.refusedLanes]), Kt = O(null), [mt, xe] = it({ x: 0, y: 0, at: "" }), gt = M === null ? "" : `${M.x}:${M.y}:${M.from}:${M.to}:${M.overlap}:${M.late}`;
|
|
1789
1789
|
vt(() => {
|
|
1790
1790
|
const h = Kt.current;
|
|
1791
1791
|
if (M === null || h === null) return;
|
|
@@ -1794,9 +1794,9 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
|
|
|
1794
1794
|
y: A >= 2 ? A : Math.min($, T.height - h.offsetHeight - 2),
|
|
1795
1795
|
at: gt
|
|
1796
1796
|
};
|
|
1797
|
-
|
|
1797
|
+
xe((P) => P.x === D.x && P.y === D.y && P.at === D.at ? P : D);
|
|
1798
1798
|
}, [M, gt, T.width, T.height]);
|
|
1799
|
-
const Ut =
|
|
1799
|
+
const Ut = O(null), [wt, Be] = it({ x: 0, y: 0, at: "" }), H = T.tooltip, kt = H === null ? "" : `${H.x}:${H.y}:${H.target.kind}`;
|
|
1800
1800
|
return vt(() => {
|
|
1801
1801
|
const h = Ut.current;
|
|
1802
1802
|
if (H === null || h === null) return;
|
|
@@ -1806,10 +1806,10 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
|
|
|
1806
1806
|
}, $ = {
|
|
1807
1807
|
x: A(H.x, h.offsetWidth, T.width),
|
|
1808
1808
|
y: A(H.y, h.offsetHeight, T.height),
|
|
1809
|
-
at:
|
|
1809
|
+
at: kt
|
|
1810
1810
|
};
|
|
1811
|
-
|
|
1812
|
-
}, [H,
|
|
1811
|
+
Be((D) => D.x === $.x && D.y === $.y && D.at === $.at ? D : $);
|
|
1812
|
+
}, [H, kt, T.width, T.height]), /* @__PURE__ */ Y(ke.Provider, { value: w, children: [
|
|
1813
1813
|
/* @__PURE__ */ Y(
|
|
1814
1814
|
"div",
|
|
1815
1815
|
{
|
|
@@ -1819,12 +1819,12 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
|
|
|
1819
1819
|
className: Et ? `${v.root} ${Et}` : v.root,
|
|
1820
1820
|
style: { height: `${i}px`, gridTemplateColumns: `min(${a}px, 40%) minmax(0, 1fr)`, ...Ee },
|
|
1821
1821
|
children: [
|
|
1822
|
-
/* @__PURE__ */
|
|
1823
|
-
/* @__PURE__ */
|
|
1822
|
+
/* @__PURE__ */ k("div", { className: v.corner }),
|
|
1823
|
+
/* @__PURE__ */ k("div", { className: v.dayBand, "aria-hidden": "true", "data-schedule-days": "", "data-schedule-clip": "day band", children: T.days.map((h) => {
|
|
1824
1824
|
const y = Math.max(0, -h.x), A = Math.min(h.x + h.width, T.width) - Math.max(h.x, 0);
|
|
1825
|
-
return /* @__PURE__ */
|
|
1825
|
+
return /* @__PURE__ */ k("span", { className: v.day, style: { left: `${h.x}px`, width: `${h.width}px` }, children: /* @__PURE__ */ k("span", { className: v.dayLabel, "data-schedule-overlay": "day label", style: { marginLeft: `${y}px` }, children: Re(h.start, A) }) }, h.start);
|
|
1826
1826
|
}) }),
|
|
1827
|
-
/* @__PURE__ */
|
|
1827
|
+
/* @__PURE__ */ k("div", { className: v.headers, "data-schedule-headers": "", children: /* @__PURE__ */ k("div", { className: v.headerRun, style: { transform: `translateY(${-T.scrollY}px)` }, children: T.headers.map((h) => /* @__PURE__ */ Y(
|
|
1828
1828
|
"div",
|
|
1829
1829
|
{
|
|
1830
1830
|
id: pt(h),
|
|
@@ -1834,9 +1834,9 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
|
|
|
1834
1834
|
"data-group": h.group,
|
|
1835
1835
|
"data-row": h.kind,
|
|
1836
1836
|
"data-schedule-clip": `header ${h.kind}`,
|
|
1837
|
-
"data-refused": h.lane !== void 0 &&
|
|
1837
|
+
"data-refused": h.lane !== void 0 && Oe.has(h.lane) ? "" : void 0,
|
|
1838
1838
|
children: [
|
|
1839
|
-
h.kind !== "lane" && h.group !== void 0 && /* @__PURE__ */
|
|
1839
|
+
h.kind !== "lane" && h.group !== void 0 && /* @__PURE__ */ k(
|
|
1840
1840
|
"button",
|
|
1841
1841
|
{
|
|
1842
1842
|
type: "button",
|
|
@@ -1845,12 +1845,12 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
|
|
|
1845
1845
|
"aria-expanded": h.collapsed === !1,
|
|
1846
1846
|
"aria-controls": ($e.get(h.group) ?? [pt(h)]).join(" "),
|
|
1847
1847
|
"aria-label": `${h.collapsed === !0 ? K.scheduleUnfoldGroup : K.scheduleFoldGroup}: ${typeof h.label == "string" ? h.label : h.group}`,
|
|
1848
|
-
onClick: () =>
|
|
1849
|
-
children: /* @__PURE__ */
|
|
1848
|
+
onClick: () => w.toggleGroup(h.group),
|
|
1849
|
+
children: /* @__PURE__ */ k(Qe, { size: 9, "data-open": h.collapsed === !1 ? "" : void 0 })
|
|
1850
1850
|
}
|
|
1851
1851
|
),
|
|
1852
|
-
/* @__PURE__ */
|
|
1853
|
-
h.kind !== "lane" && /* @__PURE__ */
|
|
1852
|
+
/* @__PURE__ */ k("span", { className: v.headerLabel, "data-schedule-overlay": "header label", children: h.label }),
|
|
1853
|
+
h.kind !== "lane" && /* @__PURE__ */ k("span", { className: v.headerCount, "data-schedule-overlay": "lane count", "data-lane-count": h.lanes, children: K.scheduleLaneCount(h.lanes) })
|
|
1854
1854
|
]
|
|
1855
1855
|
},
|
|
1856
1856
|
h.key
|
|
@@ -1863,22 +1863,22 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
|
|
|
1863
1863
|
"data-schedule-plot": "",
|
|
1864
1864
|
"data-schedule-clip": "plot",
|
|
1865
1865
|
style: { cursor: T.cursor },
|
|
1866
|
-
onPointerDown: (h) =>
|
|
1867
|
-
onPointerMove: (h) =>
|
|
1868
|
-
onPointerUp: (h) =>
|
|
1869
|
-
onPointerCancel: (h) =>
|
|
1870
|
-
onPointerLeave: () =>
|
|
1871
|
-
onContextMenu: (h) =>
|
|
1872
|
-
onDragOver: (h) =>
|
|
1873
|
-
onDrop: (h) =>
|
|
1866
|
+
onPointerDown: (h) => w.pointerDown(h.nativeEvent),
|
|
1867
|
+
onPointerMove: (h) => w.pointerMove(h.nativeEvent),
|
|
1868
|
+
onPointerUp: (h) => w.pointerUp(h.nativeEvent),
|
|
1869
|
+
onPointerCancel: (h) => w.pointerCancel(h.nativeEvent),
|
|
1870
|
+
onPointerLeave: () => w.pointerLeave(),
|
|
1871
|
+
onContextMenu: (h) => w.contextMenu(h.nativeEvent),
|
|
1872
|
+
onDragOver: (h) => w.dragOver(h.nativeEvent),
|
|
1873
|
+
onDrop: (h) => w.drop(h.nativeEvent),
|
|
1874
1874
|
onDragLeave: (h) => {
|
|
1875
1875
|
const y = h.nativeEvent.relatedTarget;
|
|
1876
|
-
(!(y instanceof Node) || !h.currentTarget.contains(y)) &&
|
|
1876
|
+
(!(y instanceof Node) || !h.currentTarget.contains(y)) && w.dragLeave();
|
|
1877
1877
|
},
|
|
1878
1878
|
children: [
|
|
1879
|
-
/* @__PURE__ */
|
|
1880
|
-
/* @__PURE__ */
|
|
1881
|
-
T.grips.map((h) => /* @__PURE__ */
|
|
1879
|
+
/* @__PURE__ */ k("canvas", { ref: Gt, className: v.layer, "aria-hidden": "true" }),
|
|
1880
|
+
/* @__PURE__ */ k("canvas", { ref: Rt, className: v.layer, "aria-hidden": "true" }),
|
|
1881
|
+
T.grips.map((h) => /* @__PURE__ */ k(
|
|
1882
1882
|
"span",
|
|
1883
1883
|
{
|
|
1884
1884
|
"data-grip": h.kind,
|
|
@@ -1889,7 +1889,7 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
|
|
|
1889
1889
|
},
|
|
1890
1890
|
h.kind
|
|
1891
1891
|
)),
|
|
1892
|
-
ot !== void 0 && T.bars.map((h) => /* @__PURE__ */
|
|
1892
|
+
ot !== void 0 && T.bars.map((h) => /* @__PURE__ */ k(
|
|
1893
1893
|
"span",
|
|
1894
1894
|
{
|
|
1895
1895
|
className: v.barLabel,
|
|
@@ -1898,11 +1898,11 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
|
|
|
1898
1898
|
"data-schedule-may-cover": "",
|
|
1899
1899
|
"data-on": h.dark ? "dark" : "light",
|
|
1900
1900
|
style: { left: `${h.x}px`, top: `${h.y}px`, width: `${h.width}px`, height: `${h.height}px` },
|
|
1901
|
-
children: /* @__PURE__ */
|
|
1901
|
+
children: /* @__PURE__ */ k("span", { className: v.barLabelText, children: ot(h.subtask) })
|
|
1902
1902
|
},
|
|
1903
1903
|
h.subtask.id
|
|
1904
1904
|
)),
|
|
1905
|
-
|
|
1905
|
+
z !== !1 && T.tooltip !== null && /* @__PURE__ */ k(
|
|
1906
1906
|
"span",
|
|
1907
1907
|
{
|
|
1908
1908
|
ref: Ut,
|
|
@@ -1911,11 +1911,11 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
|
|
|
1911
1911
|
"data-schedule-tooltip": "",
|
|
1912
1912
|
"data-schedule-overlay": "tooltip",
|
|
1913
1913
|
style: {
|
|
1914
|
-
left: `${
|
|
1915
|
-
top: `${
|
|
1916
|
-
visibility:
|
|
1914
|
+
left: `${wt.x}px`,
|
|
1915
|
+
top: `${wt.y}px`,
|
|
1916
|
+
visibility: wt.at === kt ? void 0 : "hidden"
|
|
1917
1917
|
},
|
|
1918
|
-
children: typeof
|
|
1918
|
+
children: typeof z == "function" ? z(T.tooltip.target) : /* @__PURE__ */ k(bn, { target: T.tooltip.target })
|
|
1919
1919
|
}
|
|
1920
1920
|
),
|
|
1921
1921
|
M !== null && /* @__PURE__ */ Y(
|
|
@@ -1934,19 +1934,19 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
|
|
|
1934
1934
|
},
|
|
1935
1935
|
children: [
|
|
1936
1936
|
K.scheduleGhostTimes(X.time(new Date(M.from), !1), X.time(new Date(M.to), !1)),
|
|
1937
|
-
M.refused && /* @__PURE__ */
|
|
1938
|
-
M.overlap && /* @__PURE__ */
|
|
1939
|
-
M.late && /* @__PURE__ */
|
|
1937
|
+
M.refused && /* @__PURE__ */ k("span", { className: v.refusal, children: K.scheduleLaneRefused }),
|
|
1938
|
+
M.overlap && /* @__PURE__ */ k("span", { className: v.finding, children: K.scheduleOverlap }),
|
|
1939
|
+
M.late && /* @__PURE__ */ k("span", { className: v.finding, children: K.scheduleLateTransport })
|
|
1940
1940
|
]
|
|
1941
1941
|
}
|
|
1942
1942
|
)
|
|
1943
1943
|
]
|
|
1944
1944
|
}
|
|
1945
1945
|
),
|
|
1946
|
-
/* @__PURE__ */
|
|
1946
|
+
/* @__PURE__ */ k("div", { className: v.corner }),
|
|
1947
1947
|
/* @__PURE__ */ Y("div", { className: v.tickBand, "aria-hidden": "true", "data-schedule-ticks": "", "data-schedule-clip": "time band", children: [
|
|
1948
|
-
T.now !== null && /* @__PURE__ */
|
|
1949
|
-
T.ticks.map((h) => /* @__PURE__ */
|
|
1948
|
+
T.now !== null && /* @__PURE__ */ k("span", { className: v.now, "data-now": "", "data-schedule-overlay": "now mark", style: { left: `${T.now}px` } }),
|
|
1949
|
+
T.ticks.map((h) => /* @__PURE__ */ k("span", { className: v.tick, style: { left: `${h.x}px` }, children: h.x >= de && h.x <= T.width - de && /* @__PURE__ */ k("span", { className: v.tickLabel, "data-schedule-overlay": "time label", children: T.step >= st ? X.dateShort(new Date(h.wallClock)) : X.time(new Date(h.wallClock), !1) }) }, h.wallClock))
|
|
1950
1950
|
] })
|
|
1951
1951
|
]
|
|
1952
1952
|
}
|
|
@@ -1954,23 +1954,23 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
|
|
|
1954
1954
|
De
|
|
1955
1955
|
] });
|
|
1956
1956
|
});
|
|
1957
|
-
function
|
|
1958
|
-
const e = ye(), s =
|
|
1959
|
-
return
|
|
1957
|
+
function Dn({ id: n, label: t }) {
|
|
1958
|
+
const e = ye(), s = W(() => ({ id: n, label: t ?? n, ...e === null ? {} : { parent: e } }), [n, t, e]);
|
|
1959
|
+
return es(s), null;
|
|
1960
1960
|
}
|
|
1961
|
-
function
|
|
1962
|
-
const s = ye(), o =
|
|
1963
|
-
return
|
|
1961
|
+
function Pn({ id: n, label: t, children: e }) {
|
|
1962
|
+
const s = ye(), o = W(() => ({ id: n, label: t ?? n, ...s === null ? {} : { parent: s } }), [n, t, s]);
|
|
1963
|
+
return ss(o), /* @__PURE__ */ k(ve.Provider, { value: n, children: e });
|
|
1964
1964
|
}
|
|
1965
|
-
function
|
|
1966
|
-
const e =
|
|
1965
|
+
function Nn({ data: n, tasks: t }) {
|
|
1966
|
+
const e = W(() => ({ kind: "subtasks", data: n, tasks: t }), [n, t]);
|
|
1967
1967
|
return be("Subtasks", e), null;
|
|
1968
1968
|
}
|
|
1969
|
-
function
|
|
1970
|
-
const t =
|
|
1969
|
+
function Gn({ data: n }) {
|
|
1970
|
+
const t = W(() => ({ kind: "transports", data: n }), [n]);
|
|
1971
1971
|
return be("Transports", t), null;
|
|
1972
1972
|
}
|
|
1973
|
-
function
|
|
1973
|
+
function Rn(n, t, e) {
|
|
1974
1974
|
if (e.kind === "place") return [];
|
|
1975
1975
|
const s = new Map(n.map((u) => [u.id, jt(u, e)])), o = /* @__PURE__ */ new Map();
|
|
1976
1976
|
for (const u of t) {
|
|
@@ -1994,25 +1994,25 @@ function Gn(n, t, e) {
|
|
|
1994
1994
|
}
|
|
1995
1995
|
return [...i.values()];
|
|
1996
1996
|
}
|
|
1997
|
-
function
|
|
1997
|
+
function $n(n, t, e) {
|
|
1998
1998
|
return e === 0 || !Number.isFinite(e) ? [] : n.filter((s) => s.task === t).map((s) => ({ kind: "move", subtask: s.id, from: s.from + e, to: s.to + e }));
|
|
1999
1999
|
}
|
|
2000
2000
|
export {
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2001
|
+
Dn as Lane,
|
|
2002
|
+
Pn as LaneGroup,
|
|
2003
|
+
En as Schedule,
|
|
2004
|
+
Nn as Subtasks,
|
|
2005
|
+
Gn as Transports,
|
|
2006
2006
|
jt as applyIntent,
|
|
2007
2007
|
It as arrival,
|
|
2008
2008
|
St as departure,
|
|
2009
|
-
|
|
2009
|
+
Fn as findings,
|
|
2010
2010
|
_t as lateTransports,
|
|
2011
2011
|
ut as occupied,
|
|
2012
2012
|
At as overlaps,
|
|
2013
2013
|
ht as resolveAppearance,
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2014
|
+
Rn as ripple,
|
|
2015
|
+
$n as shiftTask,
|
|
2016
|
+
$s as snapTime,
|
|
2017
|
+
_n as subtaskFromPlace
|
|
2018
2018
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@umriss-ui/schedule",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"description": "The umriss schedule - subtasks on lanes over time, with transports, findings and controlled editing.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Roman Händler",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"react": ">=18",
|
|
46
46
|
"react-dom": ">=18",
|
|
47
|
-
"@umriss-ui/
|
|
48
|
-
"@umriss-ui/
|
|
47
|
+
"@umriss-ui/core": "^0.9.0",
|
|
48
|
+
"@umriss-ui/charts": "^0.5.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@fontsource/geist-mono": "^5.3.0",
|
|
@@ -59,9 +59,9 @@
|
|
|
59
59
|
"typescript": "^5.6.3",
|
|
60
60
|
"vite": "^6.0.0",
|
|
61
61
|
"vite-plugin-dts": "^4.3.0",
|
|
62
|
-
"@umriss-ui/charts": "0.
|
|
63
|
-
"@umriss-ui/
|
|
64
|
-
"@umriss-ui/
|
|
62
|
+
"@umriss-ui/charts": "0.5.0",
|
|
63
|
+
"@umriss-ui/core": "0.9.0",
|
|
64
|
+
"@umriss-ui/demo": "0.0.0"
|
|
65
65
|
},
|
|
66
66
|
"scripts": {
|
|
67
67
|
"props": "node --disable-warning=ExperimentalWarning --experimental-strip-types demo/props.ts",
|