@umriss-ui/schedule 0.5.7 → 0.6.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/CHANGELOG.md +25 -0
- package/README.md +12 -3
- package/dist/index.d.ts +39 -1
- package/dist/schedule.css +1 -1
- package/dist/schedule.js +1179 -1126
- package/docs/llms-full.md +195 -33
- package/package.json +5 -5
package/docs/llms-full.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @umriss-ui/schedule 0.
|
|
1
|
+
# @umriss-ui/schedule 0.6.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
|
|
|
@@ -1278,7 +1278,7 @@ Under forced colours the plot paints itself in the system colours: the work in t
|
|
|
1278
1278
|
|
|
1279
1279
|
| Prop | Type | Default | Description |
|
|
1280
1280
|
|---|---|---|---|
|
|
1281
|
-
| `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
|
|
1281
|
+
| `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 77 more |
|
|
1282
1282
|
| `laneHeight` | `number` | `44` | Height of one lane in pixels.<br>Shown in: [Scroll more lanes than fit (Lanes)](#/lane/many-lanes) |
|
|
1283
1283
|
| `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 |
|
|
1284
1284
|
| `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) |
|
|
@@ -1293,9 +1293,9 @@ Under forced colours the plot paints itself in the system colours: the work in t
|
|
|
1293
1293
|
| `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 |
|
|
1294
1294
|
| `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) |
|
|
1295
1295
|
| `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 |
|
|
1296
|
-
| `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: [Write your own tooltip content (Tooltip)](#/tooltip/own-tooltip), [Show a detail panel instead (Tooltip)](#/tooltip/detail-panel-instead)
|
|
1296
|
+
| `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 |
|
|
1297
1297
|
| `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 |
|
|
1298
|
-
| `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
|
|
1298
|
+
| `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 77 more |
|
|
1299
1299
|
|
|
1300
1300
|
###### Events
|
|
1301
1301
|
|
|
@@ -1308,7 +1308,7 @@ Under forced colours the plot paints itself in the system colours: the work in t
|
|
|
1308
1308
|
|
|
1309
1309
|
| Prop | Type | Default | Description |
|
|
1310
1310
|
|---|---|---|---|
|
|
1311
|
-
| `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
|
|
1311
|
+
| `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 77 more |
|
|
1312
1312
|
|
|
1313
1313
|
###### Styling
|
|
1314
1314
|
|
|
@@ -1654,8 +1654,8 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
|
|
|
1654
1654
|
|
|
1655
1655
|
| Prop | Type | Default | Description |
|
|
1656
1656
|
|---|---|---|---|
|
|
1657
|
-
| `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
|
|
1658
|
-
| `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
|
|
1657
|
+
| `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 77 more |
|
|
1658
|
+
| `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 |
|
|
1659
1659
|
|
|
1660
1660
|
### Lane groups
|
|
1661
1661
|
|
|
@@ -2167,21 +2167,21 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
|
|
|
2167
2167
|
|
|
2168
2168
|
| Prop | Type | Default | Description |
|
|
2169
2169
|
|---|---|---|---|
|
|
2170
|
-
| `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
|
|
2171
|
-
| `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
|
|
2170
|
+
| `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 77 more |
|
|
2171
|
+
| `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 77 more |
|
|
2172
2172
|
|
|
2173
2173
|
##### `Subtask`
|
|
2174
2174
|
|
|
2175
2175
|
| Prop | Type | Default | Description |
|
|
2176
2176
|
|---|---|---|---|
|
|
2177
|
-
| `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
|
|
2178
|
-
| `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
|
|
2179
|
-
| `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
|
|
2180
|
-
| `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
|
|
2181
|
-
| `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
|
|
2177
|
+
| `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 74 more |
|
|
2178
|
+
| `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 70 more |
|
|
2179
|
+
| `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 70 more |
|
|
2180
|
+
| `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 70 more |
|
|
2181
|
+
| `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 70 more |
|
|
2182
2182
|
| `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 |
|
|
2183
2183
|
| `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 |
|
|
2184
|
-
| `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
|
|
2184
|
+
| `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 27 more |
|
|
2185
2185
|
| `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 |
|
|
2186
2186
|
| `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) |
|
|
2187
2187
|
|
|
@@ -2189,9 +2189,9 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
|
|
|
2189
2189
|
|
|
2190
2190
|
| Prop | Type | Default | Description |
|
|
2191
2191
|
|---|---|---|---|
|
|
2192
|
-
| `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
|
|
2193
|
-
| `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
|
|
2194
|
-
| `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
|
|
2192
|
+
| `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 69 more |
|
|
2193
|
+
| `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 69 more |
|
|
2194
|
+
| `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 69 more |
|
|
2195
2195
|
|
|
2196
2196
|
##### Types on this page
|
|
2197
2197
|
|
|
@@ -4126,6 +4126,152 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
|
|
|
4126
4126
|
| `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 |
|
|
4127
4127
|
| `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 |
|
|
4128
4128
|
|
|
4129
|
+
### Milestones
|
|
4130
|
+
|
|
4131
|
+
A point in time on a lane - a handover, a release, a deadline - drawn as a diamond above the work, reached by the keys and named in the tooltip.
|
|
4132
|
+
|
|
4133
|
+
```ts
|
|
4134
|
+
import { useSchedule } from "@umriss-ui/schedule";
|
|
4135
|
+
```
|
|
4136
|
+
|
|
4137
|
+
Demo page: https://romanhaendler.github.io/umriss-ui/schedule/milestones/
|
|
4138
|
+
|
|
4139
|
+
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.
|
|
4140
|
+
|
|
4141
|
+
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.
|
|
4142
|
+
|
|
4143
|
+
#### Examples
|
|
4144
|
+
|
|
4145
|
+
##### Mark a handover and a release
|
|
4146
|
+
|
|
4147
|
+
A point in time on a lane is a mark, not a bar: `Milestones` draws a diamond at `at`, above the work.
|
|
4148
|
+
|
|
4149
|
+
```tsx
|
|
4150
|
+
import { Stack } from "@umriss-ui/core";
|
|
4151
|
+
import { useSchedule } from "@umriss-ui/schedule";
|
|
4152
|
+
import type { Milestone, Subtask, Task } from "@umriss-ui/schedule";
|
|
4153
|
+
|
|
4154
|
+
/* A milestone is data beside the work: one list, each point naming its lane
|
|
4155
|
+
and the instant it stands at, as a release calendar holds it. It is drawn
|
|
4156
|
+
above the bars - the design handover below stands on the end of the design
|
|
4157
|
+
bar and is still seen - and it has no duration, no task and no colour of
|
|
4158
|
+
its own.
|
|
4159
|
+
|
|
4160
|
+
Hover it and the tooltip names it and says when; the keys reach it as they
|
|
4161
|
+
reach the work, with the arrows in time order along the lane, and the live
|
|
4162
|
+
region reads its lane, its label and its time. It is not dragged and
|
|
4163
|
+
reports no intent. */
|
|
4164
|
+
|
|
4165
|
+
const day = (d: number, hours = 0) => new Date(2026, 2, 16 + d, hours).getTime();
|
|
4166
|
+
|
|
4167
|
+
const PROJECTS: readonly Task[] = [
|
|
4168
|
+
{ id: "portal", name: "Customer portal", color: "light-dark(#2563eb, #6b9bff)" },
|
|
4169
|
+
{ id: "billing", name: "Billing rework", color: "light-dark(#0d9488, #3cc7b8)" },
|
|
4170
|
+
];
|
|
4171
|
+
|
|
4172
|
+
const WORK: readonly Subtask[] = [
|
|
4173
|
+
{ id: "portal-design", task: "portal", lane: "anna", from: day(0, 9), to: day(1, 17), name: "Design" },
|
|
4174
|
+
{ id: "portal-front", task: "portal", lane: "chloe", from: day(1, 9), to: day(3, 17), name: "Front end" },
|
|
4175
|
+
{ id: "billing-api", task: "billing", lane: "ben", from: day(0, 9), to: day(2, 17), name: "Invoice API" },
|
|
4176
|
+
];
|
|
4177
|
+
|
|
4178
|
+
const MILESTONES: readonly Milestone[] = [
|
|
4179
|
+
{ id: "design-handover", lane: "anna", at: day(1, 17), label: "Design handover" },
|
|
4180
|
+
{ id: "api-freeze", lane: "ben", at: day(2, 17), label: "API freeze" },
|
|
4181
|
+
{ id: "release", lane: "chloe", at: day(4, 12), label: "Release 2.0" },
|
|
4182
|
+
];
|
|
4183
|
+
|
|
4184
|
+
export default function HandoversAndReleases() {
|
|
4185
|
+
const { Schedule, Lane, Subtasks, Milestones } = useSchedule({ initialView: { domain: [day(0, 6), day(5, 0)] } });
|
|
4186
|
+
return (
|
|
4187
|
+
<Stack gap={3}>
|
|
4188
|
+
<Schedule ariaLabel="Portal and billing plan, week of 16 March" height={188}>
|
|
4189
|
+
<Lane id="anna" label="Anna Berg" />
|
|
4190
|
+
<Lane id="ben" label="Ben Ortiz" />
|
|
4191
|
+
<Lane id="chloe" label="Chloe Lind" />
|
|
4192
|
+
<Subtasks data={WORK} tasks={PROJECTS} />
|
|
4193
|
+
<Milestones data={MILESTONES} />
|
|
4194
|
+
</Schedule>
|
|
4195
|
+
</Stack>
|
|
4196
|
+
);
|
|
4197
|
+
}
|
|
4198
|
+
```
|
|
4199
|
+
|
|
4200
|
+
##### Say what a milestone is in your own tooltip
|
|
4201
|
+
|
|
4202
|
+
Over a milestone the target is `milestone`: the point itself, with its `label` and `at`, for a tooltip of your own.
|
|
4203
|
+
|
|
4204
|
+
```tsx
|
|
4205
|
+
import { Stack, Text } from "@umriss-ui/core";
|
|
4206
|
+
import { useSchedule } from "@umriss-ui/schedule";
|
|
4207
|
+
import type { Milestone, ScheduleTooltipTarget, Subtask, Task } from "@umriss-ui/schedule";
|
|
4208
|
+
|
|
4209
|
+
const at = (hours: number, minutes = 0) => new Date(2026, 2, 17, hours, minutes).getTime();
|
|
4210
|
+
|
|
4211
|
+
const PROJECTS: readonly Task[] = [{ id: "portal", name: "Member portal", color: "light-dark(#2563eb, #6b9bff)" }];
|
|
4212
|
+
|
|
4213
|
+
const WORK: readonly Subtask[] = [
|
|
4214
|
+
{ id: "build", task: "portal", lane: "arjun", from: at(7), to: at(12), name: "Build" },
|
|
4215
|
+
{ id: "test", task: "portal", lane: "eva", from: at(12, 30), to: at(15), name: "Test" },
|
|
4216
|
+
];
|
|
4217
|
+
|
|
4218
|
+
const MILESTONES: readonly Milestone[] = [{ id: "code-freeze", lane: "arjun", at: at(12), label: "Code freeze" }];
|
|
4219
|
+
|
|
4220
|
+
const time = (instant: number) => new Date(instant).toLocaleTimeString("en-GB", { hour: "2-digit", minute: "2-digit" });
|
|
4221
|
+
|
|
4222
|
+
function Own({ target }: { target: ScheduleTooltipTarget }) {
|
|
4223
|
+
if (target.kind === "dependency") return null;
|
|
4224
|
+
if (target.kind === "subtask") return <Text size="sm">{target.subtask.name}</Text>;
|
|
4225
|
+
return (
|
|
4226
|
+
<Stack gap={1}>
|
|
4227
|
+
<Text size="sm" weight="semibold">
|
|
4228
|
+
{target.milestone.label ?? target.milestone.id}
|
|
4229
|
+
</Text>
|
|
4230
|
+
<Text size="xs" tone="secondary">
|
|
4231
|
+
Test may begin from {time(target.milestone.at)}
|
|
4232
|
+
</Text>
|
|
4233
|
+
</Stack>
|
|
4234
|
+
);
|
|
4235
|
+
}
|
|
4236
|
+
|
|
4237
|
+
export default function SayWhatAMilestoneIs() {
|
|
4238
|
+
const { Schedule, Lane, Subtasks, Milestones } = useSchedule({ initialView: { domain: [at(6, 30), at(15, 30)] } });
|
|
4239
|
+
return (
|
|
4240
|
+
<Schedule ariaLabel="Build and test around the code freeze" height={150} tooltip={(target) => <Own target={target} />}>
|
|
4241
|
+
<Lane id="arjun" label="Arjun Mehta" />
|
|
4242
|
+
<Lane id="eva" label="Eva Novak" />
|
|
4243
|
+
<Subtasks data={WORK} tasks={PROJECTS} />
|
|
4244
|
+
<Milestones data={MILESTONES} />
|
|
4245
|
+
</Schedule>
|
|
4246
|
+
);
|
|
4247
|
+
}
|
|
4248
|
+
```
|
|
4249
|
+
|
|
4250
|
+
#### When to use something else
|
|
4251
|
+
|
|
4252
|
+
- Time a lane is not available, as a span → Blocked time
|
|
4253
|
+
|
|
4254
|
+
#### Keyboard
|
|
4255
|
+
|
|
4256
|
+
The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
|
|
4257
|
+
|
|
4258
|
+
#### API
|
|
4259
|
+
|
|
4260
|
+
##### `MilestonesProps`
|
|
4261
|
+
|
|
4262
|
+
| Prop | Type | Default | Description |
|
|
4263
|
+
|---|---|---|---|
|
|
4264
|
+
| `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) |
|
|
4265
|
+
|
|
4266
|
+
##### `Milestone`
|
|
4267
|
+
|
|
4268
|
+
| Prop | Type | Default | Description |
|
|
4269
|
+
|---|---|---|---|
|
|
4270
|
+
| `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) |
|
|
4271
|
+
| `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) |
|
|
4272
|
+
| `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) |
|
|
4273
|
+
| `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) |
|
|
4274
|
+
|
|
4129
4275
|
### Now line
|
|
4130
4276
|
|
|
4131
4277
|
A line across the lanes at the present moment, so that whatever should have happened by now stands to its left. It follows the clock, or stays at a fixed instant for a replay.
|
|
@@ -5013,6 +5159,7 @@ What a pointer is on.
|
|
|
5013
5159
|
type ScheduleHit =
|
|
5014
5160
|
| { readonly kind: "subtask"; readonly subtask: Subtask; readonly part: "leadIn" | "main" | "leadOut" }
|
|
5015
5161
|
| { readonly kind: "dependency"; readonly dependency: Dependency }
|
|
5162
|
+
| { readonly kind: "milestone"; readonly milestone: Milestone }
|
|
5016
5163
|
| { readonly kind: "lane"; readonly lane: string }
|
|
5017
5164
|
| { readonly kind: "nothing" };
|
|
5018
5165
|
```
|
|
@@ -5125,8 +5272,9 @@ const LOADS: Record<string, string> = {
|
|
|
5125
5272
|
};
|
|
5126
5273
|
|
|
5127
5274
|
function LoadTooltip({ target }: { target: ScheduleTooltipTarget }) {
|
|
5128
|
-
const task = target.task;
|
|
5129
|
-
const found =
|
|
5275
|
+
const task = target.kind === "milestone" ? undefined : target.task;
|
|
5276
|
+
const found =
|
|
5277
|
+
target.kind === "subtask" ? target.overlapping.length + target.violatedDependencies.length : target.kind === "dependency" && target.violated ? 1 : 0;
|
|
5130
5278
|
return (
|
|
5131
5279
|
<Stack gap={1}>
|
|
5132
5280
|
<Text size="sm" weight="semibold">
|
|
@@ -5343,6 +5491,7 @@ function Covers({ target }: { target: ScheduleTooltipTarget }) {
|
|
|
5343
5491
|
</Stack>
|
|
5344
5492
|
);
|
|
5345
5493
|
}
|
|
5494
|
+
if (target.kind === "milestone") return null;
|
|
5346
5495
|
return (
|
|
5347
5496
|
<Stack gap={1}>
|
|
5348
5497
|
<Text size="sm" weight="semibold">
|
|
@@ -5385,12 +5534,13 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
|
|
|
5385
5534
|
|
|
5386
5535
|
| Prop | Type | Default | Description |
|
|
5387
5536
|
|---|---|---|---|
|
|
5388
|
-
| `kind` *required* | `"subtask" \| "dependency"` | — | A subtask 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) |
|
|
5389
|
-
| `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) |
|
|
5390
|
-
| `task`
|
|
5537
|
+
| `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) |
|
|
5538
|
+
| `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) |
|
|
5539
|
+
| `task` | [`Task`](#/subtasks/type-Task)` \| undefined` | — | Its task, where the tasks name it.<br>Shown in: [Write your own tooltip content](#/tooltip/own-tooltip) |
|
|
5391
5540
|
| `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) |
|
|
5392
5541
|
| `violatedDependencies` | `readonly `[`ViolatedDependency`](#/findings/type-ViolatedDependency)`[]` | — | The violated dependencies leaving or reaching it.<br>Shown in: [Write your own tooltip content](#/tooltip/own-tooltip) |
|
|
5393
5542
|
| `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) |
|
|
5543
|
+
| `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) |
|
|
5394
5544
|
| `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) |
|
|
5395
5545
|
| `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) |
|
|
5396
5546
|
| `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) |
|
|
@@ -5527,7 +5677,7 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
|
|
|
5527
5677
|
|
|
5528
5678
|
| Prop | Type | Default | Description |
|
|
5529
5679
|
|---|---|---|---|
|
|
5530
|
-
| `initialView` | [`ScheduleView`](#type-ScheduleView) | — | The view to start from, and to go to whenever one differing in content from the last is handed in - the same view again changes nothing, and what it leaves out is reset; one the schedule reported itself, handed back late, is its own state coming back and not gone to. 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
|
|
5680
|
+
| `initialView` | [`ScheduleView`](#type-ScheduleView) | — | The view to start from, and to go to whenever one differing in content from the last is handed in - the same view again changes nothing, and what it leaves out is reset; one the schedule reported itself, handed back late, is its own state coming back and not gone to. 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 77 more |
|
|
5531
5681
|
|
|
5532
5682
|
###### Events
|
|
5533
5683
|
|
|
@@ -5539,7 +5689,7 @@ The keys of [First schedule](#/schedule/keyboard-schedule) apply here.
|
|
|
5539
5689
|
|
|
5540
5690
|
| Prop | Type | Default | Description |
|
|
5541
5691
|
|---|---|---|---|
|
|
5542
|
-
| `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
|
|
5692
|
+
| `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 |
|
|
5543
5693
|
| `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) |
|
|
5544
5694
|
|
|
5545
5695
|
### Linked schedules
|
|
@@ -7996,7 +8146,7 @@ Demo page: https://romanhaendler.github.io/umriss-ui/schedule/api/
|
|
|
7996
8146
|
##### `useSchedule`
|
|
7997
8147
|
|
|
7998
8148
|
Declares a schedule: hands back `Schedule` and the parts declared inside it
|
|
7999
|
-
- `Lane`, `LaneGroup`, `Subtasks`, `Dependencies`, `BlockedTimes` -, its
|
|
8149
|
+
- `Lane`, `LaneGroup`, `Subtasks`, `Dependencies`, `BlockedTimes`, `Milestones` -, its
|
|
8000
8150
|
`view` and the setters `setDomain`, `toggleGroup`, `foldAll` and
|
|
8001
8151
|
`unfoldAll`. A ref on `Schedule` still gives the `ScheduleHandle`.
|
|
8002
8152
|
|
|
@@ -8004,7 +8154,7 @@ Declares a schedule: hands back `Schedule` and the parts declared inside it
|
|
|
8004
8154
|
function useSchedule(options?: ScheduleOptions): ScheduleParts;
|
|
8005
8155
|
```
|
|
8006
8156
|
|
|
8007
|
-
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), [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) and [Ripple](#/ripple).
|
|
8157
|
+
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) and [Ripple](#/ripple).
|
|
8008
8158
|
|
|
8009
8159
|
#### Functions
|
|
8010
8160
|
|
|
@@ -8295,6 +8445,16 @@ Change the lead-out on its own.
|
|
|
8295
8445
|
| `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 |
|
|
8296
8446
|
| `leadOut` *required* | `number` | — | The new duration of the lead-out. |
|
|
8297
8447
|
|
|
8448
|
+
##### `Milestone`
|
|
8449
|
+
|
|
8450
|
+
Its table stands on [Milestones](#/milestones/type-Milestone).
|
|
8451
|
+
|
|
8452
|
+
Used on [Milestones](#/milestones).
|
|
8453
|
+
|
|
8454
|
+
##### `MilestonesProps`
|
|
8455
|
+
|
|
8456
|
+
Its table stands on [Milestones](#/milestones/type-MilestonesProps).
|
|
8457
|
+
|
|
8298
8458
|
##### `MoveIntent`
|
|
8299
8459
|
|
|
8300
8460
|
Move the subtask in time: the main time keeps its length.
|
|
@@ -8383,6 +8543,7 @@ What a pointer is on.
|
|
|
8383
8543
|
type ScheduleHit =
|
|
8384
8544
|
| { readonly kind: "subtask"; readonly subtask: Subtask; readonly part: "leadIn" | "main" | "leadOut" }
|
|
8385
8545
|
| { readonly kind: "dependency"; readonly dependency: Dependency }
|
|
8546
|
+
| { readonly kind: "milestone"; readonly milestone: Milestone }
|
|
8386
8547
|
| { readonly kind: "lane"; readonly lane: string }
|
|
8387
8548
|
| { readonly kind: "nothing" };
|
|
8388
8549
|
```
|
|
@@ -8404,12 +8565,13 @@ it, its view and the setters that change it.
|
|
|
8404
8565
|
|
|
8405
8566
|
| Prop | Type | Default | Description |
|
|
8406
8567
|
|---|---|---|---|
|
|
8407
|
-
| `Schedule` *required* | `ForwardRefExoticComponent<`[`ScheduleProps`](#/schedule/type-ScheduleProps)` & RefAttributes<`[`ScheduleHandle`](#type-ScheduleHandle)`>>` | — | 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
|
|
8408
|
-
| `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
|
|
8568
|
+
| `Schedule` *required* | `ForwardRefExoticComponent<`[`ScheduleProps`](#/schedule/type-ScheduleProps)` & RefAttributes<`[`ScheduleHandle`](#type-ScheduleHandle)`>>` | — | 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 77 more |
|
|
8569
|
+
| `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 77 more |
|
|
8409
8570
|
| `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 |
|
|
8410
|
-
| `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
|
|
8571
|
+
| `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 77 more |
|
|
8411
8572
|
| `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 27 more |
|
|
8412
8573
|
| `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 |
|
|
8574
|
+
| `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) |
|
|
8413
8575
|
| `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), [Place a mark of your own (The handle)](#/handle/place-a-mark) |
|
|
8414
8576
|
| `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) |
|
|
8415
8577
|
| `toggleGroup` *required* | `(id: string) => void` | — | Folds or unfolds one **Lane group**. |
|
|
@@ -8424,7 +8586,7 @@ Its table stands on [First schedule](#/schedule/type-ScheduleProps).
|
|
|
8424
8586
|
|
|
8425
8587
|
Its table stands on [Tooltip](#/tooltip/type-ScheduleTooltipTarget).
|
|
8426
8588
|
|
|
8427
|
-
Used on [Tooltip](#/tooltip).
|
|
8589
|
+
Used on [Milestones](#/milestones) and [Tooltip](#/tooltip).
|
|
8428
8590
|
|
|
8429
8591
|
##### `ScheduleView`
|
|
8430
8592
|
|
|
@@ -8458,7 +8620,7 @@ Stretch the main time at one or both of its edges.
|
|
|
8458
8620
|
|
|
8459
8621
|
Its table stands on [Subtasks](#/subtasks/type-Subtask).
|
|
8460
8622
|
|
|
8461
|
-
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), [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) and [Ripple](#/ripple).
|
|
8623
|
+
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) and [Ripple](#/ripple).
|
|
8462
8624
|
|
|
8463
8625
|
##### `SubtaskAppearance`
|
|
8464
8626
|
|
|
@@ -8476,7 +8638,7 @@ Its table stands on [Subtasks](#/subtasks/type-SubtasksProps).
|
|
|
8476
8638
|
|
|
8477
8639
|
Its table stands on [Subtasks](#/subtasks/type-Task).
|
|
8478
8640
|
|
|
8479
|
-
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), [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) and [Ripple](#/ripple).
|
|
8641
|
+
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) and [Ripple](#/ripple).
|
|
8480
8642
|
|
|
8481
8643
|
##### `ViolatedDependency`
|
|
8482
8644
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@umriss-ui/schedule",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "React Gantt-style schedule for data-dense applications - work on lanes over time, with dependencies, blocked time, findings and controlled editing.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Roman Händler",
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"peerDependencies": {
|
|
51
51
|
"react": ">=18",
|
|
52
52
|
"react-dom": ">=18",
|
|
53
|
-
"@umriss-ui/charts": "^0.
|
|
54
|
-
"@umriss-ui/core": "^0.
|
|
53
|
+
"@umriss-ui/charts": "^0.15.0",
|
|
54
|
+
"@umriss-ui/core": "^0.31.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@fontsource/geist-mono": "^5.3.0",
|
|
@@ -65,9 +65,9 @@
|
|
|
65
65
|
"typescript": "^5.6.3",
|
|
66
66
|
"vite": "^6.0.0",
|
|
67
67
|
"vite-plugin-dts": "^4.3.0",
|
|
68
|
-
"@umriss-ui/charts": "0.
|
|
68
|
+
"@umriss-ui/charts": "0.15.0",
|
|
69
69
|
"@umriss-ui/demo": "0.0.0",
|
|
70
|
-
"@umriss-ui/core": "0.
|
|
70
|
+
"@umriss-ui/core": "0.31.0"
|
|
71
71
|
},
|
|
72
72
|
"scripts": {
|
|
73
73
|
"props": "node --disable-warning=ExperimentalWarning --experimental-strip-types demo/props.ts",
|