Everything @umriss-ui/schedule exports, with its signature. A component's props stand on its own page.
useScheduleDeclares a schedule: hands back Schedule and the parts declared inside it
- Lane, LaneGroup, Subtasks, Dependencies, BlockedTimes, Milestones -, its
view and the setters setView, setDomain, toggleGroup, foldAll and
unfoldAll. A ref on Schedule still gives the ScheduleHandle.
function useSchedule(options?: ScheduleOptions): ScheduleParts;Used on Scenarios, Installation, First schedule, Lanes, Lane groups, Subtasks, Bar labels, Appearances, Overlap, Dependencies, Routes, Time axis and calendar, Blocked time, Milestones, Now line, Pan and zoom, Selection, Interactions, Tooltip, View, Linked schedules, The handle, Findings as data, Move and lane, Stretch, lead-in, lead-out, Snapping, Placing from outside, Where a subtask may go, Ripple and Benchmark.
applyIntentThe subtask as the intent asks for it. An intent for another subtask leaves it as it is.
function applyIntent<S extends Subtask>(subtask: S, intent: Intent): S;Used on Scenarios, Lane groups, Time axis and calendar, Blocked time, Interactions, Move and lane, Stretch, lead-in, lead-out, Snapping, Placing from outside, Where a subtask may go and Ripple.
arrivalWhen a dependency has to have arrived at its subtask, by its anchor.
function arrival(dependency: Dependency, to: Subtask): number;Used on Scenarios, Now line and Findings as data.
departureWhen a dependency leaves its subtask, by its anchor.
function departure(dependency: Dependency, from: Subtask): number;Used on Findings as data.
findingsEvery finding at once. Without blocked time there is none in it.
function findings(subtasks: readonly Subtask[], dependencies: readonly Dependency[], blocked?: readonly BlockedTime[]): Findings;Used on Scenarios, First schedule, Lane groups, Blocked time, Tooltip and Findings as data.
inBlockedTimeEvery subtask that covers blocked time on its lane, lead-in and lead-out included - once per blocked interval it covers, in the order of the subtasks. Touching at a shared edge is not covering.
function inBlockedTime(subtasks: readonly Subtask[], blocked: readonly BlockedTime[]): InBlockedTime[];Used on Scenarios, Blocked time and Findings as data.
occupiedThe interval a subtask occupies on its lane: lead-in and lead-out included.
function occupied(subtask: Subtask): {
from: number;
to: number;
};overlapsEvery pair of subtasks that cover each other on a lane. Touching at a shared edge is not covering, and a subtask that covers no time covers nothing.
function overlaps(subtasks: readonly Subtask[]): Overlap[];Used on Scenarios, Lane groups, Findings as data and Move and lane.
resolveAppearanceSettles a subtask's appearances into what is drawn. provisional and
fixed contradict each other; the later one in the list wins.
appearance – The subtask's appearance, in the order it was given.function resolveAppearance(appearance: readonly SubtaskAppearance[] | undefined): ResolvedAppearance;Used on Appearances.
rippleThe moves that push every successor whose dependency no longer fits after
intent - transitively, in the order they were first pushed. The subtask the
intent is about is never moved, and a cycle among the successors ends after a
bounded number of pushes instead of running on.
function ripple(subtasks: readonly Subtask[], dependencies: readonly Dependency[], intent: Intent): MoveIntent[];Used on Scenarios, Dependencies and Ripple.
shiftTaskThe moves that carry a whole task in time - every subtask of it by the same
amount, so that its lengths and the distances between its stops stay as
they were. The schedule never runs it: apply the moves like any other
intent, or run ripple over them first.
subtasks – All subtasks; only those of task are moved.task – The id of the task, as its subtasks name it in task.by – How far, in milliseconds; negative is earlier.by is zero
or not finite.function shiftTask(subtasks: readonly Subtask[], task: string, by: number): MoveIntent[];snapTimetime onto the nearest line of the raster in local time - a step alone
starts at local midnight. A step of zero or less is no raster: the time
stays as it is.
function snapTime(time: number, raster: number | SnapRaster): number;Used on Snapping.
subtaskFromPlaceThe subtask a place intent asks for, under an id the caller chooses.
function subtaskFromPlace(intent: PlaceIntent, id: string): Subtask;Used on Placing from outside and Where a subtask may go.
violatedDependenciesEvery dependency whose successor is to be reached before the predecessor's departure plus the dependency's lag. A dependency naming a subtask that is not in the data is passed over: there is nothing to judge.
function violatedDependencies(subtasks: readonly Subtask[], dependencies: readonly Dependency[]): ViolatedDependency[];Used on Scenarios, Lane groups, Tooltip and Findings as data.
BlockedTimeIts table stands on Blocked time.
Used on Scenarios, Blocked time, Tooltip, Findings as data and Where a subtask may go.
BlockedTimesPropsIts table stands on Blocked time.
DependenciesPropsIts table stands on Dependencies.
DependencyIts table stands on Dependencies.
Used on Scenarios, Installation, First schedule, Lane groups, Dependencies, Routes, Time axis and calendar, Selection, Interactions, Tooltip, Findings as data, Move and lane, Placing from outside, Ripple and Benchmark.
DependencyAttachmentWhere on its bars a dependency's line attaches: the middle of both, or the
edge that faces the other stop - which is the shortest line between them.
Deliberately not called an anchor: a dependency already HAS two anchors
(leaves, arrives), and those decide what it connects and therefore
whether it is violated. This decides where the line touches, and nothing else.
The tree has an Anchor of its own as well (CONTEXT.md).
type DependencyAttachment = "centre" | "nearest";Used on Dependencies.
DependencyEndsWhether a dependency's two ends carry a dot. The dot says where the line is anchored, which is worth saying while a plan is being read and is noise in a plan full of short moves - so it is the caller's choice.
type DependencyEnds = "dot" | "none";Used on Dependencies.
DependencyRouteHow a dependency is drawn between its two ends: a curve that leaves and arrives forwards, a straight line, or axis-parallel segments.
type DependencyRoute = "curve" | "straight" | "orthogonal";FindingsEvery kind of finding over the same data.
| Name | Type | Default | Description |
|---|---|---|---|
overlapsrequired | readonly Overlap[] | — | Shown in: Read a folded group (Lane groups), List the findings (Findings as data), Say when there is nothing to fix (Findings as data) and 1 more |
violatedDependenciesrequired | readonly ViolatedDependency[] | — | Shown in: Read a folded group (Lane groups), List the findings (Findings as data), Say when there is nothing to fix (Findings as data) and 1 more |
inBlockedTimerequired | readonly InBlockedTime[] | — | Shown in: Block out leave and maintenance (Blocked time), Check a sprint against the leave calendar (Blocked time), List the findings (Findings as data) and 3 more |
InBlockedTimeIts table stands on Findings as data.
IntentWhat the schedule reports when an interaction asks for a change. Every intent carries the values it asks for, not a difference: two intents of one drop - a move and a lane - give the same data in either order.
type Intent = MoveIntent | StretchIntent | LeadInIntent | LeadOutIntent | LaneIntent | PlaceIntent;Used on Scenarios, Blocked time, Move and lane, Placing from outside, Where a subtask may go and Ripple.
IntentKindThe names of the intents - the editing API of the schedule.
type IntentKind = Intent["kind"];LaneGroupPropsIts table stands on Lane groups.
LaneIntentPut the subtask on another lane.
| Name | Type | Default | Description |
|---|---|---|---|
kindrequired | "lane" | — | Shown in: Read a folded group (Lane groups), Plan work around someone's leave (Blocked time), Refuse a move that double-books someone (Move and lane) and 7 more |
subtaskrequired | string | — | The id of the subtask. Shown in: Read a folded group (Lane groups), Plan work around someone's leave (Blocked time), Refuse a move that double-books someone (Move and lane) and 4 more |
lanerequired | string | — | The id of the new lane. |
LanePropsIts table stands on Lanes.
LeadInIntentChange the lead-in on its own.
| Name | Type | Default | Description |
|---|---|---|---|
kindrequired | "leadIn" | — | Shown in: Read a folded group (Lane groups), Plan work around someone's leave (Blocked time), Refuse a move that double-books someone (Move and lane) and 7 more |
subtaskrequired | string | — | The id of the subtask. Shown in: Read a folded group (Lane groups), Plan work around someone's leave (Blocked time), Refuse a move that double-books someone (Move and lane) and 4 more |
leadInrequired | number | — | The new duration of the lead-in. Shown in: Replan the day on the line (Scenarios) |
LeadOutIntentChange the lead-out on its own.
| Name | Type | Default | Description |
|---|---|---|---|
kindrequired | "leadOut" | — | Shown in: Read a folded group (Lane groups), Plan work around someone's leave (Blocked time), Refuse a move that double-books someone (Move and lane) and 7 more |
subtaskrequired | string | — | The id of the subtask. Shown in: Read a folded group (Lane groups), Plan work around someone's leave (Blocked time), Refuse a move that double-books someone (Move and lane) and 4 more |
leadOutrequired | number | — | The new duration of the lead-out. |
MilestonesPropsIts table stands on Milestones.
MoveIntentMove the subtask in time: the main time keeps its length.
| Name | Type | Default | Description |
|---|---|---|---|
kindrequired | "move" | — | Shown in: Read a folded group (Lane groups), Plan work around someone's leave (Blocked time), Refuse a move that double-books someone (Move and lane) and 8 more |
subtaskrequired | string | — | The id of the subtask. Shown in: Read a folded group (Lane groups), Plan work around someone's leave (Blocked time), Refuse a move that double-books someone (Move and lane) and 5 more |
fromrequired | number | — | The new start of the main time. Shown in: Push the later stops of a tour (Ripple), Replan the day on the line (Scenarios) |
torequired | number | — | The new end of the main time. Shown in: Push the later stops of a tour (Ripple), Replan the day on the line (Scenarios) |
Used on Ripple.
OverlapIts table stands on Findings as data.
PlaceIntentPut work on the plan that was not on it: the answer to a drag from outside
the schedule. It carries no subtask id - there is
no subtask yet; the caller creates one, with its own identity, from
subtaskFromPlace.
| Name | Type | Default | Description |
|---|---|---|---|
kindrequired | "place" | — | Shown in: Read a folded group (Lane groups), Plan work around someone's leave (Blocked time), Refuse a move that double-books someone (Move and lane) and 7 more |
itemrequired | string | — | The caller's key for the dragged item, as it declared it while dragging. Shown in: Drag work in from the backlog (Placing from outside), Apply the same rule to work dragged in (Where a subtask may go), Replan the day on the line (Scenarios) |
taskrequired | string | — | The task the work belongs to. |
lanerequired | string | — | The lane it was dropped on. Shown in: Drag work in from the backlog (Placing from outside), Apply the same rule to work dragged in (Where a subtask may go) |
fromrequired | number | — | Where its main time would start. |
torequired | number | — | Where its main time would end. |
leadIn | number | — | The lead-in it was declared with. |
leadOut | number | — | The lead-out it was declared with. |
PlacingItemWhat the application says it is dragging in, while it drags it: the browser hands over the dragged data only on the drop, so the ghost before the drop can only come from the caller.
| Name | Type | Default | Description |
|---|---|---|---|
itemrequired | string | — | The caller's key for the dragged item; it comes back in the intent. Shown in: Drag work in from the backlog (Placing from outside), Apply the same rule to work dragged in (Where a subtask may go) |
taskrequired | string | — | The task the work belongs to. Shown in: Drag work in from the backlog (Placing from outside), Apply the same rule to work dragged in (Where a subtask may go) |
durationrequired | number | — | How long its main time is. Shown in: Drag work in from the backlog (Placing from outside), Apply the same rule to work dragged in (Where a subtask may go) |
leadIn | number | — | The lead-in it brings. |
leadOut | number | — | The lead-out it brings. |
Used on Placing from outside and Where a subtask may go.
ResolvedAppearanceWhat the drawing needs to know, with the contradiction already settled.
Two of the field names (dashed, hatched) are older than the drawing;
the channel each one owns stands beside it.
| Name | Type | Default | Description |
|---|---|---|---|
dashedrequired | boolean | — | provisional: the FILL - none at all, so the surface shows through, with
a dashed outline in the task colour. Planned, not released. |
hatchedrequired | boolean | — | fixed: the ENDS - a cap at each end of the main time. Not a hatch: a
hatch says "not available" of a refused lane. The field keeps the name
hatched. |
mutedrequired | boolean | — | muted: the SATURATION - the task colour mixed half into the surface,
opaque and at full height. Another team's, another crew's. |
openrequired | boolean | — | open: the FADE, where the bar passes the edge of the view. It goes on
past what is drawn. |
ScheduleHandleWhat a schedule offers a caller imperatively: the arithmetic between a point on the screen and a time on a lane. Everything else is props.
| Name | Type | Default | Description |
|---|---|---|---|
positionAtrequired | (clientX: number, clientY: number) => { time: number; lane: string | null } | null | — | The time and the lane at a client point, or null outside the plot. Shown in: Place a mark of your own (The handle) |
clientPointOfrequired | (time: number, lane?: string) => { x: number; y: number } | null | — | The client point of a time - on the middle of a lane where one is named -
or null while the schedule is not on screen. Shown in: Place a mark of your own (The handle) |
visibleDomainrequired | () => readonly [number, number] | — | The visible span, as two wall-clock instants. |
Used on The handle.
ScheduleHitWhat a pointer is on.
type ScheduleHit =
| { readonly kind: "subtask"; readonly subtask: Subtask; readonly part: "leadIn" | "main" | "leadOut" }
| { readonly kind: "dependency"; readonly dependency: Dependency }
| { readonly kind: "milestone"; readonly milestone: Milestone }
| { readonly kind: "lane"; readonly lane: string }
| { readonly kind: "nothing" };ScheduleInteractionIts table stands on Interactions.
Used on Scenarios, Interactions, Tooltip and Benchmark.
ScheduleOptionsIts table stands on View.
SchedulePartsWhat useSchedule hands back: the schedule and what is declared inside
it, its view and the setters that change it.
Used on Linked schedules.
SchedulePropsIts table stands on First schedule.
SnapRasterA raster: a step, and where it starts after local midnight.
| Name | Type | Default | Description |
|---|---|---|---|
steprequired | number | — | The distance between two lines of the raster, in milliseconds. Shown in: Snap to handover times (Snapping) |
offsetrequired | number | — | Where the raster starts after local midnight, in milliseconds: six
hours for handovers at 06:00, 14:00 and 22:00. Shown in: Snap to handover times (Snapping) |
Used on Snapping.
StretchIntentStretch the main time at one or both of its edges.
| Name | Type | Default | Description |
|---|---|---|---|
kindrequired | "stretch" | — | Shown in: Read a folded group (Lane groups), Plan work around someone's leave (Blocked time), Refuse a move that double-books someone (Move and lane) and 7 more |
subtaskrequired | string | — | The id of the subtask. Shown in: Read a folded group (Lane groups), Plan work around someone's leave (Blocked time), Refuse a move that double-books someone (Move and lane) and 4 more |
fromrequired | number | — | The new start of the main time. |
torequired | number | — | The new end of the main time. |
SubtaskIts table stands on Subtasks.
Used on Scenarios, Installation, First schedule, Lanes, Lane groups, Subtasks, Bar labels, Appearances, Overlap, Dependencies, Routes, Time axis and calendar, Blocked time, Milestones, Now line, Pan and zoom, Selection, Interactions, Tooltip, View, Linked schedules, The handle, Findings as data, Move and lane, Stretch, lead-in, lead-out, Snapping, Placing from outside, Where a subtask may go, Ripple and Benchmark.
SubtaskAppearanceThe appearances a caller may give a subtask.
type SubtaskAppearance = "provisional" | "fixed" | "muted" | "open";SubtasksPropsIts table stands on Subtasks.
TaskIts table stands on Subtasks.
Used on Scenarios, Installation, First schedule, Lanes, Lane groups, Subtasks, Bar labels, Appearances, Overlap, Dependencies, Routes, Time axis and calendar, Blocked time, Milestones, Now line, Pan and zoom, Selection, Interactions, Tooltip, View, Linked schedules, The handle, Findings as data, Move and lane, Stretch, lead-in, lead-out, Snapping, Placing from outside, Where a subtask may go, Ripple and Benchmark.
ZoomLimitsThe narrowest and the widest span zoom may reach.
| Name | Type | Default | Description |
|---|---|---|---|
minrequired | number | — | Shown in: Move through the plan (Pan and zoom) |
maxrequired | number | — | Shown in: Move through the plan (Pan and zoom) |