@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
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
// Positioned waves (specs/waves.md §8.7, §9.1-§9.5): the solved spans engine
|
|
2
|
+
// A's barrier driver settled on, in declaration order, plus everything the
|
|
3
|
+
// renderer draws for them: strip cells (label fit chain, tooltip, empty-wave
|
|
4
|
+
// diamonds, gap labels, the all-empty placeholder), styled colours, boundary
|
|
5
|
+
// lines, crossings over background bars, and the legend.
|
|
6
|
+
//
|
|
7
|
+
// Built from the frozen `WaveLayoutState` after the post-layout extent growth
|
|
8
|
+
// and the marker-row `deltaY` shift, so the dates read the final scale and
|
|
9
|
+
// every y is final. Growth only extends the domain end (origin and
|
|
10
|
+
// pixels-per-day are unchanged), so the spans' x never move.
|
|
11
|
+
import { propKey } from '@nowline/core/internal';
|
|
12
|
+
import { propValue } from '../dsl-utils.js';
|
|
13
|
+
import { pickInlineDate } from '../inline-date-pin-geometry.js';
|
|
14
|
+
import { INLINE_DATE_GLYPH_GAP_PX, INLINE_DATE_GLYPH_INSET_LEFT_PX, INLINE_DATE_GLYPH_TILE_SIZE_PX, ITEM_FOOTNOTE_INDICATOR_STEP_PX, } from '../item-bar-geometry.js';
|
|
15
|
+
import { estimateTextWidth } from '../text-measure.js';
|
|
16
|
+
import { contrastRatio, hexToRgb } from '../themes/contrast.js';
|
|
17
|
+
import { resolveColor } from '../themes/index.js';
|
|
18
|
+
import { WAVE_CELL_INSET_PX, WAVE_LABEL_HALO_INSET_Y_PX, WAVE_LABEL_HALO_PAD_PX, WAVE_LEGEND_BASELINE_OFFSET_PX, WAVE_LEGEND_LINE_PX, WAVE_LEGEND_SWATCH_GAP_PX, WAVE_LEGEND_SWATCH_HEIGHT_PX, WAVE_LEGEND_SWATCH_WIDTH_PX, WAVE_STRIP_LABEL_FONT_SIZE_PX, WAVE_STRIP_LABEL_PAD_PX, WAVE_STYLED_STRIP_MIX_OPACITY, } from '../themes/shared.js';
|
|
19
|
+
import { summarizeWaves } from '../wave-barrier.js';
|
|
20
|
+
import { waveHatchKind } from '../wave-hatch.js';
|
|
21
|
+
import { dateAtX, spanEndDateAtX, WAVE_EDGE_TOLERANCE_PX, } from '../wave-layout.js';
|
|
22
|
+
import { MARKER_BOLD_WIDTH_FACTOR } from './marker-geometry.js';
|
|
23
|
+
/** WCAG AA floor for the strip label against its composited cell fill. */
|
|
24
|
+
const WAVE_LABEL_MIN_CONTRAST = 4.5;
|
|
25
|
+
/**
|
|
26
|
+
* Build the positioned waves, boundaries and crossings. `state` must be
|
|
27
|
+
* frozen: its `pass` is the pass that ran with the solved `S`/`E`, so its
|
|
28
|
+
* member counts cover the main lanes and the first-level regions exactly
|
|
29
|
+
* once (later placements never accumulate). `ctx.timeline.waveStrip` is
|
|
30
|
+
* set whenever some wave has items; when none does, nothing is drawn and the
|
|
31
|
+
* waves carry their spans only (specs/waves.md §9.1).
|
|
32
|
+
*/
|
|
33
|
+
export function buildWaves(state, ctx, strings, swimlanes, includes) {
|
|
34
|
+
if (!state.frozen || !state.solve) {
|
|
35
|
+
throw new Error('buildWaves: the wave barrier has not settled');
|
|
36
|
+
}
|
|
37
|
+
const spans = summarizeWaves(state.plan, state.solve, state.pass, state.origin, state.floors, WAVE_EDGE_TOLERANCE_PX);
|
|
38
|
+
const allEmpty = spans.every((s) => s.memberCount === 0);
|
|
39
|
+
// With every wave empty the roadmap draws no strip: the waves keep a
|
|
40
|
+
// zero-height one under the tick panel, for their boxes only.
|
|
41
|
+
const strip = ctx.timeline.waveStrip ?? {
|
|
42
|
+
y: ctx.timeline.tickPanelY + ctx.timeline.tickPanelHeight,
|
|
43
|
+
height: 0,
|
|
44
|
+
};
|
|
45
|
+
if (!ctx.timeline.waveStrip && !allEmpty) {
|
|
46
|
+
throw new Error('buildWaves: the timeline has no wave strip');
|
|
47
|
+
}
|
|
48
|
+
// The visible part of a span is its overlap with the timeline.
|
|
49
|
+
const visLeft = ctx.timeline.box.x;
|
|
50
|
+
const visRight = visLeft + ctx.timeline.box.width;
|
|
51
|
+
// Every strip halo spans the strip less a vertical inset.
|
|
52
|
+
const haloY = strip.y + WAVE_LABEL_HALO_INSET_Y_PX;
|
|
53
|
+
const haloHeight = strip.height - 2 * WAVE_LABEL_HALO_INSET_Y_PX;
|
|
54
|
+
let ordinal = 0;
|
|
55
|
+
const waves = spans.map((span, i) => {
|
|
56
|
+
const decl = state.plan.waves[i];
|
|
57
|
+
const title = decl.title ?? span.id;
|
|
58
|
+
const empty = span.memberCount === 0;
|
|
59
|
+
const startDate = dateAtX(span.start, ctx);
|
|
60
|
+
const endDate = spanEndDateAtX(span.start, span.end, ctx);
|
|
61
|
+
const visibleOrdinal = empty ? undefined : ordinal++;
|
|
62
|
+
const footnoteIndicators = waveFootnoteIndicators(span.id, ctx);
|
|
63
|
+
const style = waveStyle(decl.properties, visibleOrdinal, ctx);
|
|
64
|
+
const cellLeft = Math.max(span.start, visLeft);
|
|
65
|
+
const cellRight = Math.min(span.end, visRight);
|
|
66
|
+
const visibleWidth = Math.max(0, cellRight - cellLeft);
|
|
67
|
+
// A declared date floor (`after:2026-11-02`) puts a calendar glyph at
|
|
68
|
+
// the cell's left, whether or not the floor opened a gap (§9.1); the
|
|
69
|
+
// label clears it like it clears the superscripts.
|
|
70
|
+
const floorDate = pickInlineDate(state.plan.floors[i]?.ref !== undefined ? [state.plan.floors[i].ref] : []);
|
|
71
|
+
const glyphFits = floorDate !== undefined &&
|
|
72
|
+
visibleWidth >=
|
|
73
|
+
INLINE_DATE_GLYPH_INSET_LEFT_PX +
|
|
74
|
+
INLINE_DATE_GLYPH_TILE_SIZE_PX +
|
|
75
|
+
WAVE_STRIP_LABEL_PAD_PX;
|
|
76
|
+
const glyphReserve = glyphFits
|
|
77
|
+
? INLINE_DATE_GLYPH_TILE_SIZE_PX + INLINE_DATE_GLYPH_GAP_PX
|
|
78
|
+
: 0;
|
|
79
|
+
// Fit chain (§9.1): try every candidate beside the footnote
|
|
80
|
+
// superscripts; when none fits with them, the superscripts move
|
|
81
|
+
// to the legend and the chain runs again on the label alone.
|
|
82
|
+
let fit;
|
|
83
|
+
let footnotesShown = false;
|
|
84
|
+
if (!empty) {
|
|
85
|
+
if (footnoteIndicators.length > 0) {
|
|
86
|
+
const superscriptWidth = footnoteIndicators.length * ITEM_FOOTNOTE_INDICATOR_STEP_PX;
|
|
87
|
+
fit = fitStripLabel(title, span.id, i + 1, visibleWidth, superscriptWidth + glyphReserve);
|
|
88
|
+
footnotesShown = fit !== undefined;
|
|
89
|
+
}
|
|
90
|
+
fit ??= fitStripLabel(title, span.id, i + 1, visibleWidth, glyphReserve);
|
|
91
|
+
}
|
|
92
|
+
// An empty wave is not drawn (§9.1); the NL.I1006 insight names it.
|
|
93
|
+
const labelX = empty ? span.start : (cellLeft + cellRight) / 2;
|
|
94
|
+
const range = empty ? isoDay(startDate) : `${isoDay(startDate)} – ${isoDay(endDate)}`;
|
|
95
|
+
const tooltipParts = [title, range];
|
|
96
|
+
if (empty)
|
|
97
|
+
tooltipParts.push(strings.waveNoItems);
|
|
98
|
+
else if (span.heldBy !== undefined) {
|
|
99
|
+
tooltipParts.push(`${strings.waveHeldBy} ${span.heldBy}`);
|
|
100
|
+
}
|
|
101
|
+
// A gap (S_k > E_{k-1}) shows the floor reference that opened it.
|
|
102
|
+
let gapLabel;
|
|
103
|
+
const prior = spans[i - 1];
|
|
104
|
+
if (!allEmpty &&
|
|
105
|
+
prior !== undefined &&
|
|
106
|
+
span.floorRef !== undefined &&
|
|
107
|
+
span.start - prior.end > WAVE_EDGE_TOLERANCE_PX) {
|
|
108
|
+
const gapLeft = Math.max(prior.end, visLeft);
|
|
109
|
+
const gapRight = Math.min(span.start, visRight);
|
|
110
|
+
const textWidth = estimateTextWidth(span.floorRef, WAVE_STRIP_LABEL_FONT_SIZE_PX);
|
|
111
|
+
if (textWidth + 2 * WAVE_STRIP_LABEL_PAD_PX <= gapRight - gapLeft) {
|
|
112
|
+
const x = (gapLeft + gapRight) / 2;
|
|
113
|
+
const haloWidth = textWidth + 2 * WAVE_LABEL_HALO_PAD_PX;
|
|
114
|
+
gapLabel = {
|
|
115
|
+
text: span.floorRef,
|
|
116
|
+
x,
|
|
117
|
+
halo: { x: x - haloWidth / 2, y: haloY, width: haloWidth, height: haloHeight },
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// The painted cell, and in it the label and superscript halos
|
|
122
|
+
// (§9.1): the superscripts right-aligned, the label centred on the
|
|
123
|
+
// visible span but never under them.
|
|
124
|
+
const stripBox = {
|
|
125
|
+
x: span.start,
|
|
126
|
+
y: strip.y,
|
|
127
|
+
width: span.end - span.start,
|
|
128
|
+
height: strip.height,
|
|
129
|
+
};
|
|
130
|
+
const cell = empty ? undefined : stripCellBox(stripBox, ctx.timeline.box);
|
|
131
|
+
let labelDraw;
|
|
132
|
+
let superscripts;
|
|
133
|
+
let inlineDatePin;
|
|
134
|
+
if (cell) {
|
|
135
|
+
if (glyphFits && floorDate !== undefined) {
|
|
136
|
+
inlineDatePin = {
|
|
137
|
+
side: 'after',
|
|
138
|
+
isoDate: floorDate,
|
|
139
|
+
glyphTopLeft: {
|
|
140
|
+
x: cell.x + INLINE_DATE_GLYPH_INSET_LEFT_PX,
|
|
141
|
+
y: strip.y + (strip.height - INLINE_DATE_GLYPH_TILE_SIZE_PX) / 2,
|
|
142
|
+
},
|
|
143
|
+
glyphSize: INLINE_DATE_GLYPH_TILE_SIZE_PX,
|
|
144
|
+
spilled: false,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
const paintedRight = cell.x + cell.width;
|
|
148
|
+
const superscriptWidth = footnotesShown
|
|
149
|
+
? footnoteIndicators.length * ITEM_FOOTNOTE_INDICATOR_STEP_PX
|
|
150
|
+
: 0;
|
|
151
|
+
if (superscriptWidth) {
|
|
152
|
+
const right = paintedRight - WAVE_STRIP_LABEL_PAD_PX + WAVE_LABEL_HALO_PAD_PX;
|
|
153
|
+
const left = paintedRight -
|
|
154
|
+
WAVE_STRIP_LABEL_PAD_PX -
|
|
155
|
+
superscriptWidth -
|
|
156
|
+
WAVE_LABEL_HALO_PAD_PX;
|
|
157
|
+
superscripts = {
|
|
158
|
+
rightX: paintedRight - WAVE_STRIP_LABEL_PAD_PX,
|
|
159
|
+
halo: { x: left, y: haloY, width: right - left, height: haloHeight },
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
if (fit) {
|
|
163
|
+
const textWidth = stripLabelWidth(fit.label);
|
|
164
|
+
const rightBound = superscriptWidth
|
|
165
|
+
? Math.min(labelX, paintedRight - WAVE_STRIP_LABEL_PAD_PX - superscriptWidth - textWidth / 2)
|
|
166
|
+
: labelX;
|
|
167
|
+
const x = inlineDatePin
|
|
168
|
+
? Math.max(rightBound, inlineDatePin.glyphTopLeft.x +
|
|
169
|
+
INLINE_DATE_GLYPH_TILE_SIZE_PX +
|
|
170
|
+
INLINE_DATE_GLYPH_GAP_PX +
|
|
171
|
+
textWidth / 2)
|
|
172
|
+
: rightBound;
|
|
173
|
+
const haloWidth = textWidth + 2 * WAVE_LABEL_HALO_PAD_PX;
|
|
174
|
+
labelDraw = {
|
|
175
|
+
x,
|
|
176
|
+
halo: { x: x - haloWidth / 2, y: haloY, width: haloWidth, height: haloHeight },
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
id: span.id,
|
|
182
|
+
title,
|
|
183
|
+
index: i,
|
|
184
|
+
...(visibleOrdinal !== undefined ? { visibleOrdinal } : {}),
|
|
185
|
+
startX: span.start,
|
|
186
|
+
endX: span.end,
|
|
187
|
+
startDate,
|
|
188
|
+
endDate,
|
|
189
|
+
memberCount: span.memberCount,
|
|
190
|
+
empty,
|
|
191
|
+
...(span.heldBy !== undefined ? { heldBy: span.heldBy } : {}),
|
|
192
|
+
...(span.floorRef !== undefined ? { floorRef: span.floorRef } : {}),
|
|
193
|
+
columnBox: {
|
|
194
|
+
x: span.start,
|
|
195
|
+
y: ctx.chartTopY,
|
|
196
|
+
width: span.end - span.start,
|
|
197
|
+
height: ctx.swimlaneBottomY - ctx.chartTopY,
|
|
198
|
+
},
|
|
199
|
+
strip: {
|
|
200
|
+
box: {
|
|
201
|
+
x: span.start,
|
|
202
|
+
y: strip.y,
|
|
203
|
+
width: span.end - span.start,
|
|
204
|
+
height: strip.height,
|
|
205
|
+
},
|
|
206
|
+
...(fit ? { label: fit.label } : {}),
|
|
207
|
+
labelKind: fit?.kind ?? 'none',
|
|
208
|
+
labelX,
|
|
209
|
+
...(cell ? { cell } : {}),
|
|
210
|
+
...(labelDraw ? { labelDraw } : {}),
|
|
211
|
+
...(inlineDatePin ? { inlineDatePin } : {}),
|
|
212
|
+
...(superscripts ? { superscripts } : {}),
|
|
213
|
+
tooltip: tooltipParts.join(' · '),
|
|
214
|
+
footnotesShown,
|
|
215
|
+
...(gapLabel ? { gapLabel } : {}),
|
|
216
|
+
},
|
|
217
|
+
style,
|
|
218
|
+
footnoteIndicators,
|
|
219
|
+
};
|
|
220
|
+
});
|
|
221
|
+
const boundaries = allEmpty ? [] : buildBoundaries(waves, state.origin, strip.y, ctx);
|
|
222
|
+
const mainBackground = backgroundItems(swimlanes);
|
|
223
|
+
// Background items already carry their tooltip: `sequenceItem` sets it
|
|
224
|
+
// where it places them.
|
|
225
|
+
const regionBackground = includes.map((inc) => backgroundItems(inc.nestedSwimlanes));
|
|
226
|
+
const built = {
|
|
227
|
+
waves,
|
|
228
|
+
boundaries,
|
|
229
|
+
crossings: crossingsOver(mainBackground, boundaries),
|
|
230
|
+
regionCrossings: regionBackground.map((items) => crossingsOver(items, boundaries)),
|
|
231
|
+
hasBackground: mainBackground.length + regionBackground.flat().length > 0,
|
|
232
|
+
};
|
|
233
|
+
return built;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* A strip cell's painted box: the wave's strip box clipped to the timeline's
|
|
237
|
+
* backing panel, inset by half the panel's 1 px stroke so the cell never
|
|
238
|
+
* covers it. Undefined when the two do not overlap (an off-screen wave).
|
|
239
|
+
*/
|
|
240
|
+
function stripCellBox(box, timelineBox) {
|
|
241
|
+
const inset = WAVE_CELL_INSET_PX;
|
|
242
|
+
const a = {
|
|
243
|
+
x: box.x,
|
|
244
|
+
y: box.y + inset,
|
|
245
|
+
width: box.width,
|
|
246
|
+
height: box.height - 2 * inset,
|
|
247
|
+
};
|
|
248
|
+
const b = {
|
|
249
|
+
x: timelineBox.x + inset,
|
|
250
|
+
y: box.y,
|
|
251
|
+
width: timelineBox.width - 2 * inset,
|
|
252
|
+
height: box.height,
|
|
253
|
+
};
|
|
254
|
+
const x1 = Math.max(a.x, b.x);
|
|
255
|
+
const y1 = Math.max(a.y, b.y);
|
|
256
|
+
const x2 = Math.min(a.x + a.width, b.x + b.width);
|
|
257
|
+
const y2 = Math.min(a.y + a.height, b.y + b.height);
|
|
258
|
+
if (x2 <= x1 || y2 <= y1)
|
|
259
|
+
return undefined;
|
|
260
|
+
return { x: x1, y: y1, width: x2 - x1, height: y2 - y1 };
|
|
261
|
+
}
|
|
262
|
+
/** A strip label's estimated width: 10 px text, widened for its bold weight. */
|
|
263
|
+
function stripLabelWidth(text) {
|
|
264
|
+
return estimateTextWidth(text, WAVE_STRIP_LABEL_FONT_SIZE_PX) * MARKER_BOLD_WIDTH_FACTOR;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* The first strip label candidate that fits (§9.1): the title, the id, the
|
|
268
|
+
* title ellipsized to 3 or more characters plus "…", then the 1-based
|
|
269
|
+
* `#k`. The test is the bold 10 px width estimate plus `extraWidth` (the
|
|
270
|
+
* footnote superscripts) plus 6 px padding on each side. Undefined: no
|
|
271
|
+
* label.
|
|
272
|
+
*/
|
|
273
|
+
export function fitStripLabel(title, id, ordinal, visibleWidth, extraWidth) {
|
|
274
|
+
const fits = (text) => stripLabelWidth(text) + extraWidth + 2 * WAVE_STRIP_LABEL_PAD_PX <= visibleWidth;
|
|
275
|
+
if (fits(title))
|
|
276
|
+
return { kind: 'title', label: title };
|
|
277
|
+
if (id !== title && fits(id))
|
|
278
|
+
return { kind: 'id', label: id };
|
|
279
|
+
for (let n = title.length - 1; n >= 3; n--) {
|
|
280
|
+
const prefix = title.slice(0, n).trimEnd();
|
|
281
|
+
if (prefix.length < 3)
|
|
282
|
+
break;
|
|
283
|
+
const text = `${prefix}…`;
|
|
284
|
+
if (fits(text))
|
|
285
|
+
return { kind: 'ellipsis', label: text };
|
|
286
|
+
}
|
|
287
|
+
const hash = `#${ordinal}`;
|
|
288
|
+
if (fits(hash))
|
|
289
|
+
return { kind: 'ordinal', label: hash };
|
|
290
|
+
return undefined;
|
|
291
|
+
}
|
|
292
|
+
/** Footnotes whose `on:` names the wave, as 1-based numbers, ascending. */
|
|
293
|
+
function waveFootnoteIndicators(id, ctx) {
|
|
294
|
+
const out = [];
|
|
295
|
+
for (const [fid, hosts] of ctx.footnoteHosts.entries()) {
|
|
296
|
+
if (!hosts.includes(id))
|
|
297
|
+
continue;
|
|
298
|
+
const n = ctx.footnoteIndex.get(fid);
|
|
299
|
+
if (n !== undefined)
|
|
300
|
+
out.push(n);
|
|
301
|
+
}
|
|
302
|
+
return out.sort((a, b) => a - b);
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* A wave's colours (§9.4). Only the named `style:` applies (there is no
|
|
306
|
+
* `default wave`), and of it only `bg`, `fg`, `text` and `border`. The
|
|
307
|
+
* style is read raw.
|
|
308
|
+
*/
|
|
309
|
+
function waveStyle(properties, visibleOrdinal, ctx) {
|
|
310
|
+
const theme = ctx.styleCtx.theme;
|
|
311
|
+
const raw = new Map();
|
|
312
|
+
const styleId = propValue(properties, 'style');
|
|
313
|
+
const decl = styleId ? ctx.styleCtx.styles.get(styleId) : undefined;
|
|
314
|
+
for (const p of (decl?.properties ?? [])) {
|
|
315
|
+
raw.set(propKey(p), p.value);
|
|
316
|
+
}
|
|
317
|
+
const color = (key) => {
|
|
318
|
+
const v = raw.get(key);
|
|
319
|
+
if (v === undefined)
|
|
320
|
+
return undefined;
|
|
321
|
+
const c = resolveColor(v, theme);
|
|
322
|
+
return c === 'none' ? undefined : c;
|
|
323
|
+
};
|
|
324
|
+
const tint = color('bg');
|
|
325
|
+
const stripFill = visibleOrdinal !== undefined && visibleOrdinal % 2 === 1
|
|
326
|
+
? theme.wave.stripFillAlt
|
|
327
|
+
: theme.wave.stripFill;
|
|
328
|
+
// The cell the label sits on: the strip fill under the tint overlay.
|
|
329
|
+
const cellFill = tint
|
|
330
|
+
? (mixHex(stripFill, tint, WAVE_STYLED_STRIP_MIX_OPACITY) ?? stripFill)
|
|
331
|
+
: stripFill;
|
|
332
|
+
const border = raw.get('border');
|
|
333
|
+
return {
|
|
334
|
+
...(tint ? { tint } : {}),
|
|
335
|
+
stripFill,
|
|
336
|
+
text: color('text') ?? readableLabelText(theme.wave, cellFill),
|
|
337
|
+
boundary: color('fg') ?? theme.wave.boundary,
|
|
338
|
+
boundaryDash: border === 'dashed' ? '4 2' : border === 'dotted' ? '1 2' : null,
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
const HEX_RE = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
|
|
342
|
+
/** `top` composited over `base` at `alpha`, as `#rrggbb`; undefined unless both are hex. */
|
|
343
|
+
function mixHex(base, top, alpha) {
|
|
344
|
+
if (!HEX_RE.test(base) || !HEX_RE.test(top))
|
|
345
|
+
return undefined;
|
|
346
|
+
const b = hexToRgb(base);
|
|
347
|
+
const t = hexToRgb(top);
|
|
348
|
+
return `#${b
|
|
349
|
+
.map((v, i) => Math.round(v * (1 - alpha) + t[i] * alpha)
|
|
350
|
+
.toString(16)
|
|
351
|
+
.padStart(2, '0'))
|
|
352
|
+
.join('')}`;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* `wave.labelText` when it reaches 4.5:1 against `fill` (or either colour is
|
|
356
|
+
* not hex), else whichever of the theme's dark (`hatch`) and light
|
|
357
|
+
* (`hatchOnDark`) strokes contrasts more.
|
|
358
|
+
*/
|
|
359
|
+
export function readableLabelText(wave, fill) {
|
|
360
|
+
const preferred = wave.labelText;
|
|
361
|
+
if (!HEX_RE.test(preferred) || !HEX_RE.test(fill))
|
|
362
|
+
return preferred;
|
|
363
|
+
if (contrastRatio(preferred, fill) >= WAVE_LABEL_MIN_CONTRAST)
|
|
364
|
+
return preferred;
|
|
365
|
+
return contrastRatio(wave.hatch, fill) >= contrastRatio(wave.hatchOnDark, fill)
|
|
366
|
+
? wave.hatch
|
|
367
|
+
: wave.hatchOnDark;
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* One line at every distinct x in `{S_k} ∪ {E_k}` of the non-empty waves,
|
|
371
|
+
* except the origin (§9.2): contiguous waves share a line, a gap gives two,
|
|
372
|
+
* and an empty wave adds none of its own. A wave's opening line uses its
|
|
373
|
+
* own style; a closing line that opens nothing (a gap, or `E_n`) uses the
|
|
374
|
+
* closing wave's.
|
|
375
|
+
*/
|
|
376
|
+
function buildBoundaries(waves, origin, topY, ctx) {
|
|
377
|
+
const edges = [];
|
|
378
|
+
for (const w of waves) {
|
|
379
|
+
if (w.empty)
|
|
380
|
+
continue;
|
|
381
|
+
edges.push({ x: w.startX, wave: w, opening: true });
|
|
382
|
+
edges.push({ x: w.endX, wave: w, opening: false });
|
|
383
|
+
}
|
|
384
|
+
edges.sort((a, b) => a.x - b.x);
|
|
385
|
+
const out = [];
|
|
386
|
+
let i = 0;
|
|
387
|
+
while (i < edges.length) {
|
|
388
|
+
let j = i;
|
|
389
|
+
while (j < edges.length && edges[j].x - edges[i].x < WAVE_EDGE_TOLERANCE_PX)
|
|
390
|
+
j++;
|
|
391
|
+
const group = edges.slice(i, j);
|
|
392
|
+
i = j;
|
|
393
|
+
const x = group[0].x;
|
|
394
|
+
if (Math.abs(x - origin) < WAVE_EDGE_TOLERANCE_PX)
|
|
395
|
+
continue;
|
|
396
|
+
const owner = (group.find((e) => e.opening) ?? group[0]).wave;
|
|
397
|
+
out.push({
|
|
398
|
+
x,
|
|
399
|
+
topY,
|
|
400
|
+
bottomY: ctx.swimlaneBottomY,
|
|
401
|
+
stroke: owner.style.boundary,
|
|
402
|
+
dash: owner.style.boundaryDash,
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
return out;
|
|
406
|
+
}
|
|
407
|
+
/** Background items (`waveRole: 'background'`) in lane and document order. */
|
|
408
|
+
function backgroundItems(lanes) {
|
|
409
|
+
const out = [];
|
|
410
|
+
const walk = (children) => {
|
|
411
|
+
for (const child of children) {
|
|
412
|
+
if (child.kind === 'item') {
|
|
413
|
+
if (child.waveRole === 'background')
|
|
414
|
+
out.push(child);
|
|
415
|
+
}
|
|
416
|
+
else {
|
|
417
|
+
walk(child.children);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
};
|
|
421
|
+
for (const lane of lanes) {
|
|
422
|
+
walk(lane.children);
|
|
423
|
+
out.push(...backgroundItems(lane.nested));
|
|
424
|
+
}
|
|
425
|
+
return out;
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* A crossing for every boundary strictly inside a background bar's visual
|
|
429
|
+
* extent (§9.3). Item boxes are visual (inset from the logical edges), so a
|
|
430
|
+
* boundary at a bar's logical edge falls in the inset and gets none.
|
|
431
|
+
*/
|
|
432
|
+
function crossingsOver(items, boundaries) {
|
|
433
|
+
const out = [];
|
|
434
|
+
for (const item of items) {
|
|
435
|
+
const left = item.box.x;
|
|
436
|
+
const right = item.box.x + item.box.width;
|
|
437
|
+
for (const b of boundaries) {
|
|
438
|
+
if (left < b.x && b.x < right) {
|
|
439
|
+
out.push({
|
|
440
|
+
x: b.x,
|
|
441
|
+
topY: item.box.y,
|
|
442
|
+
bottomY: item.box.y + item.box.height,
|
|
443
|
+
stroke: b.stroke,
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
return out;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* The wave legend (§9.5), or undefined without background work (which there
|
|
452
|
+
* is only when some wave is drawn): one hatch swatch, `Background work (not
|
|
453
|
+
* in a wave)`, `WAVE_LEGEND_LINE_PX` high from `topY` at the chart origin.
|
|
454
|
+
*/
|
|
455
|
+
export function buildWaveLegend(built, ctx, strings, topY) {
|
|
456
|
+
if (!built.hasBackground)
|
|
457
|
+
return undefined;
|
|
458
|
+
const left = ctx.timeline.originX;
|
|
459
|
+
const text = strings.waveLegendBackground;
|
|
460
|
+
const textX0 = WAVE_LEGEND_SWATCH_WIDTH_PX + WAVE_LEGEND_SWATCH_GAP_PX;
|
|
461
|
+
const width = textX0 + estimateTextWidth(text, WAVE_STRIP_LABEL_FONT_SIZE_PX);
|
|
462
|
+
const entry = {
|
|
463
|
+
kind: 'background',
|
|
464
|
+
text,
|
|
465
|
+
swatch: {
|
|
466
|
+
x: left,
|
|
467
|
+
y: topY + (WAVE_LEGEND_LINE_PX - WAVE_LEGEND_SWATCH_HEIGHT_PX) / 2,
|
|
468
|
+
width: WAVE_LEGEND_SWATCH_WIDTH_PX,
|
|
469
|
+
height: WAVE_LEGEND_SWATCH_HEIGHT_PX,
|
|
470
|
+
},
|
|
471
|
+
// The hatched swatch is a default item bar.
|
|
472
|
+
hatch: waveHatchKind(ctx.styleCtx.theme.entities.item.bg),
|
|
473
|
+
runs: [{ text, x: left + textX0, y: topY + WAVE_LEGEND_BASELINE_OFFSET_PX }],
|
|
474
|
+
};
|
|
475
|
+
return {
|
|
476
|
+
box: { x: left, y: topY, width, height: WAVE_LEGEND_LINE_PX },
|
|
477
|
+
entries: [entry],
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
function isoDay(d) {
|
|
481
|
+
return d.toISOString().slice(0, 10);
|
|
482
|
+
}
|
|
483
|
+
//# sourceMappingURL=wave-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wave-node.js","sourceRoot":"","sources":["../../src/nodes/wave-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { NON_WORKING_DISPLAYS, type NonWorkingDisplay } from '@nowline/core/internal';
|
|
2
|
+
/** A non-working display value. */
|
|
3
|
+
export type { NonWorkingDisplay };
|
|
4
|
+
/** Every display value, in documentation order. */
|
|
5
|
+
export { NON_WORKING_DISPLAYS };
|
|
6
|
+
/** True when `value` is a display value. */
|
|
7
|
+
export declare function isNonWorkingDisplay(value: unknown): value is NonWorkingDisplay;
|
|
8
|
+
/**
|
|
9
|
+
* Parse a raw surface option. Empty or missing input is "unset" and returns
|
|
10
|
+
* undefined, so the file's `default roadmap non-working:` key still applies;
|
|
11
|
+
* anything other than `hide` or `show` throws a `RangeError`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseNonWorkingDisplay(raw: string | undefined): NonWorkingDisplay | undefined;
|
|
14
|
+
//# sourceMappingURL=non-working-display.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"non-working-display.d.ts","sourceRoot":"","sources":["../src/non-working-display.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,oBAAoB,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEtF,mCAAmC;AACnC,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,mDAAmD;AACnD,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAE9E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAI7F"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// How the chart shows a calendar's non-working days (specs/working-
|
|
2
|
+
// calendar.md §4.2): `hide` collapses them to zero width (the default),
|
|
3
|
+
// `show` draws them at full width as shaded bands. One shared definition
|
|
4
|
+
// for the layout and every surface that takes a render-time option, so the
|
|
5
|
+
// accepted spellings cannot drift between them. The table itself lives in
|
|
6
|
+
// core (`value-tables.ts`), which the validator and the editor completions
|
|
7
|
+
// read too; the GitHub Action still has its own copy, though it bundles
|
|
8
|
+
// layout's theme parser.
|
|
9
|
+
import { NON_WORKING_DISPLAYS } from '@nowline/core/internal';
|
|
10
|
+
/** Every display value, in documentation order. */
|
|
11
|
+
export { NON_WORKING_DISPLAYS };
|
|
12
|
+
/** True when `value` is a display value. */
|
|
13
|
+
export function isNonWorkingDisplay(value) {
|
|
14
|
+
return value === 'hide' || value === 'show';
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Parse a raw surface option. Empty or missing input is "unset" and returns
|
|
18
|
+
* undefined, so the file's `default roadmap non-working:` key still applies;
|
|
19
|
+
* anything other than `hide` or `show` throws a `RangeError`.
|
|
20
|
+
*/
|
|
21
|
+
export function parseNonWorkingDisplay(raw) {
|
|
22
|
+
if (raw === undefined || raw === '')
|
|
23
|
+
return undefined;
|
|
24
|
+
if (isNonWorkingDisplay(raw))
|
|
25
|
+
return raw;
|
|
26
|
+
throw new RangeError(`Invalid non-working display "${raw}". Expected hide or show.`);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=non-working-display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"non-working-display.js","sourceRoot":"","sources":["../src/non-working-display.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,wEAAwE;AACxE,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAC1E,2EAA2E;AAC3E,wEAAwE;AACxE,yBAAyB;AAEzB,OAAO,EAAE,oBAAoB,EAA0B,MAAM,wBAAwB,CAAC;AAKtF,mDAAmD;AACnD,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC,4CAA4C;AAC5C,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAC9C,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAuB;IAC1D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACtD,IAAI,mBAAmB,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IACzC,MAAM,IAAI,UAAU,CAAC,gCAAgC,GAAG,2BAA2B,CAAC,CAAC;AACzF,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { NowlineFile, ResolveResult } from '@nowline/core';
|
|
2
|
+
import { type CalendarConfig } from '../calendar.js';
|
|
3
|
+
import type { LayoutOptions } from '../layout.js';
|
|
4
|
+
import { type NonWorkingDisplay } from '../non-working-display.js';
|
|
5
|
+
import type { RoadmapSchedule } from '../schedule.js';
|
|
6
|
+
import { type StyleContext } from '../style-resolution.js';
|
|
7
|
+
import { type Theme, type ThemeName } from '../themes/index.js';
|
|
8
|
+
import type { ResolvedStyle } from '../types.js';
|
|
9
|
+
import { type ViewPreset } from '../view-preset.js';
|
|
10
|
+
import { type WorkingCalendar } from '../working-calendar.js';
|
|
11
|
+
/** What every later phase reads about the roadmap as a whole. */
|
|
12
|
+
export interface RoadmapScope {
|
|
13
|
+
themeName: ThemeName;
|
|
14
|
+
theme: Theme;
|
|
15
|
+
/** The resolved locale: the surface option, then the directive, then `en-US`. */
|
|
16
|
+
locale: string;
|
|
17
|
+
styleCtx: StyleContext;
|
|
18
|
+
/** `default roadmap`: header position and height, timeline position, minor grid, non-working. */
|
|
19
|
+
roadmapStyle: ResolvedStyle;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The natural date window and the calendar it is counted in. Item sizes
|
|
23
|
+
* are not part of it: `createLayoutContext` resolves each file's own sizes
|
|
24
|
+
* under `cal`, because an isolated region declares its own.
|
|
25
|
+
*/
|
|
26
|
+
export interface DateWindow {
|
|
27
|
+
cal: CalendarConfig;
|
|
28
|
+
calendar: WorkingCalendar;
|
|
29
|
+
/** The view preset (`scale:` block): tick unit, pixels per unit, labels. */
|
|
30
|
+
preset: ViewPreset;
|
|
31
|
+
schedule: RoadmapSchedule;
|
|
32
|
+
startDate: Date;
|
|
33
|
+
/** The natural end. Finalize step f2 may extend the axis past it; nothing else moves it. */
|
|
34
|
+
naturalEndDate: Date;
|
|
35
|
+
/** Working days in the natural window. */
|
|
36
|
+
spanDays: number;
|
|
37
|
+
/** Calendar days under `non-working:show`, else `spanDays`. */
|
|
38
|
+
timelineDays: number;
|
|
39
|
+
/** How non-working days are drawn: the surface option, then `default roadmap`. */
|
|
40
|
+
nonWorking: NonWorkingDisplay;
|
|
41
|
+
}
|
|
42
|
+
export declare function resolveScope(file: NowlineFile, resolved: ResolveResult, options: LayoutOptions): RoadmapScope;
|
|
43
|
+
export declare function resolveDateWindow(file: NowlineFile, resolved: ResolveResult, options: LayoutOptions, scope: RoadmapScope, schedule: RoadmapSchedule): DateWindow;
|
|
44
|
+
export declare function computeDateWindow(file: NowlineFile, schedule: RoadmapSchedule, today: Date | undefined, scale: ViewPreset): {
|
|
45
|
+
startDate: Date;
|
|
46
|
+
endDate: Date;
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=date-window.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-window.d.ts","sourceRoot":"","sources":["../../src/phases/date-window.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,KAAK,cAAc,EAA8B,MAAM,gBAAgB,CAAC;AAIjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAU,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE3E,iEAAiE;AACjE,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,iGAAiG;IACjG,YAAY,EAAE,aAAa,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACvB,GAAG,EAAE,cAAc,CAAC;IACpB,QAAQ,EAAE,eAAe,CAAC;IAC1B,4EAA4E;IAC5E,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,4FAA4F;IAC5F,cAAc,EAAE,IAAI,CAAC;IACrB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,UAAU,EAAE,iBAAiB,CAAC;CACjC;AAED,wBAAgB,YAAY,CACxB,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,aAAa,GACvB,YAAY,CAed;AAED,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,eAAe,GAC1B,UAAU,CAiCZ;AAuBD,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,IAAI,GAAG,SAAS,EACvB,KAAK,EAAE,UAAU,GAClB;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CA0CpC"}
|