@umriss-ui/schedule 0.41.0 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/llms-full.md CHANGED
@@ -1,8 +1,8 @@
1
- # @umriss-ui/schedule 0.41.0
1
+ # @umriss-ui/schedule 0.42.0
2
2
 
3
3
  > React Gantt-style schedule for data-dense applications - work on lanes over time, with dependencies, blocked time, findings and controlled editing.
4
4
 
5
- Install with `npm install @umriss-ui/schedule @umriss-ui/core @umriss-ui/charts`. This text is generated from the package's demo (https://romanhaendler.github.io/umriss-ui/schedule/): every page with its import line, its examples - the source exactly as it runs, with the package name where the demo imports its own source - its props tables generated from the code, and what it deliberately does not do. The pages index stands in https://romanhaendler.github.io/umriss-ui/schedule/llms.txt.
5
+ Install with `npm install @umriss-ui/schedule @umriss-ui/core @umriss-ui/charts`. This text is generated from the package's demo: every page with its import line, its examples - the source exactly as it runs, with the package name where the demo imports its own source - its props tables generated from the code, and what it deliberately does not do.
6
6
 
7
7
  ## Scenarios
8
8
 
@@ -913,13 +913,11 @@ import { useSchedule } from "@umriss-ui/schedule";
913
913
  npm install @umriss-ui/schedule @umriss-ui/core @umriss-ui/charts
914
914
  ```
915
915
 
916
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/installation/
917
-
918
916
  The command brings its two peers along: core for the formats and the wording, charts for the time scale and the operating calendar ([ADR-0022](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0022-the-schedule-is-a-package-that-depends-on-core-and-charts.md)). React 19 or newer is a peer as well and stays the application's own. The stylesheets load themselves - each package's script imports its own, so there is nothing to import by hand; `@umriss-ui/schedule/styles.css` stays exported for setups that link stylesheets themselves.
919
917
 
920
918
  The plan is plain data ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). A lane is a person, a vehicle or a room, declared in JSX by its id. A task is an id, a colour and a name; a subtask is a main time on one lane, belonging to a task, with an optional lead-in and lead-out; a dependency joins two subtasks of one task with a lag. Times are epoch milliseconds.
921
919
 
922
- The schedule reports, the application decides. It draws the data it is given and changes none of it: a drag ends in an intent reported to `onIntent`, and only the application's own state update moves a bar. Without `intents` the schedule is read-only - see [Move and lane](#/move-and-lane).
920
+ The schedule reports, the application decides. It draws the data it is given and changes none of it: a drag ends in an intent reported to `onIntent`, and only the application's own state update moves a bar. Without `intents` the schedule is read-only - see [Move and lane](#move-and-lane).
923
921
 
924
922
  #### Examples
925
923
 
@@ -958,83 +956,83 @@ export default function SmallestSchedule() {
958
956
 
959
957
  #### Keyboard
960
958
 
961
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
959
+ The keys of [First schedule](#first-schedule) apply here.
962
960
 
963
961
  #### Props on this page
964
962
 
965
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
963
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
966
964
 
967
965
  | Prop | Type | Default | Description |
968
966
  |---|---|---|---|
969
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
970
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
967
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
968
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
971
969
 
972
970
  ###### Accessibility
973
971
 
974
972
  | Prop | Type | Default | Description |
975
973
  |---|---|---|---|
976
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
974
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
977
975
 
978
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
976
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
979
977
 
980
978
  | Prop | Type | Default | Description |
981
979
  |---|---|---|---|
982
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
983
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
980
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
981
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
984
982
 
985
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
983
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
986
984
 
987
985
  | Prop | Type | Default | Description |
988
986
  |---|---|---|---|
989
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
990
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
987
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
988
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
991
989
 
992
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
990
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
993
991
 
994
992
  | Prop | Type | Default | Description |
995
993
  |---|---|---|---|
996
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
997
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
998
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
999
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
1000
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
1001
- | [`leadIn`](#/subtasks/Subtask-leadIn) | `number` | — | Duration of the lead-in before the main time; none is zero. |
1002
- | [`leadOut`](#/subtasks/Subtask-leadOut) | `number` | — | Duration of the lead-out after the main time; none is zero. |
994
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
995
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
996
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
997
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
998
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
999
+ | [`leadIn`](#subtasks) | `number` | — | Duration of the lead-in before the main time; none is zero. |
1000
+ | [`leadOut`](#subtasks) | `number` | — | Duration of the lead-out after the main time; none is zero. |
1003
1001
 
1004
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
1002
+ From `Task` — the full table stands on [Subtasks](#subtasks).
1005
1003
 
1006
1004
  | Prop | Type | Default | Description |
1007
1005
  |---|---|---|---|
1008
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
1009
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
1010
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
1006
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
1007
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
1008
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
1011
1009
 
1012
- From `DependenciesProps` — the full table stands on [Dependencies](#/dependencies/type-DependenciesProps).
1010
+ From `DependenciesProps` — the full table stands on [Dependencies](#dependencies).
1013
1011
 
1014
1012
  | Prop | Type | Default | Description |
1015
1013
  |---|---|---|---|
1016
- | [`data`](#/dependencies/DependenciesProps-data) *required* | `readonly `[`Dependency`](#/dependencies/type-Dependency)`[]` | — | The dependencies, as the caller holds them. |
1014
+ | [`data`](#dependencies) *required* | `readonly `[`Dependency`](#dependencies)`[]` | — | The dependencies, as the caller holds them. |
1017
1015
 
1018
- From `Dependency` — the full table stands on [Dependencies](#/dependencies/type-Dependency).
1016
+ From `Dependency` — the full table stands on [Dependencies](#dependencies).
1019
1017
 
1020
1018
  | Prop | Type | Default | Description |
1021
1019
  |---|---|---|---|
1022
- | [`id`](#/dependencies/Dependency-id) *required* | `string` | — | The caller's identity of the dependency. |
1023
- | [`from`](#/dependencies/Dependency-from) *required* | `string` | — | The id of the subtask it leaves. |
1024
- | [`to`](#/dependencies/Dependency-to) *required* | `string` | — | The id of the subtask it arrives at. |
1025
- | [`lag`](#/dependencies/Dependency-lag) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
1020
+ | [`id`](#dependencies) *required* | `string` | — | The caller's identity of the dependency. |
1021
+ | [`from`](#dependencies) *required* | `string` | — | The id of the subtask it leaves. |
1022
+ | [`to`](#dependencies) *required* | `string` | — | The id of the subtask it arrives at. |
1023
+ | [`lag`](#dependencies) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
1026
1024
 
1027
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
1025
+ From `ScheduleOptions` — the full table stands on [View](#view).
1028
1026
 
1029
1027
  | Prop | Type | Default | Description |
1030
1028
  |---|---|---|---|
1031
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
1029
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
1032
1030
 
1033
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
1031
+ From `ScheduleView` — the full table stands on [View](#view).
1034
1032
 
1035
1033
  | Prop | Type | Default | Description |
1036
1034
  |---|---|---|---|
1037
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
1035
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
1038
1036
 
1039
1037
  ### First schedule
1040
1038
 
@@ -1044,11 +1042,9 @@ Work on lanes over time, with a day band above and time ticks that follow the zo
1044
1042
  import { useSchedule } from "@umriss-ui/schedule";
1045
1043
  ```
1046
1044
 
1047
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/schedule/
1048
-
1049
1045
  Lanes stand in the order they are declared; a subtask on a lane that is not declared is not drawn. Declare `Dependencies` before `Subtasks` and its lines run beneath the bars.
1050
1046
 
1051
- What cannot work is drawn, never repaired: two subtasks on one lane at once, a dependency whose lag does not fit, work in blocked time. [Findings as data](#/findings) returns the same list for the application to act on.
1047
+ What cannot work is drawn, never repaired: two subtasks on one lane at once, a dependency whose lag does not fit, work in blocked time. [Findings as data](#findings-as-data) returns the same list for the application to act on.
1052
1048
 
1053
1049
  The plot is one tab stop. The keys walk the subtasks as the pointer would hover them, the tooltip names the active one, and a live region reads it once the keys rest ([ADR-0030](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0030-a-chart-is-one-tab-stop-that-walks-its-hits.md), [ADR-0033](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0033-the-schedules-keys-walk-past-the-view.md)).
1054
1050
 
@@ -1268,7 +1264,7 @@ export default function MachinePlan() {
1268
1264
 
1269
1265
  The schedule is a figure named by `ariaLabel`, and its plot one tab stop with the role `application`, read as "schedule" (`aria-roledescription`), named alike and described by a summary: the lanes, the subtasks in view, the visible span, the findings by kind, then the keys. The canvas is hidden from a reader; the lane headers are text, and a group's fold button is named "Fold group" or "Unfold group" with the group's label. `ariaLabel` is required - name what the plan shows, "Plan of week 38".
1270
1266
 
1271
- When a key comes to rest, a polite live region beside the plot reads the active subtask: its lane, task and name, the day and the times, and every finding on it by name - an overlap, a dependency short by how much, blocked time. On a dependency it reads the task, the lag and where the line runs. A pointer announces nothing; [Findings as data](#/findings) gives the application the same findings to list. The words are core's wording, so under `@umriss-ui/core/wording/de` the plot is read as "Belegungsplan".
1267
+ When a key comes to rest, a polite live region beside the plot reads the active subtask: its lane, task and name, the day and the times, and every finding on it by name - an overlap, a dependency short by how much, blocked time. On a dependency it reads the task, the lag and where the line runs. A pointer announces nothing; [Findings as data](#findings-as-data) gives the application the same findings to list. The words are core's wording, so under `@umriss-ui/core/wording/de` the plot is read as "Belegungsplan".
1272
1268
 
1273
1269
  Under forced colours the plot paints itself in the system colours: the work in the text colour, told apart by lane and label; the active subtask in the selection colour; findings marked by a dash; grips and the ghost's label outlined. With reduced motion a group's chevron turns without its movement.
1274
1270
 
@@ -1278,38 +1274,38 @@ Under forced colours the plot paints itself in the system colours: the work in t
1278
1274
 
1279
1275
  | Prop | Type | Default | Description |
1280
1276
  |---|---|---|---|
1281
- | `ref` | `Ref<`[`ScheduleHandle`](#type-ScheduleHandle)`>` | — | Receives the `ScheduleHandle` - not an element.<br>Shown in: [Place a mark of your own (The handle)](#/handle/place-a-mark) |
1282
- | `height` | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's.<br>Shown in: [A day of tours](#/schedule/first-schedule), [Start from an empty plan](#/schedule/no-work-yet), [Plan a day in the machine shop](#/schedule/machine-plan) and 78 more |
1283
- | `laneHeight` | `number` | `44` | Height of one lane in pixels at the default font size of 16 px; the schedule multiplies it by the root font size over 16 px when that ratio is above 1, so lane names keep their room in a reader's larger font.<br>Shown in: [Scroll more lanes than fit (Lanes)](#/lane/many-lanes), [Measure a plan (Benchmark)](#/benchmark/benchmark) |
1284
- | `headerWidth` | `number` | `160` | Width of the lane headers in pixels - at most 40 % of the schedule, so that on a phone the plot keeps the larger part.<br>Shown in: [What a lane header says (Lanes)](#/lane/lane-headers), [Scroll more lanes than fit (Lanes)](#/lane/many-lanes), [Group lanes under a head (Lane groups)](#/lane-groups/a-group) and 1 more |
1285
- | `calendar` | [`CalendarInput`](#type-CalendarInput) | `[]` | A working calendar: the intervals in which time counts. Nights and weekends outside them are cut out of the axis. Without intervals every hour counts, as on the wall clock.<br>Shown in: [Cut the nights out of the axis (Time axis and calendar)](#/time-axis/working-calendar), [Plan in office hours only (Time axis and calendar)](#/time-axis/office-hours), [Plan the sprint around leave (Scenarios)](#/scenarios/plan-the-sprint-around-leave) |
1286
- | `zoomLimits` | [`ZoomLimits`](#type-ZoomLimits) | one hour to 28 days | The narrowest and widest time span zoom may reach, in milliseconds.<br>Shown in: [Move through the plan (Pan and zoom)](#/pan-and-zoom/pan-and-zoom) |
1287
- | `snap` | `"ticks" \| number \| `[`SnapRaster`](#type-SnapRaster)` \| false` | `"ticks"` | The raster a drag lands on: `"ticks"` - the fine band's current step -, a step in milliseconds from local midnight, a step with an offset (shifts at 06:00, 14:00 and 22:00 are eight hours offset by six), or `false` for none. It shapes the ghost and the intent, never the data.<br>Shown in: [Snap to a duration (Snapping)](#/snapping/snap-to-a-duration), [Snap to handover times (Snapping)](#/snapping/snap-to-handovers), [Place without snapping (Snapping)](#/snapping/no-snapping) |
1288
- | `intents` | `readonly `[`IntentKind`](#type-IntentKind)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)).<br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Cut the nights out of the axis (Time axis and calendar)](#/time-axis/working-calendar), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around) and 18 more |
1289
- | `canMoveTo` | `(subtask: `[`Subtask`](#/subtasks/type-Subtask)`, lane: string) => boolean` | every lane is open | Whether a subtask may go to a lane. It narrows `"lane"`, it does not enable it. Asked once per lane when a drag takes hold, and asked again at the drop. The lanes it turns down are marked from the first frame of the drag - a planner sees the refusal before meeting it - and over one of them the ghost stays on the last lane that was allowed, the cursor says no and a line ties the ghost to the pointer. A refused lane costs the lane and nothing else: a drop after it still reports the move in time. It is asked for work dragged in from outside as well, with the key and task the application declared in `placing`.<br>Shown in: [Keep work on the lanes that fit (Where a subtask may go)](#/where-it-may-go/lanes-that-fit), [Apply the same rule to work dragged in (Where a subtask may go)](#/where-it-may-go/dragged-in), [Keep work out of someone's leave (Where a subtask may go)](#/where-it-may-go/around-leave) and 1 more |
1290
- | `selectedTask` | `string \| null` | — | The selected task, controlled. Leave it out and the schedule keeps the selection itself.<br>Shown in: [Control the selection (Selection)](#/selection/control-the-selection) |
1291
- | `onSelectedTaskChange` | `(task: string \| null, subtask: string \| null) => void` | — | Called when a click selects a task or clears the selection, with the subtask that was clicked - null where the click was on a dependency or on nothing. It is called again when another subtask of the same task is clicked.<br>Shown in: [Control the selection (Selection)](#/selection/control-the-selection) |
1292
- | `placing` | [`PlacingItem`](#type-PlacingItem)` \| null` | — | What the application is dragging in from outside while it drags it - its key, task, the length of its main time, its lead-in and lead-out. The browser hands the dragged data over only on the drop, so the ghost before it can only come from here: set it on your own `dragstart`, clear it on `dragend`. Without `"place"` in `intents` no drop is accepted.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#/placing/drag-from-the-backlog), [Apply the same rule to work dragged in (Where a subtask may go)](#/where-it-may-go/dragged-in) |
1293
- | `route` | [`DependencyRoute`](#type-DependencyRoute)<br>`"curve" \| "straight" \| "orthogonal"` | `"curve"` | How the dependencies are drawn: a `"curve"` that leaves and arrives forwards, a `"straight"` line, or `"orthogonal"` segments. A dependency may say otherwise for itself.<br>Shown in: [Straight (Routes)](#/routes/straight), [Orthogonal (Routes)](#/routes/orthogonal), [Per dependency (Routes)](#/routes/per-dependency) |
1294
- | `attach` | [`DependencyAttachment`](#type-DependencyAttachment)<br>`"centre" \| "nearest"` | `"centre"` | Where a dependency's ends sit on their bars: the `"centre"` of both, or the `"nearest"` edge - which is the shortest line between two stops. Within one lane both mean the middle. A dependency may say otherwise for itself. It changes the picture and never a finding: whether a dependency is violated follows from its `leaves` and `arrives` alone.<br>Shown in: [Choose where a line touches its bars (Dependencies)](#/dependencies/attach), [Mark the ends with a dot (Dependencies)](#/dependencies/ends), [Draw one handover its own way (Dependencies)](#/dependencies/one-handover-drawn-its-own-way) and 3 more |
1295
- | `ends` | [`DependencyEnds`](#type-DependencyEnds)<br>`"dot" \| "none"` | `"dot"` | Whether a dependency's two ends carry a dot (`"dot"`) or the line stands alone (`"none"`). The dot says where the line is anchored - a help while a plan is being read, and noise in a plan full of short moves. A dependency may say otherwise for itself.<br>Shown in: [Mark the ends with a dot (Dependencies)](#/dependencies/ends), [Draw one handover its own way (Dependencies)](#/dependencies/one-handover-drawn-its-own-way) |
1296
- | `label` | `(subtask: `[`Subtask`](#/subtasks/type-Subtask)`) => string` | — | What stands written in a bar: a function from a subtask to a line of text, or nothing for bars without text. The text is cut off with an ellipsis where the bar is too narrow for it and left out where even that would say nothing; a bar that began before the view keeps its text at the view's edge.<br>Shown in: [Plan a day in the machine shop](#/schedule/machine-plan), [Plan a sprint for a team (Subtasks)](#/subtasks/a-sprint), [Write into the bars (Bar labels)](#/bar-labels/bar-labels) and 7 more |
1297
- | `tooltip` | `false \| ((target: `[`ScheduleTooltipTarget`](#/tooltip/type-ScheduleTooltipTarget)`) => ReactNode)` | — | The tooltip on a hovered subtask or dependency: its order, its times, its parts and its findings. `false` switches it off; a function receives what the pointer rests on and returns content of the application's own.<br>Shown in: [Say what a milestone is in your own tooltip (Milestones)](#/milestones/say-what-a-milestone-is), [Write your own tooltip content (Tooltip)](#/tooltip/own-tooltip), [Show a detail panel instead (Tooltip)](#/tooltip/detail-panel-instead) and 1 more |
1298
- | `now` | `boolean \| number` | `false` | A line marking the present across the lanes: `true` follows the clock by the minute, an instant fixes it there.<br>Shown in: [Plan a day in the machine shop](#/schedule/machine-plan), [Mark the present (Now line)](#/now-line/now-line), [Follow the clock (Now line)](#/now-line/follow-the-clock) and 2 more |
1299
- | `children` | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn.<br>Shown in: [A day of tours](#/schedule/first-schedule), [Start from an empty plan](#/schedule/no-work-yet), [Plan a day in the machine shop](#/schedule/machine-plan) and 78 more |
1277
+ | `ref` | `Ref<``ScheduleHandle``>` | — | Receives the `ScheduleHandle` - not an element.<br>Shown in: [Place a mark of your own (The handle)](#the-handle) |
1278
+ | `height` | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's.<br>Shown in: [A day of tours](#first-schedule), [Start from an empty plan](#first-schedule), [Plan a day in the machine shop](#first-schedule) and 78 more |
1279
+ | `laneHeight` | `number` | `44` | Height of one lane in pixels at the default font size of 16 px; the schedule multiplies it by the root font size over 16 px when that ratio is above 1, so lane names keep their room in a reader's larger font.<br>Shown in: [Scroll more lanes than fit (Lanes)](#lanes), [Measure a plan (Benchmark)](#benchmark) |
1280
+ | `headerWidth` | `number` | `160` | Width of the lane headers in pixels - at most 40 % of the schedule, so that on a phone the plot keeps the larger part.<br>Shown in: [What a lane header says (Lanes)](#lanes), [Scroll more lanes than fit (Lanes)](#lanes), [Group lanes under a head (Lane groups)](#lane-groups) and 1 more |
1281
+ | `calendar` | `CalendarInput` | `[]` | A working calendar: the intervals in which time counts. Nights and weekends outside them are cut out of the axis. Without intervals every hour counts, as on the wall clock.<br>Shown in: [Cut the nights out of the axis (Time axis and calendar)](#time-axis-and-calendar), [Plan in office hours only (Time axis and calendar)](#time-axis-and-calendar), [Plan the sprint around leave (Scenarios)](#plan-the-sprint-around-leave) |
1282
+ | `zoomLimits` | `ZoomLimits` | one hour to 28 days | The narrowest and widest time span zoom may reach, in milliseconds.<br>Shown in: [Move through the plan (Pan and zoom)](#pan-and-zoom) |
1283
+ | `snap` | `"ticks" \| number \| ``SnapRaster`` \| false` | `"ticks"` | The raster a drag lands on: `"ticks"` - the fine band's current step -, a step in milliseconds from local midnight, a step with an offset (shifts at 06:00, 14:00 and 22:00 are eight hours offset by six), or `false` for none. It shapes the ghost and the intent, never the data.<br>Shown in: [Snap to a duration (Snapping)](#snapping), [Snap to handover times (Snapping)](#snapping), [Place without snapping (Snapping)](#snapping) |
1284
+ | `intents` | `readonly ``IntentKind``[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)).<br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Cut the nights out of the axis (Time axis and calendar)](#time-axis-and-calendar), [Plan work around someone's leave (Blocked time)](#blocked-time) and 18 more |
1285
+ | `canMoveTo` | `(subtask: `[`Subtask`](#subtasks)`, lane: string) => boolean` | every lane is open | Whether a subtask may go to a lane. It narrows `"lane"`, it does not enable it. Asked once per lane when a drag takes hold, and asked again at the drop. The lanes it turns down are marked from the first frame of the drag - a planner sees the refusal before meeting it - and over one of them the ghost stays on the last lane that was allowed, the cursor says no and a line ties the ghost to the pointer. A refused lane costs the lane and nothing else: a drop after it still reports the move in time. It is asked for work dragged in from outside as well, with the key and task the application declared in `placing`.<br>Shown in: [Keep work on the lanes that fit (Where a subtask may go)](#where-a-subtask-may-go), [Apply the same rule to work dragged in (Where a subtask may go)](#where-a-subtask-may-go), [Keep work out of someone's leave (Where a subtask may go)](#where-a-subtask-may-go) and 1 more |
1286
+ | `selectedTask` | `string \| null` | — | The selected task, controlled. Leave it out and the schedule keeps the selection itself.<br>Shown in: [Control the selection (Selection)](#selection) |
1287
+ | `onSelectedTaskChange` | `(task: string \| null, subtask: string \| null) => void` | — | Called when a click selects a task or clears the selection, with the subtask that was clicked - null where the click was on a dependency or on nothing. It is called again when another subtask of the same task is clicked.<br>Shown in: [Control the selection (Selection)](#selection) |
1288
+ | `placing` | `PlacingItem`` \| null` | — | What the application is dragging in from outside while it drags it - its key, task, the length of its main time, its lead-in and lead-out. The browser hands the dragged data over only on the drop, so the ghost before it can only come from here: set it on your own `dragstart`, clear it on `dragend`. Without `"place"` in `intents` no drop is accepted.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#placing-from-outside), [Apply the same rule to work dragged in (Where a subtask may go)](#where-a-subtask-may-go) |
1289
+ | `route` | `DependencyRoute`<br>`"curve" \| "straight" \| "orthogonal"` | `"curve"` | How the dependencies are drawn: a `"curve"` that leaves and arrives forwards, a `"straight"` line, or `"orthogonal"` segments. A dependency may say otherwise for itself.<br>Shown in: [Straight (Routes)](#routes), [Orthogonal (Routes)](#routes), [Per dependency (Routes)](#routes) |
1290
+ | `attach` | `DependencyAttachment`<br>`"centre" \| "nearest"` | `"centre"` | Where a dependency's ends sit on their bars: the `"centre"` of both, or the `"nearest"` edge - which is the shortest line between two stops. Within one lane both mean the middle. A dependency may say otherwise for itself. It changes the picture and never a finding: whether a dependency is violated follows from its `leaves` and `arrives` alone.<br>Shown in: [Choose where a line touches its bars (Dependencies)](#dependencies), [Mark the ends with a dot (Dependencies)](#dependencies), [Draw one handover its own way (Dependencies)](#dependencies) and 3 more |
1291
+ | `ends` | `DependencyEnds`<br>`"dot" \| "none"` | `"dot"` | Whether a dependency's two ends carry a dot (`"dot"`) or the line stands alone (`"none"`). The dot says where the line is anchored - a help while a plan is being read, and noise in a plan full of short moves. A dependency may say otherwise for itself.<br>Shown in: [Mark the ends with a dot (Dependencies)](#dependencies), [Draw one handover its own way (Dependencies)](#dependencies) |
1292
+ | `label` | `(subtask: `[`Subtask`](#subtasks)`) => string` | — | What stands written in a bar: a function from a subtask to a line of text, or nothing for bars without text. The text is cut off with an ellipsis where the bar is too narrow for it and left out where even that would say nothing; a bar that began before the view keeps its text at the view's edge.<br>Shown in: [Plan a day in the machine shop](#first-schedule), [Plan a sprint for a team (Subtasks)](#subtasks), [Write into the bars (Bar labels)](#bar-labels) and 7 more |
1293
+ | `tooltip` | `false \| ((target: `[`ScheduleTooltipTarget`](#tooltip)`) => ReactNode)` | — | The tooltip on a hovered subtask or dependency: its order, its times, its parts and its findings. `false` switches it off; a function receives what the pointer rests on and returns content of the application's own.<br>Shown in: [Say what a milestone is in your own tooltip (Milestones)](#milestones), [Write your own tooltip content (Tooltip)](#tooltip), [Show a detail panel instead (Tooltip)](#tooltip) and 1 more |
1294
+ | `now` | `boolean \| number` | `false` | A line marking the present across the lanes: `true` follows the clock by the minute, an instant fixes it there.<br>Shown in: [Plan a day in the machine shop](#first-schedule), [Mark the present (Now line)](#now-line), [Follow the clock (Now line)](#now-line) and 2 more |
1295
+ | `children` | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn.<br>Shown in: [A day of tours](#first-schedule), [Start from an empty plan](#first-schedule), [Plan a day in the machine shop](#first-schedule) and 78 more |
1300
1296
 
1301
1297
  ###### Events
1302
1298
 
1303
1299
  | Prop | Type | Default | Description |
1304
1300
  |---|---|---|---|
1305
- | `onIntent` | `(intent: `[`Intent`](#type-Intent)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it.<br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Cut the nights out of the axis (Time axis and calendar)](#/time-axis/working-calendar), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around) and 18 more |
1306
- | `onInteraction` | `(interaction: `[`ScheduleInteraction`](#/interactions/type-ScheduleInteraction)`) => void` | — | Click, context menu and hover, with what the pointer is on and where. While it is set, a right-click opens no browser menu.<br>Shown in: [Report what the pointer is on (Interactions)](#/interactions/report-the-pointer), [Open a context menu (Interactions)](#/interactions/open-a-context-menu), [Show a detail panel instead (Tooltip)](#/tooltip/detail-panel-instead) and 3 more |
1301
+ | `onIntent` | `(intent: ``Intent``) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it.<br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Cut the nights out of the axis (Time axis and calendar)](#time-axis-and-calendar), [Plan work around someone's leave (Blocked time)](#blocked-time) and 18 more |
1302
+ | `onInteraction` | `(interaction: `[`ScheduleInteraction`](#interactions)`) => void` | — | Click, context menu and hover, with what the pointer is on and where. While it is set, a right-click opens no browser menu.<br>Shown in: [Report what the pointer is on (Interactions)](#interactions), [Open a context menu (Interactions)](#interactions), [Show a detail panel instead (Tooltip)](#tooltip) and 3 more |
1307
1303
 
1308
1304
  ###### Accessibility
1309
1305
 
1310
1306
  | Prop | Type | Default | Description |
1311
1307
  |---|---|---|---|
1312
- | `ariaLabel` *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38".<br>Shown in: [A day of tours](#/schedule/first-schedule), [Start from an empty plan](#/schedule/no-work-yet), [Plan a day in the machine shop](#/schedule/machine-plan) and 78 more |
1308
+ | `ariaLabel` *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38".<br>Shown in: [A day of tours](#first-schedule), [Start from an empty plan](#first-schedule), [Plan a day in the machine shop](#first-schedule) and 78 more |
1313
1309
 
1314
1310
  ###### Styling
1315
1311
 
@@ -1327,8 +1323,8 @@ point on the screen and a time on a lane. Everything else is props.
1327
1323
 
1328
1324
  | Prop | Type | Default | Description |
1329
1325
  |---|---|---|---|
1330
- | `positionAt` *required* | `(clientX: number, clientY: number) => { time: number; lane: string \| null } \| null` | — | The time and the lane at a client point, or null outside the plot.<br>Shown in: [Place a mark of your own (The handle)](#/handle/place-a-mark) |
1331
- | `clientPointOf` *required* | `(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.<br>Shown in: [Place a mark of your own (The handle)](#/handle/place-a-mark) |
1326
+ | `positionAt` *required* | `(clientX: number, clientY: number) => { time: number; lane: string \| null } \| null` | — | The time and the lane at a client point, or null outside the plot.<br>Shown in: [Place a mark of your own (The handle)](#the-handle) |
1327
+ | `clientPointOf` *required* | `(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.<br>Shown in: [Place a mark of your own (The handle)](#the-handle) |
1332
1328
  | `visibleDomain` *required* | `() => readonly [number, number]` | — | The visible span, as two wall-clock instants. |
1333
1329
 
1334
1330
  ###### `CalendarInput`
@@ -1348,8 +1344,8 @@ The narrowest and the widest span zoom may reach.
1348
1344
 
1349
1345
  | Prop | Type | Default | Description |
1350
1346
  |---|---|---|---|
1351
- | `min` *required* | `number` | — | <br>Shown in: [Move through the plan (Pan and zoom)](#/pan-and-zoom/pan-and-zoom) |
1352
- | `max` *required* | `number` | — | <br>Shown in: [Move through the plan (Pan and zoom)](#/pan-and-zoom/pan-and-zoom) |
1347
+ | `min` *required* | `number` | — | <br>Shown in: [Move through the plan (Pan and zoom)](#pan-and-zoom) |
1348
+ | `max` *required* | `number` | — | <br>Shown in: [Move through the plan (Pan and zoom)](#pan-and-zoom) |
1353
1349
 
1354
1350
  ###### `SnapRaster`
1355
1351
 
@@ -1357,8 +1353,8 @@ A raster: a step, and where it starts after local midnight.
1357
1353
 
1358
1354
  | Prop | Type | Default | Description |
1359
1355
  |---|---|---|---|
1360
- | `step` *required* | `number` | — | The distance between two lines of the raster, in milliseconds.<br>Shown in: [Snap to handover times (Snapping)](#/snapping/snap-to-handovers) |
1361
- | `offset` *required* | `number` | — | Where the raster starts after local midnight, in milliseconds: six hours for handovers at 06:00, 14:00 and 22:00.<br>Shown in: [Snap to handover times (Snapping)](#/snapping/snap-to-handovers) |
1356
+ | `step` *required* | `number` | — | The distance between two lines of the raster, in milliseconds.<br>Shown in: [Snap to handover times (Snapping)](#snapping) |
1357
+ | `offset` *required* | `number` | — | Where the raster starts after local midnight, in milliseconds: six hours for handovers at 06:00, 14:00 and 22:00.<br>Shown in: [Snap to handover times (Snapping)](#snapping) |
1362
1358
 
1363
1359
  ###### `IntentKind`
1364
1360
 
@@ -1376,9 +1372,9 @@ the drop can only come from the caller.
1376
1372
 
1377
1373
  | Prop | Type | Default | Description |
1378
1374
  |---|---|---|---|
1379
- | `item` *required* | `string` | — | The caller's key for the dragged item; it comes back in the intent.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#/placing/drag-from-the-backlog), [Apply the same rule to work dragged in (Where a subtask may go)](#/where-it-may-go/dragged-in) |
1380
- | `task` *required* | `string` | — | The task the work belongs to.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#/placing/drag-from-the-backlog), [Apply the same rule to work dragged in (Where a subtask may go)](#/where-it-may-go/dragged-in) |
1381
- | `duration` *required* | `number` | — | How long its main time is.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#/placing/drag-from-the-backlog), [Apply the same rule to work dragged in (Where a subtask may go)](#/where-it-may-go/dragged-in) |
1375
+ | `item` *required* | `string` | — | The caller's key for the dragged item; it comes back in the intent.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#placing-from-outside), [Apply the same rule to work dragged in (Where a subtask may go)](#where-a-subtask-may-go) |
1376
+ | `task` *required* | `string` | — | The task the work belongs to.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#placing-from-outside), [Apply the same rule to work dragged in (Where a subtask may go)](#where-a-subtask-may-go) |
1377
+ | `duration` *required* | `number` | — | How long its main time is.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#placing-from-outside), [Apply the same rule to work dragged in (Where a subtask may go)](#where-a-subtask-may-go) |
1382
1378
  | `leadIn` | `number` | — | The lead-in it brings. |
1383
1379
  | `leadOut` | `number` | — | The lead-out it brings. |
1384
1380
 
@@ -1439,7 +1435,7 @@ thing about the frame.
1439
1435
 
1440
1436
  | Prop | Type | Default | Description |
1441
1437
  |---|---|---|---|
1442
- | `intervals` *required* | `readonly `[`WorkingInterval`](#type-WorkingInterval)`[]` | — | |
1438
+ | `intervals` *required* | `readonly ``WorkingInterval``[]` | — | |
1443
1439
  | `offsets` *required* | `readonly number[]` | — | Working time accumulated before the respective interval begins. |
1444
1440
  | `total` *required* | `number` | — | The whole working time - the axis' extent is [0, total]. |
1445
1441
 
@@ -1461,10 +1457,10 @@ Move the subtask in time: the main time keeps its length.
1461
1457
 
1462
1458
  | Prop | Type | Default | Description |
1463
1459
  |---|---|---|---|
1464
- | `kind` *required* | `"move"` | — | <br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 8 more |
1465
- | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 5 more |
1466
- | `from` *required* | `number` | — | The new start of the main time.<br>Shown in: [Push the later stops of a tour (Ripple)](#/ripple/push-the-later-stops), [Replan the day on the line (Scenarios)](#/scenarios/replan-the-day-on-the-line) |
1467
- | `to` *required* | `number` | — | The new end of the main time.<br>Shown in: [Push the later stops of a tour (Ripple)](#/ripple/push-the-later-stops), [Replan the day on the line (Scenarios)](#/scenarios/replan-the-day-on-the-line) |
1460
+ | `kind` *required* | `"move"` | — | <br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 8 more |
1461
+ | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 5 more |
1462
+ | `from` *required* | `number` | — | The new start of the main time.<br>Shown in: [Push the later stops of a tour (Ripple)](#ripple), [Replan the day on the line (Scenarios)](#replan-the-day-on-the-line) |
1463
+ | `to` *required* | `number` | — | The new end of the main time.<br>Shown in: [Push the later stops of a tour (Ripple)](#ripple), [Replan the day on the line (Scenarios)](#replan-the-day-on-the-line) |
1468
1464
 
1469
1465
  ###### `StretchIntent`
1470
1466
 
@@ -1472,8 +1468,8 @@ Stretch the main time at one or both of its edges.
1472
1468
 
1473
1469
  | Prop | Type | Default | Description |
1474
1470
  |---|---|---|---|
1475
- | `kind` *required* | `"stretch"` | — | <br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 7 more |
1476
- | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 4 more |
1471
+ | `kind` *required* | `"stretch"` | — | <br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 7 more |
1472
+ | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 4 more |
1477
1473
  | `from` *required* | `number` | — | The new start of the main time. |
1478
1474
  | `to` *required* | `number` | — | The new end of the main time. |
1479
1475
 
@@ -1483,9 +1479,9 @@ Change the lead-in on its own.
1483
1479
 
1484
1480
  | Prop | Type | Default | Description |
1485
1481
  |---|---|---|---|
1486
- | `kind` *required* | `"leadIn"` | — | <br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 7 more |
1487
- | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 4 more |
1488
- | `leadIn` *required* | `number` | — | The new duration of the lead-in.<br>Shown in: [Replan the day on the line (Scenarios)](#/scenarios/replan-the-day-on-the-line) |
1482
+ | `kind` *required* | `"leadIn"` | — | <br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 7 more |
1483
+ | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 4 more |
1484
+ | `leadIn` *required* | `number` | — | The new duration of the lead-in.<br>Shown in: [Replan the day on the line (Scenarios)](#replan-the-day-on-the-line) |
1489
1485
 
1490
1486
  ###### `LeadOutIntent`
1491
1487
 
@@ -1493,8 +1489,8 @@ Change the lead-out on its own.
1493
1489
 
1494
1490
  | Prop | Type | Default | Description |
1495
1491
  |---|---|---|---|
1496
- | `kind` *required* | `"leadOut"` | — | <br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 7 more |
1497
- | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 4 more |
1492
+ | `kind` *required* | `"leadOut"` | — | <br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 7 more |
1493
+ | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 4 more |
1498
1494
  | `leadOut` *required* | `number` | — | The new duration of the lead-out. |
1499
1495
 
1500
1496
  ###### `LaneIntent`
@@ -1503,8 +1499,8 @@ Put the subtask on another lane.
1503
1499
 
1504
1500
  | Prop | Type | Default | Description |
1505
1501
  |---|---|---|---|
1506
- | `kind` *required* | `"lane"` | — | <br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 7 more |
1507
- | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 4 more |
1502
+ | `kind` *required* | `"lane"` | — | <br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 7 more |
1503
+ | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 4 more |
1508
1504
  | `lane` *required* | `string` | — | The id of the new lane. |
1509
1505
 
1510
1506
  ###### `PlaceIntent`
@@ -1516,10 +1512,10 @@ no subtask yet; the caller creates one, with its own identity, from
1516
1512
 
1517
1513
  | Prop | Type | Default | Description |
1518
1514
  |---|---|---|---|
1519
- | `kind` *required* | `"place"` | — | <br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 7 more |
1520
- | `item` *required* | `string` | — | The caller's key for the dragged item, as it declared it while dragging.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#/placing/drag-from-the-backlog), [Apply the same rule to work dragged in (Where a subtask may go)](#/where-it-may-go/dragged-in), [Replan the day on the line (Scenarios)](#/scenarios/replan-the-day-on-the-line) |
1515
+ | `kind` *required* | `"place"` | — | <br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 7 more |
1516
+ | `item` *required* | `string` | — | The caller's key for the dragged item, as it declared it while dragging.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#placing-from-outside), [Apply the same rule to work dragged in (Where a subtask may go)](#where-a-subtask-may-go), [Replan the day on the line (Scenarios)](#replan-the-day-on-the-line) |
1521
1517
  | `task` *required* | `string` | — | The task the work belongs to. |
1522
- | `lane` *required* | `string` | — | The lane it was dropped on.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#/placing/drag-from-the-backlog), [Apply the same rule to work dragged in (Where a subtask may go)](#/where-it-may-go/dragged-in) |
1518
+ | `lane` *required* | `string` | — | The lane it was dropped on.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#placing-from-outside), [Apply the same rule to work dragged in (Where a subtask may go)](#where-a-subtask-may-go) |
1523
1519
  | `from` *required* | `number` | — | Where its main time would start. |
1524
1520
  | `to` *required* | `number` | — | Where its main time would end. |
1525
1521
  | `leadIn` | `number` | — | The lead-in it was declared with. |
@@ -1527,11 +1523,11 @@ no subtask yet; the caller creates one, with its own identity, from
1527
1523
 
1528
1524
  #### Known limits
1529
1525
 
1530
- - No dependency types, critical path or auto-scheduling: the application decides where work goes, the schedule shows the result and its findings ([ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/)).
1526
+ - No dependency types, critical path or auto-scheduling: the application decides where work goes, the schedule shows the result and its findings ([ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md)).
1531
1527
  - No milestones yet: a point in time on a lane has no mark of its own.
1532
1528
  - A dependency joins two subtasks of one task; dependencies across tasks are not yet possible.
1533
1529
 
1534
- What umriss deliberately does not build, and why: [ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/).
1530
+ What umriss deliberately does not build, and why: [ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md).
1535
1531
 
1536
1532
  ## Plan
1537
1533
 
@@ -1545,11 +1541,9 @@ One row per person, vehicle or room, named by its header and kept in the order i
1545
1541
  import { useSchedule } from "@umriss-ui/schedule";
1546
1542
  ```
1547
1543
 
1548
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/lane/
1549
-
1550
1544
  A lane is declared by its id, the one subtasks name, and a label. The label is content, not a string: a name with a plate number, a status beside it. It is real text, read by a screen reader, and it stays at the left edge while the plot pans.
1551
1545
 
1552
- A lane keeps its height whatever lies on it. Nothing is moved to another lane to make room: two subtasks on one lane at once are a finding (see [Overlap](#/overlap)).
1546
+ A lane keeps its height whatever lies on it. Nothing is moved to another lane to make room: two subtasks on one lane at once are a finding (see [Overlap](#overlap)).
1553
1547
 
1554
1548
  #### Examples
1555
1549
 
@@ -1658,7 +1652,7 @@ export default function ManyLanes() {
1658
1652
 
1659
1653
  #### Keyboard
1660
1654
 
1661
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
1655
+ The keys of [First schedule](#first-schedule) apply here.
1662
1656
 
1663
1657
  #### API
1664
1658
 
@@ -1666,8 +1660,8 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
1666
1660
 
1667
1661
  | Prop | Type | Default | Description |
1668
1662
  |---|---|---|---|
1669
- | `id` *required* | `string` | — | The identity subtasks name in their `lane`.<br>Shown in: [What a lane header says](#/lane/lane-headers), [Scroll more lanes than fit](#/lane/many-lanes), [The smallest schedule (Installation)](#/installation/smallest-schedule) and 78 more |
1670
- | `label` | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader.<br>Shown in: [What a lane header says](#/lane/lane-headers), [Scroll more lanes than fit](#/lane/many-lanes), [The smallest schedule (Installation)](#/installation/smallest-schedule) and 77 more |
1663
+ | `id` *required* | `string` | — | The identity subtasks name in their `lane`.<br>Shown in: [What a lane header says](#lanes), [Scroll more lanes than fit](#lanes), [The smallest schedule (Installation)](#installation) and 78 more |
1664
+ | `label` | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader.<br>Shown in: [What a lane header says](#lanes), [Scroll more lanes than fit](#lanes), [The smallest schedule (Installation)](#installation) and 77 more |
1671
1665
 
1672
1666
  ### Lane groups
1673
1667
 
@@ -1677,13 +1671,11 @@ Teams, depots or regions over the lanes, to any depth, folded into one row when
1677
1671
  import { useSchedule } from "@umriss-ui/schedule";
1678
1672
  ```
1679
1673
 
1680
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/lane-groups/
1681
-
1682
1674
  A group is structure, never a lane: nothing sits on it, no finding is reported for it and no intent names it ([ADR-0025](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0025-a-lane-group-is-structure-over-lanes-never-a-lane.md)). The lanes keep the order they were declared in, whatever group they are in.
1683
1675
 
1684
1676
  Folded, a group shows a miniature: every lane in it as a thin strip with its work in the tasks' colours. Dependencies still arrive at the right strip, findings are marked on the row, and a strip can be hovered and selected. Labels, appearances and grips need room and wait for the group to open.
1685
1677
 
1686
- Folding is part of the schedule's view and never an intent: `folded` in `initialView` starts with groups folded, `toggleGroup`, `foldAll` and `unfoldAll` fold from outside, and `onViewChange` reports every fold the planner makes - see [View](#/view).
1678
+ Folding is part of the schedule's view and never an intent: `folded` in `initialView` starts with groups folded, `toggleGroup`, `foldAll` and `unfoldAll` fold from outside, and `onViewChange` reports every fold the planner makes - see [View](#view).
1687
1679
 
1688
1680
  #### Examples
1689
1681
 
@@ -1961,7 +1953,7 @@ export default function StartWithGroupsFolded() {
1961
1953
  | `Tab` | Reaches each group's fold button - the only buttons the schedule puts in the tab order. |
1962
1954
  | `Enter / Space` | Folds or unfolds the group. |
1963
1955
 
1964
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
1956
+ The keys of [First schedule](#first-schedule) apply here.
1965
1957
 
1966
1958
  #### API
1967
1959
 
@@ -1969,15 +1961,15 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
1969
1961
 
1970
1962
  | Prop | Type | Default | Description |
1971
1963
  |---|---|---|---|
1972
- | `id` *required* | `string` | — | The group's identity - what the view's `folded` names. It is never a lane: no subtask sits on it, no finding is reported for it, and no intent names it ([ADR-0025](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0025-a-lane-group-is-structure-over-lanes-never-a-lane.md)).<br>Shown in: [Group lanes under a head](#/lane-groups/a-group), [Nest groups to any depth](#/lane-groups/nesting), [Fold groups from outside](#/lane-groups/fold-from-outside) and 5 more |
1973
- | `label` | `ReactNode` | `id` | What the group's header says - the team, the depot, the region. Real text, read by a screen reader.<br>Shown in: [Group lanes under a head](#/lane-groups/a-group), [Nest groups to any depth](#/lane-groups/nesting), [Fold groups from outside](#/lane-groups/fold-from-outside) and 5 more |
1974
- | `children` | `ReactNode` | — | `Lane`s and further `LaneGroup`s, to any depth.<br>Shown in: [Group lanes under a head](#/lane-groups/a-group), [Nest groups to any depth](#/lane-groups/nesting), [Fold groups from outside](#/lane-groups/fold-from-outside) and 5 more |
1964
+ | `id` *required* | `string` | — | The group's identity - what the view's `folded` names. It is never a lane: no subtask sits on it, no finding is reported for it, and no intent names it ([ADR-0025](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0025-a-lane-group-is-structure-over-lanes-never-a-lane.md)).<br>Shown in: [Group lanes under a head](#lane-groups), [Nest groups to any depth](#lane-groups), [Fold groups from outside](#lane-groups) and 5 more |
1965
+ | `label` | `ReactNode` | `id` | What the group's header says - the team, the depot, the region. Real text, read by a screen reader.<br>Shown in: [Group lanes under a head](#lane-groups), [Nest groups to any depth](#lane-groups), [Fold groups from outside](#lane-groups) and 5 more |
1966
+ | `children` | `ReactNode` | — | `Lane`s and further `LaneGroup`s, to any depth.<br>Shown in: [Group lanes under a head](#lane-groups), [Nest groups to any depth](#lane-groups), [Fold groups from outside](#lane-groups) and 5 more |
1975
1967
 
1976
1968
  #### Known limits
1977
1969
 
1978
1970
  - A folded group shows no summary - no utilisation band, no bar spanning its work: a computed claim would look like a drawn fact ([ADR-0025](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0025-a-lane-group-is-structure-over-lanes-never-a-lane.md)).
1979
1971
 
1980
- What umriss deliberately does not build, and why: [ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/).
1972
+ What umriss deliberately does not build, and why: [ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md).
1981
1973
 
1982
1974
  ### Subtasks
1983
1975
 
@@ -1987,8 +1979,6 @@ The bars: a main time with an optional lead-in before it and lead-out after it,
1987
1979
  import { useSchedule } from "@umriss-ui/schedule";
1988
1980
  ```
1989
1981
 
1990
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/subtasks/
1991
-
1992
1982
  Lead-in and lead-out are durations beside the main time, not times of their own: moving the subtask takes them along. They are drawn faint in the task's colour, so preparation reads as belonging to the work and as not being it, and they occupy the lane as the main time does.
1993
1983
 
1994
1984
  #### Examples
@@ -2171,7 +2161,7 @@ export default function ASprint() {
2171
2161
 
2172
2162
  #### Keyboard
2173
2163
 
2174
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
2164
+ The keys of [First schedule](#first-schedule) apply here.
2175
2165
 
2176
2166
  #### API
2177
2167
 
@@ -2179,31 +2169,31 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
2179
2169
 
2180
2170
  | Prop | Type | Default | Description |
2181
2171
  |---|---|---|---|
2182
- | `data` *required* | `readonly `[`Subtask`](#type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one.<br>Shown in: [Main time, lead-in and lead-out](#/subtasks/lead-in-and-lead-out), [Colour by what the task means](#/subtasks/task-colours), [Plan a sprint for a team](#/subtasks/a-sprint) and 78 more |
2183
- | `tasks` *required* | `readonly `[`Task`](#type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour.<br>Shown in: [Main time, lead-in and lead-out](#/subtasks/lead-in-and-lead-out), [Colour by what the task means](#/subtasks/task-colours), [Plan a sprint for a team](#/subtasks/a-sprint) and 78 more |
2172
+ | `data` *required* | `readonly ``Subtask``[]` | — | The subtasks, as the caller holds them. The schedule never changes one.<br>Shown in: [Main time, lead-in and lead-out](#subtasks), [Colour by what the task means](#subtasks), [Plan a sprint for a team](#subtasks) and 78 more |
2173
+ | `tasks` *required* | `readonly ``Task``[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour.<br>Shown in: [Main time, lead-in and lead-out](#subtasks), [Colour by what the task means](#subtasks), [Plan a sprint for a team](#subtasks) and 78 more |
2184
2174
 
2185
2175
  ##### `Subtask`
2186
2176
 
2187
2177
  | Prop | Type | Default | Description |
2188
2178
  |---|---|---|---|
2189
- | `id` *required* | `string` | — | The caller's identity of the subtask.<br>Shown in: [Main time, lead-in and lead-out](#/subtasks/lead-in-and-lead-out), [Colour by what the task means](#/subtasks/task-colours), [Plan a sprint for a team](#/subtasks/a-sprint) and 75 more |
2190
- | `task` *required* | `string` | — | The id of the task it belongs to.<br>Shown in: [Main time, lead-in and lead-out](#/subtasks/lead-in-and-lead-out), [Colour by what the task means](#/subtasks/task-colours), [The smallest schedule (Installation)](#/installation/smallest-schedule) and 71 more |
2191
- | `lane` *required* | `string` | — | The id of the lane it sits on.<br>Shown in: [Main time, lead-in and lead-out](#/subtasks/lead-in-and-lead-out), [Colour by what the task means](#/subtasks/task-colours), [The smallest schedule (Installation)](#/installation/smallest-schedule) and 71 more |
2192
- | `from` *required* | `number` | — | Start of the main time.<br>Shown in: [Main time, lead-in and lead-out](#/subtasks/lead-in-and-lead-out), [Colour by what the task means](#/subtasks/task-colours), [The smallest schedule (Installation)](#/installation/smallest-schedule) and 71 more |
2193
- | `to` *required* | `number` | — | End of the main time.<br>Shown in: [Main time, lead-in and lead-out](#/subtasks/lead-in-and-lead-out), [Colour by what the task means](#/subtasks/task-colours), [The smallest schedule (Installation)](#/installation/smallest-schedule) and 71 more |
2194
- | `leadIn` | `number` | — | Duration of the lead-in before the main time; none is zero.<br>Shown in: [Main time, lead-in and lead-out](#/subtasks/lead-in-and-lead-out), [The smallest schedule (Installation)](#/installation/smallest-schedule), [A day of tours (First schedule)](#/schedule/first-schedule) and 25 more |
2195
- | `leadOut` | `number` | — | Duration of the lead-out after the main time; none is zero.<br>Shown in: [Main time, lead-in and lead-out](#/subtasks/lead-in-and-lead-out), [The smallest schedule (Installation)](#/installation/smallest-schedule), [A day of tours (First schedule)](#/schedule/first-schedule) and 22 more |
2196
- | `name` | `string` | — | What the subtask is called, where the schedule names it.<br>Shown in: [Plan a sprint for a team](#/subtasks/a-sprint), [Write into the bars (Bar labels)](#/bar-labels/bar-labels), [Join the stops of a tour (Dependencies)](#/dependencies/stops-of-a-tour) and 28 more |
2197
- | `appearance` | `readonly `[`SubtaskAppearance`](#type-SubtaskAppearance)`[]` | — | What the bar says besides its colour: `"provisional"`, `"fixed"`, `"muted"`, `"open"`. Several hold at once; `"provisional"` and `"fixed"` contradict, and the later one in the list wins.<br>Shown in: [Plan a sprint for a team](#/subtasks/a-sprint), [Provisional (Appearances)](#/appearances/provisional), [Fixed (Appearances)](#/appearances/fixed) and 3 more |
2198
- | `progress` | `number` | — | The share of the work that is done, from 0 to 1, drawn as a filled part of the bar. Without it nothing is claimed - an empty bar and a bar at zero per cent are two different statements.<br>Shown in: [Progress (Appearances)](#/appearances/progress), [Several at once (Appearances)](#/appearances/combinations) |
2179
+ | `id` *required* | `string` | — | The caller's identity of the subtask.<br>Shown in: [Main time, lead-in and lead-out](#subtasks), [Colour by what the task means](#subtasks), [Plan a sprint for a team](#subtasks) and 75 more |
2180
+ | `task` *required* | `string` | — | The id of the task it belongs to.<br>Shown in: [Main time, lead-in and lead-out](#subtasks), [Colour by what the task means](#subtasks), [The smallest schedule (Installation)](#installation) and 71 more |
2181
+ | `lane` *required* | `string` | — | The id of the lane it sits on.<br>Shown in: [Main time, lead-in and lead-out](#subtasks), [Colour by what the task means](#subtasks), [The smallest schedule (Installation)](#installation) and 71 more |
2182
+ | `from` *required* | `number` | — | Start of the main time.<br>Shown in: [Main time, lead-in and lead-out](#subtasks), [Colour by what the task means](#subtasks), [The smallest schedule (Installation)](#installation) and 71 more |
2183
+ | `to` *required* | `number` | — | End of the main time.<br>Shown in: [Main time, lead-in and lead-out](#subtasks), [Colour by what the task means](#subtasks), [The smallest schedule (Installation)](#installation) and 71 more |
2184
+ | `leadIn` | `number` | — | Duration of the lead-in before the main time; none is zero.<br>Shown in: [Main time, lead-in and lead-out](#subtasks), [The smallest schedule (Installation)](#installation), [A day of tours (First schedule)](#first-schedule) and 25 more |
2185
+ | `leadOut` | `number` | — | Duration of the lead-out after the main time; none is zero.<br>Shown in: [Main time, lead-in and lead-out](#subtasks), [The smallest schedule (Installation)](#installation), [A day of tours (First schedule)](#first-schedule) and 22 more |
2186
+ | `name` | `string` | — | What the subtask is called, where the schedule names it.<br>Shown in: [Plan a sprint for a team](#subtasks), [Write into the bars (Bar labels)](#bar-labels), [Join the stops of a tour (Dependencies)](#dependencies) and 28 more |
2187
+ | `appearance` | `readonly ``SubtaskAppearance``[]` | — | What the bar says besides its colour: `"provisional"`, `"fixed"`, `"muted"`, `"open"`. Several hold at once; `"provisional"` and `"fixed"` contradict, and the later one in the list wins.<br>Shown in: [Plan a sprint for a team](#subtasks), [Provisional (Appearances)](#appearances), [Fixed (Appearances)](#appearances) and 3 more |
2188
+ | `progress` | `number` | — | The share of the work that is done, from 0 to 1, drawn as a filled part of the bar. Without it nothing is claimed - an empty bar and a bar at zero per cent are two different statements.<br>Shown in: [Progress (Appearances)](#appearances), [Several at once (Appearances)](#appearances) |
2199
2189
 
2200
2190
  ##### `Task`
2201
2191
 
2202
2192
  | Prop | Type | Default | Description |
2203
2193
  |---|---|---|---|
2204
- | `id` *required* | `string` | — | The caller's identity of the task.<br>Shown in: [Main time, lead-in and lead-out](#/subtasks/lead-in-and-lead-out), [Colour by what the task means](#/subtasks/task-colours), [The smallest schedule (Installation)](#/installation/smallest-schedule) and 70 more |
2205
- | `color` *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean.<br>Shown in: [Main time, lead-in and lead-out](#/subtasks/lead-in-and-lead-out), [Colour by what the task means](#/subtasks/task-colours), [The smallest schedule (Installation)](#/installation/smallest-schedule) and 70 more |
2206
- | `name` | `string` | — | What the task is called, where the schedule names it.<br>Shown in: [Main time, lead-in and lead-out](#/subtasks/lead-in-and-lead-out), [Colour by what the task means](#/subtasks/task-colours), [The smallest schedule (Installation)](#/installation/smallest-schedule) and 70 more |
2194
+ | `id` *required* | `string` | — | The caller's identity of the task.<br>Shown in: [Main time, lead-in and lead-out](#subtasks), [Colour by what the task means](#subtasks), [The smallest schedule (Installation)](#installation) and 70 more |
2195
+ | `color` *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean.<br>Shown in: [Main time, lead-in and lead-out](#subtasks), [Colour by what the task means](#subtasks), [The smallest schedule (Installation)](#installation) and 70 more |
2196
+ | `name` | `string` | — | What the task is called, where the schedule names it.<br>Shown in: [Main time, lead-in and lead-out](#subtasks), [Colour by what the task means](#subtasks), [The smallest schedule (Installation)](#installation) and 70 more |
2207
2197
 
2208
2198
  ##### Types on this page
2209
2199
 
@@ -2223,8 +2213,6 @@ A line of text inside each bar: cut off where the bar is too narrow, left out wh
2223
2213
  import { useSchedule } from "@umriss-ui/schedule";
2224
2214
  ```
2225
2215
 
2226
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/bar-labels/
2227
-
2228
2216
  The text lies on the main time, not on the lead-in. Its colour follows the bar: light text on a dark bar, dark text on a pale one, measured by contrast in either theme.
2229
2217
 
2230
2218
  #### Examples
@@ -2283,70 +2271,70 @@ export default function BarLabels() {
2283
2271
 
2284
2272
  #### Keyboard
2285
2273
 
2286
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
2274
+ The keys of [First schedule](#first-schedule) apply here.
2287
2275
 
2288
2276
  #### Props on this page
2289
2277
 
2290
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
2278
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
2291
2279
 
2292
2280
  | Prop | Type | Default | Description |
2293
2281
  |---|---|---|---|
2294
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
2295
- | [`label`](#/schedule/ScheduleProps-label) | `(subtask: `[`Subtask`](#/subtasks/type-Subtask)`) => string` | — | What stands written in a bar: a function from a subtask to a line of text, or nothing for bars without text. The text is cut off with an ellipsis where the bar is too narrow for it and left out where even that would say nothing; a bar that began before the view keeps its text at the view's edge. |
2296
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
2282
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
2283
+ | [`label`](#first-schedule) | `(subtask: `[`Subtask`](#subtasks)`) => string` | — | What stands written in a bar: a function from a subtask to a line of text, or nothing for bars without text. The text is cut off with an ellipsis where the bar is too narrow for it and left out where even that would say nothing; a bar that began before the view keeps its text at the view's edge. |
2284
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
2297
2285
 
2298
2286
  ###### Accessibility
2299
2287
 
2300
2288
  | Prop | Type | Default | Description |
2301
2289
  |---|---|---|---|
2302
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
2290
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
2303
2291
 
2304
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
2292
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
2305
2293
 
2306
2294
  | Prop | Type | Default | Description |
2307
2295
  |---|---|---|---|
2308
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
2309
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
2296
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
2297
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
2310
2298
 
2311
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
2299
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
2312
2300
 
2313
2301
  | Prop | Type | Default | Description |
2314
2302
  |---|---|---|---|
2315
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
2316
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
2303
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
2304
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
2317
2305
 
2318
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
2306
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
2319
2307
 
2320
2308
  | Prop | Type | Default | Description |
2321
2309
  |---|---|---|---|
2322
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
2323
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
2324
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
2325
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
2326
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
2327
- | [`leadIn`](#/subtasks/Subtask-leadIn) | `number` | — | Duration of the lead-in before the main time; none is zero. |
2328
- | [`leadOut`](#/subtasks/Subtask-leadOut) | `number` | — | Duration of the lead-out after the main time; none is zero. |
2329
- | [`name`](#/subtasks/Subtask-name) | `string` | — | What the subtask is called, where the schedule names it. |
2310
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
2311
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
2312
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
2313
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
2314
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
2315
+ | [`leadIn`](#subtasks) | `number` | — | Duration of the lead-in before the main time; none is zero. |
2316
+ | [`leadOut`](#subtasks) | `number` | — | Duration of the lead-out after the main time; none is zero. |
2317
+ | [`name`](#subtasks) | `string` | — | What the subtask is called, where the schedule names it. |
2330
2318
 
2331
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
2319
+ From `Task` — the full table stands on [Subtasks](#subtasks).
2332
2320
 
2333
2321
  | Prop | Type | Default | Description |
2334
2322
  |---|---|---|---|
2335
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
2336
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
2337
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
2323
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
2324
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
2325
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
2338
2326
 
2339
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
2327
+ From `ScheduleOptions` — the full table stands on [View](#view).
2340
2328
 
2341
2329
  | Prop | Type | Default | Description |
2342
2330
  |---|---|---|---|
2343
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
2331
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
2344
2332
 
2345
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
2333
+ From `ScheduleView` — the full table stands on [View](#view).
2346
2334
 
2347
2335
  | Prop | Type | Default | Description |
2348
2336
  |---|---|---|---|
2349
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
2337
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
2350
2338
 
2351
2339
  ### Appearances
2352
2340
 
@@ -2356,11 +2344,9 @@ What a bar says besides its colour: provisional, fixed, muted, running on past t
2356
2344
  import { useSchedule, resolveAppearance } from "@umriss-ui/schedule";
2357
2345
  ```
2358
2346
 
2359
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/appearances/
2360
-
2361
2347
  `"provisional"` owns the fill (none at all), `"fixed"` the ends (a cap inside each), `"muted"` the saturation, `"open"` a fade at the edge of the view, and `progress` a rail inside the main time. The faint, outlined fill belongs to a lead-in and a lead-out and to nothing else.
2362
2348
 
2363
- `"provisional"` and `"fixed"` contradict, and the later one in the list wins. [`resolveAppearance`](#/api/resolveAppearance) is that rule, exported for the application to read as well.
2349
+ `"provisional"` and `"fixed"` contradict, and the later one in the list wins. [`resolveAppearance`](#api-index-1) is that rule, exported for the application to read as well.
2364
2350
 
2365
2351
  #### Examples
2366
2352
 
@@ -2596,71 +2582,71 @@ export default function Combinations() {
2596
2582
 
2597
2583
  #### Keyboard
2598
2584
 
2599
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
2585
+ The keys of [First schedule](#first-schedule) apply here.
2600
2586
 
2601
2587
  #### Props on this page
2602
2588
 
2603
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
2589
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
2604
2590
 
2605
2591
  | Prop | Type | Default | Description |
2606
2592
  |---|---|---|---|
2607
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
2608
- | [`label`](#/schedule/ScheduleProps-label) | `(subtask: `[`Subtask`](#/subtasks/type-Subtask)`) => string` | — | What stands written in a bar: a function from a subtask to a line of text, or nothing for bars without text. The text is cut off with an ellipsis where the bar is too narrow for it and left out where even that would say nothing; a bar that began before the view keeps its text at the view's edge. |
2609
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
2593
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
2594
+ | [`label`](#first-schedule) | `(subtask: `[`Subtask`](#subtasks)`) => string` | — | What stands written in a bar: a function from a subtask to a line of text, or nothing for bars without text. The text is cut off with an ellipsis where the bar is too narrow for it and left out where even that would say nothing; a bar that began before the view keeps its text at the view's edge. |
2595
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
2610
2596
 
2611
2597
  ###### Accessibility
2612
2598
 
2613
2599
  | Prop | Type | Default | Description |
2614
2600
  |---|---|---|---|
2615
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
2601
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
2616
2602
 
2617
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
2603
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
2618
2604
 
2619
2605
  | Prop | Type | Default | Description |
2620
2606
  |---|---|---|---|
2621
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
2622
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
2607
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
2608
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
2623
2609
 
2624
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
2610
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
2625
2611
 
2626
2612
  | Prop | Type | Default | Description |
2627
2613
  |---|---|---|---|
2628
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
2629
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
2614
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
2615
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
2630
2616
 
2631
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
2617
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
2632
2618
 
2633
2619
  | Prop | Type | Default | Description |
2634
2620
  |---|---|---|---|
2635
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
2636
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
2637
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
2638
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
2639
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
2640
- | [`leadIn`](#/subtasks/Subtask-leadIn) | `number` | — | Duration of the lead-in before the main time; none is zero. |
2641
- | [`leadOut`](#/subtasks/Subtask-leadOut) | `number` | — | Duration of the lead-out after the main time; none is zero. |
2642
- | [`appearance`](#/subtasks/Subtask-appearance) | `readonly `[`SubtaskAppearance`](#/subtasks/type-SubtaskAppearance)`[]` | — | What the bar says besides its colour: `"provisional"`, `"fixed"`, `"muted"`, `"open"`. Several hold at once; `"provisional"` and `"fixed"` contradict, and the later one in the list wins. |
2643
- | [`progress`](#/subtasks/Subtask-progress) | `number` | — | The share of the work that is done, from 0 to 1, drawn as a filled part of the bar. Without it nothing is claimed - an empty bar and a bar at zero per cent are two different statements. |
2621
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
2622
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
2623
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
2624
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
2625
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
2626
+ | [`leadIn`](#subtasks) | `number` | — | Duration of the lead-in before the main time; none is zero. |
2627
+ | [`leadOut`](#subtasks) | `number` | — | Duration of the lead-out after the main time; none is zero. |
2628
+ | [`appearance`](#subtasks) | `readonly `[`SubtaskAppearance`](#subtasks)`[]` | — | What the bar says besides its colour: `"provisional"`, `"fixed"`, `"muted"`, `"open"`. Several hold at once; `"provisional"` and `"fixed"` contradict, and the later one in the list wins. |
2629
+ | [`progress`](#subtasks) | `number` | — | The share of the work that is done, from 0 to 1, drawn as a filled part of the bar. Without it nothing is claimed - an empty bar and a bar at zero per cent are two different statements. |
2644
2630
 
2645
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
2631
+ From `Task` — the full table stands on [Subtasks](#subtasks).
2646
2632
 
2647
2633
  | Prop | Type | Default | Description |
2648
2634
  |---|---|---|---|
2649
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
2650
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
2651
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
2635
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
2636
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
2637
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
2652
2638
 
2653
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
2639
+ From `ScheduleOptions` — the full table stands on [View](#view).
2654
2640
 
2655
2641
  | Prop | Type | Default | Description |
2656
2642
  |---|---|---|---|
2657
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
2643
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
2658
2644
 
2659
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
2645
+ From `ScheduleView` — the full table stands on [View](#view).
2660
2646
 
2661
2647
  | Prop | Type | Default | Description |
2662
2648
  |---|---|---|---|
2663
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
2649
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
2664
2650
 
2665
2651
  ### Overlap
2666
2652
 
@@ -2670,8 +2656,6 @@ Two subtasks claiming one lane at the same time (also called a double booking or
2670
2656
  import { useSchedule } from "@umriss-ui/schedule";
2671
2657
  ```
2672
2658
 
2673
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/overlap/
2674
-
2675
2659
  The later bar is offset a few pixels and edged, and the shared time is marked across the lane. Lead-in and lead-out occupy the lane too, so a lead-out meeting the next lead-in is an overlap. The offset stops at three levels and never leaks into the lane below.
2676
2660
 
2677
2661
  #### Examples
@@ -2782,74 +2766,74 @@ export default function ThreeAtOnce() {
2782
2766
 
2783
2767
  #### Keyboard
2784
2768
 
2785
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
2769
+ The keys of [First schedule](#first-schedule) apply here.
2786
2770
 
2787
2771
  #### Props on this page
2788
2772
 
2789
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
2773
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
2790
2774
 
2791
2775
  | Prop | Type | Default | Description |
2792
2776
  |---|---|---|---|
2793
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
2794
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
2777
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
2778
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
2795
2779
 
2796
2780
  ###### Accessibility
2797
2781
 
2798
2782
  | Prop | Type | Default | Description |
2799
2783
  |---|---|---|---|
2800
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
2784
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
2801
2785
 
2802
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
2786
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
2803
2787
 
2804
2788
  | Prop | Type | Default | Description |
2805
2789
  |---|---|---|---|
2806
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
2807
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
2790
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
2791
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
2808
2792
 
2809
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
2793
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
2810
2794
 
2811
2795
  | Prop | Type | Default | Description |
2812
2796
  |---|---|---|---|
2813
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
2814
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
2797
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
2798
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
2815
2799
 
2816
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
2800
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
2817
2801
 
2818
2802
  | Prop | Type | Default | Description |
2819
2803
  |---|---|---|---|
2820
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
2821
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
2822
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
2823
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
2824
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
2825
- | [`leadIn`](#/subtasks/Subtask-leadIn) | `number` | — | Duration of the lead-in before the main time; none is zero. |
2826
- | [`leadOut`](#/subtasks/Subtask-leadOut) | `number` | — | Duration of the lead-out after the main time; none is zero. |
2804
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
2805
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
2806
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
2807
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
2808
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
2809
+ | [`leadIn`](#subtasks) | `number` | — | Duration of the lead-in before the main time; none is zero. |
2810
+ | [`leadOut`](#subtasks) | `number` | — | Duration of the lead-out after the main time; none is zero. |
2827
2811
 
2828
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
2812
+ From `Task` — the full table stands on [Subtasks](#subtasks).
2829
2813
 
2830
2814
  | Prop | Type | Default | Description |
2831
2815
  |---|---|---|---|
2832
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
2833
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
2834
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
2816
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
2817
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
2818
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
2835
2819
 
2836
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
2820
+ From `ScheduleOptions` — the full table stands on [View](#view).
2837
2821
 
2838
2822
  | Prop | Type | Default | Description |
2839
2823
  |---|---|---|---|
2840
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
2824
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
2841
2825
 
2842
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
2826
+ From `ScheduleView` — the full table stands on [View](#view).
2843
2827
 
2844
2828
  | Prop | Type | Default | Description |
2845
2829
  |---|---|---|---|
2846
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
2830
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
2847
2831
 
2848
2832
  #### Known limits
2849
2833
 
2850
2834
  - No stacked layout on request yet: an overlap is always drawn offset, as the finding it is.
2851
2835
 
2852
- What umriss deliberately does not build, and why: [ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/).
2836
+ What umriss deliberately does not build, and why: [ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md).
2853
2837
 
2854
2838
  ### Dependencies
2855
2839
 
@@ -2859,11 +2843,9 @@ Lines from one subtask's end to the next one's start within a task, with the lag
2859
2843
  import { useSchedule } from "@umriss-ui/schedule";
2860
2844
  ```
2861
2845
 
2862
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/dependencies/
2863
-
2864
2846
  `leaves` and `arrives` say what a dependency connects - the main time, or the outer edge of the lead-out and the lead-in - and so decide whether it is violated. `attach`, `ends` and `route` only change how the line is drawn.
2865
2847
 
2866
- Nothing moves to make a dependency fit. [Ripple](#/ripple) computes the moves that would, for the application to run or not.
2848
+ Nothing moves to make a dependency fit. [Ripple](#ripple) computes the moves that would, for the application to run or not.
2867
2849
 
2868
2850
  #### Examples
2869
2851
 
@@ -3160,7 +3142,7 @@ export default function OneHandoverDrawnItsOwnWay() {
3160
3142
  | `] or t` | Out along the active subtask's dependency; pressed again, on to the subtask it arrives at. |
3161
3143
  | `[ or Shift+T` | Back along the dependency to the subtask it leaves. |
3162
3144
 
3163
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
3145
+ The keys of [First schedule](#first-schedule) apply here.
3164
3146
 
3165
3147
  #### API
3166
3148
 
@@ -3168,21 +3150,21 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
3168
3150
 
3169
3151
  | Prop | Type | Default | Description |
3170
3152
  |---|---|---|---|
3171
- | `data` *required* | `readonly `[`Dependency`](#type-Dependency)`[]` | — | The dependencies, as the caller holds them.<br>Shown in: [Join the stops of a tour](#/dependencies/stops-of-a-tour), [Choose what a dependency connects](#/dependencies/anchors), [Choose where a line touches its bars](#/dependencies/attach) and 28 more |
3153
+ | `data` *required* | `readonly ``Dependency``[]` | — | The dependencies, as the caller holds them.<br>Shown in: [Join the stops of a tour](#dependencies), [Choose what a dependency connects](#dependencies), [Choose where a line touches its bars](#dependencies) and 28 more |
3172
3154
 
3173
3155
  ##### `Dependency`
3174
3156
 
3175
3157
  | Prop | Type | Default | Description |
3176
3158
  |---|---|---|---|
3177
- | `id` *required* | `string` | — | The caller's identity of the dependency.<br>Shown in: [Join the stops of a tour](#/dependencies/stops-of-a-tour), [Choose what a dependency connects](#/dependencies/anchors), [Choose where a line touches its bars](#/dependencies/attach) and 27 more |
3178
- | `from` *required* | `string` | — | The id of the subtask it leaves.<br>Shown in: [Join the stops of a tour](#/dependencies/stops-of-a-tour), [Choose what a dependency connects](#/dependencies/anchors), [Choose where a line touches its bars](#/dependencies/attach) and 27 more |
3179
- | `to` *required* | `string` | — | The id of the subtask it arrives at.<br>Shown in: [Join the stops of a tour](#/dependencies/stops-of-a-tour), [Choose what a dependency connects](#/dependencies/anchors), [Choose where a line touches its bars](#/dependencies/attach) and 27 more |
3180
- | `lag` *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends.<br>Shown in: [Join the stops of a tour](#/dependencies/stops-of-a-tour), [Choose what a dependency connects](#/dependencies/anchors), [Choose where a line touches its bars](#/dependencies/attach) and 27 more |
3181
- | `leaves` | `"main" \| "leadOut"` | `"leadOut"` | Where it leaves: at the end of the main time, or after the lead-out. The predecessor counts as ended once its lead-out is.<br>Shown in: [Choose what a dependency connects](#/dependencies/anchors), [Plan a day in the machine shop (First schedule)](#/schedule/machine-plan), [Replan the day on the line (Scenarios)](#/scenarios/replan-the-day-on-the-line) |
3182
- | `arrives` | `"main" \| "leadIn"` | `"leadIn"` | Where it arrives: at the start of the main time, or before the lead-in. The lag must have run out before the successor's lead-in begins.<br>Shown in: [Choose what a dependency connects](#/dependencies/anchors), [A day of tours (First schedule)](#/schedule/first-schedule), [Plan a day in the machine shop (First schedule)](#/schedule/machine-plan) and 1 more |
3183
- | `route` | [`DependencyRoute`](#type-DependencyRoute)<br>`"curve" \| "straight" \| "orthogonal"` | — | How this one is drawn, where it is not drawn like the rest. It changes the picture and never the finding: whether a dependency is violated follows from `leaves` and `arrives` alone.<br>Shown in: [Per dependency (Routes)](#/routes/per-dependency) |
3184
- | `attach` | [`DependencyAttachment`](#type-DependencyAttachment)<br>`"centre" \| "nearest"` | — | Where on the bars this one's line attaches, where it does not attach like the rest. Also picture only, and not to be confused with the two anchors above: those say what the dependency connects, this says where the line touches.<br>Shown in: [Draw one handover its own way](#/dependencies/one-handover-drawn-its-own-way) |
3185
- | `ends` | [`DependencyEnds`](#type-DependencyEnds)<br>`"dot" \| "none"` | — | Whether this one's ends are marked with a dot, where it is not marked like the rest. Also picture only.<br>Shown in: [Draw one handover its own way](#/dependencies/one-handover-drawn-its-own-way) |
3159
+ | `id` *required* | `string` | — | The caller's identity of the dependency.<br>Shown in: [Join the stops of a tour](#dependencies), [Choose what a dependency connects](#dependencies), [Choose where a line touches its bars](#dependencies) and 27 more |
3160
+ | `from` *required* | `string` | — | The id of the subtask it leaves.<br>Shown in: [Join the stops of a tour](#dependencies), [Choose what a dependency connects](#dependencies), [Choose where a line touches its bars](#dependencies) and 27 more |
3161
+ | `to` *required* | `string` | — | The id of the subtask it arrives at.<br>Shown in: [Join the stops of a tour](#dependencies), [Choose what a dependency connects](#dependencies), [Choose where a line touches its bars](#dependencies) and 27 more |
3162
+ | `lag` *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends.<br>Shown in: [Join the stops of a tour](#dependencies), [Choose what a dependency connects](#dependencies), [Choose where a line touches its bars](#dependencies) and 27 more |
3163
+ | `leaves` | `"main" \| "leadOut"` | `"leadOut"` | Where it leaves: at the end of the main time, or after the lead-out. The predecessor counts as ended once its lead-out is.<br>Shown in: [Choose what a dependency connects](#dependencies), [Plan a day in the machine shop (First schedule)](#first-schedule), [Replan the day on the line (Scenarios)](#replan-the-day-on-the-line) |
3164
+ | `arrives` | `"main" \| "leadIn"` | `"leadIn"` | Where it arrives: at the start of the main time, or before the lead-in. The lag must have run out before the successor's lead-in begins.<br>Shown in: [Choose what a dependency connects](#dependencies), [A day of tours (First schedule)](#first-schedule), [Plan a day in the machine shop (First schedule)](#first-schedule) and 1 more |
3165
+ | `route` | `DependencyRoute`<br>`"curve" \| "straight" \| "orthogonal"` | — | How this one is drawn, where it is not drawn like the rest. It changes the picture and never the finding: whether a dependency is violated follows from `leaves` and `arrives` alone.<br>Shown in: [Per dependency (Routes)](#routes) |
3166
+ | `attach` | `DependencyAttachment`<br>`"centre" \| "nearest"` | — | Where on the bars this one's line attaches, where it does not attach like the rest. Also picture only, and not to be confused with the two anchors above: those say what the dependency connects, this says where the line touches.<br>Shown in: [Draw one handover its own way](#dependencies) |
3167
+ | `ends` | `DependencyEnds`<br>`"dot" \| "none"` | — | Whether this one's ends are marked with a dot, where it is not marked like the rest. Also picture only.<br>Shown in: [Draw one handover its own way](#dependencies) |
3186
3168
 
3187
3169
  ##### Types on this page
3188
3170
 
@@ -3221,9 +3203,9 @@ type DependencyEnds = "dot" | "none";
3221
3203
 
3222
3204
  #### Known limits
3223
3205
 
3224
- - Only finish-to-start within one task; no dependency types and no critical path ([ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/)).
3206
+ - Only finish-to-start within one task; no dependency types and no critical path ([ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md)).
3225
3207
 
3226
- What umriss deliberately does not build, and why: [ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/).
3208
+ What umriss deliberately does not build, and why: [ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md).
3227
3209
 
3228
3210
  ### Routes
3229
3211
 
@@ -3233,8 +3215,6 @@ The shape of a dependency's line: a curve that leaves and arrives forwards, a st
3233
3215
  import { useSchedule } from "@umriss-ui/schedule";
3234
3216
  ```
3235
3217
 
3236
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/routes/
3237
-
3238
3218
  #### Examples
3239
3219
 
3240
3220
  ##### Curve
@@ -3400,85 +3380,85 @@ export default function PerDependency() {
3400
3380
 
3401
3381
  #### Keyboard
3402
3382
 
3403
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
3383
+ The keys of [First schedule](#first-schedule) apply here.
3404
3384
 
3405
3385
  #### Props on this page
3406
3386
 
3407
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
3387
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
3408
3388
 
3409
3389
  | Prop | Type | Default | Description |
3410
3390
  |---|---|---|---|
3411
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
3412
- | [`route`](#/schedule/ScheduleProps-route) | [`DependencyRoute`](#/schedule/type-DependencyRoute)<br>`"curve" \| "straight" \| "orthogonal"` | `"curve"` | How the dependencies are drawn: a `"curve"` that leaves and arrives forwards, a `"straight"` line, or `"orthogonal"` segments. A dependency may say otherwise for itself. |
3413
- | [`attach`](#/schedule/ScheduleProps-attach) | [`DependencyAttachment`](#/schedule/type-DependencyAttachment)<br>`"centre" \| "nearest"` | `"centre"` | Where a dependency's ends sit on their bars: the `"centre"` of both, or the `"nearest"` edge - which is the shortest line between two stops. Within one lane both mean the middle. A dependency may say otherwise for itself. It changes the picture and never a finding: whether a dependency is violated follows from its `leaves` and `arrives` alone. |
3414
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
3391
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
3392
+ | [`route`](#first-schedule) | [`DependencyRoute`](#first-schedule)<br>`"curve" \| "straight" \| "orthogonal"` | `"curve"` | How the dependencies are drawn: a `"curve"` that leaves and arrives forwards, a `"straight"` line, or `"orthogonal"` segments. A dependency may say otherwise for itself. |
3393
+ | [`attach`](#first-schedule) | [`DependencyAttachment`](#first-schedule)<br>`"centre" \| "nearest"` | `"centre"` | Where a dependency's ends sit on their bars: the `"centre"` of both, or the `"nearest"` edge - which is the shortest line between two stops. Within one lane both mean the middle. A dependency may say otherwise for itself. It changes the picture and never a finding: whether a dependency is violated follows from its `leaves` and `arrives` alone. |
3394
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
3415
3395
 
3416
3396
  ###### Accessibility
3417
3397
 
3418
3398
  | Prop | Type | Default | Description |
3419
3399
  |---|---|---|---|
3420
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
3400
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
3421
3401
 
3422
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
3402
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
3423
3403
 
3424
3404
  | Prop | Type | Default | Description |
3425
3405
  |---|---|---|---|
3426
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
3427
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
3406
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
3407
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
3428
3408
 
3429
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
3409
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
3430
3410
 
3431
3411
  | Prop | Type | Default | Description |
3432
3412
  |---|---|---|---|
3433
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
3434
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
3413
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
3414
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
3435
3415
 
3436
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
3416
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
3437
3417
 
3438
3418
  | Prop | Type | Default | Description |
3439
3419
  |---|---|---|---|
3440
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
3441
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
3442
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
3443
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
3444
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
3445
- | [`name`](#/subtasks/Subtask-name) | `string` | — | What the subtask is called, where the schedule names it. |
3420
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
3421
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
3422
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
3423
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
3424
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
3425
+ | [`name`](#subtasks) | `string` | — | What the subtask is called, where the schedule names it. |
3446
3426
 
3447
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
3427
+ From `Task` — the full table stands on [Subtasks](#subtasks).
3448
3428
 
3449
3429
  | Prop | Type | Default | Description |
3450
3430
  |---|---|---|---|
3451
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
3452
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
3453
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
3431
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
3432
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
3433
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
3454
3434
 
3455
- From `DependenciesProps` — the full table stands on [Dependencies](#/dependencies/type-DependenciesProps).
3435
+ From `DependenciesProps` — the full table stands on [Dependencies](#dependencies).
3456
3436
 
3457
3437
  | Prop | Type | Default | Description |
3458
3438
  |---|---|---|---|
3459
- | [`data`](#/dependencies/DependenciesProps-data) *required* | `readonly `[`Dependency`](#/dependencies/type-Dependency)`[]` | — | The dependencies, as the caller holds them. |
3439
+ | [`data`](#dependencies) *required* | `readonly `[`Dependency`](#dependencies)`[]` | — | The dependencies, as the caller holds them. |
3460
3440
 
3461
- From `Dependency` — the full table stands on [Dependencies](#/dependencies/type-Dependency).
3441
+ From `Dependency` — the full table stands on [Dependencies](#dependencies).
3462
3442
 
3463
3443
  | Prop | Type | Default | Description |
3464
3444
  |---|---|---|---|
3465
- | [`id`](#/dependencies/Dependency-id) *required* | `string` | — | The caller's identity of the dependency. |
3466
- | [`from`](#/dependencies/Dependency-from) *required* | `string` | — | The id of the subtask it leaves. |
3467
- | [`to`](#/dependencies/Dependency-to) *required* | `string` | — | The id of the subtask it arrives at. |
3468
- | [`lag`](#/dependencies/Dependency-lag) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
3469
- | [`route`](#/dependencies/Dependency-route) | [`DependencyRoute`](#/dependencies/type-DependencyRoute)<br>`"curve" \| "straight" \| "orthogonal"` | — | How this one is drawn, where it is not drawn like the rest. It changes the picture and never the finding: whether a dependency is violated follows from `leaves` and `arrives` alone. |
3445
+ | [`id`](#dependencies) *required* | `string` | — | The caller's identity of the dependency. |
3446
+ | [`from`](#dependencies) *required* | `string` | — | The id of the subtask it leaves. |
3447
+ | [`to`](#dependencies) *required* | `string` | — | The id of the subtask it arrives at. |
3448
+ | [`lag`](#dependencies) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
3449
+ | [`route`](#dependencies) | [`DependencyRoute`](#dependencies)<br>`"curve" \| "straight" \| "orthogonal"` | — | How this one is drawn, where it is not drawn like the rest. It changes the picture and never the finding: whether a dependency is violated follows from `leaves` and `arrives` alone. |
3470
3450
 
3471
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
3451
+ From `ScheduleOptions` — the full table stands on [View](#view).
3472
3452
 
3473
3453
  | Prop | Type | Default | Description |
3474
3454
  |---|---|---|---|
3475
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
3455
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
3476
3456
 
3477
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
3457
+ From `ScheduleView` — the full table stands on [View](#view).
3478
3458
 
3479
3459
  | Prop | Type | Default | Description |
3480
3460
  |---|---|---|---|
3481
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
3461
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
3482
3462
 
3483
3463
  ## Time
3484
3464
 
@@ -3492,8 +3472,6 @@ A day band that names the days and a time band whose ticks follow the zoom, from
3492
3472
  import { useSchedule } from "@umriss-ui/schedule";
3493
3473
  ```
3494
3474
 
3495
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/time-axis/
3496
-
3497
3475
  The calendar is a list of intervals in which time counts, nothing more; deriving it from opening hours and holidays is the application's business. A dotted line marks each seam, and a drag that would end in removed time stops at the seam where time counts again.
3498
3476
 
3499
3477
  #### Examples
@@ -3735,93 +3713,93 @@ export default function OfficeHours() {
3735
3713
 
3736
3714
  #### Keyboard
3737
3715
 
3738
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
3716
+ The keys of [First schedule](#first-schedule) apply here.
3739
3717
 
3740
3718
  #### Props on this page
3741
3719
 
3742
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
3720
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
3743
3721
 
3744
3722
  | Prop | Type | Default | Description |
3745
3723
  |---|---|---|---|
3746
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
3747
- | [`calendar`](#/schedule/ScheduleProps-calendar) | [`CalendarInput`](#/schedule/type-CalendarInput) | `[]` | A working calendar: the intervals in which time counts. Nights and weekends outside them are cut out of the axis. Without intervals every hour counts, as on the wall clock. |
3748
- | [`intents`](#/schedule/ScheduleProps-intents) | `readonly `[`IntentKind`](#/schedule/type-IntentKind)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). |
3749
- | [`label`](#/schedule/ScheduleProps-label) | `(subtask: `[`Subtask`](#/subtasks/type-Subtask)`) => string` | — | What stands written in a bar: a function from a subtask to a line of text, or nothing for bars without text. The text is cut off with an ellipsis where the bar is too narrow for it and left out where even that would say nothing; a bar that began before the view keeps its text at the view's edge. |
3750
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
3724
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
3725
+ | [`calendar`](#first-schedule) | [`CalendarInput`](#first-schedule) | `[]` | A working calendar: the intervals in which time counts. Nights and weekends outside them are cut out of the axis. Without intervals every hour counts, as on the wall clock. |
3726
+ | [`intents`](#first-schedule) | `readonly `[`IntentKind`](#first-schedule)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). |
3727
+ | [`label`](#first-schedule) | `(subtask: `[`Subtask`](#subtasks)`) => string` | — | What stands written in a bar: a function from a subtask to a line of text, or nothing for bars without text. The text is cut off with an ellipsis where the bar is too narrow for it and left out where even that would say nothing; a bar that began before the view keeps its text at the view's edge. |
3728
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
3751
3729
 
3752
3730
  ###### Events
3753
3731
 
3754
3732
  | Prop | Type | Default | Description |
3755
3733
  |---|---|---|---|
3756
- | [`onIntent`](#/schedule/ScheduleProps-onIntent) | `(intent: `[`Intent`](#/schedule/type-Intent)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it. |
3734
+ | [`onIntent`](#first-schedule) | `(intent: `[`Intent`](#first-schedule)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it. |
3757
3735
 
3758
3736
  ###### Accessibility
3759
3737
 
3760
3738
  | Prop | Type | Default | Description |
3761
3739
  |---|---|---|---|
3762
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
3740
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
3763
3741
 
3764
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
3742
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
3765
3743
 
3766
3744
  | Prop | Type | Default | Description |
3767
3745
  |---|---|---|---|
3768
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
3769
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
3746
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
3747
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
3770
3748
 
3771
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
3749
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
3772
3750
 
3773
3751
  | Prop | Type | Default | Description |
3774
3752
  |---|---|---|---|
3775
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
3776
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
3753
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
3754
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
3777
3755
 
3778
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
3756
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
3779
3757
 
3780
3758
  | Prop | Type | Default | Description |
3781
3759
  |---|---|---|---|
3782
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
3783
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
3784
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
3785
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
3786
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
3787
- | [`leadIn`](#/subtasks/Subtask-leadIn) | `number` | — | Duration of the lead-in before the main time; none is zero. |
3788
- | [`leadOut`](#/subtasks/Subtask-leadOut) | `number` | — | Duration of the lead-out after the main time; none is zero. |
3789
- | [`name`](#/subtasks/Subtask-name) | `string` | — | What the subtask is called, where the schedule names it. |
3760
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
3761
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
3762
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
3763
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
3764
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
3765
+ | [`leadIn`](#subtasks) | `number` | — | Duration of the lead-in before the main time; none is zero. |
3766
+ | [`leadOut`](#subtasks) | `number` | — | Duration of the lead-out after the main time; none is zero. |
3767
+ | [`name`](#subtasks) | `string` | — | What the subtask is called, where the schedule names it. |
3790
3768
 
3791
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
3769
+ From `Task` — the full table stands on [Subtasks](#subtasks).
3792
3770
 
3793
3771
  | Prop | Type | Default | Description |
3794
3772
  |---|---|---|---|
3795
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
3796
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
3797
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
3773
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
3774
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
3775
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
3798
3776
 
3799
- From `DependenciesProps` — the full table stands on [Dependencies](#/dependencies/type-DependenciesProps).
3777
+ From `DependenciesProps` — the full table stands on [Dependencies](#dependencies).
3800
3778
 
3801
3779
  | Prop | Type | Default | Description |
3802
3780
  |---|---|---|---|
3803
- | [`data`](#/dependencies/DependenciesProps-data) *required* | `readonly `[`Dependency`](#/dependencies/type-Dependency)`[]` | — | The dependencies, as the caller holds them. |
3781
+ | [`data`](#dependencies) *required* | `readonly `[`Dependency`](#dependencies)`[]` | — | The dependencies, as the caller holds them. |
3804
3782
 
3805
- From `Dependency` — the full table stands on [Dependencies](#/dependencies/type-Dependency).
3783
+ From `Dependency` — the full table stands on [Dependencies](#dependencies).
3806
3784
 
3807
3785
  | Prop | Type | Default | Description |
3808
3786
  |---|---|---|---|
3809
- | [`id`](#/dependencies/Dependency-id) *required* | `string` | — | The caller's identity of the dependency. |
3810
- | [`from`](#/dependencies/Dependency-from) *required* | `string` | — | The id of the subtask it leaves. |
3811
- | [`to`](#/dependencies/Dependency-to) *required* | `string` | — | The id of the subtask it arrives at. |
3812
- | [`lag`](#/dependencies/Dependency-lag) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
3787
+ | [`id`](#dependencies) *required* | `string` | — | The caller's identity of the dependency. |
3788
+ | [`from`](#dependencies) *required* | `string` | — | The id of the subtask it leaves. |
3789
+ | [`to`](#dependencies) *required* | `string` | — | The id of the subtask it arrives at. |
3790
+ | [`lag`](#dependencies) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
3813
3791
 
3814
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
3792
+ From `ScheduleOptions` — the full table stands on [View](#view).
3815
3793
 
3816
3794
  | Prop | Type | Default | Description |
3817
3795
  |---|---|---|---|
3818
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
3796
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
3819
3797
 
3820
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
3798
+ From `ScheduleView` — the full table stands on [View](#view).
3821
3799
 
3822
3800
  | Prop | Type | Default | Description |
3823
3801
  |---|---|---|---|
3824
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
3802
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
3825
3803
 
3826
3804
  ### Blocked time
3827
3805
 
@@ -3831,9 +3809,7 @@ Leave, maintenance and other time a lane is not available: hatched behind the wo
3831
3809
  import { useSchedule, findings } from "@umriss-ui/schedule";
3832
3810
  ```
3833
3811
 
3834
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/blocked-time/
3835
-
3836
- Blocked time is data beside the work: one list, each interval naming its lane, as a leave table or a maintenance plan holds it. [`findings`](#/api/findings) takes the same list as its third argument.
3812
+ Blocked time is data beside the work: one list, each interval naming its lane, as a leave table or a maintenance plan holds it. [`findings`](#api-index-1) takes the same list as its third argument.
3837
3813
 
3838
3814
  Work the data already put into blocked time is never locked there: it may be moved within it and out of it, and the finding stays until it is.
3839
3815
 
@@ -3980,7 +3956,7 @@ export default function DragAround() {
3980
3956
 
3981
3957
  ##### Check a sprint against the leave calendar
3982
3958
 
3983
- The team's holidays, sick days and training become `BlockedTimes`, and [`findings`](#/api/findings) confirms that no work item runs into one.
3959
+ The team's holidays, sick days and training become `BlockedTimes`, and [`findings`](#api-index-1) confirms that no work item runs into one.
3984
3960
 
3985
3961
  ```tsx
3986
3962
  import { Stack, Text } from "@umriss-ui/core";
@@ -4118,7 +4094,7 @@ export default function TeamLeave() {
4118
4094
 
4119
4095
  #### Keyboard
4120
4096
 
4121
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
4097
+ The keys of [First schedule](#first-schedule) apply here.
4122
4098
 
4123
4099
  #### API
4124
4100
 
@@ -4126,17 +4102,17 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
4126
4102
 
4127
4103
  | Prop | Type | Default | Description |
4128
4104
  |---|---|---|---|
4129
- | `data` *required* | `readonly `[`BlockedTime`](#type-BlockedTime)`[]` | — | The blocked time of the lanes - leave, maintenance, unavailability -, as the caller holds it: one list, each interval naming its lane.<br>Shown in: [Block out leave and maintenance](#/blocked-time/leave), [Plan work around someone's leave](#/blocked-time/drag-around), [Check a sprint against the leave calendar](#/blocked-time/team-leave) and 5 more |
4105
+ | `data` *required* | `readonly ``BlockedTime``[]` | — | The blocked time of the lanes - leave, maintenance, unavailability -, as the caller holds it: one list, each interval naming its lane.<br>Shown in: [Block out leave and maintenance](#blocked-time), [Plan work around someone's leave](#blocked-time), [Check a sprint against the leave calendar](#blocked-time) and 5 more |
4130
4106
 
4131
4107
  ##### `BlockedTime`
4132
4108
 
4133
4109
  | Prop | Type | Default | Description |
4134
4110
  |---|---|---|---|
4135
- | `id` *required* | `string` | — | The caller's identity of the interval - what a finding names.<br>Shown in: [Block out leave and maintenance](#/blocked-time/leave), [Plan work around someone's leave](#/blocked-time/drag-around), [Check a sprint against the leave calendar](#/blocked-time/team-leave) and 5 more |
4136
- | `lane` *required* | `string` | — | The id of the lane it blocks.<br>Shown in: [Block out leave and maintenance](#/blocked-time/leave), [Plan work around someone's leave](#/blocked-time/drag-around), [Check a sprint against the leave calendar](#/blocked-time/team-leave) and 5 more |
4137
- | `from` *required* | `number` | — | Where it begins.<br>Shown in: [Block out leave and maintenance](#/blocked-time/leave), [Plan work around someone's leave](#/blocked-time/drag-around), [Check a sprint against the leave calendar](#/blocked-time/team-leave) and 5 more |
4138
- | `to` *required* | `number` | — | Where it ends.<br>Shown in: [Block out leave and maintenance](#/blocked-time/leave), [Plan work around someone's leave](#/blocked-time/drag-around), [Check a sprint against the leave calendar](#/blocked-time/team-leave) and 5 more |
4139
- | `label` | `string` | — | Why the lane is blocked - "Leave", "Maintenance" -, where the schedule names it.<br>Shown in: [Block out leave and maintenance](#/blocked-time/leave), [Plan work around someone's leave](#/blocked-time/drag-around), [Check a sprint against the leave calendar](#/blocked-time/team-leave) and 5 more |
4111
+ | `id` *required* | `string` | — | The caller's identity of the interval - what a finding names.<br>Shown in: [Block out leave and maintenance](#blocked-time), [Plan work around someone's leave](#blocked-time), [Check a sprint against the leave calendar](#blocked-time) and 5 more |
4112
+ | `lane` *required* | `string` | — | The id of the lane it blocks.<br>Shown in: [Block out leave and maintenance](#blocked-time), [Plan work around someone's leave](#blocked-time), [Check a sprint against the leave calendar](#blocked-time) and 5 more |
4113
+ | `from` *required* | `number` | — | Where it begins.<br>Shown in: [Block out leave and maintenance](#blocked-time), [Plan work around someone's leave](#blocked-time), [Check a sprint against the leave calendar](#blocked-time) and 5 more |
4114
+ | `to` *required* | `number` | — | Where it ends.<br>Shown in: [Block out leave and maintenance](#blocked-time), [Plan work around someone's leave](#blocked-time), [Check a sprint against the leave calendar](#blocked-time) and 5 more |
4115
+ | `label` | `string` | — | Why the lane is blocked - "Leave", "Maintenance" -, where the schedule names it.<br>Shown in: [Block out leave and maintenance](#blocked-time), [Plan work around someone's leave](#blocked-time), [Check a sprint against the leave calendar](#blocked-time) and 5 more |
4140
4116
 
4141
4117
  ### Milestones
4142
4118
 
@@ -4146,8 +4122,6 @@ A point in time on a lane - a handover, a release, a deadline - drawn as a diamo
4146
4122
  import { useSchedule } from "@umriss-ui/schedule";
4147
4123
  ```
4148
4124
 
4149
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/milestones/
4150
-
4151
4125
  A milestone is data beside the work: one list, each point naming its lane and the instant it stands at (`{ id, lane, at, label? }`). It has no duration, no task and no tone; it is not dragged and reports no intent, and work beside it is never a finding.
4152
4126
 
4153
4127
  The keys walk to it in time order among the subtasks of its lane, the tooltip names it by its label and time, and the live region reads its lane, label and time. It is named by its label, or its id without one.
@@ -4265,7 +4239,7 @@ export default function SayWhatAMilestoneIs() {
4265
4239
 
4266
4240
  #### Keyboard
4267
4241
 
4268
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
4242
+ The keys of [First schedule](#first-schedule) apply here.
4269
4243
 
4270
4244
  #### API
4271
4245
 
@@ -4273,16 +4247,16 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
4273
4247
 
4274
4248
  | Prop | Type | Default | Description |
4275
4249
  |---|---|---|---|
4276
- | `data` *required* | `readonly `[`Milestone`](#type-Milestone)`[]` | — | The milestones of the lanes, as the caller holds them: one list, each naming its lane and the instant it stands at.<br>Shown in: [Mark a handover and a release](#/milestones/handovers-and-releases), [Say what a milestone is in your own tooltip](#/milestones/say-what-a-milestone-is) |
4250
+ | `data` *required* | `readonly ``Milestone``[]` | — | The milestones of the lanes, as the caller holds them: one list, each naming its lane and the instant it stands at.<br>Shown in: [Mark a handover and a release](#milestones), [Say what a milestone is in your own tooltip](#milestones) |
4277
4251
 
4278
4252
  ##### `Milestone`
4279
4253
 
4280
4254
  | Prop | Type | Default | Description |
4281
4255
  |---|---|---|---|
4282
- | `id` *required* | `string` | — | The caller's identity of the milestone.<br>Shown in: [Mark a handover and a release](#/milestones/handovers-and-releases), [Say what a milestone is in your own tooltip](#/milestones/say-what-a-milestone-is) |
4283
- | `lane` *required* | `string` | — | The id of the lane it stands on.<br>Shown in: [Mark a handover and a release](#/milestones/handovers-and-releases), [Say what a milestone is in your own tooltip](#/milestones/say-what-a-milestone-is) |
4284
- | `at` *required* | `number` | — | The instant it stands at.<br>Shown in: [Mark a handover and a release](#/milestones/handovers-and-releases), [Say what a milestone is in your own tooltip](#/milestones/say-what-a-milestone-is) |
4285
- | `label` | `string` | — | What it is called, where the schedule names it; without it, its id.<br>Shown in: [Mark a handover and a release](#/milestones/handovers-and-releases), [Say what a milestone is in your own tooltip](#/milestones/say-what-a-milestone-is) |
4256
+ | `id` *required* | `string` | — | The caller's identity of the milestone.<br>Shown in: [Mark a handover and a release](#milestones), [Say what a milestone is in your own tooltip](#milestones) |
4257
+ | `lane` *required* | `string` | — | The id of the lane it stands on.<br>Shown in: [Mark a handover and a release](#milestones), [Say what a milestone is in your own tooltip](#milestones) |
4258
+ | `at` *required* | `number` | — | The instant it stands at.<br>Shown in: [Mark a handover and a release](#milestones), [Say what a milestone is in your own tooltip](#milestones) |
4259
+ | `label` | `string` | — | What it is called, where the schedule names it; without it, its id.<br>Shown in: [Mark a handover and a release](#milestones), [Say what a milestone is in your own tooltip](#milestones) |
4286
4260
 
4287
4261
  ### Now line
4288
4262
 
@@ -4292,8 +4266,6 @@ A line across the lanes at the present moment, so that whatever should have happ
4292
4266
  import { useSchedule } from "@umriss-ui/schedule";
4293
4267
  ```
4294
4268
 
4295
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/now-line/
4296
-
4297
4269
  #### Examples
4298
4270
 
4299
4271
  ##### Mark the present
@@ -4502,68 +4474,68 @@ export default function FollowTheClock() {
4502
4474
 
4503
4475
  #### Keyboard
4504
4476
 
4505
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
4477
+ The keys of [First schedule](#first-schedule) apply here.
4506
4478
 
4507
4479
  #### Props on this page
4508
4480
 
4509
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
4481
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
4510
4482
 
4511
4483
  | Prop | Type | Default | Description |
4512
4484
  |---|---|---|---|
4513
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
4514
- | [`now`](#/schedule/ScheduleProps-now) | `boolean \| number` | `false` | A line marking the present across the lanes: `true` follows the clock by the minute, an instant fixes it there. |
4515
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
4485
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
4486
+ | [`now`](#first-schedule) | `boolean \| number` | `false` | A line marking the present across the lanes: `true` follows the clock by the minute, an instant fixes it there. |
4487
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
4516
4488
 
4517
4489
  ###### Accessibility
4518
4490
 
4519
4491
  | Prop | Type | Default | Description |
4520
4492
  |---|---|---|---|
4521
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
4493
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
4522
4494
 
4523
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
4495
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
4524
4496
 
4525
4497
  | Prop | Type | Default | Description |
4526
4498
  |---|---|---|---|
4527
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
4528
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
4499
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
4500
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
4529
4501
 
4530
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
4502
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
4531
4503
 
4532
4504
  | Prop | Type | Default | Description |
4533
4505
  |---|---|---|---|
4534
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
4535
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
4506
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
4507
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
4536
4508
 
4537
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
4509
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
4538
4510
 
4539
4511
  | Prop | Type | Default | Description |
4540
4512
  |---|---|---|---|
4541
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
4542
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
4543
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
4544
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
4545
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
4546
- | [`leadIn`](#/subtasks/Subtask-leadIn) | `number` | — | Duration of the lead-in before the main time; none is zero. |
4513
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
4514
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
4515
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
4516
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
4517
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
4518
+ | [`leadIn`](#subtasks) | `number` | — | Duration of the lead-in before the main time; none is zero. |
4547
4519
 
4548
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
4520
+ From `Task` — the full table stands on [Subtasks](#subtasks).
4549
4521
 
4550
4522
  | Prop | Type | Default | Description |
4551
4523
  |---|---|---|---|
4552
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
4553
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
4554
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
4524
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
4525
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
4526
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
4555
4527
 
4556
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
4528
+ From `ScheduleOptions` — the full table stands on [View](#view).
4557
4529
 
4558
4530
  | Prop | Type | Default | Description |
4559
4531
  |---|---|---|---|
4560
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
4532
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
4561
4533
 
4562
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
4534
+ From `ScheduleView` — the full table stands on [View](#view).
4563
4535
 
4564
4536
  | Prop | Type | Default | Description |
4565
4537
  |---|---|---|---|
4566
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
4538
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
4567
4539
 
4568
4540
  ### Pan and zoom
4569
4541
 
@@ -4573,11 +4545,9 @@ Moving through a plan with the gestures of any scrolling surface: drag, wheel, C
4573
4545
  import { useSchedule } from "@umriss-ui/schedule";
4574
4546
  ```
4575
4547
 
4576
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/pan-and-zoom/
4577
-
4578
4548
  Dragging the background pans through time and through the lanes. The wheel scrolls the lanes and hands the scroll back to the page at their end; Shift with the wheel pans through time; Ctrl or ⌘ with the wheel, or a pinch, zooms around the pointer.
4579
4549
 
4580
- No intent is raised: pan and zoom change the visible span and nothing else ([ADR-0001](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0001-affine-scale-contract.md)). The span is part of the schedule's view, which `onViewChange` reports at most once per frame - see [View](#/view) and [Linked schedules](#/linked-schedules).
4550
+ No intent is raised: pan and zoom change the visible span and nothing else ([ADR-0001](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0001-affine-scale-contract.md)). The span is part of the schedule's view, which `onViewChange` reports at most once per frame - see [View](#view) and [Linked schedules](#linked-schedules).
4581
4551
 
4582
4552
  #### Examples
4583
4553
 
@@ -4637,69 +4607,69 @@ export default function PanAndZoom() {
4637
4607
  | `Home / End` | The first or last subtask on the lane; the view pans to bring it in. |
4638
4608
  | `PageUp / PageDown` | Along the lane by about a tenth of the visible span, the view following. |
4639
4609
 
4640
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
4610
+ The keys of [First schedule](#first-schedule) apply here.
4641
4611
 
4642
4612
  #### Props on this page
4643
4613
 
4644
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
4614
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
4645
4615
 
4646
4616
  | Prop | Type | Default | Description |
4647
4617
  |---|---|---|---|
4648
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
4649
- | [`zoomLimits`](#/schedule/ScheduleProps-zoomLimits) | [`ZoomLimits`](#/schedule/type-ZoomLimits) | one hour to 28 days | The narrowest and widest time span zoom may reach, in milliseconds. |
4650
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
4618
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
4619
+ | [`zoomLimits`](#first-schedule) | [`ZoomLimits`](#first-schedule) | one hour to 28 days | The narrowest and widest time span zoom may reach, in milliseconds. |
4620
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
4651
4621
 
4652
4622
  ###### Accessibility
4653
4623
 
4654
4624
  | Prop | Type | Default | Description |
4655
4625
  |---|---|---|---|
4656
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
4626
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
4657
4627
 
4658
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
4628
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
4659
4629
 
4660
4630
  | Prop | Type | Default | Description |
4661
4631
  |---|---|---|---|
4662
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
4663
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
4632
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
4633
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
4664
4634
 
4665
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
4635
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
4666
4636
 
4667
4637
  | Prop | Type | Default | Description |
4668
4638
  |---|---|---|---|
4669
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
4670
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
4639
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
4640
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
4671
4641
 
4672
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
4642
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
4673
4643
 
4674
4644
  | Prop | Type | Default | Description |
4675
4645
  |---|---|---|---|
4676
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
4677
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
4678
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
4679
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
4680
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
4681
- | [`leadIn`](#/subtasks/Subtask-leadIn) | `number` | — | Duration of the lead-in before the main time; none is zero. |
4682
- | [`leadOut`](#/subtasks/Subtask-leadOut) | `number` | — | Duration of the lead-out after the main time; none is zero. |
4646
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
4647
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
4648
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
4649
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
4650
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
4651
+ | [`leadIn`](#subtasks) | `number` | — | Duration of the lead-in before the main time; none is zero. |
4652
+ | [`leadOut`](#subtasks) | `number` | — | Duration of the lead-out after the main time; none is zero. |
4683
4653
 
4684
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
4654
+ From `Task` — the full table stands on [Subtasks](#subtasks).
4685
4655
 
4686
4656
  | Prop | Type | Default | Description |
4687
4657
  |---|---|---|---|
4688
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
4689
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
4690
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
4658
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
4659
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
4660
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
4691
4661
 
4692
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
4662
+ From `ScheduleOptions` — the full table stands on [View](#view).
4693
4663
 
4694
4664
  | Prop | Type | Default | Description |
4695
4665
  |---|---|---|---|
4696
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
4666
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
4697
4667
 
4698
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
4668
+ From `ScheduleView` — the full table stands on [View](#view).
4699
4669
 
4700
4670
  | Prop | Type | Default | Description |
4701
4671
  |---|---|---|---|
4702
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
4672
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
4703
4673
 
4704
4674
  ## Reading
4705
4675
 
@@ -4713,8 +4683,6 @@ A click on a bar selects its whole task on every lane, so a planner sees every p
4713
4683
  import { useSchedule } from "@umriss-ui/schedule";
4714
4684
  ```
4715
4685
 
4716
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/selection/
4717
-
4718
4686
  The schedule keeps the selection itself unless you pass `selectedTask`; then your state holds it and every change is reported. The report also names the subtask that was clicked, the one the editing grips belong to.
4719
4687
 
4720
4688
  Selection and hover are two different marks: the selected task is outlined, the one under the pointer washed, and both show at once.
@@ -4856,91 +4824,91 @@ export default function ControlTheSelection() {
4856
4824
  | `Enter or Space` | Selects the active subtask's task, as a click does. |
4857
4825
  | `Escape` | Lets go of the active subtask. |
4858
4826
 
4859
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
4827
+ The keys of [First schedule](#first-schedule) apply here.
4860
4828
 
4861
4829
  #### Props on this page
4862
4830
 
4863
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
4831
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
4864
4832
 
4865
4833
  | Prop | Type | Default | Description |
4866
4834
  |---|---|---|---|
4867
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
4868
- | [`selectedTask`](#/schedule/ScheduleProps-selectedTask) | `string \| null` | — | The selected task, controlled. Leave it out and the schedule keeps the selection itself. |
4869
- | [`onSelectedTaskChange`](#/schedule/ScheduleProps-onSelectedTaskChange) | `(task: string \| null, subtask: string \| null) => void` | — | Called when a click selects a task or clears the selection, with the subtask that was clicked - null where the click was on a dependency or on nothing. It is called again when another subtask of the same task is clicked. |
4870
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
4835
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
4836
+ | [`selectedTask`](#first-schedule) | `string \| null` | — | The selected task, controlled. Leave it out and the schedule keeps the selection itself. |
4837
+ | [`onSelectedTaskChange`](#first-schedule) | `(task: string \| null, subtask: string \| null) => void` | — | Called when a click selects a task or clears the selection, with the subtask that was clicked - null where the click was on a dependency or on nothing. It is called again when another subtask of the same task is clicked. |
4838
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
4871
4839
 
4872
4840
  ###### Accessibility
4873
4841
 
4874
4842
  | Prop | Type | Default | Description |
4875
4843
  |---|---|---|---|
4876
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
4844
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
4877
4845
 
4878
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
4846
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
4879
4847
 
4880
4848
  | Prop | Type | Default | Description |
4881
4849
  |---|---|---|---|
4882
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
4883
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
4850
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
4851
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
4884
4852
 
4885
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
4853
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
4886
4854
 
4887
4855
  | Prop | Type | Default | Description |
4888
4856
  |---|---|---|---|
4889
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
4890
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
4857
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
4858
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
4891
4859
 
4892
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
4860
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
4893
4861
 
4894
4862
  | Prop | Type | Default | Description |
4895
4863
  |---|---|---|---|
4896
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
4897
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
4898
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
4899
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
4900
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
4901
- | [`leadIn`](#/subtasks/Subtask-leadIn) | `number` | — | Duration of the lead-in before the main time; none is zero. |
4902
- | [`leadOut`](#/subtasks/Subtask-leadOut) | `number` | — | Duration of the lead-out after the main time; none is zero. |
4864
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
4865
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
4866
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
4867
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
4868
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
4869
+ | [`leadIn`](#subtasks) | `number` | — | Duration of the lead-in before the main time; none is zero. |
4870
+ | [`leadOut`](#subtasks) | `number` | — | Duration of the lead-out after the main time; none is zero. |
4903
4871
 
4904
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
4872
+ From `Task` — the full table stands on [Subtasks](#subtasks).
4905
4873
 
4906
4874
  | Prop | Type | Default | Description |
4907
4875
  |---|---|---|---|
4908
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
4909
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
4910
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
4876
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
4877
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
4878
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
4911
4879
 
4912
- From `DependenciesProps` — the full table stands on [Dependencies](#/dependencies/type-DependenciesProps).
4880
+ From `DependenciesProps` — the full table stands on [Dependencies](#dependencies).
4913
4881
 
4914
4882
  | Prop | Type | Default | Description |
4915
4883
  |---|---|---|---|
4916
- | [`data`](#/dependencies/DependenciesProps-data) *required* | `readonly `[`Dependency`](#/dependencies/type-Dependency)`[]` | — | The dependencies, as the caller holds them. |
4884
+ | [`data`](#dependencies) *required* | `readonly `[`Dependency`](#dependencies)`[]` | — | The dependencies, as the caller holds them. |
4917
4885
 
4918
- From `Dependency` — the full table stands on [Dependencies](#/dependencies/type-Dependency).
4886
+ From `Dependency` — the full table stands on [Dependencies](#dependencies).
4919
4887
 
4920
4888
  | Prop | Type | Default | Description |
4921
4889
  |---|---|---|---|
4922
- | [`id`](#/dependencies/Dependency-id) *required* | `string` | — | The caller's identity of the dependency. |
4923
- | [`from`](#/dependencies/Dependency-from) *required* | `string` | — | The id of the subtask it leaves. |
4924
- | [`to`](#/dependencies/Dependency-to) *required* | `string` | — | The id of the subtask it arrives at. |
4925
- | [`lag`](#/dependencies/Dependency-lag) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
4890
+ | [`id`](#dependencies) *required* | `string` | — | The caller's identity of the dependency. |
4891
+ | [`from`](#dependencies) *required* | `string` | — | The id of the subtask it leaves. |
4892
+ | [`to`](#dependencies) *required* | `string` | — | The id of the subtask it arrives at. |
4893
+ | [`lag`](#dependencies) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
4926
4894
 
4927
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
4895
+ From `ScheduleOptions` — the full table stands on [View](#view).
4928
4896
 
4929
4897
  | Prop | Type | Default | Description |
4930
4898
  |---|---|---|---|
4931
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
4899
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
4932
4900
 
4933
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
4901
+ From `ScheduleView` — the full table stands on [View](#view).
4934
4902
 
4935
4903
  | Prop | Type | Default | Description |
4936
4904
  |---|---|---|---|
4937
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
4905
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
4938
4906
 
4939
4907
  #### Known limits
4940
4908
 
4941
4909
  - One task at a time: there is no multiple selection.
4942
4910
 
4943
- What umriss deliberately does not build, and why: [ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/).
4911
+ What umriss deliberately does not build, and why: [ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md).
4944
4912
 
4945
4913
  ### Interactions
4946
4914
 
@@ -4950,8 +4918,6 @@ Reports what the pointer does on the plan - hover, click, right-click - with wha
4950
4918
  import { useSchedule } from "@umriss-ui/schedule";
4951
4919
  ```
4952
4920
 
4953
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/interactions/
4954
-
4955
4921
  A hit names a subtask together with the part of it (lead-in, main time, lead-out), a dependency, a lane, or nothing.
4956
4922
 
4957
4923
  While `onInteraction` is set, a right-click opens no browser menu: your application is expected to answer it.
@@ -5146,7 +5112,7 @@ export default function OpenAContextMenu() {
5146
5112
 
5147
5113
  #### Keyboard
5148
5114
 
5149
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
5115
+ The keys of [First schedule](#first-schedule) apply here.
5150
5116
 
5151
5117
  #### API
5152
5118
 
@@ -5154,12 +5120,12 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
5154
5120
 
5155
5121
  | Prop | Type | Default | Description |
5156
5122
  |---|---|---|---|
5157
- | `type` *required* | `"click" \| "contextmenu" \| "hover"` | — | `"hover"` is reported when the target under the pointer changes, not on every movement.<br>Shown in: [Report what the pointer is on](#/interactions/report-the-pointer), [Open a context menu](#/interactions/open-a-context-menu), [Show a detail panel instead (Tooltip)](#/tooltip/detail-panel-instead) and 1 more |
5158
- | `hit` *required* | [`ScheduleHit`](#type-ScheduleHit) | — | What the pointer is on.<br>Shown in: [Report what the pointer is on](#/interactions/report-the-pointer), [Open a context menu](#/interactions/open-a-context-menu), [Show a detail panel instead (Tooltip)](#/tooltip/detail-panel-instead) and 2 more |
5159
- | `clientX` *required* | `number` | — | The pointer's horizontal client coordinate - where a `ContextMenu` opens.<br>Shown in: [Open a context menu](#/interactions/open-a-context-menu), [Place a mark of your own (The handle)](#/handle/place-a-mark), [Replan the day on the line (Scenarios)](#/scenarios/replan-the-day-on-the-line) |
5160
- | `clientY` *required* | `number` | — | The pointer's vertical client coordinate.<br>Shown in: [Open a context menu](#/interactions/open-a-context-menu), [Place a mark of your own (The handle)](#/handle/place-a-mark), [Replan the day on the line (Scenarios)](#/scenarios/replan-the-day-on-the-line) |
5161
- | `time` *required* | `number` | — | The wall-clock instant under the pointer.<br>Shown in: [Report what the pointer is on](#/interactions/report-the-pointer) |
5162
- | `lane` *required* | `string \| null` | — | The lane under the pointer, or null below the last one.<br>Shown in: [Report what the pointer is on](#/interactions/report-the-pointer) |
5123
+ | `type` *required* | `"click" \| "contextmenu" \| "hover"` | — | `"hover"` is reported when the target under the pointer changes, not on every movement.<br>Shown in: [Report what the pointer is on](#interactions), [Open a context menu](#interactions), [Show a detail panel instead (Tooltip)](#tooltip) and 1 more |
5124
+ | `hit` *required* | `ScheduleHit` | — | What the pointer is on.<br>Shown in: [Report what the pointer is on](#interactions), [Open a context menu](#interactions), [Show a detail panel instead (Tooltip)](#tooltip) and 2 more |
5125
+ | `clientX` *required* | `number` | — | The pointer's horizontal client coordinate - where a `ContextMenu` opens.<br>Shown in: [Open a context menu](#interactions), [Place a mark of your own (The handle)](#the-handle), [Replan the day on the line (Scenarios)](#replan-the-day-on-the-line) |
5126
+ | `clientY` *required* | `number` | — | The pointer's vertical client coordinate.<br>Shown in: [Open a context menu](#interactions), [Place a mark of your own (The handle)](#the-handle), [Replan the day on the line (Scenarios)](#replan-the-day-on-the-line) |
5127
+ | `time` *required* | `number` | — | The wall-clock instant under the pointer.<br>Shown in: [Report what the pointer is on](#interactions) |
5128
+ | `lane` *required* | `string \| null` | — | The lane under the pointer, or null below the last one.<br>Shown in: [Report what the pointer is on](#interactions) |
5163
5129
 
5164
5130
  ##### Types on this page
5165
5131
 
@@ -5184,8 +5150,6 @@ Names what the pointer rests on - a subtask with its times and findings, a depen
5184
5150
  import { useSchedule } from "@umriss-ui/schedule";
5185
5151
  ```
5186
5152
 
5187
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/tooltip/
5188
-
5189
5153
  Its words come from the wording of @umriss-ui/core and its numbers from its formats, so a provider switches it with everything else. It steps aside while a drag is in flight and is placed where it has room.
5190
5154
 
5191
5155
  The keyboard's active subtask shows the same tooltip as the pointer.
@@ -5538,7 +5502,7 @@ export default function SayWhatABarCoversAndALineJoins() {
5538
5502
 
5539
5503
  #### Keyboard
5540
5504
 
5541
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
5505
+ The keys of [First schedule](#first-schedule) apply here.
5542
5506
 
5543
5507
  #### API
5544
5508
 
@@ -5546,17 +5510,17 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
5546
5510
 
5547
5511
  | Prop | Type | Default | Description |
5548
5512
  |---|---|---|---|
5549
- | `kind` *required* | `"subtask" \| "milestone" \| "dependency"` | — | A subtask is hovered. A milestone is hovered. A dependency is hovered.<br>Shown in: [Write your own tooltip content](#/tooltip/own-tooltip), [Say what a bar covers and a line joins](#/tooltip/say-what-a-bar-covers-and-a-line-joins), [Say what a milestone is in your own tooltip (Milestones)](#/milestones/say-what-a-milestone-is) |
5550
- | `subtask` | [`Subtask`](#/subtasks/type-Subtask) | — | The hovered subtask.<br>Shown in: [Say what a bar covers and a line joins](#/tooltip/say-what-a-bar-covers-and-a-line-joins), [Say what a milestone is in your own tooltip (Milestones)](#/milestones/say-what-a-milestone-is) |
5551
- | `task` | [`Task`](#/subtasks/type-Task)` \| undefined` | — | Its task, where the tasks name it.<br>Shown in: [Write your own tooltip content](#/tooltip/own-tooltip) |
5552
- | `overlapping` | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks it overlaps with on its lane.<br>Shown in: [Write your own tooltip content](#/tooltip/own-tooltip) |
5553
- | `violatedDependencies` | `readonly `[`ViolatedDependency`](#/findings/type-ViolatedDependency)`[]` | — | The violated dependencies leaving or reaching it.<br>Shown in: [Write your own tooltip content](#/tooltip/own-tooltip) |
5554
- | `blocked` | `readonly `[`BlockedTime`](#/blocked-time/type-BlockedTime)`[]` | — | The blocked time it covers on its lane.<br>Shown in: [Say what a bar covers and a line joins](#/tooltip/say-what-a-bar-covers-and-a-line-joins) |
5555
- | `milestone` | [`Milestone`](#/milestones/type-Milestone) | — | The hovered milestone.<br>Shown in: [Say what a milestone is in your own tooltip (Milestones)](#/milestones/say-what-a-milestone-is) |
5556
- | `dependency` | [`Dependency`](#/dependencies/type-Dependency) | — | The hovered dependency.<br>Shown in: [Say what a bar covers and a line joins](#/tooltip/say-what-a-bar-covers-and-a-line-joins) |
5557
- | `from` | [`Subtask`](#/subtasks/type-Subtask)` \| undefined` | — | The subtask it leaves.<br>Shown in: [Say what a bar covers and a line joins](#/tooltip/say-what-a-bar-covers-and-a-line-joins) |
5558
- | `to` | [`Subtask`](#/subtasks/type-Subtask)` \| undefined` | — | The subtask it reaches.<br>Shown in: [Say what a bar covers and a line joins](#/tooltip/say-what-a-bar-covers-and-a-line-joins) |
5559
- | `violated` | [`ViolatedDependency`](#/findings/type-ViolatedDependency)` \| undefined` | — | Its finding, where it is violated.<br>Shown in: [Write your own tooltip content](#/tooltip/own-tooltip) |
5513
+ | `kind` *required* | `"subtask" \| "milestone" \| "dependency"` | — | A subtask is hovered. A milestone is hovered. A dependency is hovered.<br>Shown in: [Write your own tooltip content](#tooltip), [Say what a bar covers and a line joins](#tooltip), [Say what a milestone is in your own tooltip (Milestones)](#milestones) |
5514
+ | `subtask` | [`Subtask`](#subtasks) | — | The hovered subtask.<br>Shown in: [Say what a bar covers and a line joins](#tooltip), [Say what a milestone is in your own tooltip (Milestones)](#milestones) |
5515
+ | `task` | [`Task`](#subtasks)` \| undefined` | — | Its task, where the tasks name it.<br>Shown in: [Write your own tooltip content](#tooltip) |
5516
+ | `overlapping` | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks it overlaps with on its lane.<br>Shown in: [Write your own tooltip content](#tooltip) |
5517
+ | `violatedDependencies` | `readonly `[`ViolatedDependency`](#findings-as-data)`[]` | — | The violated dependencies leaving or reaching it.<br>Shown in: [Write your own tooltip content](#tooltip) |
5518
+ | `blocked` | `readonly `[`BlockedTime`](#blocked-time)`[]` | — | The blocked time it covers on its lane.<br>Shown in: [Say what a bar covers and a line joins](#tooltip) |
5519
+ | `milestone` | [`Milestone`](#milestones) | — | The hovered milestone.<br>Shown in: [Say what a milestone is in your own tooltip (Milestones)](#milestones) |
5520
+ | `dependency` | [`Dependency`](#dependencies) | — | The hovered dependency.<br>Shown in: [Say what a bar covers and a line joins](#tooltip) |
5521
+ | `from` | [`Subtask`](#subtasks)` \| undefined` | — | The subtask it leaves.<br>Shown in: [Say what a bar covers and a line joins](#tooltip) |
5522
+ | `to` | [`Subtask`](#subtasks)` \| undefined` | — | The subtask it reaches.<br>Shown in: [Say what a bar covers and a line joins](#tooltip) |
5523
+ | `violated` | [`ViolatedDependency`](#findings-as-data)` \| undefined` | — | Its finding, where it is violated.<br>Shown in: [Write your own tooltip content](#tooltip) |
5560
5524
 
5561
5525
  ### View
5562
5526
 
@@ -5566,9 +5530,7 @@ How the planner is looking at the plan - the span in view and the folded lane gr
5566
5530
  import { useSchedule } from "@umriss-ui/schedule";
5567
5531
  ```
5568
5532
 
5569
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/view/
5570
-
5571
- The schedule keeps its view itself and puts it nowhere, not in the address and not in any storage. `view` on what [`useSchedule`](#/api/useSchedule) hands back holds it, and `onViewChange` reports every change the planner makes to it - a pan or zoom at most once per frame; keep it where the application keeps things and go back to it with `setView`.
5533
+ The schedule keeps its view itself and puts it nowhere, not in the address and not in any storage. `view` on what [`useSchedule`](#api-index-1) hands back holds it, and `onViewChange` reports every change the planner makes to it - a pan or zoom at most once per frame; keep it where the application keeps things and go back to it with `setView`.
5572
5534
 
5573
5535
  `initialView` is the start, read once: a different value on a later render is ignored. `setView(view)` goes to a whole view at once, and what it leaves out goes back to its default; the same view again changes nothing, and `onViewChange` does not hear it. Without a span the schedule shows the extent of its subtasks, within `zoomLimits`. A group no `LaneGroup` declares falls out.
5574
5536
 
@@ -5680,7 +5642,7 @@ export default function KeepAndRestore() {
5680
5642
 
5681
5643
  #### Keyboard
5682
5644
 
5683
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
5645
+ The keys of [First schedule](#first-schedule) apply here.
5684
5646
 
5685
5647
  #### API
5686
5648
 
@@ -5688,20 +5650,20 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
5688
5650
 
5689
5651
  | Prop | Type | Default | Description |
5690
5652
  |---|---|---|---|
5691
- | `initialView` | [`ScheduleView`](#type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision.<br>Shown in: [Keep and restore a view](#/view/keep-and-restore), [The smallest schedule (Installation)](#/installation/smallest-schedule), [A day of tours (First schedule)](#/schedule/first-schedule) and 78 more |
5653
+ | `initialView` | `ScheduleView` | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision.<br>Shown in: [Keep and restore a view](#view), [The smallest schedule (Installation)](#installation), [A day of tours (First schedule)](#first-schedule) and 78 more |
5692
5654
 
5693
5655
  ###### Events
5694
5656
 
5695
5657
  | Prop | Type | Default | Description |
5696
5658
  |---|---|---|---|
5697
- | `onViewChange` | `(view: `[`ScheduleView`](#type-ScheduleView)`) => void` | — | Every change the planner makes, once, always the whole view - the one to keep, or to hand another schedule's `setView`. A pan or zoom is reported at most once per frame. Not called for the view the schedule starts with, nor for one `setView` applies.<br>Shown in: [Keep two schedules in step (Linked schedules)](#/linked-schedules/in-step), [Read a rota beside the incidents (Linked schedules)](#/linked-schedules/rota-beside-incidents) |
5659
+ | `onViewChange` | `(view: ``ScheduleView``) => void` | — | Every change the planner makes, once, always the whole view - the one to keep, or to hand another schedule's `setView`. A pan or zoom is reported at most once per frame. Not called for the view the schedule starts with, nor for one `setView` applies.<br>Shown in: [Keep two schedules in step (Linked schedules)](#linked-schedules), [Read a rota beside the incidents (Linked schedules)](#linked-schedules) |
5698
5660
 
5699
5661
  ##### `ScheduleView`
5700
5662
 
5701
5663
  | Prop | Type | Default | Description |
5702
5664
  |---|---|---|---|
5703
- | `domain` | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`.<br>Shown in: [Keep and restore a view](#/view/keep-and-restore), [The smallest schedule (Installation)](#/installation/smallest-schedule), [A day of tours (First schedule)](#/schedule/first-schedule) and 77 more |
5704
- | `folded` | `readonly string[]` | — | The **Lane group**s that are folded, by id. An id no group carries falls out. A folded outer group hides the inner ones without their ids leaving the list, so unfolding it gives back the view that was there.<br>Shown in: [Fold groups from outside (Lane groups)](#/lane-groups/fold-from-outside), [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Start with groups folded (Lane groups)](#/lane-groups/start-with-groups-folded) |
5665
+ | `domain` | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`.<br>Shown in: [Keep and restore a view](#view), [The smallest schedule (Installation)](#installation), [A day of tours (First schedule)](#first-schedule) and 77 more |
5666
+ | `folded` | `readonly string[]` | — | The **Lane group**s that are folded, by id. An id no group carries falls out. A folded outer group hides the inner ones without their ids leaving the list, so unfolding it gives back the view that was there.<br>Shown in: [Fold groups from outside (Lane groups)](#lane-groups), [Read a folded group (Lane groups)](#lane-groups), [Start with groups folded (Lane groups)](#lane-groups) |
5705
5667
 
5706
5668
  ### Linked schedules
5707
5669
 
@@ -5711,9 +5673,7 @@ Keeps two schedules on the same hours: pan or zoom one and the other follows (al
5711
5673
  import { useSchedule } from "@umriss-ui/schedule";
5712
5674
  ```
5713
5675
 
5714
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/linked-schedules/
5715
-
5716
- Each schedule has its own [`useSchedule`](#/api/useSchedule). Send what one reports to the other's `setView`, in both directions: the other goes there at once, without a remount, and `setView` is not reported, so the two never answer each other.
5676
+ Each schedule has its own [`useSchedule`](#api-index-1). Send what one reports to the other's `setView`, in both directions: the other goes there at once, without a remount, and `setView` is not reported, so the two never answer each other.
5717
5677
 
5718
5678
  While a drag is in flight the two can stand a frame apart; they settle as soon as it ends.
5719
5679
 
@@ -5956,81 +5916,81 @@ export default function RotaBesideIncidents() {
5956
5916
 
5957
5917
  #### Keyboard
5958
5918
 
5959
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
5919
+ The keys of [First schedule](#first-schedule) apply here.
5960
5920
 
5961
5921
  #### Props on this page
5962
5922
 
5963
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
5923
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
5964
5924
 
5965
5925
  | Prop | Type | Default | Description |
5966
5926
  |---|---|---|---|
5967
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
5968
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
5927
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
5928
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
5969
5929
 
5970
5930
  ###### Accessibility
5971
5931
 
5972
5932
  | Prop | Type | Default | Description |
5973
5933
  |---|---|---|---|
5974
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
5934
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
5975
5935
 
5976
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
5936
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
5977
5937
 
5978
5938
  | Prop | Type | Default | Description |
5979
5939
  |---|---|---|---|
5980
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
5981
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
5940
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
5941
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
5982
5942
 
5983
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
5943
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
5984
5944
 
5985
5945
  | Prop | Type | Default | Description |
5986
5946
  |---|---|---|---|
5987
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
5988
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
5947
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
5948
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
5989
5949
 
5990
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
5950
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
5991
5951
 
5992
5952
  | Prop | Type | Default | Description |
5993
5953
  |---|---|---|---|
5994
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
5995
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
5996
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
5997
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
5998
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
5999
- | [`leadIn`](#/subtasks/Subtask-leadIn) | `number` | — | Duration of the lead-in before the main time; none is zero. |
6000
- | [`leadOut`](#/subtasks/Subtask-leadOut) | `number` | — | Duration of the lead-out after the main time; none is zero. |
6001
- | [`name`](#/subtasks/Subtask-name) | `string` | — | What the subtask is called, where the schedule names it. |
5954
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
5955
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
5956
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
5957
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
5958
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
5959
+ | [`leadIn`](#subtasks) | `number` | — | Duration of the lead-in before the main time; none is zero. |
5960
+ | [`leadOut`](#subtasks) | `number` | — | Duration of the lead-out after the main time; none is zero. |
5961
+ | [`name`](#subtasks) | `string` | — | What the subtask is called, where the schedule names it. |
6002
5962
 
6003
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
5963
+ From `Task` — the full table stands on [Subtasks](#subtasks).
6004
5964
 
6005
5965
  | Prop | Type | Default | Description |
6006
5966
  |---|---|---|---|
6007
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
6008
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
6009
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
5967
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
5968
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
5969
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
6010
5970
 
6011
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
5971
+ From `ScheduleOptions` — the full table stands on [View](#view).
6012
5972
 
6013
5973
  | Prop | Type | Default | Description |
6014
5974
  |---|---|---|---|
6015
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
5975
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
6016
5976
 
6017
5977
  ###### Events
6018
5978
 
6019
5979
  | Prop | Type | Default | Description |
6020
5980
  |---|---|---|---|
6021
- | [`onViewChange`](#/view/ScheduleOptions-onViewChange) | `(view: `[`ScheduleView`](#/view/type-ScheduleView)`) => void` | — | Every change the planner makes, once, always the whole view - the one to keep, or to hand another schedule's `setView`. A pan or zoom is reported at most once per frame. Not called for the view the schedule starts with, nor for one `setView` applies. |
5981
+ | [`onViewChange`](#view) | `(view: `[`ScheduleView`](#view)`) => void` | — | Every change the planner makes, once, always the whole view - the one to keep, or to hand another schedule's `setView`. A pan or zoom is reported at most once per frame. Not called for the view the schedule starts with, nor for one `setView` applies. |
6022
5982
 
6023
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
5983
+ From `ScheduleView` — the full table stands on [View](#view).
6024
5984
 
6025
5985
  | Prop | Type | Default | Description |
6026
5986
  |---|---|---|---|
6027
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
5987
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
6028
5988
 
6029
5989
  #### Known limits
6030
5990
 
6031
5991
  - Only the view is shared - the span and the folded groups, not the selection, the hover or the vertical scroll.
6032
5992
 
6033
- What umriss deliberately does not build, and why: [ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/).
5993
+ What umriss deliberately does not build, and why: [ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md).
6034
5994
 
6035
5995
  ### The handle
6036
5996
 
@@ -6040,8 +6000,6 @@ Converts between a point on the screen and a time on a lane, so marks of your ow
6040
6000
  import { useSchedule } from "@umriss-ui/schedule";
6041
6001
  ```
6042
6002
 
6043
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/handle/
6044
-
6045
6003
  The handle holds three functions and nothing else: `clientPointOf(time, lane?)`, `positionAt(clientX, clientY)` and `visibleDomain()`. Everything else the schedule does is props.
6046
6004
 
6047
6005
  Place your marks again whenever `view.domain` changes.
@@ -6137,82 +6095,82 @@ export default function PlaceAMark() {
6137
6095
 
6138
6096
  #### Keyboard
6139
6097
 
6140
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
6098
+ The keys of [First schedule](#first-schedule) apply here.
6141
6099
 
6142
6100
  #### Props on this page
6143
6101
 
6144
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
6102
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
6145
6103
 
6146
6104
  | Prop | Type | Default | Description |
6147
6105
  |---|---|---|---|
6148
- | [`ref`](#/schedule/ScheduleProps-ref) | `Ref<`[`ScheduleHandle`](#/schedule/type-ScheduleHandle)`>` | — | Receives the `ScheduleHandle` - not an element. |
6149
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
6150
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
6106
+ | [`ref`](#first-schedule) | `Ref<`[`ScheduleHandle`](#first-schedule)`>` | — | Receives the `ScheduleHandle` - not an element. |
6107
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
6108
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
6151
6109
 
6152
6110
  ###### Events
6153
6111
 
6154
6112
  | Prop | Type | Default | Description |
6155
6113
  |---|---|---|---|
6156
- | [`onInteraction`](#/schedule/ScheduleProps-onInteraction) | `(interaction: `[`ScheduleInteraction`](#/interactions/type-ScheduleInteraction)`) => void` | — | Click, context menu and hover, with what the pointer is on and where. While it is set, a right-click opens no browser menu. |
6114
+ | [`onInteraction`](#first-schedule) | `(interaction: `[`ScheduleInteraction`](#interactions)`) => void` | — | Click, context menu and hover, with what the pointer is on and where. While it is set, a right-click opens no browser menu. |
6157
6115
 
6158
6116
  ###### Accessibility
6159
6117
 
6160
6118
  | Prop | Type | Default | Description |
6161
6119
  |---|---|---|---|
6162
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
6120
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
6163
6121
 
6164
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
6122
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
6165
6123
 
6166
6124
  | Prop | Type | Default | Description |
6167
6125
  |---|---|---|---|
6168
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
6169
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
6126
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
6127
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
6170
6128
 
6171
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
6129
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
6172
6130
 
6173
6131
  | Prop | Type | Default | Description |
6174
6132
  |---|---|---|---|
6175
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
6176
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
6133
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
6134
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
6177
6135
 
6178
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
6136
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
6179
6137
 
6180
6138
  | Prop | Type | Default | Description |
6181
6139
  |---|---|---|---|
6182
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
6183
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
6184
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
6185
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
6186
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
6187
- | [`leadIn`](#/subtasks/Subtask-leadIn) | `number` | — | Duration of the lead-in before the main time; none is zero. |
6188
- | [`leadOut`](#/subtasks/Subtask-leadOut) | `number` | — | Duration of the lead-out after the main time; none is zero. |
6140
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
6141
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
6142
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
6143
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
6144
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
6145
+ | [`leadIn`](#subtasks) | `number` | — | Duration of the lead-in before the main time; none is zero. |
6146
+ | [`leadOut`](#subtasks) | `number` | — | Duration of the lead-out after the main time; none is zero. |
6189
6147
 
6190
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
6148
+ From `Task` — the full table stands on [Subtasks](#subtasks).
6191
6149
 
6192
6150
  | Prop | Type | Default | Description |
6193
6151
  |---|---|---|---|
6194
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
6195
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
6196
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
6152
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
6153
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
6154
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
6197
6155
 
6198
- From `ScheduleInteraction` — the full table stands on [Interactions](#/interactions/type-ScheduleInteraction).
6156
+ From `ScheduleInteraction` — the full table stands on [Interactions](#interactions).
6199
6157
 
6200
6158
  | Prop | Type | Default | Description |
6201
6159
  |---|---|---|---|
6202
- | [`clientX`](#/interactions/ScheduleInteraction-clientX) *required* | `number` | — | The pointer's horizontal client coordinate - where a `ContextMenu` opens. |
6203
- | [`clientY`](#/interactions/ScheduleInteraction-clientY) *required* | `number` | — | The pointer's vertical client coordinate. |
6160
+ | [`clientX`](#interactions) *required* | `number` | — | The pointer's horizontal client coordinate - where a `ContextMenu` opens. |
6161
+ | [`clientY`](#interactions) *required* | `number` | — | The pointer's vertical client coordinate. |
6204
6162
 
6205
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
6163
+ From `ScheduleOptions` — the full table stands on [View](#view).
6206
6164
 
6207
6165
  | Prop | Type | Default | Description |
6208
6166
  |---|---|---|---|
6209
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
6167
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
6210
6168
 
6211
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
6169
+ From `ScheduleView` — the full table stands on [View](#view).
6212
6170
 
6213
6171
  | Prop | Type | Default | Description |
6214
6172
  |---|---|---|---|
6215
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
6173
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
6216
6174
 
6217
6175
  ### Findings as data
6218
6176
 
@@ -6222,9 +6180,7 @@ Lists what is wrong with a plan - double bookings on a lane, dependencies that d
6222
6180
  import { findings, overlaps, violatedDependencies, inBlockedTime } from "@umriss-ui/schedule";
6223
6181
  ```
6224
6182
 
6225
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/findings/
6226
-
6227
- `findings(subtasks, dependencies, blocked)` returns all three kinds; [`overlaps`](#/api/overlaps), [`violatedDependencies`](#/api/violatedDependencies) and [`inBlockedTime`](#/api/inBlockedTime) return one each. They are pure functions: run them wherever the data changes, with or without a schedule on screen.
6183
+ `findings(subtasks, dependencies, blocked)` returns all three kinds; [`overlaps`](#api-index-1), [`violatedDependencies`](#api-index-1) and [`inBlockedTime`](#api-index-1) return one each. They are pure functions: run them wherever the data changes, with or without a schedule on screen.
6228
6184
 
6229
6185
  Lead-in and lead-out count as occupied time; touching at a shared edge is no overlap.
6230
6186
 
@@ -6232,7 +6188,7 @@ Lead-in and lead-out count as occupied time; touching at a shared edge is no ove
6232
6188
 
6233
6189
  ##### List the findings
6234
6190
 
6235
- [`findings`](#/api/findings) returns what the schedule marks - overlaps, violated dependencies, work in blocked time - as data for a list beside it.
6191
+ [`findings`](#api-index-1) returns what the schedule marks - overlaps, violated dependencies, work in blocked time - as data for a list beside it.
6236
6192
 
6237
6193
  ```tsx
6238
6194
  import { Stack, Text } from "@umriss-ui/core";
@@ -6299,7 +6255,7 @@ export default function ListTheFindings() {
6299
6255
 
6300
6256
  ##### Say when there is nothing to fix
6301
6257
 
6302
- When all three lists [`findings`](#/api/findings) returns are empty, say so plainly instead of showing an empty list.
6258
+ When all three lists [`findings`](#api-index-1) returns are empty, say so plainly instead of showing an empty list.
6303
6259
 
6304
6260
  ```tsx
6305
6261
  import { EmptyState, Stack } from "@umriss-ui/core";
@@ -6335,7 +6291,7 @@ export default function NothingToFix() {
6335
6291
 
6336
6292
  ##### Count the findings per kind
6337
6293
 
6338
- [`overlaps`](#/api/overlaps) and [`violatedDependencies`](#/api/violatedDependencies) are the halves of [`findings`](#/api/findings) on their own - here as counts above the day's legs.
6294
+ [`overlaps`](#api-index-1) and [`violatedDependencies`](#api-index-1) are the halves of [`findings`](#api-index-1) on their own - here as counts above the day's legs.
6339
6295
 
6340
6296
  ```tsx
6341
6297
  import { Badge, Stack } from "@umriss-ui/core";
@@ -6393,7 +6349,7 @@ export default function CountPerKind() {
6393
6349
 
6394
6350
  #### Keyboard
6395
6351
 
6396
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
6352
+ The keys of [First schedule](#first-schedule) apply here.
6397
6353
 
6398
6354
  #### API
6399
6355
 
@@ -6401,36 +6357,36 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
6401
6357
 
6402
6358
  | Prop | Type | Default | Description |
6403
6359
  |---|---|---|---|
6404
- | `lane` *required* | `string` | — | The lane both sit on.<br>Shown in: [List the findings](#/findings/list-the-findings), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) |
6405
- | `first` *required* | `string` | — | The subtask that starts earlier (lead-in included); on a tie, the one that stands first in the data.<br>Shown in: [List the findings](#/findings/list-the-findings), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) |
6406
- | `second` *required* | `string` | — | The other one.<br>Shown in: [List the findings](#/findings/list-the-findings), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) |
6407
- | `from` *required* | `number` | — | Where the covering begins.<br>Shown in: [List the findings](#/findings/list-the-findings) |
6408
- | `to` *required* | `number` | — | Where it ends.<br>Shown in: [List the findings](#/findings/list-the-findings) |
6360
+ | `lane` *required* | `string` | — | The lane both sit on.<br>Shown in: [List the findings](#findings-as-data), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) |
6361
+ | `first` *required* | `string` | — | The subtask that starts earlier (lead-in included); on a tie, the one that stands first in the data.<br>Shown in: [List the findings](#findings-as-data), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) |
6362
+ | `second` *required* | `string` | — | The other one.<br>Shown in: [List the findings](#findings-as-data), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) |
6363
+ | `from` *required* | `number` | — | Where the covering begins.<br>Shown in: [List the findings](#findings-as-data) |
6364
+ | `to` *required* | `number` | — | Where it ends.<br>Shown in: [List the findings](#findings-as-data) |
6409
6365
 
6410
6366
  ##### `ViolatedDependency`
6411
6367
 
6412
6368
  | Prop | Type | Default | Description |
6413
6369
  |---|---|---|---|
6414
- | `dependency` *required* | `string` | — | The id of the dependency.<br>Shown in: [List the findings](#/findings/list-the-findings) |
6415
- | `departure` *required* | `number` | — | When it leaves, by its anchor.<br>Shown in: [List the findings](#/findings/list-the-findings) |
6416
- | `arrival` *required* | `number` | — | When it has to have arrived, by its anchor.<br>Shown in: [List the findings](#/findings/list-the-findings) |
6417
- | `shortBy` *required* | `number` | — | How much time is missing: departure plus lag, minus arrival.<br>Shown in: [List the findings](#/findings/list-the-findings) |
6370
+ | `dependency` *required* | `string` | — | The id of the dependency.<br>Shown in: [List the findings](#findings-as-data) |
6371
+ | `departure` *required* | `number` | — | When it leaves, by its anchor.<br>Shown in: [List the findings](#findings-as-data) |
6372
+ | `arrival` *required* | `number` | — | When it has to have arrived, by its anchor.<br>Shown in: [List the findings](#findings-as-data) |
6373
+ | `shortBy` *required* | `number` | — | How much time is missing: departure plus lag, minus arrival.<br>Shown in: [List the findings](#findings-as-data) |
6418
6374
 
6419
6375
  ##### `InBlockedTime`
6420
6376
 
6421
6377
  | Prop | Type | Default | Description |
6422
6378
  |---|---|---|---|
6423
- | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [List the findings](#/findings/list-the-findings), [Block out leave and maintenance (Blocked time)](#/blocked-time/leave), [Check a sprint against the leave calendar (Blocked time)](#/blocked-time/team-leave) and 2 more |
6424
- | `blocked` *required* | `string` | — | The id of the blocked time it covers.<br>Shown in: [List the findings](#/findings/list-the-findings), [Block out leave and maintenance (Blocked time)](#/blocked-time/leave), [Plan the sprint around leave (Scenarios)](#/scenarios/plan-the-sprint-around-leave) |
6425
- | `lane` *required* | `string` | — | The lane both are on.<br>Shown in: [Hand over the on-call week (Scenarios)](#/scenarios/hand-over-the-on-call-week), [Plan the sprint around leave (Scenarios)](#/scenarios/plan-the-sprint-around-leave) |
6426
- | `from` *required* | `number` | — | Where the covering begins.<br>Shown in: [List the findings](#/findings/list-the-findings), [Block out leave and maintenance (Blocked time)](#/blocked-time/leave), [Hand over the on-call week (Scenarios)](#/scenarios/hand-over-the-on-call-week) |
6427
- | `to` *required* | `number` | — | Where it ends.<br>Shown in: [List the findings](#/findings/list-the-findings), [Block out leave and maintenance (Blocked time)](#/blocked-time/leave), [Hand over the on-call week (Scenarios)](#/scenarios/hand-over-the-on-call-week) |
6379
+ | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [List the findings](#findings-as-data), [Block out leave and maintenance (Blocked time)](#blocked-time), [Check a sprint against the leave calendar (Blocked time)](#blocked-time) and 2 more |
6380
+ | `blocked` *required* | `string` | — | The id of the blocked time it covers.<br>Shown in: [List the findings](#findings-as-data), [Block out leave and maintenance (Blocked time)](#blocked-time), [Plan the sprint around leave (Scenarios)](#plan-the-sprint-around-leave) |
6381
+ | `lane` *required* | `string` | — | The lane both are on.<br>Shown in: [Hand over the on-call week (Scenarios)](#hand-over-the-on-call-week), [Plan the sprint around leave (Scenarios)](#plan-the-sprint-around-leave) |
6382
+ | `from` *required* | `number` | — | Where the covering begins.<br>Shown in: [List the findings](#findings-as-data), [Block out leave and maintenance (Blocked time)](#blocked-time), [Hand over the on-call week (Scenarios)](#hand-over-the-on-call-week) |
6383
+ | `to` *required* | `number` | — | Where it ends.<br>Shown in: [List the findings](#findings-as-data), [Block out leave and maintenance (Blocked time)](#blocked-time), [Hand over the on-call week (Scenarios)](#hand-over-the-on-call-week) |
6428
6384
 
6429
6385
  #### Known limits
6430
6386
 
6431
6387
  - Overlapping work is marked, not packed into sub-lanes; stacked overlap is not built yet.
6432
6388
 
6433
- What umriss deliberately does not build, and why: [ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/).
6389
+ What umriss deliberately does not build, and why: [ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md).
6434
6390
 
6435
6391
  ## Editing
6436
6392
 
@@ -6444,11 +6400,9 @@ Drag a bar to a new time or onto another lane (also called drag-and-drop resched
6444
6400
  import { useSchedule, applyIntent } from "@umriss-ui/schedule";
6445
6401
  ```
6446
6402
 
6447
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/move-and-lane/
6448
-
6449
6403
  Each name in `intents` enables one gesture. Without `intents` the schedule is read-only, and pressing a bar pans the plot.
6450
6404
 
6451
- The schedule never changes your data ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)): `onIntent` reports a move and a lane change as values, and [`applyIntent`](#/api/applyIntent) is the arithmetic to apply them. A drop across lanes and time reports both, and your handler may apply them, refuse them, or apply one.
6405
+ The schedule never changes your data ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)): `onIntent` reports a move and a lane change as values, and [`applyIntent`](#api-index-1) is the arithmetic to apply them. A drop across lanes and time reports both, and your handler may apply them, refuse them, or apply one.
6452
6406
 
6453
6407
  Held at the edge of the plot, a drag pans it along; Escape cancels the drag.
6454
6408
 
@@ -6456,7 +6410,7 @@ Held at the edge of the plot, a drag pans it along; Escape cancels the drag.
6456
6410
 
6457
6411
  ##### Move work in time
6458
6412
 
6459
- List `move` in `intents` and apply what `onIntent` reports with [`applyIntent`](#/api/applyIntent); the plan changes only in your state.
6413
+ List `move` in `intents` and apply what `onIntent` reports with [`applyIntent`](#api-index-1); the plan changes only in your state.
6460
6414
 
6461
6415
  ```tsx
6462
6416
  import { useState } from "react";
@@ -6564,7 +6518,7 @@ export default function MoveToAnotherLane() {
6564
6518
 
6565
6519
  ##### Refuse a move that double-books someone
6566
6520
 
6567
- Your `onIntent` decides: here it applies a drop only when [`overlaps`](#/api/overlaps) finds no new double booking, and says why otherwise.
6521
+ Your `onIntent` decides: here it applies a drop only when [`overlaps`](#api-index-1) finds no new double booking, and says why otherwise.
6568
6522
 
6569
6523
  ```tsx
6570
6524
  import { useRef, useState } from "react";
@@ -6711,106 +6665,106 @@ export default function RefuseADoubleBooking() {
6711
6665
  | `Alt+← Alt+→` | Proposes moving the active subtask one raster step earlier or later, stepping over blocked time. |
6712
6666
  | `Escape` | Cancels a drag in flight: the ghost goes and nothing is reported. |
6713
6667
 
6714
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
6668
+ The keys of [First schedule](#first-schedule) apply here.
6715
6669
 
6716
6670
  #### Props on this page
6717
6671
 
6718
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
6672
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
6719
6673
 
6720
6674
  | Prop | Type | Default | Description |
6721
6675
  |---|---|---|---|
6722
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
6723
- | [`intents`](#/schedule/ScheduleProps-intents) | `readonly `[`IntentKind`](#/schedule/type-IntentKind)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). |
6724
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
6676
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
6677
+ | [`intents`](#first-schedule) | `readonly `[`IntentKind`](#first-schedule)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). |
6678
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
6725
6679
 
6726
6680
  ###### Events
6727
6681
 
6728
6682
  | Prop | Type | Default | Description |
6729
6683
  |---|---|---|---|
6730
- | [`onIntent`](#/schedule/ScheduleProps-onIntent) | `(intent: `[`Intent`](#/schedule/type-Intent)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it. |
6684
+ | [`onIntent`](#first-schedule) | `(intent: `[`Intent`](#first-schedule)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it. |
6731
6685
 
6732
6686
  ###### Accessibility
6733
6687
 
6734
6688
  | Prop | Type | Default | Description |
6735
6689
  |---|---|---|---|
6736
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
6690
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
6737
6691
 
6738
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
6692
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
6739
6693
 
6740
6694
  | Prop | Type | Default | Description |
6741
6695
  |---|---|---|---|
6742
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
6743
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
6696
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
6697
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
6744
6698
 
6745
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
6699
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
6746
6700
 
6747
6701
  | Prop | Type | Default | Description |
6748
6702
  |---|---|---|---|
6749
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
6750
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
6703
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
6704
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
6751
6705
 
6752
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
6706
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
6753
6707
 
6754
6708
  | Prop | Type | Default | Description |
6755
6709
  |---|---|---|---|
6756
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
6757
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
6758
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
6759
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
6760
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
6761
- | [`leadIn`](#/subtasks/Subtask-leadIn) | `number` | — | Duration of the lead-in before the main time; none is zero. |
6762
- | [`leadOut`](#/subtasks/Subtask-leadOut) | `number` | — | Duration of the lead-out after the main time; none is zero. |
6763
- | [`name`](#/subtasks/Subtask-name) | `string` | — | What the subtask is called, where the schedule names it. |
6710
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
6711
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
6712
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
6713
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
6714
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
6715
+ | [`leadIn`](#subtasks) | `number` | — | Duration of the lead-in before the main time; none is zero. |
6716
+ | [`leadOut`](#subtasks) | `number` | — | Duration of the lead-out after the main time; none is zero. |
6717
+ | [`name`](#subtasks) | `string` | — | What the subtask is called, where the schedule names it. |
6764
6718
 
6765
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
6719
+ From `Task` — the full table stands on [Subtasks](#subtasks).
6766
6720
 
6767
6721
  | Prop | Type | Default | Description |
6768
6722
  |---|---|---|---|
6769
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
6770
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
6771
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
6723
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
6724
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
6725
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
6772
6726
 
6773
- From `DependenciesProps` — the full table stands on [Dependencies](#/dependencies/type-DependenciesProps).
6727
+ From `DependenciesProps` — the full table stands on [Dependencies](#dependencies).
6774
6728
 
6775
6729
  | Prop | Type | Default | Description |
6776
6730
  |---|---|---|---|
6777
- | [`data`](#/dependencies/DependenciesProps-data) *required* | `readonly `[`Dependency`](#/dependencies/type-Dependency)`[]` | — | The dependencies, as the caller holds them. |
6731
+ | [`data`](#dependencies) *required* | `readonly `[`Dependency`](#dependencies)`[]` | — | The dependencies, as the caller holds them. |
6778
6732
 
6779
- From `Dependency` — the full table stands on [Dependencies](#/dependencies/type-Dependency).
6733
+ From `Dependency` — the full table stands on [Dependencies](#dependencies).
6780
6734
 
6781
6735
  | Prop | Type | Default | Description |
6782
6736
  |---|---|---|---|
6783
- | [`id`](#/dependencies/Dependency-id) *required* | `string` | — | The caller's identity of the dependency. |
6784
- | [`from`](#/dependencies/Dependency-from) *required* | `string` | — | The id of the subtask it leaves. |
6785
- | [`to`](#/dependencies/Dependency-to) *required* | `string` | — | The id of the subtask it arrives at. |
6786
- | [`lag`](#/dependencies/Dependency-lag) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
6737
+ | [`id`](#dependencies) *required* | `string` | — | The caller's identity of the dependency. |
6738
+ | [`from`](#dependencies) *required* | `string` | — | The id of the subtask it leaves. |
6739
+ | [`to`](#dependencies) *required* | `string` | — | The id of the subtask it arrives at. |
6740
+ | [`lag`](#dependencies) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
6787
6741
 
6788
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
6742
+ From `ScheduleOptions` — the full table stands on [View](#view).
6789
6743
 
6790
6744
  | Prop | Type | Default | Description |
6791
6745
  |---|---|---|---|
6792
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
6746
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
6793
6747
 
6794
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
6748
+ From `ScheduleView` — the full table stands on [View](#view).
6795
6749
 
6796
6750
  | Prop | Type | Default | Description |
6797
6751
  |---|---|---|---|
6798
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
6752
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
6799
6753
 
6800
- From `Overlap` — the full table stands on [Findings as data](#/findings/type-Overlap).
6754
+ From `Overlap` — the full table stands on [Findings as data](#findings-as-data).
6801
6755
 
6802
6756
  | Prop | Type | Default | Description |
6803
6757
  |---|---|---|---|
6804
- | [`lane`](#/findings/Overlap-lane) *required* | `string` | — | The lane both sit on. |
6805
- | [`first`](#/findings/Overlap-first) *required* | `string` | — | The subtask that starts earlier (lead-in included); on a tie, the one that stands first in the data. |
6806
- | [`second`](#/findings/Overlap-second) *required* | `string` | — | The other one. |
6758
+ | [`lane`](#findings-as-data) *required* | `string` | — | The lane both sit on. |
6759
+ | [`first`](#findings-as-data) *required* | `string` | — | The subtask that starts earlier (lead-in included); on a tie, the one that stands first in the data. |
6760
+ | [`second`](#findings-as-data) *required* | `string` | — | The other one. |
6807
6761
 
6808
6762
  #### Known limits
6809
6763
 
6810
- - No undo: your application owns the data, and with it the history ([ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/)).
6764
+ - No undo: your application owns the data, and with it the history ([ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md)).
6811
6765
  - The keys move work in time only; a lane change needs the pointer.
6812
6766
 
6813
- What umriss deliberately does not build, and why: [ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/).
6767
+ What umriss deliberately does not build, and why: [ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md).
6814
6768
 
6815
6769
  ### Stretch, lead-in, lead-out
6816
6770
 
@@ -6820,8 +6774,6 @@ Change how long work takes, or how long its preparation and its wrap-up take, by
6820
6774
  import { useSchedule, applyIntent } from "@umriss-ui/schedule";
6821
6775
  ```
6822
6776
 
6823
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/stretch/
6824
-
6825
6777
  `stretch` enables the two edges of the main time. `leadIn` and `leadOut` add a grip at the outer edge of each; the grips show on the selected subtask only, so click a bar first.
6826
6778
 
6827
6779
  Stretching the main time leaves the lead-in and the lead-out as long as they were.
@@ -6909,82 +6861,82 @@ export default function ChangeLeadInAndLeadOut() {
6909
6861
  |---|---|
6910
6862
  | `Alt+Shift+← Alt+Shift+→` | Proposes ending the active subtask one raster step earlier or later. |
6911
6863
 
6912
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
6864
+ The keys of [First schedule](#first-schedule) apply here.
6913
6865
 
6914
6866
  #### Props on this page
6915
6867
 
6916
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
6868
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
6917
6869
 
6918
6870
  | Prop | Type | Default | Description |
6919
6871
  |---|---|---|---|
6920
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
6921
- | [`intents`](#/schedule/ScheduleProps-intents) | `readonly `[`IntentKind`](#/schedule/type-IntentKind)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). |
6922
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
6872
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
6873
+ | [`intents`](#first-schedule) | `readonly `[`IntentKind`](#first-schedule)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). |
6874
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
6923
6875
 
6924
6876
  ###### Events
6925
6877
 
6926
6878
  | Prop | Type | Default | Description |
6927
6879
  |---|---|---|---|
6928
- | [`onIntent`](#/schedule/ScheduleProps-onIntent) | `(intent: `[`Intent`](#/schedule/type-Intent)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it. |
6880
+ | [`onIntent`](#first-schedule) | `(intent: `[`Intent`](#first-schedule)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it. |
6929
6881
 
6930
6882
  ###### Accessibility
6931
6883
 
6932
6884
  | Prop | Type | Default | Description |
6933
6885
  |---|---|---|---|
6934
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
6886
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
6935
6887
 
6936
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
6888
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
6937
6889
 
6938
6890
  | Prop | Type | Default | Description |
6939
6891
  |---|---|---|---|
6940
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
6941
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
6892
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
6893
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
6942
6894
 
6943
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
6895
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
6944
6896
 
6945
6897
  | Prop | Type | Default | Description |
6946
6898
  |---|---|---|---|
6947
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
6948
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
6899
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
6900
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
6949
6901
 
6950
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
6902
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
6951
6903
 
6952
6904
  | Prop | Type | Default | Description |
6953
6905
  |---|---|---|---|
6954
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
6955
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
6956
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
6957
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
6958
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
6959
- | [`leadIn`](#/subtasks/Subtask-leadIn) | `number` | — | Duration of the lead-in before the main time; none is zero. |
6960
- | [`leadOut`](#/subtasks/Subtask-leadOut) | `number` | — | Duration of the lead-out after the main time; none is zero. |
6961
- | [`name`](#/subtasks/Subtask-name) | `string` | — | What the subtask is called, where the schedule names it. |
6906
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
6907
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
6908
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
6909
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
6910
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
6911
+ | [`leadIn`](#subtasks) | `number` | — | Duration of the lead-in before the main time; none is zero. |
6912
+ | [`leadOut`](#subtasks) | `number` | — | Duration of the lead-out after the main time; none is zero. |
6913
+ | [`name`](#subtasks) | `string` | — | What the subtask is called, where the schedule names it. |
6962
6914
 
6963
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
6915
+ From `Task` — the full table stands on [Subtasks](#subtasks).
6964
6916
 
6965
6917
  | Prop | Type | Default | Description |
6966
6918
  |---|---|---|---|
6967
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
6968
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
6969
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
6919
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
6920
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
6921
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
6970
6922
 
6971
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
6923
+ From `ScheduleOptions` — the full table stands on [View](#view).
6972
6924
 
6973
6925
  | Prop | Type | Default | Description |
6974
6926
  |---|---|---|---|
6975
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
6927
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
6976
6928
 
6977
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
6929
+ From `ScheduleView` — the full table stands on [View](#view).
6978
6930
 
6979
6931
  | Prop | Type | Default | Description |
6980
6932
  |---|---|---|---|
6981
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
6933
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
6982
6934
 
6983
6935
  #### Known limits
6984
6936
 
6985
6937
  - A main time never becomes shorter than one raster step, or a minute without a raster.
6986
6938
 
6987
- What umriss deliberately does not build, and why: [ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/).
6939
+ What umriss deliberately does not build, and why: [ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md).
6988
6940
 
6989
6941
  ### Snapping
6990
6942
 
@@ -6994,11 +6946,9 @@ Makes a drag land on a raster - the axis' own step, a fixed duration, or a patte
6994
6946
  import { useSchedule, snapTime } from "@umriss-ui/schedule";
6995
6947
  ```
6996
6948
 
6997
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/snapping/
6998
-
6999
6949
  Without `snap` a drag lands on the fine band's step, which follows the zoom. A number is a step in milliseconds; `{ step, offset }` counts from local midnight; `false` places to the minute.
7000
6950
 
7001
- Snapping shapes the ghost and so the intent; it never moves data that is not being dragged. [`snapTime`](#/api/snapTime) is the same arithmetic for your own use.
6951
+ Snapping shapes the ghost and so the intent; it never moves data that is not being dragged. [`snapTime`](#api-index-1) is the same arithmetic for your own use.
7002
6952
 
7003
6953
  #### Examples
7004
6954
 
@@ -7144,75 +7094,75 @@ export default function NoSnapping() {
7144
7094
 
7145
7095
  #### Keyboard
7146
7096
 
7147
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
7097
+ The keys of [First schedule](#first-schedule) apply here.
7148
7098
 
7149
7099
  #### Props on this page
7150
7100
 
7151
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
7101
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
7152
7102
 
7153
7103
  | Prop | Type | Default | Description |
7154
7104
  |---|---|---|---|
7155
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
7156
- | [`snap`](#/schedule/ScheduleProps-snap) | `"ticks" \| number \| `[`SnapRaster`](#/schedule/type-SnapRaster)` \| false` | `"ticks"` | The raster a drag lands on: `"ticks"` - the fine band's current step -, a step in milliseconds from local midnight, a step with an offset (shifts at 06:00, 14:00 and 22:00 are eight hours offset by six), or `false` for none. It shapes the ghost and the intent, never the data. |
7157
- | [`intents`](#/schedule/ScheduleProps-intents) | `readonly `[`IntentKind`](#/schedule/type-IntentKind)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). |
7158
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
7105
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
7106
+ | [`snap`](#first-schedule) | `"ticks" \| number \| `[`SnapRaster`](#first-schedule)` \| false` | `"ticks"` | The raster a drag lands on: `"ticks"` - the fine band's current step -, a step in milliseconds from local midnight, a step with an offset (shifts at 06:00, 14:00 and 22:00 are eight hours offset by six), or `false` for none. It shapes the ghost and the intent, never the data. |
7107
+ | [`intents`](#first-schedule) | `readonly `[`IntentKind`](#first-schedule)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). |
7108
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
7159
7109
 
7160
7110
  ###### Events
7161
7111
 
7162
7112
  | Prop | Type | Default | Description |
7163
7113
  |---|---|---|---|
7164
- | [`onIntent`](#/schedule/ScheduleProps-onIntent) | `(intent: `[`Intent`](#/schedule/type-Intent)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it. |
7114
+ | [`onIntent`](#first-schedule) | `(intent: `[`Intent`](#first-schedule)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it. |
7165
7115
 
7166
7116
  ###### Accessibility
7167
7117
 
7168
7118
  | Prop | Type | Default | Description |
7169
7119
  |---|---|---|---|
7170
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
7120
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
7171
7121
 
7172
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
7122
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
7173
7123
 
7174
7124
  | Prop | Type | Default | Description |
7175
7125
  |---|---|---|---|
7176
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
7177
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
7126
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
7127
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
7178
7128
 
7179
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
7129
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
7180
7130
 
7181
7131
  | Prop | Type | Default | Description |
7182
7132
  |---|---|---|---|
7183
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
7184
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
7133
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
7134
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
7185
7135
 
7186
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
7136
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
7187
7137
 
7188
7138
  | Prop | Type | Default | Description |
7189
7139
  |---|---|---|---|
7190
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
7191
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
7192
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
7193
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
7194
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
7195
- | [`name`](#/subtasks/Subtask-name) | `string` | — | What the subtask is called, where the schedule names it. |
7140
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
7141
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
7142
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
7143
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
7144
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
7145
+ | [`name`](#subtasks) | `string` | — | What the subtask is called, where the schedule names it. |
7196
7146
 
7197
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
7147
+ From `Task` — the full table stands on [Subtasks](#subtasks).
7198
7148
 
7199
7149
  | Prop | Type | Default | Description |
7200
7150
  |---|---|---|---|
7201
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
7202
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
7203
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
7151
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
7152
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
7153
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
7204
7154
 
7205
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
7155
+ From `ScheduleOptions` — the full table stands on [View](#view).
7206
7156
 
7207
7157
  | Prop | Type | Default | Description |
7208
7158
  |---|---|---|---|
7209
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
7159
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
7210
7160
 
7211
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
7161
+ From `ScheduleView` — the full table stands on [View](#view).
7212
7162
 
7213
7163
  | Prop | Type | Default | Description |
7214
7164
  |---|---|---|---|
7215
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
7165
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
7216
7166
 
7217
7167
  ### Placing from outside
7218
7168
 
@@ -7222,17 +7172,15 @@ Drag work that is not on the plan yet - from a backlog or a list of unassigned j
7222
7172
  import { useSchedule, subtaskFromPlace } from "@umriss-ui/schedule";
7223
7173
  ```
7224
7174
 
7225
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/placing/
7226
-
7227
7175
  The browser hands over dragged data only on the drop, so declare what is being dragged in `placing` on your `dragstart` and clear it on `dragend`. The schedule then shows the ghost at the snapped time, with the findings the drop would create.
7228
7176
 
7229
- A `place` intent carries your item's key, the task, the lane and the times. The id of the new subtask is yours; [`subtaskFromPlace`](#/api/subtaskFromPlace) builds it from the intent.
7177
+ A `place` intent carries your item's key, the task, the lane and the times. The id of the new subtask is yours; [`subtaskFromPlace`](#api-index-1) builds it from the intent.
7230
7178
 
7231
7179
  #### Examples
7232
7180
 
7233
7181
  ##### Drag work in from the backlog
7234
7182
 
7235
- Set `placing` on your list's `dragstart` and clear it on `dragend`; the drop reports a `place` intent that [`subtaskFromPlace`](#/api/subtaskFromPlace) turns into work.
7183
+ Set `placing` on your list's `dragstart` and clear it on `dragend`; the drop reports a `place` intent that [`subtaskFromPlace`](#api-index-1) turns into work.
7236
7184
 
7237
7185
  ```tsx
7238
7186
  import { useState } from "react";
@@ -7339,90 +7287,90 @@ export default function DragFromTheBacklog() {
7339
7287
 
7340
7288
  #### Keyboard
7341
7289
 
7342
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
7290
+ The keys of [First schedule](#first-schedule) apply here.
7343
7291
 
7344
7292
  #### Props on this page
7345
7293
 
7346
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
7294
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
7347
7295
 
7348
7296
  | Prop | Type | Default | Description |
7349
7297
  |---|---|---|---|
7350
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
7351
- | [`intents`](#/schedule/ScheduleProps-intents) | `readonly `[`IntentKind`](#/schedule/type-IntentKind)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). |
7352
- | [`placing`](#/schedule/ScheduleProps-placing) | [`PlacingItem`](#/schedule/type-PlacingItem)` \| null` | — | What the application is dragging in from outside while it drags it - its key, task, the length of its main time, its lead-in and lead-out. The browser hands the dragged data over only on the drop, so the ghost before it can only come from here: set it on your own `dragstart`, clear it on `dragend`. Without `"place"` in `intents` no drop is accepted. |
7353
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
7298
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
7299
+ | [`intents`](#first-schedule) | `readonly `[`IntentKind`](#first-schedule)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). |
7300
+ | [`placing`](#first-schedule) | [`PlacingItem`](#first-schedule)` \| null` | — | What the application is dragging in from outside while it drags it - its key, task, the length of its main time, its lead-in and lead-out. The browser hands the dragged data over only on the drop, so the ghost before it can only come from here: set it on your own `dragstart`, clear it on `dragend`. Without `"place"` in `intents` no drop is accepted. |
7301
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
7354
7302
 
7355
7303
  ###### Events
7356
7304
 
7357
7305
  | Prop | Type | Default | Description |
7358
7306
  |---|---|---|---|
7359
- | [`onIntent`](#/schedule/ScheduleProps-onIntent) | `(intent: `[`Intent`](#/schedule/type-Intent)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it. |
7307
+ | [`onIntent`](#first-schedule) | `(intent: `[`Intent`](#first-schedule)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it. |
7360
7308
 
7361
7309
  ###### Accessibility
7362
7310
 
7363
7311
  | Prop | Type | Default | Description |
7364
7312
  |---|---|---|---|
7365
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
7313
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
7366
7314
 
7367
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
7315
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
7368
7316
 
7369
7317
  | Prop | Type | Default | Description |
7370
7318
  |---|---|---|---|
7371
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
7372
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
7319
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
7320
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
7373
7321
 
7374
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
7322
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
7375
7323
 
7376
7324
  | Prop | Type | Default | Description |
7377
7325
  |---|---|---|---|
7378
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
7379
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
7326
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
7327
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
7380
7328
 
7381
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
7329
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
7382
7330
 
7383
7331
  | Prop | Type | Default | Description |
7384
7332
  |---|---|---|---|
7385
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
7386
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
7387
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
7388
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
7389
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
7390
- | [`name`](#/subtasks/Subtask-name) | `string` | — | What the subtask is called, where the schedule names it. |
7333
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
7334
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
7335
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
7336
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
7337
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
7338
+ | [`name`](#subtasks) | `string` | — | What the subtask is called, where the schedule names it. |
7391
7339
 
7392
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
7340
+ From `Task` — the full table stands on [Subtasks](#subtasks).
7393
7341
 
7394
7342
  | Prop | Type | Default | Description |
7395
7343
  |---|---|---|---|
7396
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
7397
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
7398
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
7344
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
7345
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
7346
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
7399
7347
 
7400
- From `DependenciesProps` — the full table stands on [Dependencies](#/dependencies/type-DependenciesProps).
7348
+ From `DependenciesProps` — the full table stands on [Dependencies](#dependencies).
7401
7349
 
7402
7350
  | Prop | Type | Default | Description |
7403
7351
  |---|---|---|---|
7404
- | [`data`](#/dependencies/DependenciesProps-data) *required* | `readonly `[`Dependency`](#/dependencies/type-Dependency)`[]` | — | The dependencies, as the caller holds them. |
7352
+ | [`data`](#dependencies) *required* | `readonly `[`Dependency`](#dependencies)`[]` | — | The dependencies, as the caller holds them. |
7405
7353
 
7406
- From `Dependency` — the full table stands on [Dependencies](#/dependencies/type-Dependency).
7354
+ From `Dependency` — the full table stands on [Dependencies](#dependencies).
7407
7355
 
7408
7356
  | Prop | Type | Default | Description |
7409
7357
  |---|---|---|---|
7410
- | [`id`](#/dependencies/Dependency-id) *required* | `string` | — | The caller's identity of the dependency. |
7411
- | [`from`](#/dependencies/Dependency-from) *required* | `string` | — | The id of the subtask it leaves. |
7412
- | [`to`](#/dependencies/Dependency-to) *required* | `string` | — | The id of the subtask it arrives at. |
7413
- | [`lag`](#/dependencies/Dependency-lag) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
7358
+ | [`id`](#dependencies) *required* | `string` | — | The caller's identity of the dependency. |
7359
+ | [`from`](#dependencies) *required* | `string` | — | The id of the subtask it leaves. |
7360
+ | [`to`](#dependencies) *required* | `string` | — | The id of the subtask it arrives at. |
7361
+ | [`lag`](#dependencies) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
7414
7362
 
7415
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
7363
+ From `ScheduleOptions` — the full table stands on [View](#view).
7416
7364
 
7417
7365
  | Prop | Type | Default | Description |
7418
7366
  |---|---|---|---|
7419
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
7367
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
7420
7368
 
7421
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
7369
+ From `ScheduleView` — the full table stands on [View](#view).
7422
7370
 
7423
7371
  | Prop | Type | Default | Description |
7424
7372
  |---|---|---|---|
7425
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
7373
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
7426
7374
 
7427
7375
  ### Where a subtask may go
7428
7376
 
@@ -7432,8 +7380,6 @@ Marks the lanes and times a piece of work may not go to as soon as a drag begins
7432
7380
  import { useSchedule } from "@umriss-ui/schedule";
7433
7381
  ```
7434
7382
 
7435
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/where-it-may-go/
7436
-
7437
7383
  `canMoveTo(subtask, lane)` is asked once per lane when a drag takes hold, and again at the drop. Refused lanes are drawn back and hatched; over one, the ghost stays on the last lane allowed, tied to the pointer by a line.
7438
7384
 
7439
7385
  Blocked time refuses a place in time rather than a lane: a drag cannot put work into it, and Alt with an arrow key steps over it. Work the data already put there is never locked in.
@@ -7759,97 +7705,97 @@ export default function AroundLeave() {
7759
7705
 
7760
7706
  #### Keyboard
7761
7707
 
7762
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
7708
+ The keys of [First schedule](#first-schedule) apply here.
7763
7709
 
7764
7710
  #### Props on this page
7765
7711
 
7766
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
7712
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
7767
7713
 
7768
7714
  | Prop | Type | Default | Description |
7769
7715
  |---|---|---|---|
7770
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
7771
- | [`intents`](#/schedule/ScheduleProps-intents) | `readonly `[`IntentKind`](#/schedule/type-IntentKind)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). |
7772
- | [`canMoveTo`](#/schedule/ScheduleProps-canMoveTo) | `(subtask: `[`Subtask`](#/subtasks/type-Subtask)`, lane: string) => boolean` | every lane is open | Whether a subtask may go to a lane. It narrows `"lane"`, it does not enable it. Asked once per lane when a drag takes hold, and asked again at the drop. The lanes it turns down are marked from the first frame of the drag - a planner sees the refusal before meeting it - and over one of them the ghost stays on the last lane that was allowed, the cursor says no and a line ties the ghost to the pointer. A refused lane costs the lane and nothing else: a drop after it still reports the move in time. It is asked for work dragged in from outside as well, with the key and task the application declared in `placing`. |
7773
- | [`placing`](#/schedule/ScheduleProps-placing) | [`PlacingItem`](#/schedule/type-PlacingItem)` \| null` | — | What the application is dragging in from outside while it drags it - its key, task, the length of its main time, its lead-in and lead-out. The browser hands the dragged data over only on the drop, so the ghost before it can only come from here: set it on your own `dragstart`, clear it on `dragend`. Without `"place"` in `intents` no drop is accepted. |
7774
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
7716
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
7717
+ | [`intents`](#first-schedule) | `readonly `[`IntentKind`](#first-schedule)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). |
7718
+ | [`canMoveTo`](#first-schedule) | `(subtask: `[`Subtask`](#subtasks)`, lane: string) => boolean` | every lane is open | Whether a subtask may go to a lane. It narrows `"lane"`, it does not enable it. Asked once per lane when a drag takes hold, and asked again at the drop. The lanes it turns down are marked from the first frame of the drag - a planner sees the refusal before meeting it - and over one of them the ghost stays on the last lane that was allowed, the cursor says no and a line ties the ghost to the pointer. A refused lane costs the lane and nothing else: a drop after it still reports the move in time. It is asked for work dragged in from outside as well, with the key and task the application declared in `placing`. |
7719
+ | [`placing`](#first-schedule) | [`PlacingItem`](#first-schedule)` \| null` | — | What the application is dragging in from outside while it drags it - its key, task, the length of its main time, its lead-in and lead-out. The browser hands the dragged data over only on the drop, so the ghost before it can only come from here: set it on your own `dragstart`, clear it on `dragend`. Without `"place"` in `intents` no drop is accepted. |
7720
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
7775
7721
 
7776
7722
  ###### Events
7777
7723
 
7778
7724
  | Prop | Type | Default | Description |
7779
7725
  |---|---|---|---|
7780
- | [`onIntent`](#/schedule/ScheduleProps-onIntent) | `(intent: `[`Intent`](#/schedule/type-Intent)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it. |
7726
+ | [`onIntent`](#first-schedule) | `(intent: `[`Intent`](#first-schedule)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it. |
7781
7727
 
7782
7728
  ###### Accessibility
7783
7729
 
7784
7730
  | Prop | Type | Default | Description |
7785
7731
  |---|---|---|---|
7786
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
7732
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
7787
7733
 
7788
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
7734
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
7789
7735
 
7790
7736
  | Prop | Type | Default | Description |
7791
7737
  |---|---|---|---|
7792
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
7793
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
7738
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
7739
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
7794
7740
 
7795
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
7741
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
7796
7742
 
7797
7743
  | Prop | Type | Default | Description |
7798
7744
  |---|---|---|---|
7799
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
7800
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
7745
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
7746
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
7801
7747
 
7802
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
7748
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
7803
7749
 
7804
7750
  | Prop | Type | Default | Description |
7805
7751
  |---|---|---|---|
7806
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
7807
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
7808
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
7809
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
7810
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
7752
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
7753
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
7754
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
7755
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
7756
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
7811
7757
 
7812
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
7758
+ From `Task` — the full table stands on [Subtasks](#subtasks).
7813
7759
 
7814
7760
  | Prop | Type | Default | Description |
7815
7761
  |---|---|---|---|
7816
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
7817
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
7818
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
7762
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
7763
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
7764
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
7819
7765
 
7820
- From `BlockedTimesProps` — the full table stands on [Blocked time](#/blocked-time/type-BlockedTimesProps).
7766
+ From `BlockedTimesProps` — the full table stands on [Blocked time](#blocked-time).
7821
7767
 
7822
7768
  | Prop | Type | Default | Description |
7823
7769
  |---|---|---|---|
7824
- | [`data`](#/blocked-time/BlockedTimesProps-data) *required* | `readonly `[`BlockedTime`](#/blocked-time/type-BlockedTime)`[]` | — | The blocked time of the lanes - leave, maintenance, unavailability -, as the caller holds it: one list, each interval naming its lane. |
7770
+ | [`data`](#blocked-time) *required* | `readonly `[`BlockedTime`](#blocked-time)`[]` | — | The blocked time of the lanes - leave, maintenance, unavailability -, as the caller holds it: one list, each interval naming its lane. |
7825
7771
 
7826
- From `BlockedTime` — the full table stands on [Blocked time](#/blocked-time/type-BlockedTime).
7772
+ From `BlockedTime` — the full table stands on [Blocked time](#blocked-time).
7827
7773
 
7828
7774
  | Prop | Type | Default | Description |
7829
7775
  |---|---|---|---|
7830
- | [`id`](#/blocked-time/BlockedTime-id) *required* | `string` | — | The caller's identity of the interval - what a finding names. |
7831
- | [`lane`](#/blocked-time/BlockedTime-lane) *required* | `string` | — | The id of the lane it blocks. |
7832
- | [`from`](#/blocked-time/BlockedTime-from) *required* | `number` | — | Where it begins. |
7833
- | [`to`](#/blocked-time/BlockedTime-to) *required* | `number` | — | Where it ends. |
7834
- | [`label`](#/blocked-time/BlockedTime-label) | `string` | — | Why the lane is blocked - "Leave", "Maintenance" -, where the schedule names it. |
7776
+ | [`id`](#blocked-time) *required* | `string` | — | The caller's identity of the interval - what a finding names. |
7777
+ | [`lane`](#blocked-time) *required* | `string` | — | The id of the lane it blocks. |
7778
+ | [`from`](#blocked-time) *required* | `number` | — | Where it begins. |
7779
+ | [`to`](#blocked-time) *required* | `number` | — | Where it ends. |
7780
+ | [`label`](#blocked-time) | `string` | — | Why the lane is blocked - "Leave", "Maintenance" -, where the schedule names it. |
7835
7781
 
7836
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
7782
+ From `ScheduleOptions` — the full table stands on [View](#view).
7837
7783
 
7838
7784
  | Prop | Type | Default | Description |
7839
7785
  |---|---|---|---|
7840
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
7786
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
7841
7787
 
7842
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
7788
+ From `ScheduleView` — the full table stands on [View](#view).
7843
7789
 
7844
7790
  | Prop | Type | Default | Description |
7845
7791
  |---|---|---|---|
7846
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
7792
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
7847
7793
 
7848
7794
  #### Known limits
7849
7795
 
7850
7796
  - A rule that changes while a drag runs is noticed at the drop, not before.
7851
7797
 
7852
- What umriss deliberately does not build, and why: [ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/).
7798
+ What umriss deliberately does not build, and why: [ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md).
7853
7799
 
7854
7800
  ### Ripple
7855
7801
 
@@ -7859,17 +7805,15 @@ Works out which later work has to move when one piece moves: every successor who
7859
7805
  import { ripple, shiftTask, applyIntent } from "@umriss-ui/schedule";
7860
7806
  ```
7861
7807
 
7862
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/ripple/
7863
-
7864
7808
  `ripple(subtasks, dependencies, intent)` returns move intents down the whole chain, in the order they were pushed. A successor keeps its length and is never pulled earlier: room that opens up is the planner's.
7865
7809
 
7866
- [`shiftTask`](#/api/shiftTask) moves every subtask of one task by the same amount, so all its dependencies keep fitting.
7810
+ [`shiftTask`](#api-index-1) moves every subtask of one task by the same amount, so all its dependencies keep fitting.
7867
7811
 
7868
7812
  #### Examples
7869
7813
 
7870
7814
  ##### Push the later stops of a tour
7871
7815
 
7872
- [`ripple`](#/api/ripple) returns the moves that push every stop whose drive no longer fits behind a late one; you decide whether to apply them.
7816
+ [`ripple`](#api-index-1) returns the moves that push every stop whose drive no longer fits behind a late one; you decide whether to apply them.
7873
7817
 
7874
7818
  ```tsx
7875
7819
  import { useState } from "react";
@@ -7938,7 +7882,7 @@ export default function PushTheLaterStops() {
7938
7882
 
7939
7883
  ##### Move a whole tour
7940
7884
 
7941
- [`shiftTask`](#/api/shiftTask) returns one move per stop, all by the same amount, so every drive that fitted still fits.
7885
+ [`shiftTask`](#api-index-1) returns one move per stop, all by the same amount, so every drive that fitted still fits.
7942
7886
 
7943
7887
  ```tsx
7944
7888
  import { useState } from "react";
@@ -7998,7 +7942,7 @@ export default function MoveAWholeTour() {
7998
7942
 
7999
7943
  ##### Ripple on every drag
8000
7944
 
8001
- Run [`ripple`](#/api/ripple) inside `onIntent` and apply its moves with the drop: drag the design later and build and test follow.
7945
+ Run [`ripple`](#api-index-1) inside `onIntent` and apply its moves with the drop: drag the design later and build and test follow.
8002
7946
 
8003
7947
  ```tsx
8004
7948
  import { useState } from "react";
@@ -8050,96 +7994,96 @@ export default function RippleOnEveryDrag() {
8050
7994
 
8051
7995
  #### Keyboard
8052
7996
 
8053
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
7997
+ The keys of [First schedule](#first-schedule) apply here.
8054
7998
 
8055
7999
  #### Props on this page
8056
8000
 
8057
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
8001
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
8058
8002
 
8059
8003
  | Prop | Type | Default | Description |
8060
8004
  |---|---|---|---|
8061
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
8062
- | [`intents`](#/schedule/ScheduleProps-intents) | `readonly `[`IntentKind`](#/schedule/type-IntentKind)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). |
8063
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
8005
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
8006
+ | [`intents`](#first-schedule) | `readonly `[`IntentKind`](#first-schedule)`[]` | `[]` | The intents the caller handles. Each one enables its interaction; none leaves a read-only schedule ([ADR-0023](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0023-editing-is-controlled-the-schedule-reports-intents.md)). |
8007
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
8064
8008
 
8065
8009
  ###### Events
8066
8010
 
8067
8011
  | Prop | Type | Default | Description |
8068
8012
  |---|---|---|---|
8069
- | [`onIntent`](#/schedule/ScheduleProps-onIntent) | `(intent: `[`Intent`](#/schedule/type-Intent)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it. |
8013
+ | [`onIntent`](#first-schedule) | `(intent: `[`Intent`](#first-schedule)`) => void` | — | Called once per intent when a drag ends. The data changes only if the caller changes it. |
8070
8014
 
8071
8015
  ###### Accessibility
8072
8016
 
8073
8017
  | Prop | Type | Default | Description |
8074
8018
  |---|---|---|---|
8075
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
8019
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
8076
8020
 
8077
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
8021
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
8078
8022
 
8079
8023
  | Prop | Type | Default | Description |
8080
8024
  |---|---|---|---|
8081
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
8082
- | [`label`](#/lane/LaneProps-label) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
8025
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
8026
+ | [`label`](#lanes) | `ReactNode` | `id` | What the lane header says - the person, vehicle or room. Real text, read by a screen reader. |
8083
8027
 
8084
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
8028
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
8085
8029
 
8086
8030
  | Prop | Type | Default | Description |
8087
8031
  |---|---|---|---|
8088
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
8089
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
8032
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
8033
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
8090
8034
 
8091
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
8035
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
8092
8036
 
8093
8037
  | Prop | Type | Default | Description |
8094
8038
  |---|---|---|---|
8095
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
8096
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
8097
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
8098
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
8099
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
8100
- | [`name`](#/subtasks/Subtask-name) | `string` | — | What the subtask is called, where the schedule names it. |
8039
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
8040
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
8041
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
8042
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
8043
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
8044
+ | [`name`](#subtasks) | `string` | — | What the subtask is called, where the schedule names it. |
8101
8045
 
8102
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
8046
+ From `Task` — the full table stands on [Subtasks](#subtasks).
8103
8047
 
8104
8048
  | Prop | Type | Default | Description |
8105
8049
  |---|---|---|---|
8106
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
8107
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
8108
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
8050
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
8051
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
8052
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
8109
8053
 
8110
- From `DependenciesProps` — the full table stands on [Dependencies](#/dependencies/type-DependenciesProps).
8054
+ From `DependenciesProps` — the full table stands on [Dependencies](#dependencies).
8111
8055
 
8112
8056
  | Prop | Type | Default | Description |
8113
8057
  |---|---|---|---|
8114
- | [`data`](#/dependencies/DependenciesProps-data) *required* | `readonly `[`Dependency`](#/dependencies/type-Dependency)`[]` | — | The dependencies, as the caller holds them. |
8058
+ | [`data`](#dependencies) *required* | `readonly `[`Dependency`](#dependencies)`[]` | — | The dependencies, as the caller holds them. |
8115
8059
 
8116
- From `Dependency` — the full table stands on [Dependencies](#/dependencies/type-Dependency).
8060
+ From `Dependency` — the full table stands on [Dependencies](#dependencies).
8117
8061
 
8118
8062
  | Prop | Type | Default | Description |
8119
8063
  |---|---|---|---|
8120
- | [`id`](#/dependencies/Dependency-id) *required* | `string` | — | The caller's identity of the dependency. |
8121
- | [`from`](#/dependencies/Dependency-from) *required* | `string` | — | The id of the subtask it leaves. |
8122
- | [`to`](#/dependencies/Dependency-to) *required* | `string` | — | The id of the subtask it arrives at. |
8123
- | [`lag`](#/dependencies/Dependency-lag) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
8064
+ | [`id`](#dependencies) *required* | `string` | — | The caller's identity of the dependency. |
8065
+ | [`from`](#dependencies) *required* | `string` | — | The id of the subtask it leaves. |
8066
+ | [`to`](#dependencies) *required* | `string` | — | The id of the subtask it arrives at. |
8067
+ | [`lag`](#dependencies) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
8124
8068
 
8125
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
8069
+ From `ScheduleOptions` — the full table stands on [View](#view).
8126
8070
 
8127
8071
  | Prop | Type | Default | Description |
8128
8072
  |---|---|---|---|
8129
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
8073
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
8130
8074
 
8131
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
8075
+ From `ScheduleView` — the full table stands on [View](#view).
8132
8076
 
8133
8077
  | Prop | Type | Default | Description |
8134
8078
  |---|---|---|---|
8135
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
8079
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
8136
8080
 
8137
8081
  #### Known limits
8138
8082
 
8139
- - No dependency types, slack or critical path: the schedule is no project-planning engine ([ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/)).
8083
+ - No dependency types, slack or critical path: the schedule is no project-planning engine ([ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md)).
8140
8084
  - A dependency joins subtasks of one task, so work of other tasks is never pushed.
8141
8085
 
8142
- What umriss deliberately does not build, and why: [ADR-0032](https://romanhaendler.github.io/umriss-ui/what-umriss-ui-is-not/).
8086
+ What umriss deliberately does not build, and why: [ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/schedule-v0.42.0/docs/adr/0032-what-umriss-is-not.md).
8143
8087
 
8144
8088
  ## Measuring
8145
8089
 
@@ -8153,8 +8097,6 @@ A plan of up to five thousand subtasks and as many dependencies, measured in thi
8153
8097
  import { useSchedule } from "@umriss-ui/schedule";
8154
8098
  ```
8155
8099
 
8156
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/benchmark/
8157
-
8158
8100
  The figures in `packages/schedule/docs/capabilities.md` come from here. The page dispatches the pointer and wheel events itself, on the schedule's canvas, and adds no prop to the schedule.
8159
8101
 
8160
8102
  #### Examples
@@ -8465,94 +8407,94 @@ export default function Benchmark() {
8465
8407
 
8466
8408
  #### Keyboard
8467
8409
 
8468
- The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
8410
+ The keys of [First schedule](#first-schedule) apply here.
8469
8411
 
8470
8412
  #### Props on this page
8471
8413
 
8472
- From `ScheduleProps` — the full table stands on [First schedule](#/schedule/type-ScheduleProps).
8414
+ From `ScheduleProps` — the full table stands on [First schedule](#first-schedule).
8473
8415
 
8474
8416
  | Prop | Type | Default | Description |
8475
8417
  |---|---|---|---|
8476
- | [`height`](#/schedule/ScheduleProps-height) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
8477
- | [`laneHeight`](#/schedule/ScheduleProps-laneHeight) | `number` | `44` | Height of one lane in pixels at the default font size of 16 px; the schedule multiplies it by the root font size over 16 px when that ratio is above 1, so lane names keep their room in a reader's larger font. |
8478
- | [`children`](#/schedule/ScheduleProps-children) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
8418
+ | [`height`](#first-schedule) | `number` | `400` | Height in CSS pixels, both bands included. The width is the host's. |
8419
+ | [`laneHeight`](#first-schedule) | `number` | `44` | Height of one lane in pixels at the default font size of 16 px; the schedule multiplies it by the root font size over 16 px when that ratio is above 1, so lane names keep their room in a reader's larger font. |
8420
+ | [`children`](#first-schedule) | `ReactNode` | — | `Lane`, `Dependencies` and `Subtasks`, in the order they are to stand and be drawn. |
8479
8421
 
8480
8422
  ###### Events
8481
8423
 
8482
8424
  | Prop | Type | Default | Description |
8483
8425
  |---|---|---|---|
8484
- | [`onInteraction`](#/schedule/ScheduleProps-onInteraction) | `(interaction: `[`ScheduleInteraction`](#/interactions/type-ScheduleInteraction)`) => void` | — | Click, context menu and hover, with what the pointer is on and where. While it is set, a right-click opens no browser menu. |
8426
+ | [`onInteraction`](#first-schedule) | `(interaction: `[`ScheduleInteraction`](#interactions)`) => void` | — | Click, context menu and hover, with what the pointer is on and where. While it is set, a right-click opens no browser menu. |
8485
8427
 
8486
8428
  ###### Accessibility
8487
8429
 
8488
8430
  | Prop | Type | Default | Description |
8489
8431
  |---|---|---|---|
8490
- | [`ariaLabel`](#/schedule/ScheduleProps-ariaLabel) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
8432
+ | [`ariaLabel`](#first-schedule) *required* | `string` | — | What the schedule shows, for a screen reader: "Plan of week 38". |
8491
8433
 
8492
- From `LaneProps` — the full table stands on [Lanes](#/lane/type-LaneProps).
8434
+ From `LaneProps` — the full table stands on [Lanes](#lanes).
8493
8435
 
8494
8436
  | Prop | Type | Default | Description |
8495
8437
  |---|---|---|---|
8496
- | [`id`](#/lane/LaneProps-id) *required* | `string` | — | The identity subtasks name in their `lane`. |
8438
+ | [`id`](#lanes) *required* | `string` | — | The identity subtasks name in their `lane`. |
8497
8439
 
8498
- From `SubtasksProps` — the full table stands on [Subtasks](#/subtasks/type-SubtasksProps).
8440
+ From `SubtasksProps` — the full table stands on [Subtasks](#subtasks).
8499
8441
 
8500
8442
  | Prop | Type | Default | Description |
8501
8443
  |---|---|---|---|
8502
- | [`data`](#/subtasks/SubtasksProps-data) *required* | `readonly `[`Subtask`](#/subtasks/type-Subtask)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
8503
- | [`tasks`](#/subtasks/SubtasksProps-tasks) *required* | `readonly `[`Task`](#/subtasks/type-Task)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
8444
+ | [`data`](#subtasks) *required* | `readonly `[`Subtask`](#subtasks)`[]` | — | The subtasks, as the caller holds them. The schedule never changes one. |
8445
+ | [`tasks`](#subtasks) *required* | `readonly `[`Task`](#subtasks)`[]` | — | The tasks the subtasks belong to - their identity and their colour. A subtask whose task is not among them is drawn in a muted colour. |
8504
8446
 
8505
- From `Subtask` — the full table stands on [Subtasks](#/subtasks/type-Subtask).
8447
+ From `Subtask` — the full table stands on [Subtasks](#subtasks).
8506
8448
 
8507
8449
  | Prop | Type | Default | Description |
8508
8450
  |---|---|---|---|
8509
- | [`id`](#/subtasks/Subtask-id) *required* | `string` | — | The caller's identity of the subtask. |
8510
- | [`task`](#/subtasks/Subtask-task) *required* | `string` | — | The id of the task it belongs to. |
8511
- | [`lane`](#/subtasks/Subtask-lane) *required* | `string` | — | The id of the lane it sits on. |
8512
- | [`from`](#/subtasks/Subtask-from) *required* | `number` | — | Start of the main time. |
8513
- | [`to`](#/subtasks/Subtask-to) *required* | `number` | — | End of the main time. |
8514
- | [`name`](#/subtasks/Subtask-name) | `string` | — | What the subtask is called, where the schedule names it. |
8451
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the subtask. |
8452
+ | [`task`](#subtasks) *required* | `string` | — | The id of the task it belongs to. |
8453
+ | [`lane`](#subtasks) *required* | `string` | — | The id of the lane it sits on. |
8454
+ | [`from`](#subtasks) *required* | `number` | — | Start of the main time. |
8455
+ | [`to`](#subtasks) *required* | `number` | — | End of the main time. |
8456
+ | [`name`](#subtasks) | `string` | — | What the subtask is called, where the schedule names it. |
8515
8457
 
8516
- From `Task` — the full table stands on [Subtasks](#/subtasks/type-Task).
8458
+ From `Task` — the full table stands on [Subtasks](#subtasks).
8517
8459
 
8518
8460
  | Prop | Type | Default | Description |
8519
8461
  |---|---|---|---|
8520
- | [`id`](#/subtasks/Task-id) *required* | `string` | — | The caller's identity of the task. |
8521
- | [`color`](#/subtasks/Task-color) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
8522
- | [`name`](#/subtasks/Task-name) | `string` | — | What the task is called, where the schedule names it. |
8462
+ | [`id`](#subtasks) *required* | `string` | — | The caller's identity of the task. |
8463
+ | [`color`](#subtasks) *required* | `string` | — | Any CSS colour - a literal, a token, `light-dark(…)`. The colour means what the caller's domain needs it to mean. |
8464
+ | [`name`](#subtasks) | `string` | — | What the task is called, where the schedule names it. |
8523
8465
 
8524
- From `DependenciesProps` — the full table stands on [Dependencies](#/dependencies/type-DependenciesProps).
8466
+ From `DependenciesProps` — the full table stands on [Dependencies](#dependencies).
8525
8467
 
8526
8468
  | Prop | Type | Default | Description |
8527
8469
  |---|---|---|---|
8528
- | [`data`](#/dependencies/DependenciesProps-data) *required* | `readonly `[`Dependency`](#/dependencies/type-Dependency)`[]` | — | The dependencies, as the caller holds them. |
8470
+ | [`data`](#dependencies) *required* | `readonly `[`Dependency`](#dependencies)`[]` | — | The dependencies, as the caller holds them. |
8529
8471
 
8530
- From `Dependency` — the full table stands on [Dependencies](#/dependencies/type-Dependency).
8472
+ From `Dependency` — the full table stands on [Dependencies](#dependencies).
8531
8473
 
8532
8474
  | Prop | Type | Default | Description |
8533
8475
  |---|---|---|---|
8534
- | [`id`](#/dependencies/Dependency-id) *required* | `string` | — | The caller's identity of the dependency. |
8535
- | [`from`](#/dependencies/Dependency-from) *required* | `string` | — | The id of the subtask it leaves. |
8536
- | [`to`](#/dependencies/Dependency-to) *required* | `string` | — | The id of the subtask it arrives at. |
8537
- | [`lag`](#/dependencies/Dependency-lag) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
8476
+ | [`id`](#dependencies) *required* | `string` | — | The caller's identity of the dependency. |
8477
+ | [`from`](#dependencies) *required* | `string` | — | The id of the subtask it leaves. |
8478
+ | [`to`](#dependencies) *required* | `string` | — | The id of the subtask it arrives at. |
8479
+ | [`lag`](#dependencies) *required* | `number` | — | The least time between the two anchors; zero where the successor may begin as soon as the predecessor ends. |
8538
8480
 
8539
- From `ScheduleInteraction` — the full table stands on [Interactions](#/interactions/type-ScheduleInteraction).
8481
+ From `ScheduleInteraction` — the full table stands on [Interactions](#interactions).
8540
8482
 
8541
8483
  | Prop | Type | Default | Description |
8542
8484
  |---|---|---|---|
8543
- | [`hit`](#/interactions/ScheduleInteraction-hit) *required* | [`ScheduleHit`](#/interactions/type-ScheduleHit) | — | What the pointer is on. |
8485
+ | [`hit`](#interactions) *required* | [`ScheduleHit`](#interactions) | — | What the pointer is on. |
8544
8486
 
8545
- From `ScheduleOptions` — the full table stands on [View](#/view/type-ScheduleOptions).
8487
+ From `ScheduleOptions` — the full table stands on [View](#view).
8546
8488
 
8547
8489
  | Prop | Type | Default | Description |
8548
8490
  |---|---|---|---|
8549
- | [`initialView`](#/view/ScheduleOptions-initialView) | [`ScheduleView`](#/view/type-ScheduleView) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
8491
+ | [`initialView`](#view) | [`ScheduleView`](#view) | — | The view to start from, read once when the hook first runs; a different value on a later render is ignored, as React ignores a changed `defaultValue`. To go to a view later, call `setView`. The schedule remembers none: where a view is kept is the application's decision. |
8550
8492
 
8551
- From `ScheduleView` — the full table stands on [View](#/view/type-ScheduleView).
8493
+ From `ScheduleView` — the full table stands on [View](#view).
8552
8494
 
8553
8495
  | Prop | Type | Default | Description |
8554
8496
  |---|---|---|---|
8555
- | [`domain`](#/view/ScheduleView-domain) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
8497
+ | [`domain`](#view) | `readonly [number, number]` | — | The span in view, as two wall-clock instants. Absent, the schedule shows the extent of its subtasks, within `zoomLimits`. |
8556
8498
 
8557
8499
  ## API index
8558
8500
 
@@ -8562,8 +8504,6 @@ Every name the package exports, in one place.
8562
8504
 
8563
8505
  Everything `@umriss-ui/schedule` exports, with its signature. A component's props stand on its own page.
8564
8506
 
8565
- Demo page: https://romanhaendler.github.io/umriss-ui/schedule/api/
8566
-
8567
8507
  #### Hooks
8568
8508
 
8569
8509
  ##### `useSchedule`
@@ -8577,7 +8517,7 @@ Declares a schedule: hands back `Schedule` and the parts declared inside it
8577
8517
  function useSchedule(options?: ScheduleOptions): ScheduleParts;
8578
8518
  ```
8579
8519
 
8580
- Used on [Scenarios](#/), [Installation](#/installation), [First schedule](#/schedule), [Lanes](#/lane), [Lane groups](#/lane-groups), [Subtasks](#/subtasks), [Bar labels](#/bar-labels), [Appearances](#/appearances), [Overlap](#/overlap), [Dependencies](#/dependencies), [Routes](#/routes), [Time axis and calendar](#/time-axis), [Blocked time](#/blocked-time), [Milestones](#/milestones), [Now line](#/now-line), [Pan and zoom](#/pan-and-zoom), [Selection](#/selection), [Interactions](#/interactions), [Tooltip](#/tooltip), [View](#/view), [Linked schedules](#/linked-schedules), [The handle](#/handle), [Findings as data](#/findings), [Move and lane](#/move-and-lane), [Stretch, lead-in, lead-out](#/stretch), [Snapping](#/snapping), [Placing from outside](#/placing), [Where a subtask may go](#/where-it-may-go), [Ripple](#/ripple) and [Benchmark](#/benchmark).
8520
+ Used on [Scenarios](#scenarios), [Installation](#installation), [First schedule](#first-schedule), [Lanes](#lanes), [Lane groups](#lane-groups), [Subtasks](#subtasks), [Bar labels](#bar-labels), [Appearances](#appearances), [Overlap](#overlap), [Dependencies](#dependencies), [Routes](#routes), [Time axis and calendar](#time-axis-and-calendar), [Blocked time](#blocked-time), [Milestones](#milestones), [Now line](#now-line), [Pan and zoom](#pan-and-zoom), [Selection](#selection), [Interactions](#interactions), [Tooltip](#tooltip), [View](#view), [Linked schedules](#linked-schedules), [The handle](#the-handle), [Findings as data](#findings-as-data), [Move and lane](#move-and-lane), [Stretch, lead-in, lead-out](#stretch-lead-in-lead-out), [Snapping](#snapping), [Placing from outside](#placing-from-outside), [Where a subtask may go](#where-a-subtask-may-go), [Ripple](#ripple) and [Benchmark](#benchmark).
8581
8521
 
8582
8522
  #### Functions
8583
8523
 
@@ -8590,7 +8530,7 @@ it as it is.
8590
8530
  function applyIntent<S extends Subtask>(subtask: S, intent: Intent): S;
8591
8531
  ```
8592
8532
 
8593
- Used on [Scenarios](#/), [Lane groups](#/lane-groups), [Time axis and calendar](#/time-axis), [Blocked time](#/blocked-time), [Interactions](#/interactions), [Move and lane](#/move-and-lane), [Stretch, lead-in, lead-out](#/stretch), [Snapping](#/snapping), [Placing from outside](#/placing), [Where a subtask may go](#/where-it-may-go) and [Ripple](#/ripple).
8533
+ Used on [Scenarios](#scenarios), [Lane groups](#lane-groups), [Time axis and calendar](#time-axis-and-calendar), [Blocked time](#blocked-time), [Interactions](#interactions), [Move and lane](#move-and-lane), [Stretch, lead-in, lead-out](#stretch-lead-in-lead-out), [Snapping](#snapping), [Placing from outside](#placing-from-outside), [Where a subtask may go](#where-a-subtask-may-go) and [Ripple](#ripple).
8594
8534
 
8595
8535
  ##### `arrival`
8596
8536
 
@@ -8600,7 +8540,7 @@ When a dependency has to have arrived at its subtask, by its anchor.
8600
8540
  function arrival(dependency: Dependency, to: Subtask): number;
8601
8541
  ```
8602
8542
 
8603
- Used on [Scenarios](#/), [Now line](#/now-line) and [Findings as data](#/findings).
8543
+ Used on [Scenarios](#scenarios), [Now line](#now-line) and [Findings as data](#findings-as-data).
8604
8544
 
8605
8545
  ##### `departure`
8606
8546
 
@@ -8610,7 +8550,7 @@ When a dependency leaves its subtask, by its anchor.
8610
8550
  function departure(dependency: Dependency, from: Subtask): number;
8611
8551
  ```
8612
8552
 
8613
- Used on [Findings as data](#/findings).
8553
+ Used on [Findings as data](#findings-as-data).
8614
8554
 
8615
8555
  ##### `findings`
8616
8556
 
@@ -8620,7 +8560,7 @@ Every finding at once. Without blocked time there is none in it.
8620
8560
  function findings(subtasks: readonly Subtask[], dependencies: readonly Dependency[], blocked?: readonly BlockedTime[]): Findings;
8621
8561
  ```
8622
8562
 
8623
- Used on [Scenarios](#/), [First schedule](#/schedule), [Lane groups](#/lane-groups), [Blocked time](#/blocked-time), [Tooltip](#/tooltip) and [Findings as data](#/findings).
8563
+ Used on [Scenarios](#scenarios), [First schedule](#first-schedule), [Lane groups](#lane-groups), [Blocked time](#blocked-time), [Tooltip](#tooltip) and [Findings as data](#findings-as-data).
8624
8564
 
8625
8565
  ##### `inBlockedTime`
8626
8566
 
@@ -8632,7 +8572,7 @@ subtasks. Touching at a shared edge is not covering.
8632
8572
  function inBlockedTime(subtasks: readonly Subtask[], blocked: readonly BlockedTime[]): InBlockedTime[];
8633
8573
  ```
8634
8574
 
8635
- Used on [Scenarios](#/), [Blocked time](#/blocked-time) and [Findings as data](#/findings).
8575
+ Used on [Scenarios](#scenarios), [Blocked time](#blocked-time) and [Findings as data](#findings-as-data).
8636
8576
 
8637
8577
  ##### `occupied`
8638
8578
 
@@ -8655,7 +8595,7 @@ nothing.
8655
8595
  function overlaps(subtasks: readonly Subtask[]): Overlap[];
8656
8596
  ```
8657
8597
 
8658
- Used on [Scenarios](#/), [Lane groups](#/lane-groups), [Findings as data](#/findings) and [Move and lane](#/move-and-lane).
8598
+ Used on [Scenarios](#scenarios), [Lane groups](#lane-groups), [Findings as data](#findings-as-data) and [Move and lane](#move-and-lane).
8659
8599
 
8660
8600
  ##### `resolveAppearance`
8661
8601
 
@@ -8669,7 +8609,7 @@ Settles a subtask's appearances into what is drawn. `provisional` and
8669
8609
  function resolveAppearance(appearance: readonly SubtaskAppearance[] | undefined): ResolvedAppearance;
8670
8610
  ```
8671
8611
 
8672
- Used on [Appearances](#/appearances).
8612
+ Used on [Appearances](#appearances).
8673
8613
 
8674
8614
  ##### `ripple`
8675
8615
 
@@ -8682,14 +8622,14 @@ bounded number of pushes instead of running on.
8682
8622
  function ripple(subtasks: readonly Subtask[], dependencies: readonly Dependency[], intent: Intent): MoveIntent[];
8683
8623
  ```
8684
8624
 
8685
- Used on [Scenarios](#/), [Dependencies](#/dependencies) and [Ripple](#/ripple).
8625
+ Used on [Scenarios](#scenarios), [Dependencies](#dependencies) and [Ripple](#ripple).
8686
8626
 
8687
8627
  ##### `shiftTask`
8688
8628
 
8689
8629
  The moves that carry a whole task in time - every subtask of it by the same
8690
8630
  amount, so that its lengths and the distances between its stops stay as
8691
8631
  they were. The schedule never runs it: apply the moves like any other
8692
- intent, or run [`ripple`](#/api/ripple) over them first.
8632
+ intent, or run [`ripple`](#api-index-1) over them first.
8693
8633
 
8694
8634
  - `subtasks` – All subtasks; only those of `task` are moved.
8695
8635
  - `task` – The id of the task, as its subtasks name it in `task`.
@@ -8701,7 +8641,7 @@ or not finite.
8701
8641
  function shiftTask(subtasks: readonly Subtask[], task: string, by: number): MoveIntent[];
8702
8642
  ```
8703
8643
 
8704
- Used on [Scenarios](#/) and [Ripple](#/ripple).
8644
+ Used on [Scenarios](#scenarios) and [Ripple](#ripple).
8705
8645
 
8706
8646
  ##### `snapTime`
8707
8647
 
@@ -8713,7 +8653,7 @@ stays as it is.
8713
8653
  function snapTime(time: number, raster: number | SnapRaster): number;
8714
8654
  ```
8715
8655
 
8716
- Used on [Snapping](#/snapping).
8656
+ Used on [Snapping](#snapping).
8717
8657
 
8718
8658
  ##### `subtaskFromPlace`
8719
8659
 
@@ -8723,7 +8663,7 @@ The subtask a place intent asks for, under an id the caller chooses.
8723
8663
  function subtaskFromPlace(intent: PlaceIntent, id: string): Subtask;
8724
8664
  ```
8725
8665
 
8726
- Used on [Placing from outside](#/placing) and [Where a subtask may go](#/where-it-may-go).
8666
+ Used on [Placing from outside](#placing-from-outside) and [Where a subtask may go](#where-a-subtask-may-go).
8727
8667
 
8728
8668
  ##### `violatedDependencies`
8729
8669
 
@@ -8735,29 +8675,29 @@ is not in the data is passed over: there is nothing to judge.
8735
8675
  function violatedDependencies(subtasks: readonly Subtask[], dependencies: readonly Dependency[]): ViolatedDependency[];
8736
8676
  ```
8737
8677
 
8738
- Used on [Scenarios](#/), [Lane groups](#/lane-groups), [Tooltip](#/tooltip) and [Findings as data](#/findings).
8678
+ Used on [Scenarios](#scenarios), [Lane groups](#lane-groups), [Tooltip](#tooltip) and [Findings as data](#findings-as-data).
8739
8679
 
8740
8680
  #### Types
8741
8681
 
8742
8682
  ##### `BlockedTime`
8743
8683
 
8744
- Its table stands on [Blocked time](#/blocked-time/type-BlockedTime).
8684
+ Its table stands on [Blocked time](#blocked-time).
8745
8685
 
8746
- Used on [Scenarios](#/), [Blocked time](#/blocked-time), [Tooltip](#/tooltip), [Findings as data](#/findings) and [Where a subtask may go](#/where-it-may-go).
8686
+ Used on [Scenarios](#scenarios), [Blocked time](#blocked-time), [Tooltip](#tooltip), [Findings as data](#findings-as-data) and [Where a subtask may go](#where-a-subtask-may-go).
8747
8687
 
8748
8688
  ##### `BlockedTimesProps`
8749
8689
 
8750
- Its table stands on [Blocked time](#/blocked-time/type-BlockedTimesProps).
8690
+ Its table stands on [Blocked time](#blocked-time).
8751
8691
 
8752
8692
  ##### `DependenciesProps`
8753
8693
 
8754
- Its table stands on [Dependencies](#/dependencies/type-DependenciesProps).
8694
+ Its table stands on [Dependencies](#dependencies).
8755
8695
 
8756
8696
  ##### `Dependency`
8757
8697
 
8758
- Its table stands on [Dependencies](#/dependencies/type-Dependency).
8698
+ Its table stands on [Dependencies](#dependencies).
8759
8699
 
8760
- Used on [Scenarios](#/), [Installation](#/installation), [First schedule](#/schedule), [Lane groups](#/lane-groups), [Dependencies](#/dependencies), [Routes](#/routes), [Time axis and calendar](#/time-axis), [Selection](#/selection), [Interactions](#/interactions), [Tooltip](#/tooltip), [Findings as data](#/findings), [Move and lane](#/move-and-lane), [Placing from outside](#/placing), [Ripple](#/ripple) and [Benchmark](#/benchmark).
8700
+ Used on [Scenarios](#scenarios), [Installation](#installation), [First schedule](#first-schedule), [Lane groups](#lane-groups), [Dependencies](#dependencies), [Routes](#routes), [Time axis and calendar](#time-axis-and-calendar), [Selection](#selection), [Interactions](#interactions), [Tooltip](#tooltip), [Findings as data](#findings-as-data), [Move and lane](#move-and-lane), [Placing from outside](#placing-from-outside), [Ripple](#ripple) and [Benchmark](#benchmark).
8761
8701
 
8762
8702
  ##### `DependencyAttachment`
8763
8703
 
@@ -8773,7 +8713,7 @@ The tree has an **Anchor** of its own as well (CONTEXT.md).
8773
8713
  type DependencyAttachment = "centre" | "nearest";
8774
8714
  ```
8775
8715
 
8776
- Used on [Dependencies](#/dependencies).
8716
+ Used on [Dependencies](#dependencies).
8777
8717
 
8778
8718
  ##### `DependencyEnds`
8779
8719
 
@@ -8785,7 +8725,7 @@ plan full of short moves - so it is the caller's choice.
8785
8725
  type DependencyEnds = "dot" | "none";
8786
8726
  ```
8787
8727
 
8788
- Used on [Dependencies](#/dependencies).
8728
+ Used on [Dependencies](#dependencies).
8789
8729
 
8790
8730
  ##### `DependencyRoute`
8791
8731
 
@@ -8802,13 +8742,13 @@ Every kind of finding over the same data.
8802
8742
 
8803
8743
  | Prop | Type | Default | Description |
8804
8744
  |---|---|---|---|
8805
- | `overlaps` *required* | `readonly `[`Overlap`](#/findings/type-Overlap)`[]` | — | <br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [List the findings (Findings as data)](#/findings/list-the-findings), [Say when there is nothing to fix (Findings as data)](#/findings/nothing-to-fix) and 1 more |
8806
- | `violatedDependencies` *required* | `readonly `[`ViolatedDependency`](#/findings/type-ViolatedDependency)`[]` | — | <br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [List the findings (Findings as data)](#/findings/list-the-findings), [Say when there is nothing to fix (Findings as data)](#/findings/nothing-to-fix) and 1 more |
8807
- | `inBlockedTime` *required* | `readonly `[`InBlockedTime`](#/findings/type-InBlockedTime)`[]` | — | <br>Shown in: [Block out leave and maintenance (Blocked time)](#/blocked-time/leave), [Check a sprint against the leave calendar (Blocked time)](#/blocked-time/team-leave), [List the findings (Findings as data)](#/findings/list-the-findings) and 3 more |
8745
+ | `overlaps` *required* | `readonly `[`Overlap`](#findings-as-data)`[]` | — | <br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [List the findings (Findings as data)](#findings-as-data), [Say when there is nothing to fix (Findings as data)](#findings-as-data) and 1 more |
8746
+ | `violatedDependencies` *required* | `readonly `[`ViolatedDependency`](#findings-as-data)`[]` | — | <br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [List the findings (Findings as data)](#findings-as-data), [Say when there is nothing to fix (Findings as data)](#findings-as-data) and 1 more |
8747
+ | `inBlockedTime` *required* | `readonly `[`InBlockedTime`](#findings-as-data)`[]` | — | <br>Shown in: [Block out leave and maintenance (Blocked time)](#blocked-time), [Check a sprint against the leave calendar (Blocked time)](#blocked-time), [List the findings (Findings as data)](#findings-as-data) and 3 more |
8808
8748
 
8809
8749
  ##### `InBlockedTime`
8810
8750
 
8811
- Its table stands on [Findings as data](#/findings/type-InBlockedTime).
8751
+ Its table stands on [Findings as data](#findings-as-data).
8812
8752
 
8813
8753
  ##### `Intent`
8814
8754
 
@@ -8820,7 +8760,7 @@ drop - a move and a lane - give the same data in either order.
8820
8760
  type Intent = MoveIntent | StretchIntent | LeadInIntent | LeadOutIntent | LaneIntent | PlaceIntent;
8821
8761
  ```
8822
8762
 
8823
- Used on [Scenarios](#/), [Blocked time](#/blocked-time), [Move and lane](#/move-and-lane), [Placing from outside](#/placing), [Where a subtask may go](#/where-it-may-go) and [Ripple](#/ripple).
8763
+ Used on [Scenarios](#scenarios), [Blocked time](#blocked-time), [Move and lane](#move-and-lane), [Placing from outside](#placing-from-outside), [Where a subtask may go](#where-a-subtask-may-go) and [Ripple](#ripple).
8824
8764
 
8825
8765
  ##### `IntentKind`
8826
8766
 
@@ -8832,7 +8772,7 @@ type IntentKind = Intent["kind"];
8832
8772
 
8833
8773
  ##### `LaneGroupProps`
8834
8774
 
8835
- Its table stands on [Lane groups](#/lane-groups/type-LaneGroupProps).
8775
+ Its table stands on [Lane groups](#lane-groups).
8836
8776
 
8837
8777
  ##### `LaneIntent`
8838
8778
 
@@ -8840,13 +8780,13 @@ Put the subtask on another lane.
8840
8780
 
8841
8781
  | Prop | Type | Default | Description |
8842
8782
  |---|---|---|---|
8843
- | `kind` *required* | `"lane"` | — | <br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 7 more |
8844
- | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 4 more |
8783
+ | `kind` *required* | `"lane"` | — | <br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 7 more |
8784
+ | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 4 more |
8845
8785
  | `lane` *required* | `string` | — | The id of the new lane. |
8846
8786
 
8847
8787
  ##### `LaneProps`
8848
8788
 
8849
- Its table stands on [Lanes](#/lane/type-LaneProps).
8789
+ Its table stands on [Lanes](#lanes).
8850
8790
 
8851
8791
  ##### `LeadInIntent`
8852
8792
 
@@ -8854,9 +8794,9 @@ Change the lead-in on its own.
8854
8794
 
8855
8795
  | Prop | Type | Default | Description |
8856
8796
  |---|---|---|---|
8857
- | `kind` *required* | `"leadIn"` | — | <br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 7 more |
8858
- | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 4 more |
8859
- | `leadIn` *required* | `number` | — | The new duration of the lead-in.<br>Shown in: [Replan the day on the line (Scenarios)](#/scenarios/replan-the-day-on-the-line) |
8797
+ | `kind` *required* | `"leadIn"` | — | <br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 7 more |
8798
+ | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 4 more |
8799
+ | `leadIn` *required* | `number` | — | The new duration of the lead-in.<br>Shown in: [Replan the day on the line (Scenarios)](#replan-the-day-on-the-line) |
8860
8800
 
8861
8801
  ##### `LeadOutIntent`
8862
8802
 
@@ -8864,19 +8804,19 @@ Change the lead-out on its own.
8864
8804
 
8865
8805
  | Prop | Type | Default | Description |
8866
8806
  |---|---|---|---|
8867
- | `kind` *required* | `"leadOut"` | — | <br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 7 more |
8868
- | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 4 more |
8807
+ | `kind` *required* | `"leadOut"` | — | <br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 7 more |
8808
+ | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 4 more |
8869
8809
  | `leadOut` *required* | `number` | — | The new duration of the lead-out. |
8870
8810
 
8871
8811
  ##### `Milestone`
8872
8812
 
8873
- Its table stands on [Milestones](#/milestones/type-Milestone).
8813
+ Its table stands on [Milestones](#milestones).
8874
8814
 
8875
- Used on [Milestones](#/milestones).
8815
+ Used on [Milestones](#milestones).
8876
8816
 
8877
8817
  ##### `MilestonesProps`
8878
8818
 
8879
- Its table stands on [Milestones](#/milestones/type-MilestonesProps).
8819
+ Its table stands on [Milestones](#milestones).
8880
8820
 
8881
8821
  ##### `MoveIntent`
8882
8822
 
@@ -8884,16 +8824,16 @@ Move the subtask in time: the main time keeps its length.
8884
8824
 
8885
8825
  | Prop | Type | Default | Description |
8886
8826
  |---|---|---|---|
8887
- | `kind` *required* | `"move"` | — | <br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 8 more |
8888
- | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 5 more |
8889
- | `from` *required* | `number` | — | The new start of the main time.<br>Shown in: [Push the later stops of a tour (Ripple)](#/ripple/push-the-later-stops), [Replan the day on the line (Scenarios)](#/scenarios/replan-the-day-on-the-line) |
8890
- | `to` *required* | `number` | — | The new end of the main time.<br>Shown in: [Push the later stops of a tour (Ripple)](#/ripple/push-the-later-stops), [Replan the day on the line (Scenarios)](#/scenarios/replan-the-day-on-the-line) |
8827
+ | `kind` *required* | `"move"` | — | <br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 8 more |
8828
+ | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 5 more |
8829
+ | `from` *required* | `number` | — | The new start of the main time.<br>Shown in: [Push the later stops of a tour (Ripple)](#ripple), [Replan the day on the line (Scenarios)](#replan-the-day-on-the-line) |
8830
+ | `to` *required* | `number` | — | The new end of the main time.<br>Shown in: [Push the later stops of a tour (Ripple)](#ripple), [Replan the day on the line (Scenarios)](#replan-the-day-on-the-line) |
8891
8831
 
8892
- Used on [Ripple](#/ripple).
8832
+ Used on [Ripple](#ripple).
8893
8833
 
8894
8834
  ##### `Overlap`
8895
8835
 
8896
- Its table stands on [Findings as data](#/findings/type-Overlap).
8836
+ Its table stands on [Findings as data](#findings-as-data).
8897
8837
 
8898
8838
  ##### `PlaceIntent`
8899
8839
 
@@ -8904,10 +8844,10 @@ no subtask yet; the caller creates one, with its own identity, from
8904
8844
 
8905
8845
  | Prop | Type | Default | Description |
8906
8846
  |---|---|---|---|
8907
- | `kind` *required* | `"place"` | — | <br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 7 more |
8908
- | `item` *required* | `string` | — | The caller's key for the dragged item, as it declared it while dragging.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#/placing/drag-from-the-backlog), [Apply the same rule to work dragged in (Where a subtask may go)](#/where-it-may-go/dragged-in), [Replan the day on the line (Scenarios)](#/scenarios/replan-the-day-on-the-line) |
8847
+ | `kind` *required* | `"place"` | — | <br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 7 more |
8848
+ | `item` *required* | `string` | — | The caller's key for the dragged item, as it declared it while dragging.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#placing-from-outside), [Apply the same rule to work dragged in (Where a subtask may go)](#where-a-subtask-may-go), [Replan the day on the line (Scenarios)](#replan-the-day-on-the-line) |
8909
8849
  | `task` *required* | `string` | — | The task the work belongs to. |
8910
- | `lane` *required* | `string` | — | The lane it was dropped on.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#/placing/drag-from-the-backlog), [Apply the same rule to work dragged in (Where a subtask may go)](#/where-it-may-go/dragged-in) |
8850
+ | `lane` *required* | `string` | — | The lane it was dropped on.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#placing-from-outside), [Apply the same rule to work dragged in (Where a subtask may go)](#where-a-subtask-may-go) |
8911
8851
  | `from` *required* | `number` | — | Where its main time would start. |
8912
8852
  | `to` *required* | `number` | — | Where its main time would end. |
8913
8853
  | `leadIn` | `number` | — | The lead-in it was declared with. |
@@ -8921,13 +8861,13 @@ the drop can only come from the caller.
8921
8861
 
8922
8862
  | Prop | Type | Default | Description |
8923
8863
  |---|---|---|---|
8924
- | `item` *required* | `string` | — | The caller's key for the dragged item; it comes back in the intent.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#/placing/drag-from-the-backlog), [Apply the same rule to work dragged in (Where a subtask may go)](#/where-it-may-go/dragged-in) |
8925
- | `task` *required* | `string` | — | The task the work belongs to.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#/placing/drag-from-the-backlog), [Apply the same rule to work dragged in (Where a subtask may go)](#/where-it-may-go/dragged-in) |
8926
- | `duration` *required* | `number` | — | How long its main time is.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#/placing/drag-from-the-backlog), [Apply the same rule to work dragged in (Where a subtask may go)](#/where-it-may-go/dragged-in) |
8864
+ | `item` *required* | `string` | — | The caller's key for the dragged item; it comes back in the intent.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#placing-from-outside), [Apply the same rule to work dragged in (Where a subtask may go)](#where-a-subtask-may-go) |
8865
+ | `task` *required* | `string` | — | The task the work belongs to.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#placing-from-outside), [Apply the same rule to work dragged in (Where a subtask may go)](#where-a-subtask-may-go) |
8866
+ | `duration` *required* | `number` | — | How long its main time is.<br>Shown in: [Drag work in from the backlog (Placing from outside)](#placing-from-outside), [Apply the same rule to work dragged in (Where a subtask may go)](#where-a-subtask-may-go) |
8927
8867
  | `leadIn` | `number` | — | The lead-in it brings. |
8928
8868
  | `leadOut` | `number` | — | The lead-out it brings. |
8929
8869
 
8930
- Used on [Placing from outside](#/placing) and [Where a subtask may go](#/where-it-may-go).
8870
+ Used on [Placing from outside](#placing-from-outside) and [Where a subtask may go](#where-a-subtask-may-go).
8931
8871
 
8932
8872
  ##### `ResolvedAppearance`
8933
8873
 
@@ -8950,11 +8890,11 @@ point on the screen and a time on a lane. Everything else is props.
8950
8890
 
8951
8891
  | Prop | Type | Default | Description |
8952
8892
  |---|---|---|---|
8953
- | `positionAt` *required* | `(clientX: number, clientY: number) => { time: number; lane: string \| null } \| null` | — | The time and the lane at a client point, or null outside the plot.<br>Shown in: [Place a mark of your own (The handle)](#/handle/place-a-mark) |
8954
- | `clientPointOf` *required* | `(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.<br>Shown in: [Place a mark of your own (The handle)](#/handle/place-a-mark) |
8893
+ | `positionAt` *required* | `(clientX: number, clientY: number) => { time: number; lane: string \| null } \| null` | — | The time and the lane at a client point, or null outside the plot.<br>Shown in: [Place a mark of your own (The handle)](#the-handle) |
8894
+ | `clientPointOf` *required* | `(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.<br>Shown in: [Place a mark of your own (The handle)](#the-handle) |
8955
8895
  | `visibleDomain` *required* | `() => readonly [number, number]` | — | The visible span, as two wall-clock instants. |
8956
8896
 
8957
- Used on [The handle](#/handle).
8897
+ Used on [The handle](#the-handle).
8958
8898
 
8959
8899
  ##### `ScheduleHit`
8960
8900
 
@@ -8971,13 +8911,13 @@ type ScheduleHit =
8971
8911
 
8972
8912
  ##### `ScheduleInteraction`
8973
8913
 
8974
- Its table stands on [Interactions](#/interactions/type-ScheduleInteraction).
8914
+ Its table stands on [Interactions](#interactions).
8975
8915
 
8976
- Used on [Scenarios](#/), [Interactions](#/interactions), [Tooltip](#/tooltip) and [Benchmark](#/benchmark).
8916
+ Used on [Scenarios](#scenarios), [Interactions](#interactions), [Tooltip](#tooltip) and [Benchmark](#benchmark).
8977
8917
 
8978
8918
  ##### `ScheduleOptions`
8979
8919
 
8980
- Its table stands on [View](#/view/type-ScheduleOptions).
8920
+ Its table stands on [View](#view).
8981
8921
 
8982
8922
  ##### `ScheduleParts`
8983
8923
 
@@ -8986,37 +8926,37 @@ it, its view and the setters that change it.
8986
8926
 
8987
8927
  | Prop | Type | Default | Description |
8988
8928
  |---|---|---|---|
8989
- | `Schedule` *required* | `(props: `[`ScheduleProps`](#/schedule/type-ScheduleProps)`) => ReactNode` | — | The schedule. One per `useSchedule`: a second schedule is a second call.<br>Shown in: [The smallest schedule (Installation)](#/installation/smallest-schedule), [A day of tours (First schedule)](#/schedule/first-schedule), [Start from an empty plan (First schedule)](#/schedule/no-work-yet) and 78 more |
8990
- | `Lane` *required* | `typeof Lane` | — | <br>Shown in: [The smallest schedule (Installation)](#/installation/smallest-schedule), [A day of tours (First schedule)](#/schedule/first-schedule), [Start from an empty plan (First schedule)](#/schedule/no-work-yet) and 78 more |
8991
- | `LaneGroup` *required* | `typeof LaneGroup` | — | <br>Shown in: [Group lanes under a head (Lane groups)](#/lane-groups/a-group), [Nest groups to any depth (Lane groups)](#/lane-groups/nesting), [Fold groups from outside (Lane groups)](#/lane-groups/fold-from-outside) and 5 more |
8992
- | `Subtasks` *required* | `typeof Subtasks` | — | <br>Shown in: [The smallest schedule (Installation)](#/installation/smallest-schedule), [A day of tours (First schedule)](#/schedule/first-schedule), [Start from an empty plan (First schedule)](#/schedule/no-work-yet) and 78 more |
8993
- | `Dependencies` *required* | `typeof Dependencies` | — | <br>Shown in: [The smallest schedule (Installation)](#/installation/smallest-schedule), [A day of tours (First schedule)](#/schedule/first-schedule), [Plan a day in the machine shop (First schedule)](#/schedule/machine-plan) and 28 more |
8994
- | `BlockedTimes` *required* | `typeof BlockedTimes` | — | <br>Shown in: [Block out leave and maintenance (Blocked time)](#/blocked-time/leave), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Check a sprint against the leave calendar (Blocked time)](#/blocked-time/team-leave) and 5 more |
8995
- | `Milestones` *required* | `typeof Milestones` | — | <br>Shown in: [Mark a handover and a release (Milestones)](#/milestones/handovers-and-releases), [Say what a milestone is in your own tooltip (Milestones)](#/milestones/say-what-a-milestone-is) |
8996
- | `view` *required* | [`ScheduleView`](#/view/type-ScheduleView) | — | How the planner is looking at the plan: the span and the folded groups.<br>Shown in: [Fold groups from outside (Lane groups)](#/lane-groups/fold-from-outside), [Keep and restore a view (View)](#/view/keep-and-restore), [Keep two schedules in step (Linked schedules)](#/linked-schedules/in-step) and 1 more |
8997
- | `setView` *required* | `(view: `[`ScheduleView`](#/view/type-ScheduleView)`) => void` | — | Goes to a whole view; what it leaves out is shown whole again. Not reported through `onViewChange`: two schedules kept in step by `onViewChange: (v) => other.setView(v)` in both directions do not answer each other. A view with the content already shown changes nothing.<br>Shown in: [Keep and restore a view (View)](#/view/keep-and-restore), [Keep two schedules in step (Linked schedules)](#/linked-schedules/in-step), [Read a rota beside the incidents (Linked schedules)](#/linked-schedules/rota-beside-incidents) |
8998
- | `setDomain` *required* | `(span: readonly [number, number] \| null) => void` | — | Puts a span of two wall-clock instants in view; `null` shows the subtasks' extent.<br>Shown in: [Keep and restore a view (View)](#/view/keep-and-restore) |
8929
+ | `Schedule` *required* | `(props: `[`ScheduleProps`](#first-schedule)`) => ReactNode` | — | The schedule. One per `useSchedule`: a second schedule is a second call.<br>Shown in: [The smallest schedule (Installation)](#installation), [A day of tours (First schedule)](#first-schedule), [Start from an empty plan (First schedule)](#first-schedule) and 78 more |
8930
+ | `Lane` *required* | `typeof Lane` | — | <br>Shown in: [The smallest schedule (Installation)](#installation), [A day of tours (First schedule)](#first-schedule), [Start from an empty plan (First schedule)](#first-schedule) and 78 more |
8931
+ | `LaneGroup` *required* | `typeof LaneGroup` | — | <br>Shown in: [Group lanes under a head (Lane groups)](#lane-groups), [Nest groups to any depth (Lane groups)](#lane-groups), [Fold groups from outside (Lane groups)](#lane-groups) and 5 more |
8932
+ | `Subtasks` *required* | `typeof Subtasks` | — | <br>Shown in: [The smallest schedule (Installation)](#installation), [A day of tours (First schedule)](#first-schedule), [Start from an empty plan (First schedule)](#first-schedule) and 78 more |
8933
+ | `Dependencies` *required* | `typeof Dependencies` | — | <br>Shown in: [The smallest schedule (Installation)](#installation), [A day of tours (First schedule)](#first-schedule), [Plan a day in the machine shop (First schedule)](#first-schedule) and 28 more |
8934
+ | `BlockedTimes` *required* | `typeof BlockedTimes` | — | <br>Shown in: [Block out leave and maintenance (Blocked time)](#blocked-time), [Plan work around someone's leave (Blocked time)](#blocked-time), [Check a sprint against the leave calendar (Blocked time)](#blocked-time) and 5 more |
8935
+ | `Milestones` *required* | `typeof Milestones` | — | <br>Shown in: [Mark a handover and a release (Milestones)](#milestones), [Say what a milestone is in your own tooltip (Milestones)](#milestones) |
8936
+ | `view` *required* | [`ScheduleView`](#view) | — | How the planner is looking at the plan: the span and the folded groups.<br>Shown in: [Fold groups from outside (Lane groups)](#lane-groups), [Keep and restore a view (View)](#view), [Keep two schedules in step (Linked schedules)](#linked-schedules) and 1 more |
8937
+ | `setView` *required* | `(view: `[`ScheduleView`](#view)`) => void` | — | Goes to a whole view; what it leaves out is shown whole again. Not reported through `onViewChange`: two schedules kept in step by `onViewChange: (v) => other.setView(v)` in both directions do not answer each other. A view with the content already shown changes nothing.<br>Shown in: [Keep and restore a view (View)](#view), [Keep two schedules in step (Linked schedules)](#linked-schedules), [Read a rota beside the incidents (Linked schedules)](#linked-schedules) |
8938
+ | `setDomain` *required* | `(span: readonly [number, number] \| null) => void` | — | Puts a span of two wall-clock instants in view; `null` shows the subtasks' extent.<br>Shown in: [Keep and restore a view (View)](#view) |
8999
8939
  | `toggleGroup` *required* | `(id: string) => void` | — | Folds or unfolds one **Lane group**. |
9000
- | `foldAll` *required* | `() => void` | — | Folds every group.<br>Shown in: [Fold groups from outside (Lane groups)](#/lane-groups/fold-from-outside) |
9001
- | `unfoldAll` *required* | `() => void` | — | Unfolds every group.<br>Shown in: [Fold groups from outside (Lane groups)](#/lane-groups/fold-from-outside) |
8940
+ | `foldAll` *required* | `() => void` | — | Folds every group.<br>Shown in: [Fold groups from outside (Lane groups)](#lane-groups) |
8941
+ | `unfoldAll` *required* | `() => void` | — | Unfolds every group.<br>Shown in: [Fold groups from outside (Lane groups)](#lane-groups) |
9002
8942
 
9003
- Used on [Linked schedules](#/linked-schedules).
8943
+ Used on [Linked schedules](#linked-schedules).
9004
8944
 
9005
8945
  ##### `ScheduleProps`
9006
8946
 
9007
- Its table stands on [First schedule](#/schedule/type-ScheduleProps).
8947
+ Its table stands on [First schedule](#first-schedule).
9008
8948
 
9009
8949
  ##### `ScheduleTooltipTarget`
9010
8950
 
9011
- Its table stands on [Tooltip](#/tooltip/type-ScheduleTooltipTarget).
8951
+ Its table stands on [Tooltip](#tooltip).
9012
8952
 
9013
- Used on [Milestones](#/milestones) and [Tooltip](#/tooltip).
8953
+ Used on [Milestones](#milestones) and [Tooltip](#tooltip).
9014
8954
 
9015
8955
  ##### `ScheduleView`
9016
8956
 
9017
- Its table stands on [View](#/view/type-ScheduleView).
8957
+ Its table stands on [View](#view).
9018
8958
 
9019
- Used on [View](#/view).
8959
+ Used on [View](#view).
9020
8960
 
9021
8961
  ##### `SnapRaster`
9022
8962
 
@@ -9024,10 +8964,10 @@ A raster: a step, and where it starts after local midnight.
9024
8964
 
9025
8965
  | Prop | Type | Default | Description |
9026
8966
  |---|---|---|---|
9027
- | `step` *required* | `number` | — | The distance between two lines of the raster, in milliseconds.<br>Shown in: [Snap to handover times (Snapping)](#/snapping/snap-to-handovers) |
9028
- | `offset` *required* | `number` | — | Where the raster starts after local midnight, in milliseconds: six hours for handovers at 06:00, 14:00 and 22:00.<br>Shown in: [Snap to handover times (Snapping)](#/snapping/snap-to-handovers) |
8967
+ | `step` *required* | `number` | — | The distance between two lines of the raster, in milliseconds.<br>Shown in: [Snap to handover times (Snapping)](#snapping) |
8968
+ | `offset` *required* | `number` | — | Where the raster starts after local midnight, in milliseconds: six hours for handovers at 06:00, 14:00 and 22:00.<br>Shown in: [Snap to handover times (Snapping)](#snapping) |
9029
8969
 
9030
- Used on [Snapping](#/snapping).
8970
+ Used on [Snapping](#snapping).
9031
8971
 
9032
8972
  ##### `StretchIntent`
9033
8973
 
@@ -9035,16 +8975,16 @@ Stretch the main time at one or both of its edges.
9035
8975
 
9036
8976
  | Prop | Type | Default | Description |
9037
8977
  |---|---|---|---|
9038
- | `kind` *required* | `"stretch"` | — | <br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 7 more |
9039
- | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#/lane-groups/the-miniature), [Plan work around someone's leave (Blocked time)](#/blocked-time/drag-around), [Refuse a move that double-books someone (Move and lane)](#/move-and-lane/refuse-a-double-booking) and 4 more |
8978
+ | `kind` *required* | `"stretch"` | — | <br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 7 more |
8979
+ | `subtask` *required* | `string` | — | The id of the subtask.<br>Shown in: [Read a folded group (Lane groups)](#lane-groups), [Plan work around someone's leave (Blocked time)](#blocked-time), [Refuse a move that double-books someone (Move and lane)](#move-and-lane) and 4 more |
9040
8980
  | `from` *required* | `number` | — | The new start of the main time. |
9041
8981
  | `to` *required* | `number` | — | The new end of the main time. |
9042
8982
 
9043
8983
  ##### `Subtask`
9044
8984
 
9045
- Its table stands on [Subtasks](#/subtasks/type-Subtask).
8985
+ Its table stands on [Subtasks](#subtasks).
9046
8986
 
9047
- Used on [Scenarios](#/), [Installation](#/installation), [First schedule](#/schedule), [Lanes](#/lane), [Lane groups](#/lane-groups), [Subtasks](#/subtasks), [Bar labels](#/bar-labels), [Appearances](#/appearances), [Overlap](#/overlap), [Dependencies](#/dependencies), [Routes](#/routes), [Time axis and calendar](#/time-axis), [Blocked time](#/blocked-time), [Milestones](#/milestones), [Now line](#/now-line), [Pan and zoom](#/pan-and-zoom), [Selection](#/selection), [Interactions](#/interactions), [Tooltip](#/tooltip), [View](#/view), [Linked schedules](#/linked-schedules), [The handle](#/handle), [Findings as data](#/findings), [Move and lane](#/move-and-lane), [Stretch, lead-in, lead-out](#/stretch), [Snapping](#/snapping), [Placing from outside](#/placing), [Where a subtask may go](#/where-it-may-go), [Ripple](#/ripple) and [Benchmark](#/benchmark).
8987
+ Used on [Scenarios](#scenarios), [Installation](#installation), [First schedule](#first-schedule), [Lanes](#lanes), [Lane groups](#lane-groups), [Subtasks](#subtasks), [Bar labels](#bar-labels), [Appearances](#appearances), [Overlap](#overlap), [Dependencies](#dependencies), [Routes](#routes), [Time axis and calendar](#time-axis-and-calendar), [Blocked time](#blocked-time), [Milestones](#milestones), [Now line](#now-line), [Pan and zoom](#pan-and-zoom), [Selection](#selection), [Interactions](#interactions), [Tooltip](#tooltip), [View](#view), [Linked schedules](#linked-schedules), [The handle](#the-handle), [Findings as data](#findings-as-data), [Move and lane](#move-and-lane), [Stretch, lead-in, lead-out](#stretch-lead-in-lead-out), [Snapping](#snapping), [Placing from outside](#placing-from-outside), [Where a subtask may go](#where-a-subtask-may-go), [Ripple](#ripple) and [Benchmark](#benchmark).
9048
8988
 
9049
8989
  ##### `SubtaskAppearance`
9050
8990
 
@@ -9056,19 +8996,19 @@ type SubtaskAppearance = "provisional" | "fixed" | "muted" | "open";
9056
8996
 
9057
8997
  ##### `SubtasksProps`
9058
8998
 
9059
- Its table stands on [Subtasks](#/subtasks/type-SubtasksProps).
8999
+ Its table stands on [Subtasks](#subtasks).
9060
9000
 
9061
9001
  ##### `Task`
9062
9002
 
9063
- Its table stands on [Subtasks](#/subtasks/type-Task).
9003
+ Its table stands on [Subtasks](#subtasks).
9064
9004
 
9065
- Used on [Scenarios](#/), [Installation](#/installation), [First schedule](#/schedule), [Lanes](#/lane), [Lane groups](#/lane-groups), [Subtasks](#/subtasks), [Bar labels](#/bar-labels), [Appearances](#/appearances), [Overlap](#/overlap), [Dependencies](#/dependencies), [Routes](#/routes), [Time axis and calendar](#/time-axis), [Blocked time](#/blocked-time), [Milestones](#/milestones), [Now line](#/now-line), [Pan and zoom](#/pan-and-zoom), [Selection](#/selection), [Interactions](#/interactions), [Tooltip](#/tooltip), [View](#/view), [Linked schedules](#/linked-schedules), [The handle](#/handle), [Findings as data](#/findings), [Move and lane](#/move-and-lane), [Stretch, lead-in, lead-out](#/stretch), [Snapping](#/snapping), [Placing from outside](#/placing), [Where a subtask may go](#/where-it-may-go), [Ripple](#/ripple) and [Benchmark](#/benchmark).
9005
+ Used on [Scenarios](#scenarios), [Installation](#installation), [First schedule](#first-schedule), [Lanes](#lanes), [Lane groups](#lane-groups), [Subtasks](#subtasks), [Bar labels](#bar-labels), [Appearances](#appearances), [Overlap](#overlap), [Dependencies](#dependencies), [Routes](#routes), [Time axis and calendar](#time-axis-and-calendar), [Blocked time](#blocked-time), [Milestones](#milestones), [Now line](#now-line), [Pan and zoom](#pan-and-zoom), [Selection](#selection), [Interactions](#interactions), [Tooltip](#tooltip), [View](#view), [Linked schedules](#linked-schedules), [The handle](#the-handle), [Findings as data](#findings-as-data), [Move and lane](#move-and-lane), [Stretch, lead-in, lead-out](#stretch-lead-in-lead-out), [Snapping](#snapping), [Placing from outside](#placing-from-outside), [Where a subtask may go](#where-a-subtask-may-go), [Ripple](#ripple) and [Benchmark](#benchmark).
9066
9006
 
9067
9007
  ##### `ViolatedDependency`
9068
9008
 
9069
- Its table stands on [Findings as data](#/findings/type-ViolatedDependency).
9009
+ Its table stands on [Findings as data](#findings-as-data).
9070
9010
 
9071
- Used on [Dependencies](#/dependencies).
9011
+ Used on [Dependencies](#dependencies).
9072
9012
 
9073
9013
  ##### `ZoomLimits`
9074
9014
 
@@ -9076,5 +9016,5 @@ The narrowest and the widest span zoom may reach.
9076
9016
 
9077
9017
  | Prop | Type | Default | Description |
9078
9018
  |---|---|---|---|
9079
- | `min` *required* | `number` | — | <br>Shown in: [Move through the plan (Pan and zoom)](#/pan-and-zoom/pan-and-zoom) |
9080
- | `max` *required* | `number` | — | <br>Shown in: [Move through the plan (Pan and zoom)](#/pan-and-zoom/pan-and-zoom) |
9019
+ | `min` *required* | `number` | — | <br>Shown in: [Move through the plan (Pan and zoom)](#pan-and-zoom) |
9020
+ | `max` *required* | `number` | — | <br>Shown in: [Move through the plan (Pan and zoom)](#pan-and-zoom) |