@nowline/layout 0.0.0-dev.20261019024645.g95fa9ba → 0.0.0-dev.20261019105958.g8f093e8
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/chart-translation.d.ts +7 -3
- package/dist/chart-translation.d.ts.map +1 -1
- package/dist/chart-translation.js +11 -5
- package/dist/chart-translation.js.map +1 -1
- package/dist/layout-context.d.ts +13 -23
- package/dist/layout-context.d.ts.map +1 -1
- package/dist/layout-context.js +2 -11
- package/dist/layout-context.js.map +1 -1
- package/dist/nodes/include-node.d.ts.map +1 -1
- package/dist/nodes/include-node.js +0 -1
- package/dist/nodes/include-node.js.map +1 -1
- package/dist/nodes/marker-band.d.ts +28 -1
- package/dist/nodes/marker-band.d.ts.map +1 -1
- package/dist/nodes/marker-band.js +90 -6
- package/dist/nodes/marker-band.js.map +1 -1
- package/dist/nodes/milestone-node.d.ts +41 -26
- package/dist/nodes/milestone-node.d.ts.map +1 -1
- package/dist/nodes/milestone-node.js +78 -44
- package/dist/nodes/milestone-node.js.map +1 -1
- package/dist/nodes/region-markers.d.ts.map +1 -1
- package/dist/nodes/region-markers.js +5 -4
- package/dist/nodes/region-markers.js.map +1 -1
- package/dist/phases/finalize.d.ts.map +1 -1
- package/dist/phases/finalize.js +26 -12
- package/dist/phases/finalize.js.map +1 -1
- package/dist/phases/place.d.ts.map +1 -1
- package/dist/phases/place.js +1 -2
- package/dist/phases/place.js.map +1 -1
- package/package.json +2 -2
- package/src/chart-translation.ts +15 -4
- package/src/layout-context.ts +17 -30
- package/src/nodes/include-node.ts +0 -1
- package/src/nodes/marker-band.ts +97 -5
- package/src/nodes/milestone-node.ts +100 -57
- package/src/nodes/region-markers.ts +5 -2
- package/src/phases/finalize.ts +26 -9
- package/src/phases/place.ts +1 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { MilestonePlacement } from './nodes/milestone-node.js';
|
|
1
2
|
import type { PositionedIncludeRegion, PositionedMilestone, PositionedSwimlane, PositionedTrackChild } from './types.js';
|
|
2
3
|
/**
|
|
3
4
|
* Move a positioned item, group or parallel (and everything inside it)
|
|
@@ -11,8 +12,11 @@ export declare function translateSwimlaneY(lane: PositionedSwimlane, dy: number)
|
|
|
11
12
|
export declare function translateIncludeY(region: PositionedIncludeRegion, dy: number): void;
|
|
12
13
|
/**
|
|
13
14
|
* Move the chart part of a host milestone down by `dy`: its cut line and
|
|
14
|
-
*
|
|
15
|
-
* outside the chart, and stay
|
|
15
|
+
* the slack arrows that start on an item. Its diamond and label sit in the
|
|
16
|
+
* header's marker band, outside the chart, and stay; so do the arrows that
|
|
17
|
+
* start on a marker row, which `positionMilestones` read from the final
|
|
18
|
+
* pack. `placement` is the milestone's placement, whose arrows are in the
|
|
19
|
+
* same order as the positioned ones.
|
|
16
20
|
*/
|
|
17
|
-
export declare function translateMilestoneChartY(milestone: PositionedMilestone, dy: number): void;
|
|
21
|
+
export declare function translateMilestoneChartY(milestone: PositionedMilestone, placement: MilestonePlacement, dy: number): void;
|
|
18
22
|
//# sourceMappingURL=chart-translation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-translation.d.ts","sourceRoot":"","sources":["../src/chart-translation.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EACR,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACvB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CASlF;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAI7E;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAenF;AAED
|
|
1
|
+
{"version":3,"file":"chart-translation.d.ts","sourceRoot":"","sources":["../src/chart-translation.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EACR,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACvB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CASlF;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAI7E;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAenF;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACpC,SAAS,EAAE,mBAAmB,EAC9B,SAAS,EAAE,kBAAkB,EAC7B,EAAE,EAAE,MAAM,GACX,IAAI,CAON"}
|
|
@@ -65,13 +65,19 @@ export function translateIncludeY(region, dy) {
|
|
|
65
65
|
}
|
|
66
66
|
/**
|
|
67
67
|
* Move the chart part of a host milestone down by `dy`: its cut line and
|
|
68
|
-
*
|
|
69
|
-
* outside the chart, and stay
|
|
68
|
+
* the slack arrows that start on an item. Its diamond and label sit in the
|
|
69
|
+
* header's marker band, outside the chart, and stay; so do the arrows that
|
|
70
|
+
* start on a marker row, which `positionMilestones` read from the final
|
|
71
|
+
* pack. `placement` is the milestone's placement, whose arrows are in the
|
|
72
|
+
* same order as the positioned ones.
|
|
70
73
|
*/
|
|
71
|
-
export function translateMilestoneChartY(milestone, dy) {
|
|
74
|
+
export function translateMilestoneChartY(milestone, placement, dy) {
|
|
72
75
|
milestone.cutTopY += dy;
|
|
73
76
|
milestone.cutBottomY += dy;
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
milestone.slackArrows?.forEach((arrow, i) => {
|
|
78
|
+
const start = placement.slackArrows?.[i];
|
|
79
|
+
if (start && 'y' in start)
|
|
80
|
+
arrow.y += dy;
|
|
81
|
+
});
|
|
76
82
|
}
|
|
77
83
|
//# sourceMappingURL=chart-translation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-translation.js","sourceRoot":"","sources":["../src/chart-translation.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,2EAA2E;AAC3E,uEAAuE;AACvE,yEAAyE;AACzE,0EAA0E;AAC1E,oCAAoC;AACpC,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,0EAA0E;AAC1E,8CAA8C;AAC9C,EAAE;AACF,qEAAqE;AACrE,oEAAoE;AACpE,kDAAkD;
|
|
1
|
+
{"version":3,"file":"chart-translation.js","sourceRoot":"","sources":["../src/chart-translation.ts"],"names":[],"mappings":"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"}
|
package/dist/layout-context.d.ts
CHANGED
|
@@ -83,12 +83,18 @@ export interface LayoutContext {
|
|
|
83
83
|
entityRightEdges: Map<string, number>;
|
|
84
84
|
/**
|
|
85
85
|
* Midpoint per MARKER (anchor or milestone), on the marker row.
|
|
86
|
-
* Dependency arrows from a marker start on its cut line at this `x
|
|
87
|
-
*
|
|
88
|
-
* `
|
|
89
|
-
* from `placedItems`.
|
|
86
|
+
* Dependency arrows from a marker start on its cut line at this `x`.
|
|
87
|
+
* Items are not in this map: their attach geometry is derived from
|
|
88
|
+
* `placedItems`.
|
|
90
89
|
*/
|
|
91
90
|
entityMidpoints: Map<string, Point>;
|
|
91
|
+
/**
|
|
92
|
+
* The ids of the anchors and milestones this context's file declares.
|
|
93
|
+
* A milestone's slack or overrun arrow from one of them starts on its
|
|
94
|
+
* row in the marker band, which only the final pack knows, so
|
|
95
|
+
* placement records the marker instead of a y.
|
|
96
|
+
*/
|
|
97
|
+
markerIds: ReadonlySet<string>;
|
|
92
98
|
/**
|
|
93
99
|
* Every placed item, keyed by its draw key (the explicit id, or the
|
|
94
100
|
* synthetic handle of an id-less item; see `syntheticItemKey`). The
|
|
@@ -141,15 +147,6 @@ export interface LayoutContext {
|
|
|
141
147
|
* sets this to that top. A region's context keeps its local value.
|
|
142
148
|
*/
|
|
143
149
|
chartTopY: number;
|
|
144
|
-
/**
|
|
145
|
-
* The chart top the measure phase estimated, in canvas coordinates.
|
|
146
|
-
* Placement reads it only to bring a canvas y into the chart's local
|
|
147
|
-
* frame: a marker's estimated row centre, which a slack arrow from a
|
|
148
|
-
* marker predecessor starts on (`chartFrameY`). f7 translates by the
|
|
149
|
-
* final top, so such a y moves by the header rows' growth, the one
|
|
150
|
-
* shift it always took.
|
|
151
|
-
*/
|
|
152
|
-
estimatedChartTopY: number;
|
|
153
150
|
chartBottomY: number;
|
|
154
151
|
/**
|
|
155
152
|
* Y coordinate at the bottom of the last swimlane / include region.
|
|
@@ -178,14 +175,13 @@ export interface LayoutContext {
|
|
|
178
175
|
/** The per-file half of a context: the root file, or an isolated region. */
|
|
179
176
|
export interface ContextSource {
|
|
180
177
|
config: Pick<ResolvedConfig, 'styles' | 'defaults' | 'symbols'>;
|
|
181
|
-
content: Pick<ResolvedContent, 'sizes' | 'labels' | 'teams' | 'persons'>;
|
|
178
|
+
content: Pick<ResolvedContent, 'sizes' | 'labels' | 'teams' | 'persons' | 'anchors' | 'milestones'>;
|
|
182
179
|
}
|
|
183
180
|
/**
|
|
184
181
|
* Build a `LayoutContext` for the root file or for an isolated region.
|
|
185
182
|
* `chart` passes the chart extents through unchanged: the root sets
|
|
186
183
|
* `chartTopY` to the local top 0 with both bottoms at 0, a region sets all
|
|
187
|
-
* three y fields to its inner start
|
|
188
|
-
* estimate of the chart top. The canvas width is not part of a
|
|
184
|
+
* three y fields to its inner start. The canvas width is not part of a
|
|
189
185
|
* context: placement never reads it (finalize owns the `CanvasExtent`).
|
|
190
186
|
* A region passes its own footnote index, numbered on after the host's,
|
|
191
187
|
* and no marker placements. The caller seeds
|
|
@@ -201,7 +197,7 @@ export declare function createLayoutContext(source: ContextSource, shared: {
|
|
|
201
197
|
axisColumns?: AxisColumns;
|
|
202
198
|
bandScale: BandScale;
|
|
203
199
|
waves?: WaveLayoutState;
|
|
204
|
-
}, chart: Pick<LayoutContext, 'chartTopY' | '
|
|
200
|
+
}, chart: Pick<LayoutContext, 'chartTopY' | 'chartBottomY' | 'swimlaneBottomY'>, init: {
|
|
205
201
|
footnotes?: FootnoteIndex;
|
|
206
202
|
markerRowPlacements?: Map<string, MarkerRowPlacement>;
|
|
207
203
|
}): LayoutContext;
|
|
@@ -215,10 +211,4 @@ export declare function createLayoutContext(source: ContextSource, shared: {
|
|
|
215
211
|
export interface LayoutHelpers {
|
|
216
212
|
sequenceOne: (child: ItemDeclaration | GroupBlock | ParallelBlock, cursor: TrackCursor, ctx: LayoutContext) => PositionedTrackChild;
|
|
217
213
|
}
|
|
218
|
-
/**
|
|
219
|
-
* A canvas y (a marker row in the header) in the chart's local frame:
|
|
220
|
-
* relative to the estimated chart top, so f7's translation by the final
|
|
221
|
-
* top moves it by exactly the header rows' growth.
|
|
222
|
-
*/
|
|
223
|
-
export declare function chartFrameY(canvasY: number, ctx: LayoutContext): number;
|
|
224
214
|
//# sourceMappingURL=layout-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-context.d.ts","sourceRoot":"","sources":["../src/layout-context.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,eAAe,EACf,iBAAiB,EACpB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,eAAe,EAAgB,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EACR,kBAAkB,EAClB,KAAK,EACL,cAAc,EACd,uBAAuB,EACvB,oBAAoB,EACpB,YAAY,EACZ,aAAa,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,iEAAiE;AACjE,MAAM,WAAW,WAAW;IACxB;;;;;OAKG;IACH,CAAC,EAAE,MAAM,CAAC;IACV;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,CAAC,EAAE,MAAM,CAAC;IACV,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,CAE3D;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,GAAG,MAAM,CAQnF;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IACxC;;;;;OAKG;IACH,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACtC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,eAAe,EAAE,eAAe,CAAC,CAAC;IAC5D,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,eAAe,EAAE,iBAAiB,CAAC,CAAC;IAChE;;;;;OAKG;IACH,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACxC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,sEAAsE;IACtE,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACrC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,eAAe,CAAC;IAC1B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC
|
|
1
|
+
{"version":3,"file":"layout-context.d.ts","sourceRoot":"","sources":["../src/layout-context.ts"],"names":[],"mappings":"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"}
|
package/dist/layout-context.js
CHANGED
|
@@ -24,8 +24,7 @@ export function scheduledItemDays(ctx, item) {
|
|
|
24
24
|
* Build a `LayoutContext` for the root file or for an isolated region.
|
|
25
25
|
* `chart` passes the chart extents through unchanged: the root sets
|
|
26
26
|
* `chartTopY` to the local top 0 with both bottoms at 0, a region sets all
|
|
27
|
-
* three y fields to its inner start
|
|
28
|
-
* estimate of the chart top. The canvas width is not part of a
|
|
27
|
+
* three y fields to its inner start. The canvas width is not part of a
|
|
29
28
|
* context: placement never reads it (finalize owns the `CanvasExtent`).
|
|
30
29
|
* A region passes its own footnote index, numbered on after the host's,
|
|
31
30
|
* and no marker placements. The caller seeds
|
|
@@ -59,13 +58,13 @@ export function createLayoutContext(source, shared, chart, init) {
|
|
|
59
58
|
entityLeftEdges: new Map(),
|
|
60
59
|
entityRightEdges: new Map(),
|
|
61
60
|
entityMidpoints: new Map(),
|
|
61
|
+
markerIds: new Set([...source.content.anchors.keys(), ...source.content.milestones.keys()]),
|
|
62
62
|
placedItems: new Map(),
|
|
63
63
|
itemFlowKey: new Map(),
|
|
64
64
|
currentFlowKey: '',
|
|
65
65
|
slackCorridors: [],
|
|
66
66
|
markerRowPlacements: init.markerRowPlacements ?? new Map(),
|
|
67
67
|
chartTopY: chart.chartTopY,
|
|
68
|
-
estimatedChartTopY: chart.estimatedChartTopY,
|
|
69
68
|
chartBottomY: chart.chartBottomY,
|
|
70
69
|
swimlaneBottomY: chart.swimlaneBottomY,
|
|
71
70
|
nextParallelId: 0,
|
|
@@ -76,12 +75,4 @@ export function createLayoutContext(source, shared, chart, init) {
|
|
|
76
75
|
...(shared.waves ? { waves: shared.waves } : {}),
|
|
77
76
|
};
|
|
78
77
|
}
|
|
79
|
-
/**
|
|
80
|
-
* A canvas y (a marker row in the header) in the chart's local frame:
|
|
81
|
-
* relative to the estimated chart top, so f7's translation by the final
|
|
82
|
-
* top moves it by exactly the header rows' growth.
|
|
83
|
-
*/
|
|
84
|
-
export function chartFrameY(canvasY, ctx) {
|
|
85
|
-
return canvasY - ctx.estimatedChartTopY;
|
|
86
|
-
}
|
|
87
78
|
//# sourceMappingURL=layout-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-context.js","sourceRoot":"","sources":["../src/layout-context.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,yEAAyE;AACzE,0EAA0E;AAC1E,8BAA8B;AAa9B,OAAO,EAAwB,YAAY,EAAE,MAAM,eAAe,CAAC;AAuCnE,MAAM,UAAU,SAAS,CAAC,CAAS,EAAE,CAAS;IAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAkB,EAAE,IAAqB;IACvE,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACX,iBAAiB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,WAAW,8BAA8B,CACxF,CAAC;IACN,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,CAAC;AAC1B,CAAC;AAiJD
|
|
1
|
+
{"version":3,"file":"layout-context.js","sourceRoot":"","sources":["../src/layout-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"include-node.d.ts","sourceRoot":"","sources":["../../src/nodes/include-node.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEnG,OAAO,KAAK,EAAe,uBAAuB,EAAsB,MAAM,aAAa,CAAC;AAsB5F,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,cAAc,EAAE,EACzB,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,GACpB;IAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"include-node.d.ts","sourceRoot":"","sources":["../../src/nodes/include-node.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEnG,OAAO,KAAK,EAAe,uBAAuB,EAAsB,MAAM,aAAa,CAAC;AAsB5F,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,cAAc,EAAE,EACzB,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,GACpB;IAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAgGjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAShG;AAED,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAY/F"}
|
|
@@ -47,7 +47,6 @@ export function buildIncludeRegions(regions, ctx, startY, helpers, chartRightX)
|
|
|
47
47
|
waves: ctx.waves,
|
|
48
48
|
}, {
|
|
49
49
|
chartTopY: innerStartY,
|
|
50
|
-
estimatedChartTopY: ctx.estimatedChartTopY,
|
|
51
50
|
chartBottomY: innerStartY,
|
|
52
51
|
swimlaneBottomY: innerStartY,
|
|
53
52
|
}, { footnotes: indexFootnotes(region.content.footnotes, footnotesBefore) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"include-node.js","sourceRoot":"","sources":["../../src/nodes/include-node.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,qEAAqE;AACrE,kEAAkE;AAClE,kEAAkE;AAClE,gEAAgE;AAChE,uCAAuC;AAGvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAA0C,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACH,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,qEAAqE;AACrE,uEAAuE;AACvE,6DAA6D;AAC7D,2DAA2D;AAC3D,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAExC,MAAM,UAAU,mBAAmB,CAC/B,OAAyB,EACzB,GAAkB,EAClB,MAAc,EACd,OAAsB,EACtB,WAAmB;IAEnB,IAAI,CAAC,GAAG,MAAM,GAAG,WAAW,CAAC;IAC7B,MAAM,GAAG,GAA8B,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,iEAAiE;IACjE,IAAI,eAAe,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;IAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO;YAAE,CAAC,IAAI,mBAAmB,CAAC;QACvC,OAAO,GAAG,KAAK,CAAC;QAChB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC;QACjE,MAAM,WAAW,GAAG,CAAC,GAAG,gBAAgB,CAAC;QACzC,MAAM,QAAQ,GAAG,mBAAmB,CAChC,MAAM,EACN;YACI,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK;YACzB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,KAAK,EAAE,GAAG,CAAC,KAAK;SACnB,EACD;YACI,SAAS,EAAE,WAAW;YACtB,
|
|
1
|
+
{"version":3,"file":"include-node.js","sourceRoot":"","sources":["../../src/nodes/include-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AnchorDeclaration, MilestoneDeclaration } from '@nowline/core';
|
|
2
2
|
import type { TimeScale } from '../time-scale.js';
|
|
3
3
|
import type { BoundingBox, MarkerRowPlacement, PositionedNonWorkingRun, PositionedWorkingException } from '../types.js';
|
|
4
|
+
import type { MilestonePlacement } from './milestone-node.js';
|
|
4
5
|
/** A packed marker band: its rows and each marker's placement at the band's y. */
|
|
5
6
|
export interface MarkerBand {
|
|
6
7
|
/** Rows the band holds: at least 1 when it has any marker, else 0. */
|
|
@@ -55,6 +56,18 @@ export interface PackedPlacement {
|
|
|
55
56
|
labelBox: BoundingBox;
|
|
56
57
|
labelSide: 'left' | 'right';
|
|
57
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* A slack or overrun arrow between two markers, drawn on `from`'s row
|
|
61
|
+
* between the two diamonds (specs/rendering.md, Milestones, "Marker
|
|
62
|
+
* predecessors"). A milestone's arrow from a group or parallel starts on
|
|
63
|
+
* the milestone's own row and is not one.
|
|
64
|
+
*/
|
|
65
|
+
export interface MarkerArrow {
|
|
66
|
+
from: string;
|
|
67
|
+
to: string;
|
|
68
|
+
}
|
|
69
|
+
/** The arrows between markers that `placements` draw, source to target. */
|
|
70
|
+
export declare function markerArrows(placements: readonly MilestonePlacement[]): MarkerArrow[];
|
|
58
71
|
/**
|
|
59
72
|
* Pack anchors + milestones into marker rows using a bottom-first
|
|
60
73
|
* tick-order strategy. Markers default to the row CLOSEST to the
|
|
@@ -70,6 +83,20 @@ export interface PackedPlacement {
|
|
|
70
83
|
* `rowIndex` incremented by 1 so the bottom corridor stays
|
|
71
84
|
* stable as the band expands upward toward the ticks.
|
|
72
85
|
*
|
|
86
|
+
* `arrows` (the marker-to-marker arrows, `markerArrows`) add three rules,
|
|
87
|
+
* so an arrow crosses no other marker and ends on its target's line:
|
|
88
|
+
* - An arrow's run, on its source's row between the two diamonds, is
|
|
89
|
+
* reserved on that row like a label: no other diamond, label or run
|
|
90
|
+
* may overlap it.
|
|
91
|
+
* - A target sits at or above each source's row (cut lines run down
|
|
92
|
+
* from a diamond). A source whose target is placed and that fits no
|
|
93
|
+
* allowed row grows a fresh row right below the target instead of
|
|
94
|
+
* at the top; when the rules contradict (a marker both a source and
|
|
95
|
+
* a target on one row), it grows at the top.
|
|
96
|
+
* - A label takes a side its own arrows do not run along, when that
|
|
97
|
+
* side fits; otherwise it keeps the usual right-then-left order.
|
|
98
|
+
* With no arrows the pack is unchanged.
|
|
99
|
+
*
|
|
73
100
|
* Returns row-relative placements (no centerY yet — caller fills that
|
|
74
101
|
* in once `markerRowY` is known). Row indices follow the existing
|
|
75
102
|
* convention: 0 = top of band (closest to ticks), `rowCount - 1` =
|
|
@@ -77,7 +104,7 @@ export interface PackedPlacement {
|
|
|
77
104
|
* lives entirely in the search order and grow direction; geometry
|
|
78
105
|
* stays anchored to `markerRowY` at the top.
|
|
79
106
|
*/
|
|
80
|
-
export declare function packMarkerRow(entries: MarkerEntity[], chartLeftX: number, chartRightX: number, estimateTextWidth: (text: string, fontSize: number) => number): {
|
|
107
|
+
export declare function packMarkerRow(entries: MarkerEntity[], chartLeftX: number, chartRightX: number, estimateTextWidth: (text: string, fontSize: number) => number, arrows?: readonly MarkerArrow[]): {
|
|
81
108
|
placements: Map<string, PackedPlacement>;
|
|
82
109
|
rowCount: number;
|
|
83
110
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marker-band.d.ts","sourceRoot":"","sources":["../../src/nodes/marker-band.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAG7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EACR,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC7B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"marker-band.d.ts","sourceRoot":"","sources":["../../src/nodes/marker-band.ts"],"names":[],"mappings":"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"}
|
|
@@ -125,6 +125,17 @@ export function markerLabelsRightX(entries, chartLeftX, chartRightX, estimateTex
|
|
|
125
125
|
function markerLabelWidth(e, estimateTextWidth) {
|
|
126
126
|
return estimateTextWidth(e.title, e.fontSize) * (e.bold ? MARKER_BOLD_WIDTH_FACTOR : 1);
|
|
127
127
|
}
|
|
128
|
+
/** The arrows between markers that `placements` draw, source to target. */
|
|
129
|
+
export function markerArrows(placements) {
|
|
130
|
+
const out = [];
|
|
131
|
+
for (const p of placements) {
|
|
132
|
+
for (const a of p.slackArrows ?? []) {
|
|
133
|
+
if ('marker' in a && a.marker !== p.id)
|
|
134
|
+
out.push({ from: a.marker, to: p.id });
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return out;
|
|
138
|
+
}
|
|
128
139
|
/**
|
|
129
140
|
* Pack anchors + milestones into marker rows using a bottom-first
|
|
130
141
|
* tick-order strategy. Markers default to the row CLOSEST to the
|
|
@@ -140,6 +151,20 @@ function markerLabelWidth(e, estimateTextWidth) {
|
|
|
140
151
|
* `rowIndex` incremented by 1 so the bottom corridor stays
|
|
141
152
|
* stable as the band expands upward toward the ticks.
|
|
142
153
|
*
|
|
154
|
+
* `arrows` (the marker-to-marker arrows, `markerArrows`) add three rules,
|
|
155
|
+
* so an arrow crosses no other marker and ends on its target's line:
|
|
156
|
+
* - An arrow's run, on its source's row between the two diamonds, is
|
|
157
|
+
* reserved on that row like a label: no other diamond, label or run
|
|
158
|
+
* may overlap it.
|
|
159
|
+
* - A target sits at or above each source's row (cut lines run down
|
|
160
|
+
* from a diamond). A source whose target is placed and that fits no
|
|
161
|
+
* allowed row grows a fresh row right below the target instead of
|
|
162
|
+
* at the top; when the rules contradict (a marker both a source and
|
|
163
|
+
* a target on one row), it grows at the top.
|
|
164
|
+
* - A label takes a side its own arrows do not run along, when that
|
|
165
|
+
* side fits; otherwise it keeps the usual right-then-left order.
|
|
166
|
+
* With no arrows the pack is unchanged.
|
|
167
|
+
*
|
|
143
168
|
* Returns row-relative placements (no centerY yet — caller fills that
|
|
144
169
|
* in once `markerRowY` is known). Row indices follow the existing
|
|
145
170
|
* convention: 0 = top of band (closest to ticks), `rowCount - 1` =
|
|
@@ -147,10 +172,12 @@ function markerLabelWidth(e, estimateTextWidth) {
|
|
|
147
172
|
* lives entirely in the search order and grow direction; geometry
|
|
148
173
|
* stays anchored to `markerRowY` at the top.
|
|
149
174
|
*/
|
|
150
|
-
export function packMarkerRow(entries, chartLeftX, chartRightX, estimateTextWidth) {
|
|
175
|
+
export function packMarkerRow(entries, chartLeftX, chartRightX, estimateTextWidth, arrows = []) {
|
|
151
176
|
const sorted = [...entries].sort((a, b) => a.centerX - b.centerX);
|
|
152
177
|
const placements = new Map();
|
|
153
178
|
let rowSpans = [];
|
|
179
|
+
const byId = new Map(entries.map((e) => [e.id, e]));
|
|
180
|
+
const knownArrows = arrows.filter((a) => byId.has(a.from) && byId.has(a.to));
|
|
154
181
|
for (const e of sorted) {
|
|
155
182
|
const labelWidth = markerLabelWidth(e, estimateTextWidth);
|
|
156
183
|
const naturalRightX = e.centerX + e.radius + MARKER_LABEL_GAP_PX;
|
|
@@ -161,10 +188,51 @@ export function packMarkerRow(entries, chartLeftX, chartRightX, estimateTextWidt
|
|
|
161
188
|
const diamondRight = e.centerX + e.radius;
|
|
162
189
|
const sideXLeft = (s) => (s === 'right' ? naturalRightX : naturalLeftX);
|
|
163
190
|
const sideFitsCanvas = (s) => s === 'right' ? fitsRightCanvas : fitsLeftCanvas;
|
|
191
|
+
// The runs of e's own arrows, on e's row between the two diamonds.
|
|
192
|
+
const runs = knownArrows
|
|
193
|
+
.filter((a) => a.from === e.id)
|
|
194
|
+
.map((a) => {
|
|
195
|
+
const to = byId.get(a.to);
|
|
196
|
+
return {
|
|
197
|
+
left: Math.min(e.centerX, to.centerX) + e.radius,
|
|
198
|
+
right: Math.max(e.centerX, to.centerX) - to.radius,
|
|
199
|
+
};
|
|
200
|
+
})
|
|
201
|
+
.filter((r) => r.right > r.left);
|
|
202
|
+
// An arrow meets its target's line only when the target sits at or
|
|
203
|
+
// above the source's row (cut lines run down from a diamond).
|
|
204
|
+
let minRow = -1;
|
|
205
|
+
let maxRow = Number.POSITIVE_INFINITY;
|
|
206
|
+
for (const a of knownArrows) {
|
|
207
|
+
if (a.to === e.id) {
|
|
208
|
+
const from = placements.get(a.from);
|
|
209
|
+
if (from)
|
|
210
|
+
maxRow = Math.min(maxRow, from.rowIndex);
|
|
211
|
+
}
|
|
212
|
+
if (a.from === e.id) {
|
|
213
|
+
const to = placements.get(a.to);
|
|
214
|
+
if (to)
|
|
215
|
+
minRow = Math.max(minRow, to.rowIndex);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// A label on the side its own arrow leaves would sit on the arrow.
|
|
219
|
+
const crossesOwnRun = (s) => {
|
|
220
|
+
const xLeft = sideXLeft(s);
|
|
221
|
+
return runs.some((r) => r.left < xLeft + labelWidth && r.right > xLeft);
|
|
222
|
+
};
|
|
223
|
+
const freeSide = (s) => sideFitsCanvas(s) && !crossesOwnRun(s);
|
|
224
|
+
const growSide = freeSide('right')
|
|
225
|
+
? 'right'
|
|
226
|
+
: freeSide('left')
|
|
227
|
+
? 'left'
|
|
228
|
+
: fitsRightCanvas
|
|
229
|
+
? 'right'
|
|
230
|
+
: 'left';
|
|
164
231
|
const collidesAt = (xLeft, row) => {
|
|
165
232
|
const extLeft = Math.min(diamondLeft, xLeft);
|
|
166
233
|
const extRight = Math.max(diamondRight, xLeft + labelWidth);
|
|
167
|
-
|
|
234
|
+
const own = [{ left: extLeft, right: extRight }, ...runs];
|
|
235
|
+
return rowSpans[row].some((s) => own.some((o) => s.left < o.right && s.right > o.left));
|
|
168
236
|
};
|
|
169
237
|
let placedRow = -1;
|
|
170
238
|
let placedSide = 'right';
|
|
@@ -172,8 +240,10 @@ export function packMarkerRow(entries, chartLeftX, chartRightX, estimateTextWidt
|
|
|
172
240
|
// Bottom-first: try the highest existing row first, working up
|
|
173
241
|
// toward row 0 (closest to the ticks).
|
|
174
242
|
outer: for (let row = rowSpans.length - 1; row >= 0; row--) {
|
|
243
|
+
if (row < minRow || row > maxRow)
|
|
244
|
+
continue;
|
|
175
245
|
for (const side of ['right', 'left']) {
|
|
176
|
-
if (!
|
|
246
|
+
if (!freeSide(side))
|
|
177
247
|
continue;
|
|
178
248
|
const xLeft = sideXLeft(side);
|
|
179
249
|
if (collidesAt(xLeft, row))
|
|
@@ -184,7 +254,21 @@ export function packMarkerRow(entries, chartLeftX, chartRightX, estimateTextWidt
|
|
|
184
254
|
break outer;
|
|
185
255
|
}
|
|
186
256
|
}
|
|
187
|
-
if (placedRow === -1) {
|
|
257
|
+
if (placedRow === -1 && minRow >= 0 && minRow < maxRow) {
|
|
258
|
+
// An arrow source that must stay at or below its target and fits
|
|
259
|
+
// no row there: a fresh row right below the target, which keeps
|
|
260
|
+
// every placed arrow's source at or below its target.
|
|
261
|
+
const at = minRow + 1;
|
|
262
|
+
for (const [id, p] of placements) {
|
|
263
|
+
if (p.rowIndex >= at)
|
|
264
|
+
placements.set(id, { ...p, rowIndex: p.rowIndex + 1 });
|
|
265
|
+
}
|
|
266
|
+
rowSpans.splice(at, 0, []);
|
|
267
|
+
placedRow = at;
|
|
268
|
+
placedSide = growSide;
|
|
269
|
+
placedXLeft = sideXLeft(placedSide);
|
|
270
|
+
}
|
|
271
|
+
else if (placedRow === -1) {
|
|
188
272
|
// No existing row fits — prepend a fresh top row and shift
|
|
189
273
|
// every previous placement DOWN by one slot (rowIndex += 1)
|
|
190
274
|
// so the bottom corridor stays stable.
|
|
@@ -193,12 +277,12 @@ export function packMarkerRow(entries, chartLeftX, chartRightX, estimateTextWidt
|
|
|
193
277
|
}
|
|
194
278
|
rowSpans = [[], ...rowSpans];
|
|
195
279
|
placedRow = 0;
|
|
196
|
-
placedSide =
|
|
280
|
+
placedSide = growSide;
|
|
197
281
|
placedXLeft = sideXLeft(placedSide);
|
|
198
282
|
}
|
|
199
283
|
const extLeft = Math.min(diamondLeft, placedXLeft);
|
|
200
284
|
const extRight = Math.max(diamondRight, placedXLeft + labelWidth);
|
|
201
|
-
rowSpans[placedRow].push({ left: extLeft, right: extRight });
|
|
285
|
+
rowSpans[placedRow].push({ left: extLeft, right: extRight }, ...runs);
|
|
202
286
|
placements.set(e.id, {
|
|
203
287
|
rowIndex: placedRow,
|
|
204
288
|
labelBox: { x: placedXLeft, y: 0, width: labelWidth, height: MARKER_LABEL_HEIGHT_PX },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marker-band.js","sourceRoot":"","sources":["../../src/nodes/marker-band.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,yEAAyE;AACzE,yEAAyE;AACzE,sEAAsE;AACtE,uEAAuE;AACvE,qEAAqE;AACrE,uEAAuE;AACvE,mCAAmC;AAGnC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAQhD,OAAO,EACH,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,EACtB,2BAA2B,EAC3B,mBAAmB,GACtB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"marker-band.js","sourceRoot":"","sources":["../../src/nodes/marker-band.ts"],"names":[],"mappings":"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"}
|