@nowline/layout 0.8.6 → 0.10.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/dist/axis-columns.d.ts +70 -0
- package/dist/axis-columns.d.ts.map +1 -0
- package/dist/axis-columns.js +104 -0
- package/dist/axis-columns.js.map +1 -0
- package/dist/calendar-resolver.d.ts +27 -0
- package/dist/calendar-resolver.d.ts.map +1 -0
- package/dist/calendar-resolver.js +132 -0
- package/dist/calendar-resolver.js.map +1 -0
- package/dist/calendar.d.ts +0 -19
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +4 -44
- package/dist/calendar.js.map +1 -1
- package/dist/canvas-width.d.ts +23 -0
- package/dist/canvas-width.d.ts.map +1 -0
- package/dist/canvas-width.js +26 -0
- package/dist/canvas-width.js.map +1 -0
- package/dist/capacity.d.ts +28 -0
- package/dist/capacity.d.ts.map +1 -1
- package/dist/capacity.js +64 -29
- package/dist/capacity.js.map +1 -1
- package/dist/chart-translation.d.ts +22 -0
- package/dist/chart-translation.d.ts.map +1 -0
- package/dist/chart-translation.js +83 -0
- package/dist/chart-translation.js.map +1 -0
- package/dist/container-header-geometry.d.ts +64 -0
- package/dist/container-header-geometry.d.ts.map +1 -0
- package/dist/container-header-geometry.js +89 -0
- package/dist/container-header-geometry.js.map +1 -0
- package/dist/dsl-utils.d.ts +3 -4
- package/dist/dsl-utils.d.ts.map +1 -1
- package/dist/dsl-utils.js +8 -25
- package/dist/dsl-utils.js.map +1 -1
- package/dist/edge-routing.d.ts +69 -78
- package/dist/edge-routing.d.ts.map +1 -1
- package/dist/edge-routing.js +271 -401
- package/dist/edge-routing.js.map +1 -1
- package/dist/frame-tab-geometry.d.ts +24 -14
- package/dist/frame-tab-geometry.d.ts.map +1 -1
- package/dist/frame-tab-geometry.js +69 -23
- package/dist/frame-tab-geometry.js.map +1 -1
- package/dist/header-card-geometry.d.ts +12 -0
- package/dist/header-card-geometry.d.ts.map +1 -1
- package/dist/header-card-geometry.js +14 -2
- package/dist/header-card-geometry.js.map +1 -1
- package/dist/header-logo.d.ts +28 -0
- package/dist/header-logo.d.ts.map +1 -0
- package/dist/header-logo.js +51 -0
- package/dist/header-logo.js.map +1 -0
- package/dist/i18n.d.ts +11 -0
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +11 -1
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +20 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -7
- package/dist/index.js.map +1 -1
- package/dist/inline-date-pin-geometry.d.ts +19 -11
- package/dist/inline-date-pin-geometry.d.ts.map +1 -1
- package/dist/inline-date-pin-geometry.js +45 -46
- package/dist/inline-date-pin-geometry.js.map +1 -1
- package/dist/item-bar-geometry.d.ts +192 -4
- package/dist/item-bar-geometry.d.ts.map +1 -1
- package/dist/item-bar-geometry.js +258 -5
- package/dist/item-bar-geometry.js.map +1 -1
- package/dist/item-port-geometry.d.ts +13 -0
- package/dist/item-port-geometry.d.ts.map +1 -0
- package/dist/item-port-geometry.js +63 -0
- package/dist/item-port-geometry.js.map +1 -0
- package/dist/layout-context.d.ts +115 -51
- package/dist/layout-context.d.ts.map +1 -1
- package/dist/layout-context.js +96 -5
- package/dist/layout-context.js.map +1 -1
- package/dist/layout-insights.d.ts.map +1 -1
- package/dist/layout-insights.js +73 -1
- package/dist/layout-insights.js.map +1 -1
- package/dist/layout.d.ts +35 -0
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +18 -1315
- package/dist/layout.js.map +1 -1
- package/dist/nodes/anchor-node.d.ts.map +1 -1
- package/dist/nodes/anchor-node.js +11 -4
- package/dist/nodes/anchor-node.js.map +1 -1
- package/dist/nodes/content-extent.d.ts +24 -0
- package/dist/nodes/content-extent.d.ts.map +1 -0
- package/dist/nodes/content-extent.js +100 -0
- package/dist/nodes/content-extent.js.map +1 -0
- package/dist/nodes/dependency-edges.d.ts +6 -0
- package/dist/nodes/dependency-edges.d.ts.map +1 -0
- package/dist/nodes/dependency-edges.js +148 -0
- package/dist/nodes/dependency-edges.js.map +1 -0
- package/dist/nodes/footnote-node.d.ts +24 -3
- package/dist/nodes/footnote-node.d.ts.map +1 -1
- package/dist/nodes/footnote-node.js +129 -25
- package/dist/nodes/footnote-node.js.map +1 -1
- package/dist/nodes/group-node.d.ts +10 -21
- package/dist/nodes/group-node.d.ts.map +1 -1
- package/dist/nodes/group-node.js +79 -152
- package/dist/nodes/group-node.js.map +1 -1
- package/dist/nodes/header-node.d.ts +56 -0
- package/dist/nodes/header-node.d.ts.map +1 -0
- package/dist/nodes/header-node.js +163 -0
- package/dist/nodes/header-node.js.map +1 -0
- package/dist/nodes/include-node.d.ts +22 -12
- package/dist/nodes/include-node.d.ts.map +1 -1
- package/dist/nodes/include-node.js +95 -62
- package/dist/nodes/include-node.js.map +1 -1
- package/dist/nodes/item-measure.d.ts +135 -0
- package/dist/nodes/item-measure.d.ts.map +1 -0
- package/dist/nodes/item-measure.js +514 -0
- package/dist/nodes/item-measure.js.map +1 -0
- package/dist/nodes/item-node.d.ts +162 -9
- package/dist/nodes/item-node.d.ts.map +1 -1
- package/dist/nodes/item-node.js +256 -69
- package/dist/nodes/item-node.js.map +1 -1
- package/dist/nodes/marker-band.d.ts +118 -0
- package/dist/nodes/marker-band.d.ts.map +1 -0
- package/dist/nodes/marker-band.js +303 -0
- package/dist/nodes/marker-band.js.map +1 -0
- package/dist/nodes/marker-geometry.js +1 -1
- package/dist/nodes/marker-geometry.js.map +1 -1
- package/dist/nodes/milestone-node.d.ts +112 -15
- package/dist/nodes/milestone-node.d.ts.map +1 -1
- package/dist/nodes/milestone-node.js +246 -95
- package/dist/nodes/milestone-node.js.map +1 -1
- package/dist/nodes/nowline-node.d.ts +8 -0
- package/dist/nodes/nowline-node.d.ts.map +1 -0
- package/dist/nodes/nowline-node.js +74 -0
- package/dist/nodes/nowline-node.js.map +1 -0
- package/dist/nodes/parallel-node.d.ts +7 -12
- package/dist/nodes/parallel-node.d.ts.map +1 -1
- package/dist/nodes/parallel-node.js +66 -30
- package/dist/nodes/parallel-node.js.map +1 -1
- package/dist/nodes/region-markers.d.ts +41 -0
- package/dist/nodes/region-markers.d.ts.map +1 -0
- package/dist/nodes/region-markers.js +130 -0
- package/dist/nodes/region-markers.js.map +1 -0
- package/dist/nodes/roadmap-node.d.ts +9 -72
- package/dist/nodes/roadmap-node.d.ts.map +1 -1
- package/dist/nodes/roadmap-node.js +38 -788
- package/dist/nodes/roadmap-node.js.map +1 -1
- package/dist/nodes/row-track.d.ts +33 -0
- package/dist/nodes/row-track.d.ts.map +1 -0
- package/dist/nodes/row-track.js +170 -0
- package/dist/nodes/row-track.js.map +1 -0
- package/dist/nodes/sequence-item.d.ts +25 -0
- package/dist/nodes/sequence-item.d.ts.map +1 -0
- package/dist/nodes/sequence-item.js +396 -0
- package/dist/nodes/sequence-item.js.map +1 -0
- package/dist/nodes/sequence-one.d.ts +5 -0
- package/dist/nodes/sequence-one.d.ts.map +1 -0
- package/dist/nodes/sequence-one.js +26 -0
- package/dist/nodes/sequence-one.js.map +1 -0
- package/dist/nodes/swimlane-node.d.ts +5 -17
- package/dist/nodes/swimlane-node.d.ts.map +1 -1
- package/dist/nodes/swimlane-node.js +62 -145
- package/dist/nodes/swimlane-node.js.map +1 -1
- package/dist/nodes/wave-node.d.ts +52 -0
- package/dist/nodes/wave-node.d.ts.map +1 -0
- package/dist/nodes/wave-node.js +483 -0
- package/dist/nodes/wave-node.js.map +1 -0
- package/dist/non-working-display.d.ts +14 -0
- package/dist/non-working-display.d.ts.map +1 -0
- package/dist/non-working-display.js +28 -0
- package/dist/non-working-display.js.map +1 -0
- package/dist/phases/date-window.d.ts +48 -0
- package/dist/phases/date-window.d.ts.map +1 -0
- package/dist/phases/date-window.js +130 -0
- package/dist/phases/date-window.js.map +1 -0
- package/dist/phases/finalize.d.ts +198 -0
- package/dist/phases/finalize.d.ts.map +1 -0
- package/dist/phases/finalize.js +1058 -0
- package/dist/phases/finalize.js.map +1 -0
- package/dist/phases/measure.d.ts +77 -0
- package/dist/phases/measure.d.ts.map +1 -0
- package/dist/phases/measure.js +222 -0
- package/dist/phases/measure.js.map +1 -0
- package/dist/phases/place.d.ts +28 -0
- package/dist/phases/place.d.ts.map +1 -0
- package/dist/phases/place.js +225 -0
- package/dist/phases/place.js.map +1 -0
- package/dist/renderable.d.ts.map +1 -1
- package/dist/renderable.js +23 -3
- package/dist/renderable.js.map +1 -1
- package/dist/resolve-today.d.ts +11 -1
- package/dist/resolve-today.d.ts.map +1 -1
- package/dist/resolve-today.js +26 -12
- package/dist/resolve-today.js.map +1 -1
- package/dist/row-packer.d.ts +42 -16
- package/dist/row-packer.d.ts.map +1 -1
- package/dist/row-packer.js +51 -78
- package/dist/row-packer.js.map +1 -1
- package/dist/schedule.d.ts +58 -1
- package/dist/schedule.d.ts.map +1 -1
- package/dist/schedule.js +280 -106
- package/dist/schedule.js.map +1 -1
- package/dist/start-rules.d.ts +27 -0
- package/dist/start-rules.d.ts.map +1 -0
- package/dist/start-rules.js +91 -0
- package/dist/start-rules.js.map +1 -0
- package/dist/start-terms.d.ts +23 -0
- package/dist/start-terms.d.ts.map +1 -0
- package/dist/start-terms.js +27 -0
- package/dist/start-terms.js.map +1 -0
- package/dist/status-dot.d.ts +46 -0
- package/dist/status-dot.d.ts.map +1 -0
- package/dist/status-dot.js +78 -0
- package/dist/status-dot.js.map +1 -0
- package/dist/style-resolution.d.ts.map +1 -1
- package/dist/style-resolution.js +23 -43
- package/dist/style-resolution.js.map +1 -1
- package/dist/text-measure.d.ts +28 -0
- package/dist/text-measure.d.ts.map +1 -0
- package/dist/text-measure.js +70 -0
- package/dist/text-measure.js.map +1 -0
- package/dist/themes/contrast.d.ts +4 -0
- package/dist/themes/contrast.d.ts.map +1 -0
- package/dist/themes/contrast.js +32 -0
- package/dist/themes/contrast.js.map +1 -0
- package/dist/themes/dark.d.ts.map +1 -1
- package/dist/themes/dark.js +28 -1
- package/dist/themes/dark.js.map +1 -1
- package/dist/themes/grayscale.d.ts.map +1 -1
- package/dist/themes/grayscale.js +28 -1
- package/dist/themes/grayscale.js.map +1 -1
- package/dist/themes/index.d.ts +4 -11
- package/dist/themes/index.d.ts.map +1 -1
- package/dist/themes/index.js +6 -4
- package/dist/themes/index.js.map +1 -1
- package/dist/themes/light.d.ts.map +1 -1
- package/dist/themes/light.js +28 -1
- package/dist/themes/light.js.map +1 -1
- package/dist/themes/shape.d.ts +31 -0
- package/dist/themes/shape.d.ts.map +1 -1
- package/dist/themes/shared.d.ts +44 -50
- package/dist/themes/shared.d.ts.map +1 -1
- package/dist/themes/shared.js +79 -83
- package/dist/themes/shared.js.map +1 -1
- package/dist/time-scale.d.ts +42 -6
- package/dist/time-scale.d.ts.map +1 -1
- package/dist/time-scale.js +109 -17
- package/dist/time-scale.js.map +1 -1
- package/dist/types.d.ts +528 -11
- package/dist/types.d.ts.map +1 -1
- package/dist/view-preset.d.ts +61 -6
- package/dist/view-preset.d.ts.map +1 -1
- package/dist/view-preset.js +439 -24
- package/dist/view-preset.js.map +1 -1
- package/dist/wave-barrier.d.ts +107 -0
- package/dist/wave-barrier.d.ts.map +1 -0
- package/dist/wave-barrier.js +174 -0
- package/dist/wave-barrier.js.map +1 -0
- package/dist/wave-hatch.d.ts +4 -0
- package/dist/wave-hatch.d.ts.map +1 -0
- package/dist/wave-hatch.js +21 -0
- package/dist/wave-hatch.js.map +1 -0
- package/dist/wave-layout.d.ts +99 -0
- package/dist/wave-layout.d.ts.map +1 -0
- package/dist/wave-layout.js +130 -0
- package/dist/wave-layout.js.map +1 -0
- package/dist/working-calendar.d.ts +128 -4
- package/dist/working-calendar.d.ts.map +1 -1
- package/dist/working-calendar.js +725 -51
- package/dist/working-calendar.js.map +1 -1
- package/dist/working-span.d.ts +11 -0
- package/dist/working-span.d.ts.map +1 -0
- package/dist/working-span.js +18 -0
- package/dist/working-span.js.map +1 -0
- package/package.json +4 -4
- package/src/axis-columns.ts +140 -0
- package/src/calendar-resolver.ts +161 -0
- package/src/calendar.ts +4 -45
- package/src/canvas-width.ts +36 -0
- package/src/capacity.ts +71 -30
- package/src/chart-translation.ts +88 -0
- package/src/container-header-geometry.ts +116 -0
- package/src/dsl-utils.ts +8 -26
- package/src/edge-routing.ts +347 -491
- package/src/frame-tab-geometry.ts +78 -25
- package/src/header-card-geometry.ts +17 -2
- package/src/header-logo.ts +67 -0
- package/src/i18n.ts +22 -1
- package/src/index.ts +97 -12
- package/src/inline-date-pin-geometry.ts +55 -58
- package/src/item-bar-geometry.ts +341 -5
- package/src/item-port-geometry.ts +69 -0
- package/src/layout-context.ts +210 -72
- package/src/layout-insights.ts +109 -2
- package/src/layout.ts +57 -1530
- package/src/nodes/anchor-node.ts +11 -4
- package/src/nodes/content-extent.ts +107 -0
- package/src/nodes/dependency-edges.ts +171 -0
- package/src/nodes/footnote-node.ts +171 -31
- package/src/nodes/group-node.ts +92 -214
- package/src/nodes/header-node.ts +255 -0
- package/src/nodes/include-node.ts +124 -110
- package/src/nodes/item-measure.ts +723 -0
- package/src/nodes/item-node.ts +358 -80
- package/src/nodes/marker-band.ts +406 -0
- package/src/nodes/marker-geometry.ts +1 -1
- package/src/nodes/milestone-node.ts +321 -136
- package/src/nodes/nowline-node.ts +87 -0
- package/src/nodes/parallel-node.ts +69 -38
- package/src/nodes/region-markers.ts +194 -0
- package/src/nodes/roadmap-node.ts +46 -950
- package/src/nodes/row-track.ts +217 -0
- package/src/nodes/sequence-item.ts +433 -0
- package/src/nodes/sequence-one.ts +40 -0
- package/src/nodes/swimlane-node.ts +66 -205
- package/src/nodes/wave-node.ts +609 -0
- package/src/non-working-display.ts +32 -0
- package/src/phases/date-window.ts +191 -0
- package/src/phases/finalize.ts +1303 -0
- package/src/phases/measure.ts +329 -0
- package/src/phases/place.ts +318 -0
- package/src/renderable.ts +23 -3
- package/src/resolve-today.ts +28 -25
- package/src/row-packer.ts +85 -84
- package/src/schedule.ts +362 -114
- package/src/start-rules.ts +113 -0
- package/src/start-terms.ts +38 -0
- package/src/status-dot.ts +81 -0
- package/src/style-resolution.ts +27 -57
- package/src/text-measure.ts +71 -0
- package/src/themes/contrast.ts +34 -0
- package/src/themes/dark.ts +28 -1
- package/src/themes/grayscale.ts +28 -1
- package/src/themes/index.ts +10 -7
- package/src/themes/light.ts +28 -1
- package/src/themes/shape.ts +38 -0
- package/src/themes/shared.ts +85 -93
- package/src/time-scale.ts +117 -19
- package/src/types.ts +529 -20
- package/src/view-preset.ts +520 -27
- package/src/wave-barrier.ts +242 -0
- package/src/wave-hatch.ts +25 -0
- package/src/wave-layout.ts +203 -0
- package/src/working-calendar.ts +875 -57
- package/src/working-span.ts +19 -0
package/dist/schedule.js
CHANGED
|
@@ -1,155 +1,329 @@
|
|
|
1
1
|
// scheduleRoadmap — compute the floating calendar start/end date for every
|
|
2
2
|
// named entity (items, milestones, anchors) without running the full layout.
|
|
3
3
|
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
4
|
+
// This is the only day-level scheduler (specs/scheduler-unification.md): the
|
|
5
|
+
// date window reads its content day from `extent`, and the exporters read the
|
|
6
|
+
// dates. The pixel layout keeps its own placement and differs from it in the
|
|
7
|
+
// catalogued ways of `test/engine-divergences.json`. The rules, with the
|
|
8
|
+
// roadmap-start resolution of the date-window phase (`resolveDateWindow` in
|
|
9
|
+
// `phases/date-window.ts`):
|
|
8
10
|
// - sequential default — start where the previous item in the lane ended
|
|
11
|
+
// - after:[id|DATE] — start no earlier than the maximum predecessor end
|
|
12
|
+
// (work has no fixed start pin: `date:` / `start:` on an item are
|
|
13
|
+
// unknown keys, specs/dsl.md § Item Properties); a parallel ends at its
|
|
14
|
+
// latest track end, a group at its last child's end
|
|
15
|
+
// - wave barriers (roadmaps with waves only) — every start is floored by
|
|
16
|
+
// its wave's start S_k, iterated to a fixpoint by `solveWaveBarriers`
|
|
17
|
+
// (specs/waves.md §8.5)
|
|
9
18
|
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
19
|
+
// Offsets are working-day indices from the start (specs/working-calendar.md
|
|
20
|
+
// §5): dates convert with `workingIndexOf`, so an `after:` date on a
|
|
21
|
+
// non-working day starts on the next working day. A start (and an after-only milestone) is a
|
|
22
|
+
// point, `dateAtWorkingIndex`; an exclusive end is `spanEndDate`, so a
|
|
23
|
+
// Mon–Fri item ends on Saturday. Anchors and dated milestones keep their own
|
|
24
|
+
// dates. A calendar with no non-working day keeps calendar-day arithmetic.
|
|
25
|
+
//
|
|
26
|
+
// The schedule is every exporter's source for the chart's calendar and
|
|
27
|
+
// durations (handoff m2p decision 16): `calendar` is the file's resolved
|
|
28
|
+
// calendar and `ScheduledItem.days` the duration engine C placed. The XLSX
|
|
29
|
+
// exporter also reads the Start / End dates, the milestone dates and the
|
|
30
|
+
// wave spans; the Mermaid exporter reads the wave spans.
|
|
31
|
+
import { buildWavePlan, isGroupBlock, isItemDeclaration, isParallelBlock } from '@nowline/core';
|
|
32
|
+
import { trackChildren } from '@nowline/core/internal';
|
|
33
|
+
import { deriveItemDurationDays, resolveSizes } from './calendar.js';
|
|
34
|
+
import { resolveWorkingCalendar } from './calendar-resolver.js';
|
|
35
|
+
import { parseIsoDate, propValue } from './dsl-utils.js';
|
|
36
|
+
import { startTermsOf } from './start-terms.js';
|
|
37
|
+
import { solveWaveBarriers, summarizeWaves, WavePass, waveFloorDays } from './wave-barrier.js';
|
|
38
|
+
import { spanEndDate } from './working-calendar.js';
|
|
39
|
+
/**
|
|
40
|
+
* True when some wave has a member (specs/waves.md §9.1). With none, the
|
|
41
|
+
* roadmap draws no waves: no strip, no hatch, no legend. The barrier still
|
|
42
|
+
* runs, so wave floors and `after:<wave>` keep their dates.
|
|
43
|
+
*/
|
|
44
|
+
export function hasVisibleWaves(schedule) {
|
|
45
|
+
for (const wave of schedule.waves?.values() ?? []) {
|
|
46
|
+
if (wave.memberCount > 0)
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
17
51
|
/**
|
|
18
52
|
* Compute the scheduled start/end date for every named entity in the roadmap.
|
|
19
53
|
* Does NOT run the full layout (no SVG geometry, no pixel coordinates).
|
|
20
54
|
*/
|
|
21
55
|
export function scheduleRoadmap(file, resolved, options = {}) {
|
|
22
|
-
const
|
|
56
|
+
const resolvedCalendar = resolveWorkingCalendar(file, resolved);
|
|
57
|
+
const { config: cal, working: calendar } = resolvedCalendar;
|
|
23
58
|
const sizes = resolveSizes(resolved.content.sizes, cal);
|
|
24
|
-
// Resolve roadmap start date — same precedence as
|
|
59
|
+
// Resolve roadmap start date — same precedence as the date-window phase.
|
|
25
60
|
const startRaw = propValue(file.roadmapDecl?.properties ?? [], 'start');
|
|
26
|
-
const startDate =
|
|
61
|
+
const startDate = parseIsoDate(startRaw) ?? utcMidnight(options.today ?? new Date());
|
|
62
|
+
// Working-day index of a date, and back: a point and an exclusive end.
|
|
63
|
+
const dayOf = (date) => calendar.workingIndexOf(startDate, date);
|
|
64
|
+
const pointAt = (day) => calendar.dateAtWorkingIndex(startDate, day);
|
|
65
|
+
const endAt = (start, end) => spanEndDate(calendar, startDate, start, end);
|
|
66
|
+
// The latest day any lane cursor, anchor, milestone or wave edge reaches.
|
|
67
|
+
let contentEndDay = 0;
|
|
68
|
+
const reachMax = (day) => {
|
|
69
|
+
contentEndDay = Math.max(contentEndDay, day);
|
|
70
|
+
};
|
|
27
71
|
// These maps accumulate end-day offsets (from startDate) for cross-entity
|
|
28
|
-
// `after:` resolution
|
|
29
|
-
|
|
72
|
+
// `after:` resolution. In a roadmap with waves the item maps are rebuilt on
|
|
73
|
+
// every barrier pass.
|
|
74
|
+
let itemEnd = new Map(); // item, group, parallel or wave id → end day
|
|
30
75
|
const anchorEnd = new Map(); // id → date day
|
|
31
76
|
const milestoneEnd = new Map(); // id → date day
|
|
32
77
|
// Result maps (Date objects).
|
|
33
|
-
|
|
34
|
-
|
|
78
|
+
let itemResults = new Map();
|
|
79
|
+
let itemByNode = new WeakMap();
|
|
35
80
|
const milestoneResults = new Map();
|
|
36
81
|
const milestoneByNode = new WeakMap();
|
|
37
82
|
const anchorResults = new Map();
|
|
38
|
-
// Resolve a single `after:` element to a day-offset.
|
|
39
|
-
const resolveAfterDay = (ref) => {
|
|
40
|
-
const inlineDate = parseDate(ref);
|
|
41
|
-
if (inlineDate)
|
|
42
|
-
return daysBetween(startDate, inlineDate);
|
|
43
|
-
if (itemEnd.has(ref))
|
|
44
|
-
return itemEnd.get(ref);
|
|
45
|
-
if (anchorEnd.has(ref))
|
|
46
|
-
return anchorEnd.get(ref);
|
|
47
|
-
if (milestoneEnd.has(ref))
|
|
48
|
-
return milestoneEnd.get(ref);
|
|
49
|
-
return 0;
|
|
50
|
-
};
|
|
51
83
|
// Pre-seed named anchors (they may be referenced by item after: before we
|
|
52
84
|
// walk the lanes).
|
|
53
85
|
for (const [id, anchor] of resolved.content.anchors) {
|
|
54
|
-
const d =
|
|
86
|
+
const d = parseIsoDate(propValue(anchor.properties, 'date'));
|
|
55
87
|
if (d) {
|
|
56
|
-
const day =
|
|
88
|
+
const day = dayOf(d);
|
|
57
89
|
anchorEnd.set(id, day);
|
|
58
|
-
anchorResults.set(id,
|
|
90
|
+
anchorResults.set(id, d);
|
|
91
|
+
reachMax(day);
|
|
59
92
|
}
|
|
60
93
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (
|
|
79
|
-
|
|
94
|
+
const mainScope = () => ({
|
|
95
|
+
itemEnd,
|
|
96
|
+
anchorEnd,
|
|
97
|
+
milestoneEnd,
|
|
98
|
+
sizes,
|
|
99
|
+
itemResults,
|
|
100
|
+
inByNode: true,
|
|
101
|
+
});
|
|
102
|
+
// `wave` is the current barrier pass, undefined when there are no waves;
|
|
103
|
+
// `reach` receives every lane cursor, so a container start that passes
|
|
104
|
+
// every child (an empty `group after:x`) still counts in the extent.
|
|
105
|
+
const makeWalker = (scope, wave, reach) => {
|
|
106
|
+
// Resolve a single `after:` element to a day-offset.
|
|
107
|
+
const resolveAfterDay = (term) => {
|
|
108
|
+
if ('date' in term)
|
|
109
|
+
return dayOf(term.date);
|
|
110
|
+
const ref = term.ref;
|
|
111
|
+
if (scope.itemEnd.has(ref))
|
|
112
|
+
return scope.itemEnd.get(ref);
|
|
113
|
+
if (scope.anchorEnd.has(ref))
|
|
114
|
+
return scope.anchorEnd.get(ref);
|
|
115
|
+
if (scope.milestoneEnd.has(ref))
|
|
116
|
+
return scope.milestoneEnd.get(ref);
|
|
117
|
+
return 0;
|
|
118
|
+
};
|
|
119
|
+
// Walk a sequential lane or group, returning the end-day of the last
|
|
120
|
+
// child. Core's `trackChildren` says what a child is; the recursion
|
|
121
|
+
// stays here because it carries the cursor and the wave pass.
|
|
122
|
+
const walkLane = (container, baselineEnd) => {
|
|
123
|
+
let prevEnd = baselineEnd;
|
|
124
|
+
for (const child of trackChildren(container)) {
|
|
125
|
+
prevEnd = walkNode(child, prevEnd);
|
|
126
|
+
reach(prevEnd);
|
|
80
127
|
}
|
|
81
|
-
|
|
82
|
-
|
|
128
|
+
return prevEnd;
|
|
129
|
+
};
|
|
130
|
+
const walkNode = (node, prevEnd) => {
|
|
131
|
+
if (isItemDeclaration(node)) {
|
|
132
|
+
const dur = deriveItemDurationDays(node.properties, scope.sizes, cal);
|
|
133
|
+
const { after } = startTermsOf(node.properties);
|
|
134
|
+
let start = after.length > 0 ? Math.max(prevEnd, ...after.map(resolveAfterDay)) : prevEnd;
|
|
135
|
+
// The barrier floor is one more term in the max.
|
|
136
|
+
if (wave)
|
|
137
|
+
start = wave.apply(node, start);
|
|
138
|
+
const end = start + dur;
|
|
139
|
+
const scheduled = {
|
|
140
|
+
start: pointAt(start),
|
|
141
|
+
end: endAt(start, end),
|
|
142
|
+
days: dur,
|
|
143
|
+
};
|
|
144
|
+
if (scope.inByNode)
|
|
145
|
+
itemByNode.set(node, scheduled);
|
|
146
|
+
if (node.name) {
|
|
147
|
+
scope.itemEnd.set(node.name, end);
|
|
148
|
+
scope.itemResults?.set(node.name, scheduled);
|
|
149
|
+
}
|
|
150
|
+
wave?.accumulate(node, end);
|
|
151
|
+
return end;
|
|
83
152
|
}
|
|
84
|
-
|
|
85
|
-
|
|
153
|
+
if (isParallelBlock(node)) {
|
|
154
|
+
const { after } = startTermsOf(node.properties);
|
|
155
|
+
let containerStart = after.length > 0 ? Math.max(prevEnd, ...after.map(resolveAfterDay)) : prevEnd;
|
|
156
|
+
if (wave)
|
|
157
|
+
containerStart = wave.apply(node, containerStart);
|
|
158
|
+
let parallelEnd = containerStart;
|
|
159
|
+
for (const child of trackChildren(node)) {
|
|
160
|
+
parallelEnd = Math.max(parallelEnd, walkNode(child, containerStart));
|
|
161
|
+
}
|
|
162
|
+
// `after:` a parallel waits for its latest track end.
|
|
163
|
+
if (node.name)
|
|
164
|
+
scope.itemEnd.set(node.name, parallelEnd);
|
|
165
|
+
return parallelEnd;
|
|
86
166
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
167
|
+
if (isGroupBlock(node)) {
|
|
168
|
+
const { after } = startTermsOf(node.properties);
|
|
169
|
+
let containerStart = after.length > 0 ? Math.max(prevEnd, ...after.map(resolveAfterDay)) : prevEnd;
|
|
170
|
+
if (wave)
|
|
171
|
+
containerStart = wave.apply(node, containerStart);
|
|
172
|
+
// `after:` a group waits for its last child's end.
|
|
173
|
+
const groupEnd = walkLane(node, containerStart);
|
|
174
|
+
if (node.name)
|
|
175
|
+
scope.itemEnd.set(node.name, groupEnd);
|
|
176
|
+
return groupEnd;
|
|
96
177
|
}
|
|
97
|
-
return
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
178
|
+
return prevEnd;
|
|
179
|
+
};
|
|
180
|
+
return { walkLane, resolveAfterDay };
|
|
181
|
+
};
|
|
182
|
+
// A milestone is a point: its `date:`, else its latest predecessor end.
|
|
183
|
+
// Returns the day, or undefined when it has neither.
|
|
184
|
+
const milestoneDay = (ms, resolveAfterDay) => {
|
|
185
|
+
const d = parseIsoDate(propValue(ms.properties, 'date'));
|
|
186
|
+
if (d)
|
|
187
|
+
return dayOf(d);
|
|
188
|
+
const { after } = startTermsOf(ms.properties);
|
|
189
|
+
return after.length > 0 ? Math.max(0, ...after.map(resolveAfterDay)) : undefined;
|
|
190
|
+
};
|
|
191
|
+
// An isolated region in a roadmap without waves: fresh id maps, its own
|
|
192
|
+
// sizes (specs/scheduler-unification.md §8, decision 2), its anchors and
|
|
193
|
+
// milestones (resolved inside the region and counted in the extent, never
|
|
194
|
+
// in the results) and its nested regions.
|
|
195
|
+
// First-level region items join `byNode`; their ids stay out of `items`.
|
|
196
|
+
const scheduleRegion = (content, firstLevel) => {
|
|
197
|
+
const regionItemEnd = new Map();
|
|
198
|
+
const regionAnchorEnd = new Map();
|
|
199
|
+
const regionMilestoneEnd = new Map();
|
|
200
|
+
for (const [id, anchor] of content.anchors) {
|
|
201
|
+
const d = parseIsoDate(propValue(anchor.properties, 'date'));
|
|
202
|
+
if (d) {
|
|
203
|
+
const day = dayOf(d);
|
|
204
|
+
regionAnchorEnd.set(id, day);
|
|
205
|
+
reachMax(day);
|
|
110
206
|
}
|
|
111
|
-
return parallelEnd;
|
|
112
207
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
208
|
+
const { walkLane, resolveAfterDay } = makeWalker({
|
|
209
|
+
itemEnd: regionItemEnd,
|
|
210
|
+
anchorEnd: regionAnchorEnd,
|
|
211
|
+
milestoneEnd: regionMilestoneEnd,
|
|
212
|
+
sizes: resolveSizes(content.sizes, cal),
|
|
213
|
+
inByNode: firstLevel,
|
|
214
|
+
}, undefined, reachMax);
|
|
215
|
+
for (const lane of content.swimlanes.values())
|
|
216
|
+
walkLane(lane, 0);
|
|
217
|
+
for (const [id, ms] of content.milestones) {
|
|
218
|
+
const day = milestoneDay(ms, resolveAfterDay);
|
|
219
|
+
if (day === undefined)
|
|
220
|
+
continue;
|
|
221
|
+
regionMilestoneEnd.set(id, day);
|
|
222
|
+
reachMax(day);
|
|
119
223
|
}
|
|
120
|
-
|
|
224
|
+
for (const nested of content.isolatedRegions)
|
|
225
|
+
scheduleRegion(nested.content, false);
|
|
121
226
|
};
|
|
122
|
-
|
|
123
|
-
|
|
227
|
+
const plan = options.plan !== undefined ? (options.plan ?? undefined) : buildWavePlan(resolved);
|
|
228
|
+
let waves;
|
|
229
|
+
if (!plan) {
|
|
230
|
+
const { walkLane } = makeWalker(mainScope(), undefined, reachMax);
|
|
231
|
+
for (const lane of resolved.content.swimlanes.values()) {
|
|
232
|
+
walkLane(lane, 0);
|
|
233
|
+
}
|
|
124
234
|
}
|
|
125
|
-
|
|
126
|
-
|
|
235
|
+
else {
|
|
236
|
+
// Wave barriers (specs/waves.md §8.5): iterate the lane walk to the
|
|
237
|
+
// least fixpoint. The final pass's results are the schedule.
|
|
238
|
+
const ids = plan.waves.map((w) => w.name);
|
|
239
|
+
const floors = waveFloorDays(plan, startDate, calendar);
|
|
240
|
+
let finalPass;
|
|
241
|
+
// The extent of the latest pass; the final one ran with the solved S/E.
|
|
242
|
+
let passMax = 0;
|
|
243
|
+
const reachPass = (day) => {
|
|
244
|
+
passMax = Math.max(passMax, day);
|
|
245
|
+
};
|
|
246
|
+
const result = solveWaveBarriers(ids.length, 0, floors, (S, E) => {
|
|
247
|
+
// Reset the item maps, keep the anchors, and seed each wave id
|
|
248
|
+
// with E_k so `after:<wave>` resolves to the wave's end.
|
|
249
|
+
const seeds = ids.map((id, i) => [id, E[i]]);
|
|
250
|
+
itemEnd = new Map(seeds);
|
|
251
|
+
itemResults = new Map();
|
|
252
|
+
itemByNode = new WeakMap();
|
|
253
|
+
passMax = 0;
|
|
254
|
+
const pass = new WavePass(plan, S);
|
|
255
|
+
const { walkLane } = makeWalker(mainScope(), pass, reachPass);
|
|
256
|
+
for (const lane of resolved.content.swimlanes.values()) {
|
|
257
|
+
walkLane(lane, 0);
|
|
258
|
+
}
|
|
259
|
+
// Exactly one level of isolated regions, each with fresh id maps
|
|
260
|
+
// seeded only with the wave edges. Region items join the barrier
|
|
261
|
+
// and `byNode`; their ids stay out of `items`. Region anchors,
|
|
262
|
+
// region milestones and nested regions are not walked: engine A
|
|
263
|
+
// draws none of them.
|
|
264
|
+
for (const region of resolved.content.isolatedRegions) {
|
|
265
|
+
const regionWalker = makeWalker({
|
|
266
|
+
itemEnd: new Map(seeds),
|
|
267
|
+
anchorEnd: new Map(),
|
|
268
|
+
milestoneEnd: new Map(),
|
|
269
|
+
sizes: resolveSizes(region.content.sizes, cal),
|
|
270
|
+
inByNode: true,
|
|
271
|
+
}, pass, reachPass);
|
|
272
|
+
for (const lane of region.content.swimlanes.values()) {
|
|
273
|
+
regionWalker.walkLane(lane, 0);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
finalPass = pass;
|
|
277
|
+
return pass;
|
|
278
|
+
});
|
|
279
|
+
// The content end covers the last wave's end and every wave start,
|
|
280
|
+
// so floors and empty trailing waves stay inside the window.
|
|
281
|
+
reachMax(Math.max(passMax, ...result.S, ...result.E.slice(-1)));
|
|
282
|
+
waves = new Map();
|
|
283
|
+
for (const span of summarizeWaves(plan, result, finalPass, 0, floors)) {
|
|
284
|
+
waves.set(span.id, {
|
|
285
|
+
index: span.index,
|
|
286
|
+
start: pointAt(span.start),
|
|
287
|
+
end: endAt(span.start, span.end),
|
|
288
|
+
memberCount: span.memberCount,
|
|
289
|
+
...(span.heldBy !== undefined ? { heldBy: span.heldBy } : {}),
|
|
290
|
+
...(span.floorRef !== undefined ? { floorRef: span.floorRef } : {}),
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// Milestones, after the items so after: can resolve item end-days, and
|
|
295
|
+
// wave ids their E_k.
|
|
296
|
+
const { resolveAfterDay } = makeWalker(mainScope(), undefined, reachMax);
|
|
127
297
|
for (const [id, ms] of resolved.content.milestones) {
|
|
128
|
-
const
|
|
129
|
-
if (
|
|
130
|
-
const day = daysBetween(startDate, d);
|
|
131
|
-
const resolved2 = addDays(startDate, day);
|
|
132
|
-
milestoneEnd.set(id, day);
|
|
133
|
-
milestoneResults.set(id, resolved2);
|
|
134
|
-
milestoneByNode.set(ms, resolved2);
|
|
298
|
+
const day = milestoneDay(ms, resolveAfterDay);
|
|
299
|
+
if (day === undefined)
|
|
135
300
|
continue;
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
301
|
+
// A dated milestone keeps its own date; an after-only one is a point
|
|
302
|
+
// at the latest predecessor end: the next working day.
|
|
303
|
+
const date = parseIsoDate(propValue(ms.properties, 'date')) ?? pointAt(day);
|
|
304
|
+
milestoneEnd.set(id, day);
|
|
305
|
+
milestoneResults.set(id, date);
|
|
306
|
+
milestoneByNode.set(ms, date);
|
|
307
|
+
reachMax(day);
|
|
308
|
+
}
|
|
309
|
+
// Isolated regions without waves (with waves they joined the passes).
|
|
310
|
+
if (!plan) {
|
|
311
|
+
for (const region of resolved.content.isolatedRegions) {
|
|
312
|
+
scheduleRegion(region.content, true);
|
|
144
313
|
}
|
|
145
314
|
}
|
|
146
315
|
return {
|
|
147
316
|
startDate,
|
|
317
|
+
calendar: resolvedCalendar,
|
|
148
318
|
items: itemResults,
|
|
149
319
|
byNode: itemByNode,
|
|
150
320
|
milestones: milestoneResults,
|
|
151
321
|
milestoneByNode,
|
|
152
322
|
anchors: anchorResults,
|
|
323
|
+
...(waves ? { waves } : {}),
|
|
324
|
+
...(plan ? { plan } : {}),
|
|
325
|
+
resolved,
|
|
326
|
+
extent: { contentEndDay },
|
|
153
327
|
};
|
|
154
328
|
}
|
|
155
329
|
function utcMidnight(d) {
|
package/dist/schedule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { EntityProperty, GroupBlock, ItemDeclaration, ParallelBlock } from '@nowline/core';
|
|
2
|
+
import type { LayoutContext } from './layout-context.js';
|
|
3
|
+
import type { PositionedItem } from './types.js';
|
|
4
|
+
export declare function resolveChildStart(child: ItemDeclaration | GroupBlock | ParallelBlock, seqDefault: number, ctx: LayoutContext): number;
|
|
5
|
+
/**
|
|
6
|
+
* Turn the warm start from the day schedule on or off: the barrier seed of
|
|
7
|
+
* the place phase. Tests turn it off to compare against a cold start (same
|
|
8
|
+
* output, more barrier passes); layout never does.
|
|
9
|
+
*/
|
|
10
|
+
export declare function setScheduleWarmStart(enabled: boolean): void;
|
|
11
|
+
/** True unless a test turned the warm start off (`setScheduleWarmStart`). */
|
|
12
|
+
export declare function isScheduleWarmStart(): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* The start before the wave floor: the latest `after:` end (ids and inline
|
|
15
|
+
* dates inside the window) no earlier than `seqDefault`, else `seqDefault`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolvePinnedOrSequentialStart(props: EntityProperty[], seqDefault: number, ctx: LayoutContext): number;
|
|
18
|
+
/**
|
|
19
|
+
* The inline `after:` date on a non-working day that set an item's start
|
|
20
|
+
* (NL.I1008, specs/working-calendar.md §6), for an item placed at `startX`.
|
|
21
|
+
* It reports only when it set the start, that is when the item starts at
|
|
22
|
+
* the date's x (within the edge tolerance): a later `after:` ref, the lane
|
|
23
|
+
* cursor or a wave floor that pushed the item past it never reports. A date
|
|
24
|
+
* on a working day or outside the date window reports nothing.
|
|
25
|
+
*/
|
|
26
|
+
export declare function nonWorkingPinOf(props: EntityProperty[], startX: number, ctx: LayoutContext): PositionedItem['nonWorkingPin'];
|
|
27
|
+
//# sourceMappingURL=start-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-rules.d.ts","sourceRoot":"","sources":["../src/start-rules.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEhG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAiBjD,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,eAAe,GAAG,UAAU,GAAG,aAAa,EACnD,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,aAAa,GACnB,MAAM,CAMR;AAID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAE3D;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC1C,KAAK,EAAE,cAAc,EAAE,EACvB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,aAAa,GACnB,MAAM,CAgBR;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC3B,KAAK,EAAE,cAAc,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,aAAa,GACnB,cAAc,CAAC,eAAe,CAAC,CAOjC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// Start rules — engine A's (the pixel layout's) start rule for a lane or
|
|
2
|
+
// group child, built on the parsed terms of `start-terms.ts`: the latest of
|
|
3
|
+
// the sequential default and the `after:` terms (refs and inline dates),
|
|
4
|
+
// then the wave floor (specs/waves.md §8.4). Also the inline
|
|
5
|
+
// `after:` date that reports NL.I1008 when it set an item's start on a
|
|
6
|
+
// non-working day (specs/working-calendar.md §6).
|
|
7
|
+
import { formatIsoDate } from './dsl-utils.js';
|
|
8
|
+
import { startTermsOf } from './start-terms.js';
|
|
9
|
+
import { dateAtX, WAVE_EDGE_TOLERANCE_PX, waveFloorX } from './wave-layout.js';
|
|
10
|
+
// Resolve the desired startX for a swimlane child: the latest of the
|
|
11
|
+
// sequential default (`seqDefault`, the lane's rightmost time cursor across
|
|
12
|
+
// all rows) and every `after:` term. Work has no fixed start pin, so
|
|
13
|
+
// `after:` only ever delays (specs/dsl.md § Item Properties).
|
|
14
|
+
//
|
|
15
|
+
// `after:` accepts both entity ids (looked up in `ctx.entityRightEdges`) and
|
|
16
|
+
// inline ISO date literals (looked up via `ctx.scale.forwardWithinDomain`).
|
|
17
|
+
// The validator already enforces "at most one inline date per direction" so
|
|
18
|
+
// at most one element in the list will hit the date path.
|
|
19
|
+
//
|
|
20
|
+
// In a roadmap with waves the result is floored by the child's wave and,
|
|
21
|
+
// for a container, its lead wave (specs/waves.md §8.4), so the row
|
|
22
|
+
// packer's predicted start matches the start `sequenceItem` / the
|
|
23
|
+
// container node places.
|
|
24
|
+
export function resolveChildStart(child, seqDefault, ctx) {
|
|
25
|
+
return waveFloorX(child, resolvePinnedOrSequentialStart(child.properties, seqDefault, ctx), ctx);
|
|
26
|
+
}
|
|
27
|
+
let scheduleWarmStart = true;
|
|
28
|
+
/**
|
|
29
|
+
* Turn the warm start from the day schedule on or off: the barrier seed of
|
|
30
|
+
* the place phase. Tests turn it off to compare against a cold start (same
|
|
31
|
+
* output, more barrier passes); layout never does.
|
|
32
|
+
*/
|
|
33
|
+
export function setScheduleWarmStart(enabled) {
|
|
34
|
+
scheduleWarmStart = enabled;
|
|
35
|
+
}
|
|
36
|
+
/** True unless a test turned the warm start off (`setScheduleWarmStart`). */
|
|
37
|
+
export function isScheduleWarmStart() {
|
|
38
|
+
return scheduleWarmStart;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The start before the wave floor: the latest `after:` end (ids and inline
|
|
42
|
+
* dates inside the window) no earlier than `seqDefault`, else `seqDefault`.
|
|
43
|
+
*/
|
|
44
|
+
export function resolvePinnedOrSequentialStart(props, seqDefault, ctx) {
|
|
45
|
+
const { after } = startTermsOf(props);
|
|
46
|
+
if (after.length > 0) {
|
|
47
|
+
let maxEnd = seqDefault;
|
|
48
|
+
for (const term of after) {
|
|
49
|
+
if ('date' in term) {
|
|
50
|
+
const xd = ctx.scale.forwardWithinDomain(term.date);
|
|
51
|
+
if (xd !== null)
|
|
52
|
+
maxEnd = Math.max(maxEnd, xd);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const endX = ctx.entityRightEdges.get(term.ref);
|
|
56
|
+
if (endX !== undefined)
|
|
57
|
+
maxEnd = Math.max(maxEnd, endX);
|
|
58
|
+
}
|
|
59
|
+
return maxEnd;
|
|
60
|
+
}
|
|
61
|
+
return seqDefault;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The inline `after:` date on a non-working day that set an item's start
|
|
65
|
+
* (NL.I1008, specs/working-calendar.md §6), for an item placed at `startX`.
|
|
66
|
+
* It reports only when it set the start, that is when the item starts at
|
|
67
|
+
* the date's x (within the edge tolerance): a later `after:` ref, the lane
|
|
68
|
+
* cursor or a wave floor that pushed the item past it never reports. A date
|
|
69
|
+
* on a working day or outside the date window reports nothing.
|
|
70
|
+
*/
|
|
71
|
+
export function nonWorkingPinOf(props, startX, ctx) {
|
|
72
|
+
if (!ctx.calendar.hasNonWorkingDays)
|
|
73
|
+
return undefined;
|
|
74
|
+
const pin = startPinOf(props);
|
|
75
|
+
if (!pin || ctx.calendar.isWorkingDay(pin.date))
|
|
76
|
+
return undefined;
|
|
77
|
+
const pinX = ctx.scale.forwardWithinDomain(pin.date);
|
|
78
|
+
if (pinX === null || Math.abs(startX - pinX) >= WAVE_EDGE_TOLERANCE_PX)
|
|
79
|
+
return undefined;
|
|
80
|
+
return { key: pin.key, pin: pin.raw, start: formatIsoDate(dateAtX(startX, ctx)) };
|
|
81
|
+
}
|
|
82
|
+
/** The inline `after:` date that can set an item's start. */
|
|
83
|
+
function startPinOf(props) {
|
|
84
|
+
const { after } = startTermsOf(props);
|
|
85
|
+
for (const term of after) {
|
|
86
|
+
if ('date' in term)
|
|
87
|
+
return { key: 'after', raw: term.raw, date: term.date };
|
|
88
|
+
}
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=start-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-rules.js","sourceRoot":"","sources":["../src/start-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { EntityProperty, WavePlan } from '@nowline/core';
|
|
2
|
+
/** One element of `after:`: an ISO date, or the id of an entity. */
|
|
3
|
+
export type AfterTerm = {
|
|
4
|
+
raw: string;
|
|
5
|
+
date: Date;
|
|
6
|
+
} | {
|
|
7
|
+
raw: string;
|
|
8
|
+
ref: string;
|
|
9
|
+
};
|
|
10
|
+
export interface StartTerms {
|
|
11
|
+
/** `after:` elements in source order: an ISO date or an id. */
|
|
12
|
+
after: ReadonlyArray<AfterTerm>;
|
|
13
|
+
}
|
|
14
|
+
/** The start terms of an item, group or parallel from its properties. */
|
|
15
|
+
export declare function startTermsOf(props: EntityProperty[]): StartTerms;
|
|
16
|
+
/**
|
|
17
|
+
* The declaration date of each wave's floor (`null` for a wave without a
|
|
18
|
+
* floor or whose date does not parse), at index `k - 1` for wave `k`. The
|
|
19
|
+
* dates are the plan's unclamped declarations: the day engine maps them with
|
|
20
|
+
* `workingIndexOf`, the pixel engine with `scale.forward`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function waveFloorDates(plan: WavePlan): Array<Date | null>;
|
|
23
|
+
//# sourceMappingURL=start-terms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-terms.d.ts","sourceRoot":"","sources":["../src/start-terms.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9D,oEAAoE;AACpE,MAAM,MAAM,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF,MAAM,WAAW,UAAU;IACvB,+DAA+D;IAC/D,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;CACnC;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,UAAU,CAMhE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAEjE"}
|