@umriss-ui/schedule 0.1.1 → 0.1.3

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 CHANGED
@@ -15,6 +15,46 @@ moves from here under the rule above.
15
15
 
16
16
  ---
17
17
 
18
+ ## 0.1.3 – Core 0.4.0 and charts 0.4.0 (Sep. 2026)
19
+
20
+ ### Changed
21
+
22
+ - **The schedule takes `@umriss-ui/core` 0.4 and `@umriss-ui/charts` 0.4.**
23
+ The peer ranges move to `^0.4.0`. The schedule places its day and shift
24
+ boundaries with the local offset that charts now exports (`localOffset`);
25
+ its own copy is gone. What it draws is unchanged.
26
+
27
+ ---
28
+
29
+ ## 0.1.2 – Phones, touch and a review (Sep. 2026)
30
+
31
+ ### Changed
32
+
33
+ - **The lane headers take at most 40 % of the schedule.** `headerWidth` is
34
+ now `min(headerWidth px, 40%)`, so that on a phone the plot keeps the larger
35
+ part.
36
+ - **The wheel over the lane headers scrolls the lanes**, as it does over the
37
+ plot; Ctrl or ⌘ there zooms around the plot's first instant.
38
+ - **A finger's tap may wander ten pixels** and still select; the mouse keeps
39
+ its three.
40
+
41
+ ### Fixed
42
+
43
+ - A pinch that ends with one finger still down pans on with that finger,
44
+ instead of doing nothing until it is lifted; a third finger no longer breaks
45
+ the pinch.
46
+ - A pan ended by `pointercancel` gives the cursor back.
47
+ - A schedule unmounted during a drag stops its auto-pan and the timer of a
48
+ folded group it rested over; before, the auto-pan ran on and kept reporting
49
+ `onDomainChange`.
50
+ - A new `calendar` - an inline array counts, being new on every render - under
51
+ a view panned past the old calendar's ends no longer turns the domain into
52
+ NaN and the plot blank.
53
+ - A lane or group id containing a space no longer breaks the fold control's
54
+ `aria-controls`.
55
+
56
+ ---
57
+
18
58
  ## 0.1.1 – The README catches up (Sep. 2026)
19
59
 
20
60
  Nothing in the code changed. The README names the online demo, the design
package/README.md CHANGED
@@ -122,8 +122,11 @@ application's hands; it is a view state, never an intent.
122
122
 
123
123
  A tooltip on a hovered subtask or transport names the order, the times, setup
124
124
  and teardown and the findings; `tooltip` replaces its content or switches it
125
- off. `now` draws the present across the lanes. The wheel scrolls the lanes and
126
- releases the page at their end, Ctrl or ⌘ and a pinch zoom, Shift pans;
125
+ off. `now` draws the present across the lanes. The wheel over the schedule,
126
+ lane headers included, scrolls the lanes and releases the page at their end,
127
+ Ctrl or ⌘ and a pinch zoom, Shift pans; on a touch screen one finger pans and a
128
+ tap selects. The lane headers take at most 40 % of the width, so that on a
129
+ phone the plot keeps the larger part;
127
130
  `onDomainChange` reports the visible span, and a ref handle turns a client
128
131
  point into a time and a lane and back.
129
132
 
package/dist/index.d.ts CHANGED
@@ -258,7 +258,8 @@ export declare interface ScheduleProps {
258
258
  height?: number;
259
259
  /** Height of one lane in pixels. */
260
260
  laneHeight?: number;
261
- /** Width of the lane headers in pixels. */
261
+ /** Width of the lane headers in pixels - at most 40 % of the schedule, so
262
+ that on a phone the plot keeps the larger part. */
262
263
  headerWidth?: number;
263
264
  /** An operating calendar: the intervals in which time counts. Nights and
264
265
  weekends outside them are cut out of the axis. Default: the wall clock. */
package/dist/schedule.css CHANGED
@@ -1 +1 @@
1
- @layer umriss.tokens,umriss.base,umriss.components;@layer umriss.base{._text_18b86_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_18b86_34{caret-color:var(--u-color-accent)}._scroll_18b86_40{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--u-color-text) 25%,transparent) transparent}._scroll_18b86_40::-webkit-scrollbar{width:10px;height:10px}._scroll_18b86_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_18b86_40::-webkit-scrollbar-track{background:transparent}}@layer umriss.components{._ring_18b86_65:focus-visible{outline:none;box-shadow:var(--u-focus-ring)}._field_18b86_34:-webkit-autofill,._field_18b86_34:-webkit-autofill:hover,._field_18b86_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_ekx9o_4,._root_ekx9o_4:before,._root_ekx9o_4:after{box-sizing:border-box}._corner_ekx9o_18,._corner_ekx9o_18:before,._corner_ekx9o_18:after{box-sizing:border-box}._dayBand_ekx9o_22,._dayBand_ekx9o_22:before,._dayBand_ekx9o_22:after{box-sizing:border-box}._tickBand_ekx9o_23,._tickBand_ekx9o_23:before,._tickBand_ekx9o_23:after{box-sizing:border-box}._day_ekx9o_22,._day_ekx9o_22:before,._day_ekx9o_22:after{box-sizing:border-box}._dayLabel_ekx9o_46,._dayLabel_ekx9o_46:before,._dayLabel_ekx9o_46:after{box-sizing:border-box}._tick_ekx9o_23,._tick_ekx9o_23:before,._tick_ekx9o_23:after{box-sizing:border-box}._tickLabel_ekx9o_64,._tickLabel_ekx9o_64:before,._tickLabel_ekx9o_64:after{box-sizing:border-box}._headers_ekx9o_72,._headers_ekx9o_72:before,._headers_ekx9o_72:after{box-sizing:border-box}._header_ekx9o_72,._header_ekx9o_72:before,._header_ekx9o_72:after{box-sizing:border-box}._headerLabel_ekx9o_90,._headerLabel_ekx9o_90:before,._headerLabel_ekx9o_90:after{box-sizing:border-box}._headerCount_ekx9o_103,._headerCount_ekx9o_103:before,._headerCount_ekx9o_103:after{box-sizing:border-box}._chevron_ekx9o_112,._chevron_ekx9o_112:before,._chevron_ekx9o_112:after{box-sizing:border-box}._plot_ekx9o_160,._plot_ekx9o_160:before,._plot_ekx9o_160:after{box-sizing:border-box}._layer_ekx9o_166,._layer_ekx9o_166:before,._layer_ekx9o_166:after{box-sizing:border-box}._grip_ekx9o_175,._grip_ekx9o_175:before,._grip_ekx9o_175:after{box-sizing:border-box}._ghostLabel_ekx9o_185,._ghostLabel_ekx9o_185:before,._ghostLabel_ekx9o_185:after{box-sizing:border-box}._finding_ekx9o_198,._finding_ekx9o_198:before,._finding_ekx9o_198:after{box-sizing:border-box}._refusal_ekx9o_206,._refusal_ekx9o_206:before,._refusal_ekx9o_206:after{box-sizing:border-box}._tooltip_ekx9o_210,._tooltip_ekx9o_210:before,._tooltip_ekx9o_210:after{box-sizing:border-box}._tooltipHead_ekx9o_228,._tooltipHead_ekx9o_228:before,._tooltipHead_ekx9o_228:after{box-sizing:border-box}._tooltipTimes_ekx9o_233,._tooltipTimes_ekx9o_233:before,._tooltipTimes_ekx9o_233:after{box-sizing:border-box}._now_ekx9o_242,._now_ekx9o_242:before,._now_ekx9o_242:after{box-sizing:border-box}._barLabel_ekx9o_256,._barLabel_ekx9o_256:before,._barLabel_ekx9o_256:after{box-sizing:border-box}._barLabelText_ekx9o_269,._barLabelText_ekx9o_269:before,._barLabelText_ekx9o_269:after{box-sizing:border-box}._root_ekx9o_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_ekx9o_18{background:var(--u-color-surface)}._dayBand_ekx9o_22,._tickBand_ekx9o_23{position:relative;overflow:hidden;color:var(--u-color-text-muted);font-size:var(--u-text-xs)}._dayBand_ekx9o_22{border-bottom:1px solid var(--u-hairline-strong)}._tickBand_ekx9o_23{border-top:1px solid var(--u-hairline-strong)}._day_ekx9o_22{position:absolute;top:0;bottom:0;border-left:1px solid var(--u-hairline-strong);overflow:hidden}._dayLabel_ekx9o_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_ekx9o_23{position:absolute;top:0;bottom:0;width:1px;background:var(--u-hairline)}._tickLabel_ekx9o_64{position:absolute;top:50%;left:0;transform:translate(-50%,-50%);white-space:nowrap}._headers_ekx9o_72{position:relative;overflow:hidden;border-right:1px solid var(--u-hairline-strong)}._header_ekx9o_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_ekx9o_90{min-width:0;overflow:hidden;text-overflow:ellipsis}._header_ekx9o_72[data-row=groupHead],._header_ekx9o_72[data-row=miniature]{font-weight:var(--u-weight-medium)}._headerCount_ekx9o_103{flex:none;color:var(--u-color-text-muted);font-size:var(--u-text-xs);font-variant-numeric:tabular-nums}._chevron_ekx9o_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}._chevron_ekx9o_112:hover{color:var(--u-color-text)}._chevron_ekx9o_112:focus-visible{outline:none;box-shadow:var(--u-focus-ring);color:var(--u-color-text)}._chevron_ekx9o_112 svg{box-sizing:border-box}._chevron_ekx9o_112 svg{transition:transform var(--u-duration-fast) var(--u-ease-standard)}._chevron_ekx9o_112 svg[data-open]{box-sizing:border-box}._chevron_ekx9o_112 svg[data-open]{transform:rotate(90deg)}@media(prefers-reduced-motion:reduce){._chevron_ekx9o_112 svg{transition:none}}._header_ekx9o_72[data-refused]{color:var(--u-color-text-muted)}._plot_ekx9o_160{position:relative;overflow:hidden;touch-action:none}._layer_ekx9o_166{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block;pointer-events:none}._grip_ekx9o_175{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_ekx9o_185{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_ekx9o_198{font-weight:var(--u-weight-semibold);color:var(--u-color-danger-subtle)}._refusal_ekx9o_206{font-weight:var(--u-weight-semibold)}._tooltip_ekx9o_210{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_ekx9o_228{color:var(--u-color-text);font-weight:var(--u-weight-semibold)}._tooltipTimes_ekx9o_233{color:var(--u-color-text)}._tooltip_ekx9o_210 ._finding_ekx9o_198{color:var(--u-color-danger)}._now_ekx9o_242{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_ekx9o_256{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_ekx9o_269{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}._barLabel_ekx9o_256[data-on=dark]{color:var(--u-color-on-accent)}._barLabel_ekx9o_256[data-on=light]{color:var(--u-color-text)}}
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_ekx9o_4,._root_ekx9o_4:before,._root_ekx9o_4:after{box-sizing:border-box}._corner_ekx9o_18,._corner_ekx9o_18:before,._corner_ekx9o_18:after{box-sizing:border-box}._dayBand_ekx9o_22,._dayBand_ekx9o_22:before,._dayBand_ekx9o_22:after{box-sizing:border-box}._tickBand_ekx9o_23,._tickBand_ekx9o_23:before,._tickBand_ekx9o_23:after{box-sizing:border-box}._day_ekx9o_22,._day_ekx9o_22:before,._day_ekx9o_22:after{box-sizing:border-box}._dayLabel_ekx9o_46,._dayLabel_ekx9o_46:before,._dayLabel_ekx9o_46:after{box-sizing:border-box}._tick_ekx9o_23,._tick_ekx9o_23:before,._tick_ekx9o_23:after{box-sizing:border-box}._tickLabel_ekx9o_64,._tickLabel_ekx9o_64:before,._tickLabel_ekx9o_64:after{box-sizing:border-box}._headers_ekx9o_72,._headers_ekx9o_72:before,._headers_ekx9o_72:after{box-sizing:border-box}._header_ekx9o_72,._header_ekx9o_72:before,._header_ekx9o_72:after{box-sizing:border-box}._headerLabel_ekx9o_90,._headerLabel_ekx9o_90:before,._headerLabel_ekx9o_90:after{box-sizing:border-box}._headerCount_ekx9o_103,._headerCount_ekx9o_103:before,._headerCount_ekx9o_103:after{box-sizing:border-box}._chevron_ekx9o_112,._chevron_ekx9o_112:before,._chevron_ekx9o_112:after{box-sizing:border-box}._plot_ekx9o_160,._plot_ekx9o_160:before,._plot_ekx9o_160:after{box-sizing:border-box}._layer_ekx9o_166,._layer_ekx9o_166:before,._layer_ekx9o_166:after{box-sizing:border-box}._grip_ekx9o_175,._grip_ekx9o_175:before,._grip_ekx9o_175:after{box-sizing:border-box}._ghostLabel_ekx9o_185,._ghostLabel_ekx9o_185:before,._ghostLabel_ekx9o_185:after{box-sizing:border-box}._finding_ekx9o_198,._finding_ekx9o_198:before,._finding_ekx9o_198:after{box-sizing:border-box}._refusal_ekx9o_206,._refusal_ekx9o_206:before,._refusal_ekx9o_206:after{box-sizing:border-box}._tooltip_ekx9o_210,._tooltip_ekx9o_210:before,._tooltip_ekx9o_210:after{box-sizing:border-box}._tooltipHead_ekx9o_228,._tooltipHead_ekx9o_228:before,._tooltipHead_ekx9o_228:after{box-sizing:border-box}._tooltipTimes_ekx9o_233,._tooltipTimes_ekx9o_233:before,._tooltipTimes_ekx9o_233:after{box-sizing:border-box}._now_ekx9o_242,._now_ekx9o_242:before,._now_ekx9o_242:after{box-sizing:border-box}._barLabel_ekx9o_256,._barLabel_ekx9o_256:before,._barLabel_ekx9o_256:after{box-sizing:border-box}._barLabelText_ekx9o_269,._barLabelText_ekx9o_269:before,._barLabelText_ekx9o_269:after{box-sizing:border-box}._root_ekx9o_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_ekx9o_18{background:var(--u-color-surface)}._dayBand_ekx9o_22,._tickBand_ekx9o_23{position:relative;overflow:hidden;color:var(--u-color-text-muted);font-size:var(--u-text-xs)}._dayBand_ekx9o_22{border-bottom:1px solid var(--u-hairline-strong)}._tickBand_ekx9o_23{border-top:1px solid var(--u-hairline-strong)}._day_ekx9o_22{position:absolute;top:0;bottom:0;border-left:1px solid var(--u-hairline-strong);overflow:hidden}._dayLabel_ekx9o_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_ekx9o_23{position:absolute;top:0;bottom:0;width:1px;background:var(--u-hairline)}._tickLabel_ekx9o_64{position:absolute;top:50%;left:0;transform:translate(-50%,-50%);white-space:nowrap}._headers_ekx9o_72{position:relative;overflow:hidden;border-right:1px solid var(--u-hairline-strong)}._header_ekx9o_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_ekx9o_90{min-width:0;overflow:hidden;text-overflow:ellipsis}._header_ekx9o_72[data-row=groupHead],._header_ekx9o_72[data-row=miniature]{font-weight:var(--u-weight-medium)}._headerCount_ekx9o_103{flex:none;color:var(--u-color-text-muted);font-size:var(--u-text-xs);font-variant-numeric:tabular-nums}._chevron_ekx9o_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}._chevron_ekx9o_112:hover{color:var(--u-color-text)}._chevron_ekx9o_112:focus-visible{outline:none;box-shadow:var(--u-focus-ring);color:var(--u-color-text)}._chevron_ekx9o_112 svg{box-sizing:border-box}._chevron_ekx9o_112 svg{transition:transform var(--u-duration-fast) var(--u-ease-standard)}._chevron_ekx9o_112 svg[data-open]{box-sizing:border-box}._chevron_ekx9o_112 svg[data-open]{transform:rotate(90deg)}@media(prefers-reduced-motion:reduce){._chevron_ekx9o_112 svg{transition:none}}._header_ekx9o_72[data-refused]{color:var(--u-color-text-muted)}._plot_ekx9o_160{position:relative;overflow:hidden;touch-action:none}._layer_ekx9o_166{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block;pointer-events:none}._grip_ekx9o_175{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_ekx9o_185{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_ekx9o_198{font-weight:var(--u-weight-semibold);color:var(--u-color-danger-subtle)}._refusal_ekx9o_206{font-weight:var(--u-weight-semibold)}._tooltip_ekx9o_210{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_ekx9o_228{color:var(--u-color-text);font-weight:var(--u-weight-semibold)}._tooltipTimes_ekx9o_233{color:var(--u-color-text)}._tooltip_ekx9o_210 ._finding_ekx9o_198{color:var(--u-color-danger)}._now_ekx9o_242{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_ekx9o_256{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_ekx9o_269{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}._barLabel_ekx9o_256[data-on=dark]{color:var(--u-color-on-accent)}._barLabel_ekx9o_256[data-on=light]{color:var(--u-color-text)}}
package/dist/schedule.js CHANGED
@@ -2,16 +2,16 @@ 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 H, Fragment as zt, jsx as w } from "react/jsx-runtime";
6
- import { useContext as fe, createContext as pe, useRef as $, useEffect as B, forwardRef as Xe, useState as it, useId as Ke, useLayoutEffect as vt, useImperativeHandle as We, useSyncExternalStore as Ue, useMemo as q } from "react";
7
- import { toOperatingTimeClamped as Y, resolveColours as ze, removedIntervals as qe, MINUTE as U, calendarFrom as et, toWallClock as X, 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 me, useWording as ge } from "@umriss-ui/core";
9
- const ke = pe(null), we = pe(null);
10
- function ve() {
11
- return fe(we);
5
+ import { jsxs as Y, Fragment as zt, jsx as w } from "react/jsx-runtime";
6
+ import { useContext as fe, createContext as pe, useRef as $, useEffect as B, forwardRef as Xe, useState as it, useId as Ke, useLayoutEffect as vt, useImperativeHandle as Ue, useSyncExternalStore as We, useMemo as z } from "react";
7
+ import { toOperatingTimeClamped as O, resolveColours as ze, 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 ke } from "@umriss-ui/core";
9
+ const we = pe(null), ve = pe(null);
10
+ function ye() {
11
+ return fe(ve);
12
12
  }
13
13
  function Qe(n) {
14
- const t = fe(ke);
14
+ const t = fe(we);
15
15
  if (t === null)
16
16
  throw new Error(`@umriss-ui/schedule: <${n}> must be used inside a <Schedule>.`);
17
17
  return t;
@@ -30,7 +30,7 @@ function ts(n) {
30
30
  function es(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
- function ye(n, t) {
33
+ function be(n, t) {
34
34
  Ct(n, t, (e, s) => e.registerLayer(s), (e, s, o) => e.updateLayer(s, o), (e, s) => e.unregisterLayer(s));
35
35
  }
36
36
  function ht(n) {
@@ -59,18 +59,18 @@ function qt(n) {
59
59
  }
60
60
  const l = [], d = /* @__PURE__ */ new Map();
61
61
  let p = [], g = null, b = 0;
62
- const A = (m) => (l.push({ ...m, top: b }), b += m.height, l.length - 1), _ = (m) => m.find((C) => s.has(C)), S = () => {
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
64
  const { row: m, lanes: C } = g, L = l[m], E = Math.max(L.height, C.length * ns + 2 * yt);
65
65
  l[m] = { ...L, height: E }, b += E - L.height;
66
66
  const F = E - 2 * yt, G = Math.max(os, Math.floor(F / C.length));
67
- C.forEach((j, ot) => {
68
- const z = c.get(j) ?? [];
69
- d.set(j, {
67
+ C.forEach((V, ot) => {
68
+ const W = c.get(V) ?? [];
69
+ d.set(V, {
70
70
  top: L.top + yt + ot * G,
71
71
  height: G,
72
72
  miniature: !0,
73
- group: z[z.length - 1]
73
+ group: W[W.length - 1]
74
74
  });
75
75
  }), g = null;
76
76
  };
@@ -85,7 +85,7 @@ function qt(n) {
85
85
  p = p.slice(0, E);
86
86
  for (const F of C.slice(E)) {
87
87
  if (p.push(F), F === L) break;
88
- A({
88
+ I({
89
89
  kind: "groupHead",
90
90
  lane: void 0,
91
91
  group: F,
@@ -96,7 +96,7 @@ function qt(n) {
96
96
  });
97
97
  }
98
98
  if (L !== void 0) {
99
- const F = C.indexOf(L), G = A({
99
+ const F = C.indexOf(L), G = I({
100
100
  kind: "miniature",
101
101
  lane: void 0,
102
102
  group: L,
@@ -108,7 +108,7 @@ function qt(n) {
108
108
  g = { group: L, row: G, lanes: [m.id] };
109
109
  continue;
110
110
  }
111
- A({ kind: "lane", lane: m.id, group: C[C.length - 1], depth: C.length, within: C, lanes: 1, height: o }), d.set(m.id, {
111
+ I({ kind: "lane", lane: m.id, group: C[C.length - 1], depth: C.length, within: C, lanes: 1, height: o }), d.set(m.id, {
112
112
  top: l[l.length - 1].top,
113
113
  height: o,
114
114
  miniature: !1,
@@ -152,7 +152,7 @@ function ut(n) {
152
152
  function St(n, t) {
153
153
  return (n.leaves ?? "teardown") === "main" ? t.to : t.to + (t.teardown ?? 0);
154
154
  }
155
- function At(n, t) {
155
+ function It(n, t) {
156
156
  return (n.arrives ?? "setup") === "main" ? t.from : t.from - (t.setup ?? 0);
157
157
  }
158
158
  function jt(n, t) {
@@ -169,7 +169,7 @@ function jt(n, t) {
169
169
  return { ...n, lane: t.lane };
170
170
  }
171
171
  }
172
- function In(n, t) {
172
+ function An(n, t) {
173
173
  return {
174
174
  id: t,
175
175
  task: n.task,
@@ -180,9 +180,9 @@ function In(n, t) {
180
180
  ...n.teardown === void 0 ? {} : { teardown: n.teardown }
181
181
  };
182
182
  }
183
- const as = 6, be = 3, tt = 2, Vt = 3, Zt = 3;
183
+ const as = 6, Me = 3, et = 2, Vt = 3, Zt = 3;
184
184
  function P(n, t) {
185
- return Math.round(n.scale.toPx(Y(t, n.calendar)));
185
+ return Math.round(n.scale.toPx(O(t, n.calendar)));
186
186
  }
187
187
  function ct(n, t) {
188
188
  const e = Lt(n.rows, t);
@@ -191,7 +191,7 @@ function ct(n, t) {
191
191
  function Jt(n, t) {
192
192
  return rs(n.rows, t + n.scrollY);
193
193
  }
194
- function Me(n, t, e, s, o) {
194
+ function Te(n, t, e, s, o) {
195
195
  const i = s.miniature ? 0 : as, 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,
@@ -206,7 +206,7 @@ function Me(n, t, e, s, o) {
206
206
  outerTo: P(n, c.to)
207
207
  };
208
208
  }
209
- function Te(n, t, e) {
209
+ function Ce(n, t, e) {
210
210
  if (e < n.y || e > n.y + n.height) return null;
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";
@@ -216,13 +216,13 @@ function ls(n, t, e, s = 5) {
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";
218
218
  }
219
- function Ce(n, t, e) {
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
222
  const hs = 64;
223
223
  function us(n, t) {
224
224
  if (n.miniature) return null;
225
- const e = ht(n.subtask.appearance).hatched ? tt + be + 1 : 0, s = Math.max(n.mainFrom + e, 0), o = Math.min(n.mainTo - e, t) - s;
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
226
  return o < hs ? null : { x: s, width: o, y: n.y, height: n.height };
227
227
  }
228
228
  const cs = 10;
@@ -231,22 +231,22 @@ function Qt(n, t, e) {
231
231
  return n === "centre" || e.y === t.y ? s : Math.round(e.y > t.y ? t.y + t.height - 1 : t.y + 1);
232
232
  }
233
233
  function bt(n, t, e, s, o) {
234
- const i = t.route ?? o.route, r = t.attach ?? o.attach, a = t.ends ?? o.ends, u = P(n, St(t, e.subtask)), c = P(n, At(t, s.subtask)), l = Qt(r, e, s), d = Qt(r, s, e);
234
+ const i = t.route ?? o.route, r = t.attach ?? o.attach, a = t.ends ?? o.ends, u = P(n, St(t, e.subtask)), c = P(n, It(t, s.subtask)), l = Qt(r, e, s), d = Qt(r, s, e);
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
238
  const _ = u + cs, 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
- const p = Math.max(14, Math.abs(c - u) / 2), g = u + p, b = c - p, A = [];
241
+ const p = Math.max(14, Math.abs(c - u) / 2), g = u + p, b = c - p, I = [];
242
242
  for (let _ = 0; _ <= 16; _++) {
243
243
  const S = _ / 16, m = 1 - S;
244
- A.push(
244
+ I.push(
245
245
  m * m * m * u + 3 * m * m * S * g + 3 * m * S * S * b + S * S * S * c,
246
246
  m * m * m * l + 3 * m * m * S * l + 3 * m * S * S * d + S * S * S * d
247
247
  );
248
248
  }
249
- return { transport: t, kind: "curve", ends: a, x1: u, y1: l, x2: c, y2: d, c1x: g, c2x: b, points: A };
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
251
  function ds(n, t, e) {
252
252
  let s = 1 / 0;
@@ -257,7 +257,7 @@ function ds(n, t, e) {
257
257
  }
258
258
  return s;
259
259
  }
260
- function It(n) {
260
+ function At(n) {
261
261
  const t = [], e = /* @__PURE__ */ new Map();
262
262
  n.forEach((s, o) => {
263
263
  const { from: i, to: r } = ut(s);
@@ -296,13 +296,13 @@ function _t(n, t) {
296
296
  for (const o of t) {
297
297
  const i = e.get(o.from), r = e.get(o.to);
298
298
  if (i === void 0 || r === void 0) continue;
299
- const a = St(o, i), u = At(o, r), c = a + o.duration - u;
299
+ const a = St(o, i), u = It(o, r), c = a + o.duration - u;
300
300
  c > 0 && s.push({ transport: o.id, departure: a, arrival: u, shortBy: c });
301
301
  }
302
302
  return s;
303
303
  }
304
304
  function _n(n, t) {
305
- return { overlaps: It(n), lateTransports: _t(n, t) };
305
+ return { overlaps: At(n), lateTransports: _t(n, t) };
306
306
  }
307
307
  class ps {
308
308
  /** `changed` is called after every registration change. */
@@ -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 = It(this.subtasks), this.lateById = new Map(_t(this.subtasks, this.transports).map((e) => [e.transport, e])), this.depth = fs(this.subtasks), !0;
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 = fs(this.subtasks), !0;
377
377
  }
378
378
  /** The task a transport belongs to: its departing subtask's. */
379
379
  taskOfTransport(t) {
@@ -460,17 +460,17 @@ function ks(n, t) {
460
460
  if (i.kind === "transports")
461
461
  for (const a of s.paths) r.has(a.transport) && Mt(n, t, a, !1);
462
462
  else
463
- for (const a of s.boxes) r.has(a.subtask) && Se(n, t, a, 1);
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
- Es(n, t, o), Ps(n, t);
466
+ Fs(n, t, o), Ds(n, t);
467
467
  }
468
468
  function ws(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 && Ds(n, t, l);
473
+ l !== void 0 && Es(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);
@@ -479,7 +479,7 @@ function ws(n, t) {
479
479
  }
480
480
  const { ghost: i, overlaps: r, late: a } = t.ghost;
481
481
  vs(n, t, o, t.ghost.refusedLanes);
482
- const u = Le(o, i);
482
+ const u = Se(o, i);
483
483
  if (u === null) return;
484
484
  for (const l of r) Ae(n, t, o, l);
485
485
  const c = new Set(a.map((l) => l.transport));
@@ -490,7 +490,7 @@ 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
- Se(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 && ys(n, t, u, t.ghost.tether);
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 && ys(n, t, u, t.ghost.tether);
494
494
  }
495
495
  function vs(n, t, e, s) {
496
496
  if (s.size === 0) return;
@@ -499,16 +499,16 @@ function vs(n, t, e, 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, _s(n, 0, u, o, c, t.colours.muted, 0.7, As, 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, As(n, 0, u, o, c, t.colours.muted, 0.7, Ss, 1));
503
503
  }
504
504
  }
505
505
  function ys(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
  }
509
- function Le(n, t) {
509
+ function Se(n, t) {
510
510
  const e = Lt(n.rows, t.lane);
511
- return e === null ? null : Me(n, t, t.lane, e, 0);
511
+ return e === null ? null : Te(n, t, t.lane, e, 0);
512
512
  }
513
513
  function bs(n, t, e) {
514
514
  const { view: s, colours: o, bands: i } = t, { width: r, height: a } = s;
@@ -565,40 +565,40 @@ function Cs(n, t, e) {
565
565
  return `rgb(${i(0)}, ${i(1)}, ${i(2)})`;
566
566
  }
567
567
  const Ls = 2;
568
- function Se(n, t, e, s) {
568
+ function Ie(n, t, e, s) {
569
569
  const { view: o, colours: i } = t;
570
- if (!Ce(e, o.width, o.height)) return;
570
+ if (!Le(e, o.width, o.height)) return;
571
571
  if (e.miniature) {
572
572
  Ts(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;
576
576
  n.lineWidth = 1, n.fillStyle = a, n.strokeStyle = a;
577
- for (const [b, A] of [
577
+ for (const [b, I] of [
578
578
  [e.outerFrom, e.mainFrom],
579
579
  [e.mainTo, e.outerTo]
580
580
  ])
581
- A <= b || (n.globalAlpha = 0.28 * s, n.fillRect(b, c, A - b, l), n.globalAlpha = s, n.strokeRect(b + 0.5, c + 0.5, A - b - 1, l - 1));
581
+ I <= b || (n.globalAlpha = 0.28 * s, n.fillRect(b, c, I - b, l), n.globalAlpha = s, n.strokeRect(b + 0.5, c + 0.5, I - b - 1, l - 1));
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))), A = c + l - b - Ls, _ = Math.round(d * Math.max(0, Math.min(1, g)));
586
- n.fillStyle = u.fill === null ? a : p, n.globalAlpha = 0.3 * s, n.fillRect(e.mainFrom, A, d, b), n.globalAlpha = s, _ > 0 && n.fillRect(e.mainFrom, A, _, b);
585
+ const b = Math.min(4, Math.max(2, Math.round(l / 6))), I = c + l - b - Ls, _ = Math.round(d * Math.max(0, Math.min(1, g)));
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
- const b = Math.max(1, Math.min(be, Math.floor((d - 2 * tt) / 3))), A = d >= 4 * b ? tt : 0, _ = l >= 4 * tt ? tt : 0;
590
- n.globalAlpha = s, n.fillStyle = p, n.fillRect(e.mainFrom + A, c + _, b, l - 2 * _), n.fillRect(e.mainTo - A - b, c + _, b, l - 2 * _);
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
+ 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 && 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));
592
+ r.open && _s(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 Ss = 7, As = 6, Is = 16;
595
- function _s(n, t, e, s, o, i, r, a = Ss, u = 2) {
594
+ const Ss = 6, Is = 16;
595
+ function As(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 Fs(n, t, e, s, o, i) {
601
+ function _s(n, t, e, s, o, i) {
602
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(Is, u);
603
603
  r && ne(n, 0, c, e, s, o, 1), a && ne(n, i, -c, e, s, o, 1);
604
604
  }
@@ -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 Es(n, t, e) {
626
+ function Fs(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 Ds(n, t, e) {
651
+ function Es(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
653
  n.globalAlpha = xs, 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
655
  const xs = 0.2;
656
- function Ps(n, t) {
656
+ function Ds(n, t) {
657
657
  const e = t.selectedTask;
658
658
  if (e !== null) {
659
659
  n.strokeStyle = t.colours.text;
@@ -666,28 +666,25 @@ function Ps(n, t) {
666
666
  }
667
667
  }
668
668
  }
669
- const rt = 32, Ns = 18;
669
+ const rt = 32, Ps = 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 = Ns * i * i;
674
+ const i = Math.min(1, o / rt), r = Ps * i * i;
675
675
  return e > 0 ? -r : r;
676
676
  }
677
- function Gs(n, t, e, s) {
677
+ function Ns(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 Ie(n) {
685
- return new Date(n).getTimezoneOffset() * U;
686
- }
687
- function Rs(n, t) {
684
+ function Gs(n, t) {
688
685
  const { step: e, offset: s } = typeof t == "number" ? { step: t, offset: 0 } : t;
689
686
  if (!(e > 0) || !Number.isFinite(n)) return n;
690
- const o = Ie(n) + s;
687
+ const o = me(n) + s;
691
688
  return o + Math.round((n - o) / e) * e;
692
689
  }
693
690
  const re = "\0placing", ae = /* @__PURE__ */ new Set();
@@ -703,7 +700,7 @@ function le(n) {
703
700
  return "nothing";
704
701
  }
705
702
  }
706
- const he = 3, $s = 600;
703
+ const he = 3, Rs = 10, $s = 600;
707
704
  class Bs {
708
705
  constructor(t) {
709
706
  f(this, "gesture", { kind: "none" });
@@ -757,7 +754,7 @@ class Bs {
757
754
  ghostSummary() {
758
755
  const t = this.gesture;
759
756
  if (t.kind !== "edit" && t.kind !== "place") return null;
760
- const e = Le(this.host.view.viewport(), t.ghost);
757
+ const e = Se(this.host.view.viewport(), t.ghost);
761
758
  if (e === null) return null;
762
759
  const s = this.ghostFindings(t.ghost, this.ghostHome(t)), o = t.kind === "edit" && (t.mode === "setup" || t.mode === "teardown"), i = o ? ut(t.ghost) : t.ghost;
763
760
  return {
@@ -788,8 +785,8 @@ class Bs {
788
785
  pointerDown(t) {
789
786
  var a, u, c, l, d;
790
787
  const { x: e, y: s } = this.local(t.clientX, t.clientY);
791
- if (t.pointerType === "touch" && (this.touches.set(t.pointerId, { x: e, y: s }), this.touches.size === 2)) {
792
- this.cancelEdit(), this.gesture = { kind: "pinch", distance: this.touchDistance() };
788
+ if (t.pointerType === "touch" && (this.touches.set(t.pointerId, { x: e, y: s }), this.touches.size >= 2)) {
789
+ this.gesture.kind !== "pinch" && (this.cancelEdit(), this.gesture = { kind: "pinch", distance: this.touchDistance() });
793
790
  return;
794
791
  }
795
792
  if (t.button !== 0) return;
@@ -841,7 +838,7 @@ class Bs {
841
838
  askRefused(t, e) {
842
839
  if (!this.host.view.options.intents.includes(e === null ? "place" : "lane")) return ae;
843
840
  const s = this.host.data.lanes.map((o) => o.id);
844
- return Gs(s, t, e, this.host.handlers().canMoveTo);
841
+ return Ns(s, t, e, this.host.handlers().canMoveTo);
845
842
  }
846
843
  /** What a press at a point would start, given the intents the caller handles. */
847
844
  modeAt(t, e) {
@@ -852,7 +849,7 @@ class Bs {
852
849
  const a = ls(r, t, e);
853
850
  if (a !== null) return { mode: a === "from" ? "stretch-from" : "stretch-to", subtask: r.subtask };
854
851
  }
855
- if (Te(r, t, e) !== null)
852
+ if (Ce(r, t, e) !== null)
856
853
  return o.includes("move") || o.includes("lane") ? { mode: "move", subtask: r.subtask } : { mode: "pan", subtask: r.subtask };
857
854
  }
858
855
  return { mode: "pan", subtask: null };
@@ -866,7 +863,7 @@ class Bs {
866
863
  }
867
864
  const o = this.gesture;
868
865
  if (o.kind === "pending" && o.pointerId === t.pointerId) {
869
- if (Math.hypot(e - o.x0, s - o.y0) < he) return;
866
+ if (Math.hypot(e - o.x0, s - o.y0) < (t.pointerType === "touch" ? Rs : he)) return;
870
867
  if (o.mode === "pan" || o.subtask === null)
871
868
  this.gesture = { kind: "pan", pointerId: o.pointerId, lastX: o.x0, lastY: o.y0 }, this.setCursor("grabbing");
872
869
  else {
@@ -899,7 +896,8 @@ class Bs {
899
896
  pointerUp(t) {
900
897
  var i, r;
901
898
  if (t.pointerType === "touch" && (this.touches.delete(t.pointerId), this.gesture.kind === "pinch")) {
902
- this.touches.size < 2 && (this.gesture = { kind: "none" });
899
+ const [a] = this.touches;
900
+ this.touches.size === 1 && a !== void 0 ? this.gesture = { kind: "pan", pointerId: a[0], lastX: a[1].x, lastY: a[1].y } : this.touches.size === 0 && (this.gesture = { kind: "none" });
903
901
  return;
904
902
  }
905
903
  const e = this.gesture, { x: s, y: o } = this.local(t.clientX, t.clientY);
@@ -944,7 +942,7 @@ class Bs {
944
942
  this.panFrame !== 0 && cancelAnimationFrame(this.panFrame), this.panFrame = 0;
945
943
  }
946
944
  pointerCancel(t) {
947
- this.touches.delete(t.pointerId), this.closeGestureFolds(), this.cancelEdit(), this.gesture = { kind: "none" };
945
+ this.touches.delete(t.pointerId), this.closeGestureFolds(), this.cancelEdit(), this.gesture = { kind: "none" }, this.setCursor("default");
948
946
  }
949
947
  /** Reads the hover anew where the pointer already is - after the data
950
948
  changed under it. A drop that moves a subtask changes what lies under the
@@ -974,7 +972,7 @@ class Bs {
974
972
  their end; Ctrl or ⌘ zooms - a trackpad pinch arrives as a wheel with
975
973
  Ctrl -; horizontal or Shift pans through time. */
976
974
  wheel(t) {
977
- const e = this.host.view, { x: s } = this.local(t.clientX, t.clientY), o = t.deltaMode === 1 ? 16 : t.deltaMode === 2 ? e.height : 1, i = t.deltaX * o, r = t.deltaY * o;
975
+ const e = this.host.view, s = Math.max(0, Math.min(e.width, this.local(t.clientX, t.clientY).x)), o = t.deltaMode === 1 ? 16 : t.deltaMode === 2 ? e.height : 1, i = t.deltaX * o, r = t.deltaY * o;
978
976
  if (t.ctrlKey || t.metaKey) {
979
977
  t.preventDefault();
980
978
  const c = Math.abs(r) < 50 ? 0.01 : 15e-4;
@@ -1109,8 +1107,8 @@ class Bs {
1109
1107
  let c = i.from;
1110
1108
  const l = o.viewport().scale, d = l.fromPx(e) - t.t0;
1111
1109
  if (a.includes("move") && Math.abs(d * l.m) >= he) {
1112
- const g = et(o.options.calendar), b = Y(i.from, g) + d, A = g.intervals.length === 0 ? b : X(Math.max(0, Math.min(g.total, b)), g);
1113
- c = this.snapInside(A, r);
1110
+ const g = j(o.options.calendar), b = O(i.from, g) + d, I = g.intervals.length === 0 ? b : U(Math.max(0, Math.min(g.total, b)), g);
1111
+ c = this.snapInside(I, r);
1114
1112
  }
1115
1113
  let p = t.ghost.lane;
1116
1114
  if (a.includes("lane")) {
@@ -1121,9 +1119,9 @@ class Bs {
1121
1119
  return { ...i, from: c, to: c + (i.to - i.from), lane: p };
1122
1120
  }
1123
1121
  case "stretch-from":
1124
- return { ...i, from: Math.min(u, i.to - Math.max(r.step, U)) };
1122
+ return { ...i, from: Math.min(u, i.to - Math.max(r.step, q)) };
1125
1123
  case "stretch-to":
1126
- return { ...i, to: Math.max(u, i.from + Math.max(r.step, U)) };
1124
+ return { ...i, to: Math.max(u, i.from + Math.max(r.step, q)) };
1127
1125
  case "setup":
1128
1126
  return { ...i, setup: Math.max(0, i.from - u) };
1129
1127
  case "teardown":
@@ -1134,8 +1132,8 @@ class Bs {
1134
1132
  on to the seam, where time counts again. An intent never asks for a time
1135
1133
  the plant does not run. */
1136
1134
  snapInside(t, e) {
1137
- const s = Rs(t, e), o = et(this.host.view.options.calendar);
1138
- return o.intervals.length === 0 ? s : X(Y(s, o), o);
1135
+ const s = Gs(t, e), o = j(this.host.view.options.calendar);
1136
+ return o.intervals.length === 0 ? s : U(O(s, o), o);
1139
1137
  }
1140
1138
  intentsOf(t, e, s) {
1141
1139
  const o = [], i = this.host.view.options.intents, r = t.id;
@@ -1156,16 +1154,16 @@ class Bs {
1156
1154
  computed on every pointer movement. */
1157
1155
  ghostFindings(t, e) {
1158
1156
  const s = this.host.data, o = (l) => l.lane === t.lane || l.lane === e, r = [...s.subtasks.filter((l) => l.id !== t.id && o(l)), t], a = (l) => l.first === t.id || l.second === t.id, u = s.transports.filter((l) => l.from === t.id || l.to === t.id), c = t.id === re ? s.subtasks : s.subtasks.map((l) => l.id === t.id ? t : l);
1159
- return { overlaps: It(r).filter(a), late: _t(c, u) };
1157
+ return { overlaps: At(r).filter(a), late: _t(c, u) };
1160
1158
  }
1161
1159
  }
1162
1160
  const _e = [], Os = 56;
1163
1161
  function Hs(n, t = Os) {
1164
- return n > 0 ? Math.min(st, Math.max(15 * U, je(n * t, 1))) : 15 * U;
1162
+ return n > 0 ? Math.min(st, Math.max(15 * q, je(n * t, 1))) : 15 * q;
1165
1163
  }
1166
1164
  function Ys(n, t, e = _e) {
1167
1165
  const [s, o] = Fe(n, e);
1168
- return Ve(e, s, o, t, Ie(s)).filter(
1166
+ return Ve(e, s, o, t, me(s)).filter(
1169
1167
  (i) => i.operatingTime >= n[0] && i.operatingTime <= n[1]
1170
1168
  );
1171
1169
  }
@@ -1178,8 +1176,8 @@ function Xs(n, t = _e) {
1178
1176
  o.push({
1179
1177
  start: r,
1180
1178
  end: a,
1181
- from: Y(r, t),
1182
- to: Y(a, t)
1179
+ from: O(r, t),
1180
+ to: O(a, t)
1183
1181
  });
1184
1182
  }
1185
1183
  return o;
@@ -1190,17 +1188,17 @@ function Ks(n, t, e, s) {
1190
1188
  const i = Math.min(s.max, Math.max(s.min, o * e)), r = (t - n[0]) / o, a = t - r * i;
1191
1189
  return [a, a + i];
1192
1190
  }
1193
- function Ws(n, t) {
1191
+ function Us(n, t) {
1194
1192
  return [n[0] + t, n[1] + t];
1195
1193
  }
1196
1194
  function Fe(n, t) {
1197
- const e = et(t);
1195
+ const e = j(t);
1198
1196
  if (e.intervals.length === 0) return [n[0], n[1]];
1199
1197
  const s = (o) => Math.max(0, Math.min(e.total, o));
1200
- return [X(s(n[0]), e), X(s(n[1]), e)];
1198
+ return [U(s(n[0]), e), U(s(n[1]), e)];
1201
1199
  }
1202
1200
  const lt = 44;
1203
- class Us {
1201
+ class Ws {
1204
1202
  constructor(t) {
1205
1203
  f(this, "options", {
1206
1204
  laneHeight: lt,
@@ -1235,9 +1233,14 @@ class Us {
1235
1233
  there, and a new calendar keeps the wall-clock span in view. */
1236
1234
  setOptions(t, e) {
1237
1235
  const s = t.calendar !== this.options.calendar, o = this.options.calendar;
1238
- if (this.options = t, e !== null || s) {
1239
- const i = e ?? [X(this.domain[0], o), X(this.domain[1], o)];
1240
- this.domain = [Y(i[0], t.calendar), Y(i[1], t.calendar)];
1236
+ if (this.options = t, e !== null)
1237
+ this.domain = [O(e[0], t.calendar), O(e[1], t.calendar)];
1238
+ else if (s) {
1239
+ const i = j(o), r = (a) => {
1240
+ const u = i.intervals.length === 0 ? a : Math.max(0, Math.min(i.total, a));
1241
+ return O(U(u, i), t.calendar) + (a - u);
1242
+ };
1243
+ this.domain = [r(this.domain[0]), r(this.domain[1])];
1241
1244
  }
1242
1245
  }
1243
1246
  viewport() {
@@ -1274,7 +1277,7 @@ class Us {
1274
1277
  for (const e of this.data.subtasks) {
1275
1278
  const s = Lt(this.rows, e.lane);
1276
1279
  if (s === null) continue;
1277
- const o = Me(t, e, e.lane, s, this.data.depth.get(e.id) ?? 0);
1280
+ const o = Te(t, e, e.lane, s, this.data.depth.get(e.id) ?? 0);
1278
1281
  this.boxes.push(o), this.boxById.set(e.id, o);
1279
1282
  }
1280
1283
  this.paths = [];
@@ -1301,12 +1304,12 @@ class Us {
1301
1304
  nowX() {
1302
1305
  const t = this.options.now;
1303
1306
  if (t === null || this.width <= 0) return null;
1304
- const e = Math.round(this.viewport().scale.toPx(Y(t, this.options.calendar)));
1307
+ const e = Math.round(this.viewport().scale.toPx(O(t, this.options.calendar)));
1305
1308
  return e >= 0 && e <= this.width ? e : null;
1306
1309
  }
1307
1310
  hitAt(t, e) {
1308
1311
  for (let r = this.boxes.length - 1; r >= 0; r--) {
1309
- const a = this.boxes[r], u = Te(a, t, e);
1312
+ const a = this.boxes[r], u = Ce(a, t, e);
1310
1313
  if (u !== null) return { kind: "subtask", subtask: a.subtask, part: u };
1311
1314
  }
1312
1315
  let s = null, o = 4;
@@ -1320,8 +1323,8 @@ class Us {
1320
1323
  }
1321
1324
  /** The wall-clock time at a plot x; within the calendar's extent. */
1322
1325
  timeAt(t) {
1323
- const e = this.viewport().scale.fromPx(t), s = et(this.options.calendar);
1324
- return s.intervals.length === 0 ? e : X(Math.max(0, Math.min(s.total, e)), s);
1326
+ const e = this.viewport().scale.fromPx(t), s = j(this.options.calendar);
1327
+ return s.intervals.length === 0 ? e : U(Math.max(0, Math.min(s.total, e)), s);
1325
1328
  }
1326
1329
  /** The lane at a y, strips included: what the pointer is ON.
1327
1330
 
@@ -1352,7 +1355,7 @@ class Us {
1352
1355
  neither - a scroll through the lanes is no news about the time. */
1353
1356
  pan(t, e) {
1354
1357
  const s = this.domain[0], o = this.scrollY, i = this.domain[1] - s;
1355
- this.width > 0 && t !== 0 && (this.domain = Ws(this.domain, t / this.width * i)), this.scrollY = Math.max(0, Math.min(this.maxScroll(), this.scrollY + e));
1358
+ this.width > 0 && t !== 0 && (this.domain = Us(this.domain, t / this.width * i)), this.scrollY = Math.max(0, Math.min(this.maxScroll(), this.scrollY + e));
1356
1359
  const r = this.domain[0] !== s;
1357
1360
  return { moved: r || this.scrollY !== o, time: r };
1358
1361
  }
@@ -1382,7 +1385,7 @@ const ue = {
1382
1385
  class zs {
1383
1386
  constructor() {
1384
1387
  f(this, "data", new ps(() => this.viewChanged()));
1385
- f(this, "view", new Us(this.data));
1388
+ f(this, "view", new Ws(this.data));
1386
1389
  f(this, "gestures");
1387
1390
  f(this, "handlersNow", {});
1388
1391
  f(this, "placing", null);
@@ -1499,7 +1502,7 @@ class zs {
1499
1502
  }
1500
1503
  unbind() {
1501
1504
  var t;
1502
- (t = this.unsubscribeTheme) == null || t.call(this), this.unsubscribeTheme = null, this.frame !== 0 && cancelAnimationFrame(this.frame), this.domainFrame !== 0 && cancelAnimationFrame(this.domainFrame), this.frame = this.domainFrame = 0, this.root = this.plot = this.dataCanvas = this.overlayCanvas = null;
1505
+ this.gestures.cancelEdit(), (t = this.unsubscribeTheme) == null || t.call(this), this.unsubscribeTheme = null, this.frame !== 0 && cancelAnimationFrame(this.frame), this.domainFrame !== 0 && cancelAnimationFrame(this.domainFrame), this.frame = this.domainFrame = 0, this.root = this.plot = this.dataCanvas = this.overlayCanvas = null;
1503
1506
  }
1504
1507
  resize(t, e) {
1505
1508
  const s = Math.max(0, Math.round(t)), o = Math.max(0, Math.round(e));
@@ -1559,7 +1562,7 @@ class zs {
1559
1562
  if (t.width <= 0) return [];
1560
1563
  const e = this.colours;
1561
1564
  return t.boxes.flatMap((s) => {
1562
- if (!Ce(s, t.width, t.height)) return [];
1565
+ if (!Le(s, t.width, t.height)) return [];
1563
1566
  const o = us(s, t.width);
1564
1567
  if (o === null) return [];
1565
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;
@@ -1576,7 +1579,7 @@ class zs {
1576
1579
  }
1577
1580
  /** The visible span, as two wall-clock instants. */
1578
1581
  visibleDomain() {
1579
- const t = et(this.view.options.calendar), e = (s) => t.intervals.length === 0 ? s : X(Math.max(0, Math.min(t.total, s)), t);
1582
+ const t = j(this.view.options.calendar), e = (s) => t.intervals.length === 0 ? s : U(Math.max(0, Math.min(t.total, s)), t);
1580
1583
  return [e(this.view.domain[0]), e(this.view.domain[1])];
1581
1584
  }
1582
1585
  /** Reported once per frame, however many wheel steps a planner turns - and
@@ -1634,7 +1637,7 @@ class zs {
1634
1637
  ks(s, i), ws(o, i);
1635
1638
  }
1636
1639
  }
1637
- const qs = "_root_ekx9o_4 _text_18b86_23", js = "_corner_ekx9o_18", Vs = "_dayBand_ekx9o_22", Zs = "_tickBand_ekx9o_23", Js = "_day_ekx9o_22", Qs = "_dayLabel_ekx9o_46", tn = "_tick_ekx9o_23", en = "_tickLabel_ekx9o_64", sn = "_headers_ekx9o_72", nn = "_header_ekx9o_72", on = "_headerLabel_ekx9o_90", rn = "_headerCount_ekx9o_103", an = "_chevron_ekx9o_112", ln = "_plot_ekx9o_160", hn = "_layer_ekx9o_166", un = "_grip_ekx9o_175", cn = "_ghostLabel_ekx9o_185", dn = "_finding_ekx9o_198", fn = "_refusal_ekx9o_206", pn = "_tooltip_ekx9o_210", mn = "_tooltipHead_ekx9o_228", gn = "_tooltipTimes_ekx9o_233", kn = "_now_ekx9o_242", wn = "_barLabel_ekx9o_256", vn = "_barLabelText_ekx9o_269", v = {
1640
+ const qs = "_root_ekx9o_4 _text_1hv7a_23", js = "_corner_ekx9o_18", Vs = "_dayBand_ekx9o_22", Zs = "_tickBand_ekx9o_23", Js = "_day_ekx9o_22", Qs = "_dayLabel_ekx9o_46", tn = "_tick_ekx9o_23", en = "_tickLabel_ekx9o_64", sn = "_headers_ekx9o_72", nn = "_header_ekx9o_72", on = "_headerLabel_ekx9o_90", rn = "_headerCount_ekx9o_103", an = "_chevron_ekx9o_112", ln = "_plot_ekx9o_160", hn = "_layer_ekx9o_166", un = "_grip_ekx9o_175", cn = "_ghostLabel_ekx9o_185", dn = "_finding_ekx9o_198", fn = "_refusal_ekx9o_206", pn = "_tooltip_ekx9o_210", mn = "_tooltipHead_ekx9o_228", gn = "_tooltipTimes_ekx9o_233", kn = "_now_ekx9o_242", wn = "_barLabel_ekx9o_256", vn = "_barLabelText_ekx9o_269", v = {
1638
1641
  root: qs,
1639
1642
  corner: js,
1640
1643
  dayBand: Vs,
@@ -1662,13 +1665,13 @@ const qs = "_root_ekx9o_4 _text_18b86_23", js = "_corner_ekx9o_18", Vs = "_dayBa
1662
1665
  barLabelText: vn
1663
1666
  };
1664
1667
  function yn({ target: n }) {
1665
- const t = me(), e = ge(), s = (l) => t.time(new Date(l), !1), o = (l) => {
1666
- const d = Math.round(l / U), p = Math.floor(d / 60), g = d % 60;
1668
+ const t = ge(), e = ke(), s = (l) => t.time(new Date(l), !1), o = (l) => {
1669
+ const d = Math.round(l / q), p = Math.floor(d / 60), g = d % 60;
1667
1670
  return [p > 0 ? e.hoursShort(p) : "", g > 0 || p === 0 ? e.minutesShort(g) : ""].filter(Boolean).join(" ");
1668
1671
  };
1669
1672
  if (n.kind === "subtask") {
1670
1673
  const { subtask: l, task: d } = n;
1671
- return /* @__PURE__ */ H(zt, { children: [
1674
+ return /* @__PURE__ */ Y(zt, { children: [
1672
1675
  /* @__PURE__ */ w("span", { className: v.tooltipHead, children: (d == null ? void 0 : d.name) ?? l.task }),
1673
1676
  /* @__PURE__ */ w("span", { children: l.name ?? l.id }),
1674
1677
  /* @__PURE__ */ w("span", { className: v.tooltipTimes, children: e.scheduleGhostTimes(s(l.from), s(l.to)) }),
@@ -1679,7 +1682,7 @@ function yn({ target: n }) {
1679
1682
  ] });
1680
1683
  }
1681
1684
  const { transport: i, task: r, from: a, to: u, late: c } = n;
1682
- return /* @__PURE__ */ H(zt, { children: [
1685
+ return /* @__PURE__ */ Y(zt, { children: [
1683
1686
  /* @__PURE__ */ w("span", { className: v.tooltipHead, children: (r == null ? void 0 : r.name) ?? (r == null ? void 0 : r.id) ?? i.id }),
1684
1687
  /* @__PURE__ */ w("span", { children: e.scheduleRoute((a == null ? void 0 : a.name) ?? i.from, (u == null ? void 0 : u.name) ?? i.to) }),
1685
1688
  /* @__PURE__ */ w("span", { children: `${e.scheduleTransport} ${o(i.duration)}` }),
@@ -1700,7 +1703,7 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
1700
1703
  onIntent: p,
1701
1704
  canMoveTo: g,
1702
1705
  onInteraction: b,
1703
- selectedTask: A,
1706
+ selectedTask: I,
1704
1707
  onSelectedTaskChange: _,
1705
1708
  collapsedGroups: S,
1706
1709
  defaultCollapsedGroups: m,
@@ -1709,29 +1712,29 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
1709
1712
  placing: E,
1710
1713
  route: F = "curve",
1711
1714
  attach: G = "centre",
1712
- ends: j = "dot",
1715
+ ends: V = "dot",
1713
1716
  label: ot,
1714
- tooltip: z,
1715
- now: V,
1717
+ tooltip: W,
1718
+ now: Z,
1716
1719
  className: Et,
1717
1720
  style: Ee,
1718
- children: De
1719
- } = t, [k] = it(() => new zs()), Dt = Ke(), xt = $(null), Pt = $(null), Nt = $(null), Gt = $(null), K = me(), W = ge(), [dt, ft] = o, Rt = (c == null ? void 0 : c.min) ?? ce.min, $t = (c == null ? void 0 : c.max) ?? ce.max, Bt = $(null), Ot = typeof l == "object" ? l.step : null, Ht = typeof l == "object" ? l.offset : null, Yt = typeof l == "object" ? null : l, [xe, Pe] = it(() => Date.now());
1721
+ children: xe
1722
+ } = t, [k] = it(() => new zs()), xt = Ke(), Dt = $(null), Pt = $(null), Nt = $(null), Gt = $(null), X = ge(), K = ke(), [dt, ft] = o, Rt = (c == null ? void 0 : c.min) ?? ce.min, $t = (c == null ? void 0 : c.max) ?? ce.max, Bt = $(null), Ot = typeof l == "object" ? l.step : null, Ht = typeof l == "object" ? l.offset : null, Yt = typeof l == "object" ? null : l, [De, Pe] = it(() => Date.now());
1720
1723
  B(() => {
1721
- if (V !== !0) return;
1722
- const h = setInterval(() => Pe(Date.now()), U);
1724
+ if (Z !== !0) return;
1725
+ const h = setInterval(() => Pe(Date.now()), q);
1723
1726
  return () => clearInterval(h);
1724
- }, [V]);
1725
- const Xt = V === !0 ? xe : typeof V == "number" ? V : null;
1727
+ }, [Z]);
1728
+ const Xt = Z === !0 ? De : typeof Z == "number" ? Z : null;
1726
1729
  vt(() => {
1727
1730
  const h = `${dt}|${ft}`, y = Bt.current !== h;
1728
1731
  Bt.current = h;
1729
- const I = Yt ?? { step: Ot ?? 0, offset: Ht ?? 0 };
1732
+ const A = Yt ?? { step: Ot ?? 0, offset: Ht ?? 0 };
1730
1733
  k.setOptions(
1731
- { laneHeight: r, calendar: u, zoomLimits: { min: Rt, max: $t }, snap: I, intents: d, now: Xt, route: F, attach: G, ends: j },
1734
+ { laneHeight: r, calendar: u, zoomLimits: { min: Rt, max: $t }, snap: A, intents: d, now: Xt, route: F, attach: G, ends: V },
1732
1735
  y ? [dt, ft] : null
1733
1736
  );
1734
- }, [k, dt, ft, r, u, Rt, $t, Yt, Ot, Ht, d, Xt, F, G, j]), B(() => {
1737
+ }, [k, dt, ft, r, u, Rt, $t, Yt, Ot, Ht, d, Xt, F, G, V]), B(() => {
1735
1738
  k.setHandlers({ onIntent: p, canMoveTo: g, onInteraction: b, onSelectedTaskChange: _, onCollapsedGroupsChange: C, onDomainChange: L });
1736
1739
  }, [k, p, g, b, _, C, L]);
1737
1740
  const Ne = $(m);
@@ -1740,7 +1743,7 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
1740
1743
  h !== void 0 && k.setDefaultCollapsedGroups(h);
1741
1744
  }, [k]), B(() => {
1742
1745
  k.setCollapsedGroups(S);
1743
- }, [k, S]), We(
1746
+ }, [k, S]), Ue(
1744
1747
  e,
1745
1748
  () => ({
1746
1749
  positionAt: (h, y) => k.positionAt(h, y),
@@ -1749,79 +1752,79 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
1749
1752
  }),
1750
1753
  [k]
1751
1754
  ), B(() => {
1752
- k.setControlledTask(A);
1753
- }, [k, A]), B(() => {
1755
+ k.setControlledTask(I);
1756
+ }, [k, I]), B(() => {
1754
1757
  k.setPlacing(E ?? null);
1755
1758
  }, [k, E]), B(() => {
1756
- const h = xt.current, y = Pt.current, I = Nt.current, R = Gt.current;
1757
- if (!h || !y || !I || !R) return;
1758
- k.bind(h, y, I, R);
1759
- const D = y.getBoundingClientRect();
1760
- k.resize(D.width, D.height);
1761
- const x = new ResizeObserver((N) => {
1762
- var Ut;
1763
- const Q = (Ut = N[N.length - 1]) == null ? void 0 : Ut.contentRect;
1764
- Q !== void 0 && k.resize(Q.width, Q.height);
1759
+ const h = Dt.current, y = Pt.current, A = Nt.current, R = Gt.current;
1760
+ if (!h || !y || !A || !R) return;
1761
+ k.bind(h, y, A, R);
1762
+ const x = y.getBoundingClientRect();
1763
+ k.resize(x.width, x.height);
1764
+ const D = new ResizeObserver((N) => {
1765
+ var Wt;
1766
+ const tt = (Wt = N[N.length - 1]) == null ? void 0 : Wt.contentRect;
1767
+ tt !== void 0 && k.resize(tt.width, tt.height);
1765
1768
  });
1766
- x.observe(y);
1767
- const Z = (N) => k.wheel(N);
1768
- y.addEventListener("wheel", Z, { passive: !1 });
1769
- const J = (N) => {
1769
+ D.observe(y);
1770
+ const J = (N) => k.wheel(N);
1771
+ h.addEventListener("wheel", J, { passive: !1 });
1772
+ const Q = (N) => {
1770
1773
  N.key === "Escape" && k.cancelEdit() && N.preventDefault();
1771
1774
  };
1772
- return window.addEventListener("keydown", J), () => {
1773
- window.removeEventListener("keydown", J), y.removeEventListener("wheel", Z), x.disconnect(), k.unbind();
1775
+ return window.addEventListener("keydown", Q), () => {
1776
+ window.removeEventListener("keydown", Q), h.removeEventListener("wheel", J), D.disconnect(), k.unbind();
1774
1777
  };
1775
1778
  }, [k]);
1776
- const T = Ue(k.subscribe, k.getSnapshot, k.getServerSnapshot), Ge = (h, y) => {
1777
- const I = new Date(h);
1778
- return y >= 200 ? K.dateLong(I) : y >= 84 ? K.date(I) : y >= 44 ? K.dateShort(I) : "";
1779
- }, M = T.ghost, pt = (h) => `${Dt}-row-${h.key}`, Re = q(() => {
1779
+ const T = We(k.subscribe, k.getSnapshot, k.getServerSnapshot), Ge = (h, y) => {
1780
+ const A = new Date(h);
1781
+ return y >= 200 ? X.dateLong(A) : y >= 84 ? X.date(A) : y >= 44 ? X.dateShort(A) : "";
1782
+ }, M = T.ghost, pt = (h) => `${xt}-row-${encodeURIComponent(h.key)}`, Re = z(() => {
1780
1783
  const h = /* @__PURE__ */ new Map();
1781
1784
  for (const y of T.headers)
1782
- for (const I of y.within)
1783
- y.kind === "groupHead" && I === y.group || h.set(I, [...h.get(I) ?? [], pt(y)]);
1785
+ for (const A of y.within)
1786
+ y.kind === "groupHead" && A === y.group || h.set(A, [...h.get(A) ?? [], pt(y)]);
1784
1787
  return h;
1785
- }, [T.headers, Dt]), $e = q(() => new Set((M == null ? void 0 : M.refusedLanes) ?? []), [M == null ? void 0 : M.refusedLanes]), Kt = $(null), [mt, Be] = it({ x: 0, y: 0, at: "" }), gt = M === null ? "" : `${M.x}:${M.y}:${M.from}:${M.to}:${M.overlap}:${M.late}`;
1788
+ }, [T.headers, xt]), $e = z(() => new Set((M == null ? void 0 : M.refusedLanes) ?? []), [M == null ? void 0 : M.refusedLanes]), Kt = $(null), [mt, Be] = it({ x: 0, y: 0, at: "" }), gt = M === null ? "" : `${M.x}:${M.y}:${M.from}:${M.to}:${M.overlap}:${M.late}`;
1786
1789
  vt(() => {
1787
1790
  const h = Kt.current;
1788
1791
  if (M === null || h === null) return;
1789
- const y = 4, I = M.y - h.offsetHeight - y, R = M.y + M.height + y, D = {
1792
+ const y = 4, A = M.y - h.offsetHeight - y, R = M.y + M.height + y, x = {
1790
1793
  x: Math.max(2, Math.min(M.x, T.width - h.offsetWidth - 2)),
1791
- y: I >= 2 ? I : Math.min(R, T.height - h.offsetHeight - 2),
1794
+ y: A >= 2 ? A : Math.min(R, T.height - h.offsetHeight - 2),
1792
1795
  at: gt
1793
1796
  };
1794
- Be((x) => x.x === D.x && x.y === D.y && x.at === D.at ? x : D);
1797
+ Be((D) => D.x === x.x && D.y === x.y && D.at === x.at ? D : x);
1795
1798
  }, [M, gt, T.width, T.height]);
1796
- const Wt = $(null), [kt, Oe] = it({ x: 0, y: 0, at: "" }), O = T.tooltip, wt = O === null ? "" : `${O.x}:${O.y}:${O.target.kind}`;
1799
+ const Ut = $(null), [kt, Oe] = it({ x: 0, y: 0, at: "" }), H = T.tooltip, wt = H === null ? "" : `${H.x}:${H.y}:${H.target.kind}`;
1797
1800
  return vt(() => {
1798
- const h = Wt.current;
1799
- if (O === null || h === null) return;
1800
- const y = 12, I = (D, x, Z) => {
1801
- const J = D + y, N = D - y - x, Q = J + x <= Z - 4 || N < 4 ? J : N;
1802
- return Math.max(4, Math.min(Q, Z - x - 4));
1801
+ const h = Ut.current;
1802
+ if (H === null || h === null) return;
1803
+ const y = 12, A = (x, D, J) => {
1804
+ const Q = x + y, N = x - y - D, tt = Q + D <= J - 4 || N < 4 ? Q : N;
1805
+ return Math.max(4, Math.min(tt, J - D - 4));
1803
1806
  }, R = {
1804
- x: I(O.x, h.offsetWidth, T.width),
1805
- y: I(O.y, h.offsetHeight, T.height),
1807
+ x: A(H.x, h.offsetWidth, T.width),
1808
+ y: A(H.y, h.offsetHeight, T.height),
1806
1809
  at: wt
1807
1810
  };
1808
- Oe((D) => D.x === R.x && D.y === R.y && D.at === R.at ? D : R);
1809
- }, [O, wt, T.width, T.height]), /* @__PURE__ */ H(ke.Provider, { value: k, children: [
1810
- /* @__PURE__ */ H(
1811
+ Oe((x) => x.x === R.x && x.y === R.y && x.at === R.at ? x : R);
1812
+ }, [H, wt, T.width, T.height]), /* @__PURE__ */ Y(we.Provider, { value: k, children: [
1813
+ /* @__PURE__ */ Y(
1811
1814
  "div",
1812
1815
  {
1813
- ref: xt,
1816
+ ref: Dt,
1814
1817
  role: "figure",
1815
1818
  "aria-label": s,
1816
1819
  className: Et ? `${v.root} ${Et}` : v.root,
1817
- style: { height: `${i}px`, gridTemplateColumns: `${a}px minmax(0, 1fr)`, ...Ee },
1820
+ style: { height: `${i}px`, gridTemplateColumns: `min(${a}px, 40%) minmax(0, 1fr)`, ...Ee },
1818
1821
  children: [
1819
1822
  /* @__PURE__ */ w("div", { className: v.corner }),
1820
1823
  /* @__PURE__ */ w("div", { className: v.dayBand, "aria-hidden": "true", "data-schedule-days": "", "data-schedule-clip": "day band", children: T.days.map((h) => {
1821
- const y = Math.max(0, -h.x), I = Math.min(h.x + h.width, T.width) - Math.max(h.x, 0);
1822
- return /* @__PURE__ */ w("span", { className: v.day, style: { left: `${h.x}px`, width: `${h.width}px` }, children: /* @__PURE__ */ w("span", { className: v.dayLabel, "data-schedule-overlay": "day label", style: { marginLeft: `${y}px` }, children: Ge(h.start, I) }) }, h.start);
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__ */ w("span", { className: v.day, style: { left: `${h.x}px`, width: `${h.width}px` }, children: /* @__PURE__ */ w("span", { className: v.dayLabel, "data-schedule-overlay": "day label", style: { marginLeft: `${y}px` }, children: Ge(h.start, A) }) }, h.start);
1823
1826
  }) }),
1824
- /* @__PURE__ */ w("div", { className: v.headers, "data-schedule-headers": "", children: /* @__PURE__ */ w("div", { className: v.headerRun, style: { transform: `translateY(${-T.scrollY}px)` }, children: T.headers.map((h) => /* @__PURE__ */ H(
1827
+ /* @__PURE__ */ w("div", { className: v.headers, "data-schedule-headers": "", children: /* @__PURE__ */ w("div", { className: v.headerRun, style: { transform: `translateY(${-T.scrollY}px)` }, children: T.headers.map((h) => /* @__PURE__ */ Y(
1825
1828
  "div",
1826
1829
  {
1827
1830
  id: pt(h),
@@ -1841,18 +1844,18 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
1841
1844
  "data-schedule-overlay": "fold control",
1842
1845
  "aria-expanded": h.collapsed === !1,
1843
1846
  "aria-controls": (Re.get(h.group) ?? [pt(h)]).join(" "),
1844
- "aria-label": `${h.collapsed === !0 ? W.scheduleUnfoldGroup : W.scheduleFoldGroup}: ${typeof h.label == "string" ? h.label : h.group}`,
1847
+ "aria-label": `${h.collapsed === !0 ? K.scheduleUnfoldGroup : K.scheduleFoldGroup}: ${typeof h.label == "string" ? h.label : h.group}`,
1845
1848
  onClick: () => k.toggleGroup(h.group),
1846
1849
  children: /* @__PURE__ */ w("svg", { viewBox: "0 0 10 10", width: "9", height: "9", "aria-hidden": "true", "data-open": h.collapsed === !1 ? "" : void 0, children: /* @__PURE__ */ w("path", { d: "M3.5 1.5 7 5l-3.5 3.5", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })
1847
1850
  }
1848
1851
  ),
1849
1852
  /* @__PURE__ */ w("span", { className: v.headerLabel, "data-schedule-overlay": "header label", children: h.label }),
1850
- h.kind !== "lane" && /* @__PURE__ */ w("span", { className: v.headerCount, "data-schedule-overlay": "lane count", "data-lane-count": h.lanes, children: W.scheduleLaneCount(h.lanes) })
1853
+ h.kind !== "lane" && /* @__PURE__ */ w("span", { className: v.headerCount, "data-schedule-overlay": "lane count", "data-lane-count": h.lanes, children: K.scheduleLaneCount(h.lanes) })
1851
1854
  ]
1852
1855
  },
1853
1856
  h.key
1854
1857
  )) }) }),
1855
- /* @__PURE__ */ H(
1858
+ /* @__PURE__ */ Y(
1856
1859
  "div",
1857
1860
  {
1858
1861
  ref: Pt,
@@ -1899,10 +1902,10 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
1899
1902
  },
1900
1903
  h.subtask.id
1901
1904
  )),
1902
- z !== !1 && T.tooltip !== null && /* @__PURE__ */ w(
1905
+ W !== !1 && T.tooltip !== null && /* @__PURE__ */ w(
1903
1906
  "span",
1904
1907
  {
1905
- ref: Wt,
1908
+ ref: Ut,
1906
1909
  role: "tooltip",
1907
1910
  className: v.tooltip,
1908
1911
  "data-schedule-tooltip": "",
@@ -1912,10 +1915,10 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
1912
1915
  top: `${kt.y}px`,
1913
1916
  visibility: kt.at === wt ? void 0 : "hidden"
1914
1917
  },
1915
- children: typeof z == "function" ? z(T.tooltip.target) : /* @__PURE__ */ w(yn, { target: T.tooltip.target })
1918
+ children: typeof W == "function" ? W(T.tooltip.target) : /* @__PURE__ */ w(yn, { target: T.tooltip.target })
1916
1919
  }
1917
1920
  ),
1918
- M !== null && /* @__PURE__ */ H(
1921
+ M !== null && /* @__PURE__ */ Y(
1919
1922
  "span",
1920
1923
  {
1921
1924
  ref: Kt,
@@ -1930,10 +1933,10 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
1930
1933
  visibility: mt.at === gt ? void 0 : "hidden"
1931
1934
  },
1932
1935
  children: [
1933
- W.scheduleGhostTimes(K.time(new Date(M.from), !1), K.time(new Date(M.to), !1)),
1934
- M.refused && /* @__PURE__ */ w("span", { className: v.refusal, children: W.scheduleLaneRefused }),
1935
- M.overlap && /* @__PURE__ */ w("span", { className: v.finding, children: W.scheduleOverlap }),
1936
- M.late && /* @__PURE__ */ w("span", { className: v.finding, children: W.scheduleLateTransport })
1936
+ K.scheduleGhostTimes(X.time(new Date(M.from), !1), X.time(new Date(M.to), !1)),
1937
+ M.refused && /* @__PURE__ */ w("span", { className: v.refusal, children: K.scheduleLaneRefused }),
1938
+ M.overlap && /* @__PURE__ */ w("span", { className: v.finding, children: K.scheduleOverlap }),
1939
+ M.late && /* @__PURE__ */ w("span", { className: v.finding, children: K.scheduleLateTransport })
1937
1940
  ]
1938
1941
  }
1939
1942
  )
@@ -1941,31 +1944,31 @@ const bn = [], ce = { min: Tt, max: 28 * st }, Mn = [], de = 20, Fn = Xe(functio
1941
1944
  }
1942
1945
  ),
1943
1946
  /* @__PURE__ */ w("div", { className: v.corner }),
1944
- /* @__PURE__ */ H("div", { className: v.tickBand, "aria-hidden": "true", "data-schedule-ticks": "", "data-schedule-clip": "time band", children: [
1947
+ /* @__PURE__ */ Y("div", { className: v.tickBand, "aria-hidden": "true", "data-schedule-ticks": "", "data-schedule-clip": "time band", children: [
1945
1948
  T.now !== null && /* @__PURE__ */ w("span", { className: v.now, "data-now": "", "data-schedule-overlay": "now mark", style: { left: `${T.now}px` } }),
1946
- T.ticks.map((h) => /* @__PURE__ */ w("span", { className: v.tick, style: { left: `${h.x}px` }, children: h.x >= de && h.x <= T.width - de && /* @__PURE__ */ w("span", { className: v.tickLabel, "data-schedule-overlay": "time label", children: T.step >= st ? K.dateShort(new Date(h.wallClock)) : K.time(new Date(h.wallClock), !1) }) }, h.wallClock))
1949
+ T.ticks.map((h) => /* @__PURE__ */ w("span", { className: v.tick, style: { left: `${h.x}px` }, children: h.x >= de && h.x <= T.width - de && /* @__PURE__ */ w("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))
1947
1950
  ] })
1948
1951
  ]
1949
1952
  }
1950
1953
  ),
1951
- De
1954
+ xe
1952
1955
  ] });
1953
1956
  });
1954
1957
  function En({ id: n, label: t }) {
1955
- const e = ve(), s = q(() => ({ id: n, label: t ?? n, ...e === null ? {} : { parent: e } }), [n, t, e]);
1958
+ const e = ye(), s = z(() => ({ id: n, label: t ?? n, ...e === null ? {} : { parent: e } }), [n, t, e]);
1956
1959
  return ts(s), null;
1957
1960
  }
1958
- function Dn({ id: n, label: t, children: e }) {
1959
- const s = ve(), o = q(() => ({ id: n, label: t ?? n, ...s === null ? {} : { parent: s } }), [n, t, s]);
1960
- return es(o), /* @__PURE__ */ w(we.Provider, { value: n, children: e });
1961
+ function xn({ id: n, label: t, children: e }) {
1962
+ const s = ye(), o = z(() => ({ id: n, label: t ?? n, ...s === null ? {} : { parent: s } }), [n, t, s]);
1963
+ return es(o), /* @__PURE__ */ w(ve.Provider, { value: n, children: e });
1961
1964
  }
1962
- function xn({ data: n, tasks: t }) {
1963
- const e = q(() => ({ kind: "subtasks", data: n, tasks: t }), [n, t]);
1964
- return ye("Subtasks", e), null;
1965
+ function Dn({ data: n, tasks: t }) {
1966
+ const e = z(() => ({ kind: "subtasks", data: n, tasks: t }), [n, t]);
1967
+ return be("Subtasks", e), null;
1965
1968
  }
1966
1969
  function Pn({ data: n }) {
1967
- const t = q(() => ({ kind: "transports", data: n }), [n]);
1968
- return ye("Transports", t), null;
1970
+ const t = z(() => ({ kind: "transports", data: n }), [n]);
1971
+ return be("Transports", t), null;
1969
1972
  }
1970
1973
  function Nn(n, t, e) {
1971
1974
  if (e.kind === "place") return [];
@@ -1983,7 +1986,7 @@ function Nn(n, t, e) {
1983
1986
  if (l.to === e.subtask) continue;
1984
1987
  const d = s.get(l.to);
1985
1988
  if (d === void 0) continue;
1986
- const p = St(l, c) + l.duration - At(l, d);
1989
+ const p = St(l, c) + l.duration - It(l, d);
1987
1990
  if (!(p > 0)) continue;
1988
1991
  const g = { kind: "move", subtask: d.id, from: d.from + p, to: d.to + p };
1989
1992
  s.set(d.id, jt(d, g)), i.set(d.id, g), r.push(d.id);
@@ -1996,20 +1999,20 @@ function Gn(n, t, e) {
1996
1999
  }
1997
2000
  export {
1998
2001
  En as Lane,
1999
- Dn as LaneGroup,
2002
+ xn as LaneGroup,
2000
2003
  Fn as Schedule,
2001
- xn as Subtasks,
2004
+ Dn as Subtasks,
2002
2005
  Pn as Transports,
2003
2006
  jt as applyIntent,
2004
- At as arrival,
2007
+ It as arrival,
2005
2008
  St as departure,
2006
2009
  _n as findings,
2007
2010
  _t as lateTransports,
2008
2011
  ut as occupied,
2009
- It as overlaps,
2012
+ At as overlaps,
2010
2013
  ht as resolveAppearance,
2011
2014
  Nn as ripple,
2012
2015
  Gn as shiftTask,
2013
- Rs as snapTime,
2014
- In as subtaskFromPlace
2016
+ Gs as snapTime,
2017
+ An as subtaskFromPlace
2015
2018
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umriss-ui/schedule",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
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/charts": "^0.3.1",
48
- "@umriss-ui/core": "^0.3.1"
47
+ "@umriss-ui/charts": "^0.4.0",
48
+ "@umriss-ui/core": "^0.4.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.3.1",
63
- "@umriss-ui/demo": "0.0.0",
64
- "@umriss-ui/core": "0.3.1"
62
+ "@umriss-ui/charts": "0.4.0",
63
+ "@umriss-ui/core": "0.4.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",