@nowline/layout 0.8.6 → 0.9.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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"working-calendar.js","sourceRoot":"","sources":["../src/working-calendar.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,qEAAqE;AACrE,6DAA6D;AAC7D,oEAAoE;AACpE,mEAAmE;AACnE,iEAAiE;AACjE,mEAAmE;AACnE,EAAE;AACF,mDAAmD;AACnD,sEAAsE;AACtE,oEAAoE;AACpE,oEAAoE;AACpE,yCAAyC;AAGzC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,eAAe,CAAC;AAY3D,MAAM,UAAU,kBAAkB,CAAC,GAAmB;IAClD,OAAO;QACH,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC;QACxD,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAC5B,eAAe,CAAC,IAAI,EAAE,KAAK,GAAG,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACpE,iEAAiE;QACjE,8DAA8D;QAC9D,0DAA0D;QAC1D,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI;KAC3B,CAAC;AACN,CAAC;AAED,MAAM,UAAU,kBAAkB;IAC9B,OAAO;QACH,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE;YAClB,QAAQ,IAAI,EAAE,CAAC;gBACX,KAAK,MAAM;oBACP,OAAO,CAAC,CAAC;gBACb,KAAK,OAAO;oBACR,OAAO,CAAC,CAAC;gBACb,KAAK,QAAQ;oBACT,OAAO,EAAE,CAAC;gBACd,KAAK,UAAU;oBACX,OAAO,EAAE,CAAC;gBACd,KAAK,OAAO;oBACR,OAAO,GAAG,CAAC;YACnB,CAAC;QACL,CAAC;QACD,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC5B,MAAM,IAAI,GACN,KAAK;gBACL,CAAC,IAAI,KAAK,MAAM;oBACZ,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,IAAI,KAAK,OAAO;wBAChB,CAAC,CAAC,CAAC;wBACH,CAAC,CAAC,IAAI,KAAK,QAAQ;4BACjB,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,IAAI,KAAK,UAAU;gCACnB,CAAC,CAAC,EAAE;gCACJ,CAAC,CAAC,GAAG,CAAC,CAAC;YACrB,OAAO,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI;KAC3B,CAAC;AACN,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAe,EAAE,GAAmB;IAC5D,OAAO,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAe,EAAE,GAAmB;IAChE,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,MAAM;YACP,OAAO,CAAC,CAAC;QACb,KAAK,OAAO;YACR,OAAO,GAAG,CAAC,WAAW,CAAC;QAC3B,KAAK,QAAQ;YACT,OAAO,GAAG,CAAC,YAAY,CAAC;QAC5B,KAAK,UAAU;YACX,OAAO,GAAG,CAAC,cAAc,CAAC;QAC9B,KAAK,OAAO;YACR,OAAO,GAAG,CAAC,WAAW,CAAC;IAC/B,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"working-calendar.js","sourceRoot":"","sources":["../src/working-calendar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LayoutContext } from './layout-context.js';
|
|
2
|
+
/**
|
|
3
|
+
* Pixels `days` working days span from `startX`. Under `hide` (and any
|
|
4
|
+
* calendar without non-working days) it is the legacy `days *
|
|
5
|
+
* pixelsPerDay`, computed exactly as before so no float drifts. Under
|
|
6
|
+
* `show` it is `advanceX(startX, days) - startX`, which grows by every
|
|
7
|
+
* non-working day the span crosses; `startX` should already be snapped
|
|
8
|
+
* with `ctx.scale.startX`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function itemSpanPx(ctx: LayoutContext, startX: number, days: number): number;
|
|
11
|
+
//# sourceMappingURL=working-span.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"working-span.d.ts","sourceRoot":"","sources":["../src/working-span.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// The width of an item's logical extent (m2p phase 4, decision 4). Every
|
|
2
|
+
// site that turns a duration into pixels goes through here, so the item
|
|
3
|
+
// measure the row packer and `sequenceItem` share, and every other span,
|
|
4
|
+
// use the same formula.
|
|
5
|
+
/**
|
|
6
|
+
* Pixels `days` working days span from `startX`. Under `hide` (and any
|
|
7
|
+
* calendar without non-working days) it is the legacy `days *
|
|
8
|
+
* pixelsPerDay`, computed exactly as before so no float drifts. Under
|
|
9
|
+
* `show` it is `advanceX(startX, days) - startX`, which grows by every
|
|
10
|
+
* non-working day the span crosses; `startX` should already be snapped
|
|
11
|
+
* with `ctx.scale.startX`.
|
|
12
|
+
*/
|
|
13
|
+
export function itemSpanPx(ctx, startX, days) {
|
|
14
|
+
if (!ctx.scale.showsNonWorking)
|
|
15
|
+
return days * ctx.timeline.pixelsPerDay;
|
|
16
|
+
return ctx.scale.advanceX(startX, days) - startX;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=working-span.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"working-span.js","sourceRoot":"","sources":["../src/working-span.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,wEAAwE;AACxE,yEAAyE;AACzE,wBAAwB;AAIxB;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,GAAkB,EAAE,MAAc,EAAE,IAAY;IACvE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe;QAAE,OAAO,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;IACxE,OAAO,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC;AACrD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nowline/layout",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Nowline layout engine — works out where everything goes on the page before it's drawn.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"engines": {
|
|
@@ -22,17 +22,17 @@
|
|
|
22
22
|
"src/"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@nowline/core": "0.
|
|
25
|
+
"@nowline/core": "0.9.0",
|
|
26
26
|
"d3-scale": "^4.0.2",
|
|
27
27
|
"d3-time": "^3.1.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/d3-scale": "^4.0.9",
|
|
31
31
|
"@types/d3-time": "^3.0.4",
|
|
32
|
-
"@types/node": "^26.6.
|
|
32
|
+
"@types/node": "^26.6.5",
|
|
33
33
|
"langium": "~4.4.0",
|
|
34
34
|
"typescript": "^7.0.2",
|
|
35
|
-
"vitest": "^5.0.
|
|
35
|
+
"vitest": "^5.0.5"
|
|
36
36
|
},
|
|
37
37
|
"scripts": {
|
|
38
38
|
"build": "tsc -b tsconfig.json",
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
// Axis columns — the date axis as a run of tick columns, read off the
|
|
2
|
+
// natural scale (specs/rendering.md § "Caption cap at the chart's end",
|
|
3
|
+
// specs/scheduler-unification.md §8 decision 12). A spilled caption that
|
|
4
|
+
// would run past the axis end may run on for whole columns while it stays
|
|
5
|
+
// within max(one column, CAPTION_OVERHANG_BUDGET_PX) of the axis end (of a
|
|
6
|
+
// partial last column's end, when an explicit `length:` ends the axis
|
|
7
|
+
// mid-column): the item measure truncates the title to `captionCapX`, and
|
|
8
|
+
// finalize step f2 (`extendTimeline`) grows the axis by the columns that
|
|
9
|
+
// hold it, labelled by the axis's usual rules. Both read `captionLimit`,
|
|
10
|
+
// so the cap and the extension agree.
|
|
11
|
+
|
|
12
|
+
import type { TimeScale } from './time-scale.js';
|
|
13
|
+
import { type ScaleUnit, tickBoundaryAtOrAfter } from './view-preset.js';
|
|
14
|
+
import type { WorkingCalendar } from './working-calendar.js';
|
|
15
|
+
|
|
16
|
+
/** What `AxisColumns` reads from the date window. */
|
|
17
|
+
export interface AxisColumnsWindow {
|
|
18
|
+
startDate: Date;
|
|
19
|
+
/** Working days in the natural window. */
|
|
20
|
+
spanDays: number;
|
|
21
|
+
preset: { unit: ScaleUnit };
|
|
22
|
+
calendar: WorkingCalendar;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* How far (px) past the axis end a spilled caption may run before it is
|
|
27
|
+
* truncated, when one column is narrower than this: about 20 characters of
|
|
28
|
+
* a 13 px title.
|
|
29
|
+
*/
|
|
30
|
+
export const CAPTION_OVERHANG_BUDGET_PX = 160;
|
|
31
|
+
|
|
32
|
+
/** Bounds the column walk in `captionLimit` (a day-scale axis has ~4 px columns). */
|
|
33
|
+
const MAX_CAPTION_COLUMNS = 64;
|
|
34
|
+
|
|
35
|
+
/** Days of float noise `isPast` ignores, as `tickBoundaryAtOrAfter` does. */
|
|
36
|
+
const PAST_TOLERANCE_DAYS = 1e-6;
|
|
37
|
+
|
|
38
|
+
export class AxisColumns {
|
|
39
|
+
private readonly startDate: Date;
|
|
40
|
+
private readonly spanDays: number;
|
|
41
|
+
private readonly unit: ScaleUnit;
|
|
42
|
+
private readonly calendar: WorkingCalendar;
|
|
43
|
+
|
|
44
|
+
/** `scale` is the natural window's scale, before f2 extends it. */
|
|
45
|
+
constructor(
|
|
46
|
+
window: AxisColumnsWindow,
|
|
47
|
+
private readonly scale: TimeScale,
|
|
48
|
+
) {
|
|
49
|
+
this.startDate = window.startDate;
|
|
50
|
+
this.spanDays = window.spanDays;
|
|
51
|
+
this.unit = window.preset.unit;
|
|
52
|
+
this.calendar = window.calendar;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** True when `x` lies past the working-day index `days` (float noise aside). */
|
|
56
|
+
isPast(x: number, days: number): boolean {
|
|
57
|
+
return this.scale.indexAtX(x) > days + PAST_TOLERANCE_DAYS;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The working-day index of the first column boundary at or after `x`
|
|
62
|
+
* (the rounding f2 applies to a content box).
|
|
63
|
+
*/
|
|
64
|
+
boundaryAtOrAfterX(x: number): number {
|
|
65
|
+
return this.boundaryAtOrAfter(this.scale.indexAtX(x));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The working-day index of the first column boundary at or after the
|
|
70
|
+
* working-day index `days`: `days` itself on a boundary, else the end
|
|
71
|
+
* of the partial column it falls in (an explicit `length:` can end the
|
|
72
|
+
* drawn axis mid-column).
|
|
73
|
+
*/
|
|
74
|
+
boundaryAtOrAfter(days: number): number {
|
|
75
|
+
return tickBoundaryAtOrAfter(
|
|
76
|
+
this.startDate,
|
|
77
|
+
days,
|
|
78
|
+
this.unit,
|
|
79
|
+
this.calendar.daysPerUnit(this.unit),
|
|
80
|
+
this.calendar,
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The one column a spilled caption past the axis end `axisDays` may
|
|
86
|
+
* run into, as working-day indices: from the boundary at or after the
|
|
87
|
+
* axis end (the end of a partial last column) to the next boundary.
|
|
88
|
+
*/
|
|
89
|
+
captionColumn(axisDays: number): { start: number; end: number } {
|
|
90
|
+
const start = this.boundaryAtOrAfter(axisDays);
|
|
91
|
+
return { start, end: this.nextBoundary(start) };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* The farthest working-day index a spilled caption past the axis end
|
|
96
|
+
* `axisDays` may reach: the end of the first column after the axis end
|
|
97
|
+
* (`captionColumn`), or further, whole columns at a time, while the
|
|
98
|
+
* overhang past the axis end stays within `CAPTION_OVERHANG_BUDGET_PX`.
|
|
99
|
+
*/
|
|
100
|
+
captionLimit(axisDays: number): number {
|
|
101
|
+
const { start, end } = this.captionColumn(axisDays);
|
|
102
|
+
const startX = this.xAt(start);
|
|
103
|
+
let limit = end;
|
|
104
|
+
for (let i = 0; i < MAX_CAPTION_COLUMNS; i++) {
|
|
105
|
+
const next = this.nextBoundary(limit);
|
|
106
|
+
if (next <= limit || this.xAt(next) - startX > CAPTION_OVERHANG_BUDGET_PX) break;
|
|
107
|
+
limit = next;
|
|
108
|
+
}
|
|
109
|
+
return limit;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** The column boundary one column after the boundary `days`. */
|
|
113
|
+
nextBoundary(days: number): number {
|
|
114
|
+
return tickBoundaryAtOrAfter(
|
|
115
|
+
this.startDate,
|
|
116
|
+
days + 0.5,
|
|
117
|
+
this.unit,
|
|
118
|
+
this.calendar.daysPerUnit(this.unit),
|
|
119
|
+
this.calendar,
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** The x of the working-day index `days`, past the natural end too. */
|
|
124
|
+
xAt(days: number): number {
|
|
125
|
+
return this.scale.forward(this.calendar.dateAtWorkingIndex(this.startDate, days));
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Where a spilled caption beside a bar ending at `barRightX` may end at
|
|
130
|
+
* most: the column boundary `captionLimit` gives past the axis end. The axis
|
|
131
|
+
* end is the natural one, or the boundary f2 grows it to for this bar
|
|
132
|
+
* when the bar itself runs past it.
|
|
133
|
+
*/
|
|
134
|
+
captionCapX(barRightX: number): number {
|
|
135
|
+
const axisDays = this.isPast(barRightX, this.spanDays)
|
|
136
|
+
? Math.max(this.spanDays, this.boundaryAtOrAfterX(barRightX))
|
|
137
|
+
: this.spanDays;
|
|
138
|
+
return this.xAt(this.captionLimit(axisDays));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
// The file's calendar, resolved once for every consumer (specs/working-
|
|
2
|
+
// calendar.md §8): the layout, engine C and the three exporters read the
|
|
3
|
+
// same `CalendarConfig` (duration arithmetic) and `WorkingCalendar`
|
|
4
|
+
// (non-working days), so the chart and every export agree on what `1w` is.
|
|
5
|
+
//
|
|
6
|
+
// It is also the one place the file's `non-working` and `working`
|
|
7
|
+
// declarations (its own and its merged includes', specs/working-calendar.md
|
|
8
|
+
// §4) become `CalendarRule`s, so every consumer picks them up unchanged.
|
|
9
|
+
//
|
|
10
|
+
// It lives apart from `calendar.ts` because `working-calendar.ts` already
|
|
11
|
+
// imports values from there; building a `WorkingCalendar` in `calendar.ts`
|
|
12
|
+
// would close a value-import cycle.
|
|
13
|
+
|
|
14
|
+
import type {
|
|
15
|
+
NonWorkingDeclaration,
|
|
16
|
+
NowlineFile,
|
|
17
|
+
ResolveResult,
|
|
18
|
+
WorkingDeclaration,
|
|
19
|
+
} from '@nowline/core';
|
|
20
|
+
import {
|
|
21
|
+
classifyCalendarDeclaration,
|
|
22
|
+
parseIsoDate,
|
|
23
|
+
replacesPresetWeekend,
|
|
24
|
+
} from '@nowline/core/internal';
|
|
25
|
+
import { type CalendarConfig, resolveCalendar } from './calendar.js';
|
|
26
|
+
import {
|
|
27
|
+
type CalendarRule,
|
|
28
|
+
fromCalendarConfig,
|
|
29
|
+
presetRules,
|
|
30
|
+
type WorkingCalendar,
|
|
31
|
+
} from './working-calendar.js';
|
|
32
|
+
|
|
33
|
+
export interface ResolvedCalendar {
|
|
34
|
+
/** The preset or `calendar` block day counts. */
|
|
35
|
+
config: CalendarConfig;
|
|
36
|
+
/**
|
|
37
|
+
* The working calendar of the preset and the file's declarations (its
|
|
38
|
+
* own and its merged includes'). A `non-working` declaration named
|
|
39
|
+
* `weekend` replaces the preset's rules. Its `rules` are in a canonical
|
|
40
|
+
* order, so nothing downstream depends on file or include order.
|
|
41
|
+
*/
|
|
42
|
+
working: WorkingCalendar;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Resolve the calendar a roadmap declares (`calendar:` on the roadmap plus
|
|
47
|
+
* the `config` block's `calendar` section, business when it declares none)
|
|
48
|
+
* and the non-working days its declarations add or take away.
|
|
49
|
+
*
|
|
50
|
+
* A malformed declaration is left out (the validator reports it in the root
|
|
51
|
+
* file; includes are not validated). Rules that leave an unbounded stretch
|
|
52
|
+
* with no working day (an include that closes the whole week; the root file
|
|
53
|
+
* would have had NL.E0906) fall back to the preset calendar rather than
|
|
54
|
+
* failing layout or export.
|
|
55
|
+
*/
|
|
56
|
+
export function resolveWorkingCalendar(
|
|
57
|
+
file: NowlineFile,
|
|
58
|
+
resolved: ResolveResult,
|
|
59
|
+
): ResolvedCalendar {
|
|
60
|
+
const config = resolveCalendar(file, resolved.config.calendar);
|
|
61
|
+
const rules = calendarRules(config, resolved.config.calendarDeclarations);
|
|
62
|
+
try {
|
|
63
|
+
return { config, working: fromCalendarConfig(config, rules) };
|
|
64
|
+
} catch (err) {
|
|
65
|
+
if (!(err instanceof RangeError)) throw err;
|
|
66
|
+
return { config, working: fromCalendarConfig(config) };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
type CalendarDeclaration = NonWorkingDeclaration | WorkingDeclaration;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* The preset's rules, unless a `non-working` declaration is named `weekend`
|
|
74
|
+
* (decision 14), plus one rule per well-formed declaration, in canonical
|
|
75
|
+
* order.
|
|
76
|
+
*/
|
|
77
|
+
function calendarRules(
|
|
78
|
+
config: CalendarConfig,
|
|
79
|
+
declarations: ReadonlyArray<CalendarDeclaration>,
|
|
80
|
+
): CalendarRule[] {
|
|
81
|
+
const rules = replacesPresetWeekend(declarations) ? [] : presetRules(config.mode);
|
|
82
|
+
for (const decl of declarations) {
|
|
83
|
+
const rule = declarationRule(decl);
|
|
84
|
+
if (rule) rules.push(rule);
|
|
85
|
+
}
|
|
86
|
+
return rules.sort(compareRules);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* The rule one declaration stands for, or undefined when core's classifier
|
|
91
|
+
* finds its shape or a value malformed. Only the first `date:`, `start:`,
|
|
92
|
+
* `end:` and `every:` count; any other key is the validator's NL.E0901 and
|
|
93
|
+
* changes nothing here.
|
|
94
|
+
*/
|
|
95
|
+
function declarationRule(decl: CalendarDeclaration): CalendarRule | undefined {
|
|
96
|
+
const facts = classifyCalendarDeclaration(decl);
|
|
97
|
+
if (!facts.wellFormed) return undefined;
|
|
98
|
+
const rule: CalendarRule = { working: decl.$type === 'WorkingDeclaration' };
|
|
99
|
+
if (decl.name) rule.id = decl.name;
|
|
100
|
+
if (decl.title !== undefined) rule.title = decl.title;
|
|
101
|
+
if (facts.dates) rule.dates = facts.dates.map(utcDate);
|
|
102
|
+
if (facts.start) rule.start = utcDate(facts.start);
|
|
103
|
+
if (facts.end) rule.end = utcDate(facts.end);
|
|
104
|
+
if (facts.weekdays) rule.every = new Set(facts.weekdays);
|
|
105
|
+
return rule;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** A real `YYYY-MM-DD` the classifier already checked, at UTC midnight. */
|
|
109
|
+
function utcDate(iso: string): Date {
|
|
110
|
+
return parseIsoDate(iso) as Date;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Canonical rule order (decision 18): first date (none first), then title,
|
|
115
|
+
* id, `working`, the `every` mask, start and end, then the remaining dates.
|
|
116
|
+
* The engine breaks ties between titled runs by input order, so sorting
|
|
117
|
+
* here keeps `rules`, run titles and every downstream list independent of
|
|
118
|
+
* file and include order.
|
|
119
|
+
*/
|
|
120
|
+
function compareRules(a: CalendarRule, b: CalendarRule): number {
|
|
121
|
+
return (
|
|
122
|
+
compareOptional(firstDay(a), firstDay(b)) ||
|
|
123
|
+
compareOptional(a.title, b.title) ||
|
|
124
|
+
compareOptional(a.id, b.id) ||
|
|
125
|
+
Number(a.working) - Number(b.working) ||
|
|
126
|
+
compareOptional(everyMask(a), everyMask(b)) ||
|
|
127
|
+
compareOptional(a.start?.getTime(), b.start?.getTime()) ||
|
|
128
|
+
compareOptional(a.end?.getTime(), b.end?.getTime()) ||
|
|
129
|
+
compareDates(a.dates ?? [], b.dates ?? [])
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** The earliest date a rule names (its first `date:` or its `start:`); undefined for none. */
|
|
134
|
+
function firstDay(rule: CalendarRule): number | undefined {
|
|
135
|
+
if (rule.dates) return Math.min(...rule.dates.map((date) => date.getTime()));
|
|
136
|
+
return rule.start?.getTime();
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function everyMask(rule: CalendarRule): number | undefined {
|
|
140
|
+
if (!rule.every) return undefined;
|
|
141
|
+
let mask = 0;
|
|
142
|
+
for (const weekday of rule.every) mask |= 1 << weekday;
|
|
143
|
+
return mask;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/** Undefined sorts first; strings compare by code unit, never by locale. */
|
|
147
|
+
function compareOptional<T extends number | string>(a: T | undefined, b: T | undefined): number {
|
|
148
|
+
if (a === b) return 0;
|
|
149
|
+
if (a === undefined) return -1;
|
|
150
|
+
if (b === undefined) return 1;
|
|
151
|
+
return a < b ? -1 : 1;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function compareDates(a: ReadonlyArray<Date>, b: ReadonlyArray<Date>): number {
|
|
155
|
+
const left = a.map((date) => date.getTime()).sort((x, y) => x - y);
|
|
156
|
+
const right = b.map((date) => date.getTime()).sort((x, y) => x - y);
|
|
157
|
+
for (let i = 0; i < Math.min(left.length, right.length); i++) {
|
|
158
|
+
if (left[i] !== right[i]) return left[i] - right[i];
|
|
159
|
+
}
|
|
160
|
+
return left.length - right.length;
|
|
161
|
+
}
|
package/src/calendar.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
// translate into absolute days.
|
|
6
6
|
|
|
7
7
|
import type { CalendarBlock, EntityProperty, NowlineFile, SizeDeclaration } from '@nowline/core';
|
|
8
|
+
import { findProp } from '@nowline/core/internal';
|
|
8
9
|
|
|
9
10
|
import { parseCapacityValue } from './capacity.js';
|
|
10
11
|
import { propValue } from './dsl-utils.js';
|
|
@@ -40,13 +41,13 @@ export function resolveCalendar(
|
|
|
40
41
|
file: NowlineFile,
|
|
41
42
|
customBlock: CalendarBlock | undefined,
|
|
42
43
|
): CalendarConfig {
|
|
43
|
-
const calProp = file.roadmapDecl?.properties
|
|
44
|
+
const calProp = findProp(file.roadmapDecl?.properties ?? [], 'calendar');
|
|
44
45
|
const mode: CalendarMode = (calProp?.value as CalendarMode) ?? 'business';
|
|
45
46
|
if (mode === 'business') return { ...BUSINESS };
|
|
46
47
|
if (mode === 'full') return { ...FULL };
|
|
47
48
|
if (customBlock) {
|
|
48
49
|
const get = (key: string, fallback: number): number => {
|
|
49
|
-
const p = customBlock.properties
|
|
50
|
+
const p = findProp(customBlock.properties, key);
|
|
50
51
|
const n = p ? parseInt(p.value, 10) : NaN;
|
|
51
52
|
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
52
53
|
};
|
|
@@ -161,44 +162,6 @@ export function deriveTotalEffortDays(
|
|
|
161
162
|
return 0;
|
|
162
163
|
}
|
|
163
164
|
|
|
164
|
-
/**
|
|
165
|
-
* Format a calendar day count back into the largest unit literal that
|
|
166
|
-
* divides cleanly under the active calendar. Used by the meta line for
|
|
167
|
-
* sized items so the displayed duration reflects the *derived* calendar
|
|
168
|
-
* duration rather than the raw effort literal — `size:m capacity:5`
|
|
169
|
-
* with `effort:1w` paints a 1d bar and the meta should read `M 1d`,
|
|
170
|
-
* not `M 1w`.
|
|
171
|
-
*
|
|
172
|
-
* - Whole-unit folds happen in descending order (`y` → `q` → `m` →
|
|
173
|
-
* `w`); the first one that yields an integer wins so `5d` →
|
|
174
|
-
* `"1w"` and `22d` (business calendar) → `"1m"`.
|
|
175
|
-
* - Anything left over collapses to a `Nd` literal with up to two
|
|
176
|
-
* decimal places, trailing zeros trimmed (`"3d"`, `"1.5d"`,
|
|
177
|
-
* `"1.67d"`). Matches the `DURATION_LITERAL` shape the parser
|
|
178
|
-
* accepts so round-tripping through the renderer reads naturally.
|
|
179
|
-
* - `0` (or anything sub-1d) returns `"0d"` rather than an empty
|
|
180
|
-
* string so callers always get a renderable token.
|
|
181
|
-
*/
|
|
182
|
-
export function formatDurationDays(days: number, cal: CalendarConfig): string {
|
|
183
|
-
const EPSILON = 1e-6;
|
|
184
|
-
const isWhole = (n: number) => n >= 1 && Math.abs(n - Math.round(n)) < EPSILON;
|
|
185
|
-
const folds: Array<[number, string]> = [
|
|
186
|
-
[cal.daysPerYear, 'y'],
|
|
187
|
-
[cal.daysPerQuarter, 'q'],
|
|
188
|
-
[cal.daysPerMonth, 'm'],
|
|
189
|
-
[cal.daysPerWeek, 'w'],
|
|
190
|
-
];
|
|
191
|
-
for (const [unitDays, suffix] of folds) {
|
|
192
|
-
const n = days / unitDays;
|
|
193
|
-
if (isWhole(n)) return `${Math.round(n)}${suffix}`;
|
|
194
|
-
}
|
|
195
|
-
if (Math.abs(days - Math.round(days)) < EPSILON) {
|
|
196
|
-
return `${Math.round(days)}d`;
|
|
197
|
-
}
|
|
198
|
-
// parseFloat strips trailing zeros: `1.50` → `1.5`, `1.67` → `1.67`.
|
|
199
|
-
return `${parseFloat(days.toFixed(2))}d`;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
165
|
/**
|
|
203
166
|
* Build the layout's `Map<string, ResolvedSize>` once the calendar is
|
|
204
167
|
* known. Skips sizes whose `effort:` literal is missing or unparseable —
|
|
@@ -211,7 +174,7 @@ export function resolveSizes(
|
|
|
211
174
|
): Map<string, ResolvedSize> {
|
|
212
175
|
const out = new Map<string, ResolvedSize>();
|
|
213
176
|
for (const [name, decl] of decls) {
|
|
214
|
-
const effortProp = decl.properties
|
|
177
|
+
const effortProp = findProp(decl.properties, 'effort');
|
|
215
178
|
const effortLiteral = effortProp?.value;
|
|
216
179
|
if (!effortLiteral) continue;
|
|
217
180
|
const effortDays = literalToDays(effortLiteral, cal);
|
|
@@ -226,10 +189,6 @@ export function resolveSizes(
|
|
|
226
189
|
return out;
|
|
227
190
|
}
|
|
228
191
|
|
|
229
|
-
function stripColon(key: string): string {
|
|
230
|
-
return key.endsWith(':') ? key.slice(0, -1) : key;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
192
|
// Date arithmetic in day units. All coordinates are relative to the roadmap
|
|
234
193
|
// start date; today is computed in days since start.
|
|
235
194
|
export function daysBetween(from: Date, to: Date): number {
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// `LayoutOptions.width` caps the canvas (specs/rendering.md § Canvas width).
|
|
2
|
+
// The cap is best-effort: it shrinks pixels-per-day so chrome plus timeline
|
|
3
|
+
// fits, but text does not scale, so spilled captions, run labels and the
|
|
4
|
+
// header card can still push the final canvas past it.
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Lowest pixels-per-day a width cap may shrink the timeline to. Below one
|
|
8
|
+
* pixel a working day stops being visible, and short bars collapse into
|
|
9
|
+
* one-pixel slivers that no longer read as durations.
|
|
10
|
+
*/
|
|
11
|
+
export const MIN_PIXELS_PER_DAY = 1;
|
|
12
|
+
|
|
13
|
+
export interface CappedPixelsPerDayInput {
|
|
14
|
+
/** Density from the scale (`pixelsPerUnit / daysPerUnit`). */
|
|
15
|
+
naturalPixelsPerDay: number;
|
|
16
|
+
/** Days the timeline spans at that density (working or calendar days). */
|
|
17
|
+
dayCount: number;
|
|
18
|
+
/** Canvas width that isn't timeline: header card plus both gutters. */
|
|
19
|
+
chromeWidth: number;
|
|
20
|
+
/** The cap; `undefined` means content-fit. */
|
|
21
|
+
maxWidth: number | undefined;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Pixels-per-day under an optional canvas cap. Only ever shrinks the natural
|
|
26
|
+
* density, and never below `MIN_PIXELS_PER_DAY` (a density already below the
|
|
27
|
+
* floor is left alone rather than raised).
|
|
28
|
+
*/
|
|
29
|
+
export function cappedPixelsPerDay(input: CappedPixelsPerDayInput): number {
|
|
30
|
+
const { naturalPixelsPerDay, dayCount, chromeWidth, maxWidth } = input;
|
|
31
|
+
if (maxWidth === undefined) return naturalPixelsPerDay;
|
|
32
|
+
if (chromeWidth + dayCount * naturalPixelsPerDay <= maxWidth) return naturalPixelsPerDay;
|
|
33
|
+
const fitted = (maxWidth - chromeWidth) / dayCount;
|
|
34
|
+
const floor = Math.min(naturalPixelsPerDay, MIN_PIXELS_PER_DAY);
|
|
35
|
+
return Math.max(floor, fitted);
|
|
36
|
+
}
|