@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.
Files changed (338) hide show
  1. package/dist/axis-columns.d.ts +70 -0
  2. package/dist/axis-columns.d.ts.map +1 -0
  3. package/dist/axis-columns.js +104 -0
  4. package/dist/axis-columns.js.map +1 -0
  5. package/dist/calendar-resolver.d.ts +27 -0
  6. package/dist/calendar-resolver.d.ts.map +1 -0
  7. package/dist/calendar-resolver.js +132 -0
  8. package/dist/calendar-resolver.js.map +1 -0
  9. package/dist/calendar.d.ts +0 -19
  10. package/dist/calendar.d.ts.map +1 -1
  11. package/dist/calendar.js +4 -44
  12. package/dist/calendar.js.map +1 -1
  13. package/dist/canvas-width.d.ts +23 -0
  14. package/dist/canvas-width.d.ts.map +1 -0
  15. package/dist/canvas-width.js +26 -0
  16. package/dist/canvas-width.js.map +1 -0
  17. package/dist/capacity.d.ts +28 -0
  18. package/dist/capacity.d.ts.map +1 -1
  19. package/dist/capacity.js +64 -29
  20. package/dist/capacity.js.map +1 -1
  21. package/dist/chart-translation.d.ts +22 -0
  22. package/dist/chart-translation.d.ts.map +1 -0
  23. package/dist/chart-translation.js +83 -0
  24. package/dist/chart-translation.js.map +1 -0
  25. package/dist/container-header-geometry.d.ts +64 -0
  26. package/dist/container-header-geometry.d.ts.map +1 -0
  27. package/dist/container-header-geometry.js +89 -0
  28. package/dist/container-header-geometry.js.map +1 -0
  29. package/dist/dsl-utils.d.ts +3 -4
  30. package/dist/dsl-utils.d.ts.map +1 -1
  31. package/dist/dsl-utils.js +8 -25
  32. package/dist/dsl-utils.js.map +1 -1
  33. package/dist/edge-routing.d.ts +69 -78
  34. package/dist/edge-routing.d.ts.map +1 -1
  35. package/dist/edge-routing.js +271 -401
  36. package/dist/edge-routing.js.map +1 -1
  37. package/dist/frame-tab-geometry.d.ts +24 -14
  38. package/dist/frame-tab-geometry.d.ts.map +1 -1
  39. package/dist/frame-tab-geometry.js +69 -23
  40. package/dist/frame-tab-geometry.js.map +1 -1
  41. package/dist/header-card-geometry.d.ts +12 -0
  42. package/dist/header-card-geometry.d.ts.map +1 -1
  43. package/dist/header-card-geometry.js +14 -2
  44. package/dist/header-card-geometry.js.map +1 -1
  45. package/dist/header-logo.d.ts +28 -0
  46. package/dist/header-logo.d.ts.map +1 -0
  47. package/dist/header-logo.js +51 -0
  48. package/dist/header-logo.js.map +1 -0
  49. package/dist/i18n.d.ts +11 -0
  50. package/dist/i18n.d.ts.map +1 -1
  51. package/dist/i18n.js +11 -1
  52. package/dist/i18n.js.map +1 -1
  53. package/dist/index.d.ts +20 -8
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +17 -7
  56. package/dist/index.js.map +1 -1
  57. package/dist/inline-date-pin-geometry.d.ts +19 -11
  58. package/dist/inline-date-pin-geometry.d.ts.map +1 -1
  59. package/dist/inline-date-pin-geometry.js +45 -46
  60. package/dist/inline-date-pin-geometry.js.map +1 -1
  61. package/dist/item-bar-geometry.d.ts +192 -4
  62. package/dist/item-bar-geometry.d.ts.map +1 -1
  63. package/dist/item-bar-geometry.js +258 -5
  64. package/dist/item-bar-geometry.js.map +1 -1
  65. package/dist/item-port-geometry.d.ts +13 -0
  66. package/dist/item-port-geometry.d.ts.map +1 -0
  67. package/dist/item-port-geometry.js +63 -0
  68. package/dist/item-port-geometry.js.map +1 -0
  69. package/dist/layout-context.d.ts +115 -51
  70. package/dist/layout-context.d.ts.map +1 -1
  71. package/dist/layout-context.js +96 -5
  72. package/dist/layout-context.js.map +1 -1
  73. package/dist/layout-insights.d.ts.map +1 -1
  74. package/dist/layout-insights.js +73 -1
  75. package/dist/layout-insights.js.map +1 -1
  76. package/dist/layout.d.ts +35 -0
  77. package/dist/layout.d.ts.map +1 -1
  78. package/dist/layout.js +18 -1315
  79. package/dist/layout.js.map +1 -1
  80. package/dist/nodes/anchor-node.d.ts.map +1 -1
  81. package/dist/nodes/anchor-node.js +11 -4
  82. package/dist/nodes/anchor-node.js.map +1 -1
  83. package/dist/nodes/content-extent.d.ts +24 -0
  84. package/dist/nodes/content-extent.d.ts.map +1 -0
  85. package/dist/nodes/content-extent.js +100 -0
  86. package/dist/nodes/content-extent.js.map +1 -0
  87. package/dist/nodes/dependency-edges.d.ts +6 -0
  88. package/dist/nodes/dependency-edges.d.ts.map +1 -0
  89. package/dist/nodes/dependency-edges.js +148 -0
  90. package/dist/nodes/dependency-edges.js.map +1 -0
  91. package/dist/nodes/footnote-node.d.ts +24 -3
  92. package/dist/nodes/footnote-node.d.ts.map +1 -1
  93. package/dist/nodes/footnote-node.js +129 -25
  94. package/dist/nodes/footnote-node.js.map +1 -1
  95. package/dist/nodes/group-node.d.ts +10 -21
  96. package/dist/nodes/group-node.d.ts.map +1 -1
  97. package/dist/nodes/group-node.js +79 -152
  98. package/dist/nodes/group-node.js.map +1 -1
  99. package/dist/nodes/header-node.d.ts +56 -0
  100. package/dist/nodes/header-node.d.ts.map +1 -0
  101. package/dist/nodes/header-node.js +163 -0
  102. package/dist/nodes/header-node.js.map +1 -0
  103. package/dist/nodes/include-node.d.ts +22 -12
  104. package/dist/nodes/include-node.d.ts.map +1 -1
  105. package/dist/nodes/include-node.js +95 -62
  106. package/dist/nodes/include-node.js.map +1 -1
  107. package/dist/nodes/item-measure.d.ts +135 -0
  108. package/dist/nodes/item-measure.d.ts.map +1 -0
  109. package/dist/nodes/item-measure.js +514 -0
  110. package/dist/nodes/item-measure.js.map +1 -0
  111. package/dist/nodes/item-node.d.ts +162 -9
  112. package/dist/nodes/item-node.d.ts.map +1 -1
  113. package/dist/nodes/item-node.js +256 -69
  114. package/dist/nodes/item-node.js.map +1 -1
  115. package/dist/nodes/marker-band.d.ts +118 -0
  116. package/dist/nodes/marker-band.d.ts.map +1 -0
  117. package/dist/nodes/marker-band.js +303 -0
  118. package/dist/nodes/marker-band.js.map +1 -0
  119. package/dist/nodes/marker-geometry.js +1 -1
  120. package/dist/nodes/marker-geometry.js.map +1 -1
  121. package/dist/nodes/milestone-node.d.ts +112 -15
  122. package/dist/nodes/milestone-node.d.ts.map +1 -1
  123. package/dist/nodes/milestone-node.js +246 -95
  124. package/dist/nodes/milestone-node.js.map +1 -1
  125. package/dist/nodes/nowline-node.d.ts +8 -0
  126. package/dist/nodes/nowline-node.d.ts.map +1 -0
  127. package/dist/nodes/nowline-node.js +74 -0
  128. package/dist/nodes/nowline-node.js.map +1 -0
  129. package/dist/nodes/parallel-node.d.ts +7 -12
  130. package/dist/nodes/parallel-node.d.ts.map +1 -1
  131. package/dist/nodes/parallel-node.js +66 -30
  132. package/dist/nodes/parallel-node.js.map +1 -1
  133. package/dist/nodes/region-markers.d.ts +41 -0
  134. package/dist/nodes/region-markers.d.ts.map +1 -0
  135. package/dist/nodes/region-markers.js +130 -0
  136. package/dist/nodes/region-markers.js.map +1 -0
  137. package/dist/nodes/roadmap-node.d.ts +9 -72
  138. package/dist/nodes/roadmap-node.d.ts.map +1 -1
  139. package/dist/nodes/roadmap-node.js +38 -788
  140. package/dist/nodes/roadmap-node.js.map +1 -1
  141. package/dist/nodes/row-track.d.ts +33 -0
  142. package/dist/nodes/row-track.d.ts.map +1 -0
  143. package/dist/nodes/row-track.js +170 -0
  144. package/dist/nodes/row-track.js.map +1 -0
  145. package/dist/nodes/sequence-item.d.ts +25 -0
  146. package/dist/nodes/sequence-item.d.ts.map +1 -0
  147. package/dist/nodes/sequence-item.js +396 -0
  148. package/dist/nodes/sequence-item.js.map +1 -0
  149. package/dist/nodes/sequence-one.d.ts +5 -0
  150. package/dist/nodes/sequence-one.d.ts.map +1 -0
  151. package/dist/nodes/sequence-one.js +26 -0
  152. package/dist/nodes/sequence-one.js.map +1 -0
  153. package/dist/nodes/swimlane-node.d.ts +5 -17
  154. package/dist/nodes/swimlane-node.d.ts.map +1 -1
  155. package/dist/nodes/swimlane-node.js +62 -145
  156. package/dist/nodes/swimlane-node.js.map +1 -1
  157. package/dist/nodes/wave-node.d.ts +52 -0
  158. package/dist/nodes/wave-node.d.ts.map +1 -0
  159. package/dist/nodes/wave-node.js +483 -0
  160. package/dist/nodes/wave-node.js.map +1 -0
  161. package/dist/non-working-display.d.ts +14 -0
  162. package/dist/non-working-display.d.ts.map +1 -0
  163. package/dist/non-working-display.js +28 -0
  164. package/dist/non-working-display.js.map +1 -0
  165. package/dist/phases/date-window.d.ts +48 -0
  166. package/dist/phases/date-window.d.ts.map +1 -0
  167. package/dist/phases/date-window.js +130 -0
  168. package/dist/phases/date-window.js.map +1 -0
  169. package/dist/phases/finalize.d.ts +198 -0
  170. package/dist/phases/finalize.d.ts.map +1 -0
  171. package/dist/phases/finalize.js +1058 -0
  172. package/dist/phases/finalize.js.map +1 -0
  173. package/dist/phases/measure.d.ts +77 -0
  174. package/dist/phases/measure.d.ts.map +1 -0
  175. package/dist/phases/measure.js +222 -0
  176. package/dist/phases/measure.js.map +1 -0
  177. package/dist/phases/place.d.ts +28 -0
  178. package/dist/phases/place.d.ts.map +1 -0
  179. package/dist/phases/place.js +225 -0
  180. package/dist/phases/place.js.map +1 -0
  181. package/dist/renderable.d.ts.map +1 -1
  182. package/dist/renderable.js +23 -3
  183. package/dist/renderable.js.map +1 -1
  184. package/dist/resolve-today.d.ts +11 -1
  185. package/dist/resolve-today.d.ts.map +1 -1
  186. package/dist/resolve-today.js +26 -12
  187. package/dist/resolve-today.js.map +1 -1
  188. package/dist/row-packer.d.ts +42 -16
  189. package/dist/row-packer.d.ts.map +1 -1
  190. package/dist/row-packer.js +51 -78
  191. package/dist/row-packer.js.map +1 -1
  192. package/dist/schedule.d.ts +58 -1
  193. package/dist/schedule.d.ts.map +1 -1
  194. package/dist/schedule.js +280 -106
  195. package/dist/schedule.js.map +1 -1
  196. package/dist/start-rules.d.ts +27 -0
  197. package/dist/start-rules.d.ts.map +1 -0
  198. package/dist/start-rules.js +91 -0
  199. package/dist/start-rules.js.map +1 -0
  200. package/dist/start-terms.d.ts +23 -0
  201. package/dist/start-terms.d.ts.map +1 -0
  202. package/dist/start-terms.js +27 -0
  203. package/dist/start-terms.js.map +1 -0
  204. package/dist/status-dot.d.ts +46 -0
  205. package/dist/status-dot.d.ts.map +1 -0
  206. package/dist/status-dot.js +78 -0
  207. package/dist/status-dot.js.map +1 -0
  208. package/dist/style-resolution.d.ts.map +1 -1
  209. package/dist/style-resolution.js +23 -43
  210. package/dist/style-resolution.js.map +1 -1
  211. package/dist/text-measure.d.ts +28 -0
  212. package/dist/text-measure.d.ts.map +1 -0
  213. package/dist/text-measure.js +70 -0
  214. package/dist/text-measure.js.map +1 -0
  215. package/dist/themes/contrast.d.ts +4 -0
  216. package/dist/themes/contrast.d.ts.map +1 -0
  217. package/dist/themes/contrast.js +32 -0
  218. package/dist/themes/contrast.js.map +1 -0
  219. package/dist/themes/dark.d.ts.map +1 -1
  220. package/dist/themes/dark.js +28 -1
  221. package/dist/themes/dark.js.map +1 -1
  222. package/dist/themes/grayscale.d.ts.map +1 -1
  223. package/dist/themes/grayscale.js +28 -1
  224. package/dist/themes/grayscale.js.map +1 -1
  225. package/dist/themes/index.d.ts +4 -11
  226. package/dist/themes/index.d.ts.map +1 -1
  227. package/dist/themes/index.js +6 -4
  228. package/dist/themes/index.js.map +1 -1
  229. package/dist/themes/light.d.ts.map +1 -1
  230. package/dist/themes/light.js +28 -1
  231. package/dist/themes/light.js.map +1 -1
  232. package/dist/themes/shape.d.ts +31 -0
  233. package/dist/themes/shape.d.ts.map +1 -1
  234. package/dist/themes/shared.d.ts +44 -50
  235. package/dist/themes/shared.d.ts.map +1 -1
  236. package/dist/themes/shared.js +79 -83
  237. package/dist/themes/shared.js.map +1 -1
  238. package/dist/time-scale.d.ts +42 -6
  239. package/dist/time-scale.d.ts.map +1 -1
  240. package/dist/time-scale.js +109 -17
  241. package/dist/time-scale.js.map +1 -1
  242. package/dist/types.d.ts +528 -11
  243. package/dist/types.d.ts.map +1 -1
  244. package/dist/view-preset.d.ts +61 -6
  245. package/dist/view-preset.d.ts.map +1 -1
  246. package/dist/view-preset.js +439 -24
  247. package/dist/view-preset.js.map +1 -1
  248. package/dist/wave-barrier.d.ts +107 -0
  249. package/dist/wave-barrier.d.ts.map +1 -0
  250. package/dist/wave-barrier.js +174 -0
  251. package/dist/wave-barrier.js.map +1 -0
  252. package/dist/wave-hatch.d.ts +4 -0
  253. package/dist/wave-hatch.d.ts.map +1 -0
  254. package/dist/wave-hatch.js +21 -0
  255. package/dist/wave-hatch.js.map +1 -0
  256. package/dist/wave-layout.d.ts +99 -0
  257. package/dist/wave-layout.d.ts.map +1 -0
  258. package/dist/wave-layout.js +130 -0
  259. package/dist/wave-layout.js.map +1 -0
  260. package/dist/working-calendar.d.ts +128 -4
  261. package/dist/working-calendar.d.ts.map +1 -1
  262. package/dist/working-calendar.js +725 -51
  263. package/dist/working-calendar.js.map +1 -1
  264. package/dist/working-span.d.ts +11 -0
  265. package/dist/working-span.d.ts.map +1 -0
  266. package/dist/working-span.js +18 -0
  267. package/dist/working-span.js.map +1 -0
  268. package/package.json +4 -4
  269. package/src/axis-columns.ts +140 -0
  270. package/src/calendar-resolver.ts +161 -0
  271. package/src/calendar.ts +4 -45
  272. package/src/canvas-width.ts +36 -0
  273. package/src/capacity.ts +71 -30
  274. package/src/chart-translation.ts +88 -0
  275. package/src/container-header-geometry.ts +116 -0
  276. package/src/dsl-utils.ts +8 -26
  277. package/src/edge-routing.ts +347 -491
  278. package/src/frame-tab-geometry.ts +78 -25
  279. package/src/header-card-geometry.ts +17 -2
  280. package/src/header-logo.ts +67 -0
  281. package/src/i18n.ts +22 -1
  282. package/src/index.ts +97 -12
  283. package/src/inline-date-pin-geometry.ts +55 -58
  284. package/src/item-bar-geometry.ts +341 -5
  285. package/src/item-port-geometry.ts +69 -0
  286. package/src/layout-context.ts +210 -72
  287. package/src/layout-insights.ts +109 -2
  288. package/src/layout.ts +57 -1530
  289. package/src/nodes/anchor-node.ts +11 -4
  290. package/src/nodes/content-extent.ts +107 -0
  291. package/src/nodes/dependency-edges.ts +171 -0
  292. package/src/nodes/footnote-node.ts +171 -31
  293. package/src/nodes/group-node.ts +92 -214
  294. package/src/nodes/header-node.ts +255 -0
  295. package/src/nodes/include-node.ts +124 -110
  296. package/src/nodes/item-measure.ts +723 -0
  297. package/src/nodes/item-node.ts +358 -80
  298. package/src/nodes/marker-band.ts +406 -0
  299. package/src/nodes/marker-geometry.ts +1 -1
  300. package/src/nodes/milestone-node.ts +321 -136
  301. package/src/nodes/nowline-node.ts +87 -0
  302. package/src/nodes/parallel-node.ts +69 -38
  303. package/src/nodes/region-markers.ts +194 -0
  304. package/src/nodes/roadmap-node.ts +46 -950
  305. package/src/nodes/row-track.ts +217 -0
  306. package/src/nodes/sequence-item.ts +433 -0
  307. package/src/nodes/sequence-one.ts +40 -0
  308. package/src/nodes/swimlane-node.ts +66 -205
  309. package/src/nodes/wave-node.ts +609 -0
  310. package/src/non-working-display.ts +32 -0
  311. package/src/phases/date-window.ts +191 -0
  312. package/src/phases/finalize.ts +1303 -0
  313. package/src/phases/measure.ts +329 -0
  314. package/src/phases/place.ts +318 -0
  315. package/src/renderable.ts +23 -3
  316. package/src/resolve-today.ts +28 -25
  317. package/src/row-packer.ts +85 -84
  318. package/src/schedule.ts +362 -114
  319. package/src/start-rules.ts +113 -0
  320. package/src/start-terms.ts +38 -0
  321. package/src/status-dot.ts +81 -0
  322. package/src/style-resolution.ts +27 -57
  323. package/src/text-measure.ts +71 -0
  324. package/src/themes/contrast.ts +34 -0
  325. package/src/themes/dark.ts +28 -1
  326. package/src/themes/grayscale.ts +28 -1
  327. package/src/themes/index.ts +10 -7
  328. package/src/themes/light.ts +28 -1
  329. package/src/themes/shape.ts +38 -0
  330. package/src/themes/shared.ts +85 -93
  331. package/src/time-scale.ts +117 -19
  332. package/src/types.ts +529 -20
  333. package/src/view-preset.ts +520 -27
  334. package/src/wave-barrier.ts +242 -0
  335. package/src/wave-hatch.ts +25 -0
  336. package/src/wave-layout.ts +203 -0
  337. package/src/working-calendar.ts +875 -57
  338. package/src/working-span.ts +19 -0
@@ -4,27 +4,20 @@
4
4
  // fresh rows) and emits a `PositionedSwimlane` plus the band's used
5
5
  // height.
6
6
  //
7
- // Step-2 transitional shape:
8
- // - Item children flow through the injected `deps.sequenceItem`. Once
9
- // ItemNode's wire-in is complete (step 1 — done) the production
10
- // `sequenceItem` already routes through ItemNode internally; deferring
11
- // the recursive Renderable call here keeps the diff small.
12
- // - Parallel + group children flow through `deps.sequenceOne` until
13
- // their own nodes land in step 3.
14
- // - The Renderable interface's `measure(MeasureContext)` is not yet
15
- // wired through the production pipeline. The composition-root work
16
- // in step 5 (`RoadmapNode`) will exercise it; meanwhile the legacy
17
- // two-pass "buildSwimlane returns positioned + usedHeight" shape is
18
- // preserved.
19
- import { isItemDeclaration } from '@nowline/core';
20
- import { deriveItemDurationDays } from '../calendar.js';
21
- import { estimateCapacitySuffixWidth, formatCapacityNumber, parseCapacityValue, resolveCapacityIcon, } from '../capacity.js';
7
+ // The lane's children go through the shared row track (`row-track.ts`):
8
+ // items are measured and placed by `sequenceItem`, and parallel and group
9
+ // children by the injected `helpers.sequenceOne`. A lane has no separate
10
+ // measure pass: its height is the result of packing its rows, so
11
+ // `place` returns the positioned lane with its used height
12
+ // (specs/layout-phases.md §2, non-goals).
13
+ import { capacityIconDxTerms, estimateCapacitySuffixWidth, formatCapacityNumber, parseCapacityValue, resolveCapacityIcon, } from '../capacity.js';
22
14
  import { propValue } from '../dsl-utils.js';
23
15
  import { frameTabGeometry } from '../frame-tab-geometry.js';
24
16
  import { computeLaneUtilization, resolveLaneUtilizationThresholds } from '../lane-utilization.js';
25
- import { RowPacker } from '../row-packer.js';
17
+ import { resolveChildStart } from '../start-rules.js';
26
18
  import { resolveStyle } from '../style-resolution.js';
27
- import { ITEM_INSET_PX, MIN_ITEM_WIDTH } from '../themes/shared.js';
19
+ import { estimateTextWidth } from '../text-measure.js';
20
+ import { sequenceRowTrack } from './row-track.js';
28
21
  /**
29
22
  * Font size (px) the renderer uses for the lane capacity badge. Mirrors
30
23
  * the owner-badge font size in `renderSwimlane` so the two reads as a
@@ -47,8 +40,9 @@ function resolveLaneCapacity(lane, style, symbols) {
47
40
  const text = formatCapacityNumber(value);
48
41
  const icon = resolveCapacityIcon(style.capacityIcon, symbols);
49
42
  const badgeWidthPx = estimateCapacitySuffixWidth(text, icon, LANE_CAPACITY_BADGE_FONT_SIZE_PX);
43
+ const iconDxTerms = capacityIconDxTerms(text, icon, LANE_CAPACITY_BADGE_FONT_SIZE_PX);
50
44
  return {
51
- capacity: { value, text, icon },
45
+ capacity: { value, text, icon, ...(iconDxTerms !== undefined ? { iconDxTerms } : {}) },
52
46
  badgeWidthPx,
53
47
  };
54
48
  }
@@ -56,21 +50,21 @@ const TAB_TOP_Y = 10; // matches renderer: tabY = box.y + 10
56
50
  const TAB_BOTTOM_Y = 38; // tab (height 22) plus 6 px breathing room
57
51
  const TAB_GUTTER_PX = 8;
58
52
  /**
59
- * Right edge (canvas px) of the lane title tab. Delegates to the
60
- * shared `frameTabGeometry` helper that the renderer also uses, so
61
- * the chiclet's collision footprint and its painted footprint stay
62
- * exactly in sync. Capacity badge and footnote-indicator widths are
63
- * added when present so the first-item collision math reserves
64
- * enough horizontal space for the (now-wider) chiclet.
53
+ * The lane's owner as the frame tab shows it: the person's or team's
54
+ * title (nested teams included), else the bare id, plus which glyph leads
55
+ * it. Undefined without `owner:`.
65
56
  */
66
- function computeLaneTabRightX(lane, capacityBadgeWidthPx, footnoteIndicatorWidthPx) {
67
- const title = lane.title ?? lane.name ?? '';
68
- if (!title)
69
- return 0;
57
+ function resolveLaneOwner(lane, ctx) {
70
58
  const ownerRaw = propValue(lane.properties, 'owner');
71
- // Box is laid out at `box.x = 0` for top-level lanes; the helper
72
- // adds the standard `FRAME_TAB_OFFSET_FROM_BOX_PX` itself.
73
- return frameTabGeometry(0, title, ownerRaw ?? undefined, capacityBadgeWidthPx, footnoteIndicatorWidthPx).rightX;
59
+ if (!ownerRaw)
60
+ return undefined;
61
+ const team = ctx.teams.get(ownerRaw);
62
+ if (team)
63
+ return { text: team.title ?? ownerRaw, kind: 'team' };
64
+ const person = ctx.persons.get(ownerRaw);
65
+ if (person)
66
+ return { text: person.title ?? ownerRaw, kind: 'person' };
67
+ return { text: ownerRaw, kind: 'team' };
74
68
  }
75
69
  /**
76
70
  * Footnote indicators (1-based numbers) that name this lane via `on:`,
@@ -98,30 +92,28 @@ function collectFootnoteIndicators(lane, ctx) {
98
92
  * the top-pad collapse decision (a row whose first item lives past the
99
93
  * tab can sit at TAB_TOP_Y; otherwise rows drop below the tab).
100
94
  */
101
- function firstChildStartX(lane, laneLeftX, ctx, deps) {
95
+ function firstChildStartX(lane, laneLeftX, ctx) {
102
96
  for (const child of lane.content) {
103
97
  if (child.$type === 'DescriptionDirective')
104
98
  continue;
105
- const props = isItemDeclaration(child)
106
- ? child.properties
107
- : (child.properties ?? []);
108
- return deps.resolveChildStart(props, laneLeftX, laneLeftX, ctx);
99
+ // Snapped like the start it predicts (a no-op under `hide`).
100
+ return ctx.scale.startX(resolveChildStart(child, laneLeftX, ctx));
109
101
  }
110
102
  return undefined;
111
103
  }
112
104
  export class SwimlaneNode {
113
105
  input;
114
- deps;
115
- constructor(input, deps) {
106
+ helpers;
107
+ constructor(input, helpers) {
116
108
  this.input = input;
117
- this.deps = deps;
109
+ this.helpers = helpers;
118
110
  }
119
111
  get id() {
120
112
  return this.input.lane.name ?? '';
121
113
  }
122
114
  place(origin, ctx) {
123
115
  const { lane, bandIndex } = this.input;
124
- const { deps } = this;
116
+ const { helpers } = this;
125
117
  const style = resolveStyle('swimlane', lane.properties, ctx.styleCtx);
126
118
  const laneLeftX = origin.x;
127
119
  const step = ctx.bandScale.step();
@@ -143,130 +135,53 @@ export class SwimlaneNode {
143
135
  // pre-resolved footnote index/host map.
144
136
  const footnoteIndicators = collectFootnoteIndicators(lane, ctx);
145
137
  const footnoteIndicatorWidthPx = footnoteIndicators.length > 0
146
- ? deps.estimateTextWidth(footnoteIndicators.join(','), LANE_CAPACITY_BADGE_FONT_SIZE_PX)
138
+ ? estimateTextWidth(footnoteIndicators.join(','), LANE_CAPACITY_BADGE_FONT_SIZE_PX)
147
139
  : 0;
148
- // Title-tab geometry (mirrors the renderer; see renderSwimlane).
149
- const tabRightX = computeLaneTabRightX(lane, badgeWidthPx, footnoteIndicatorWidthPx);
140
+ // Title-tab geometry, computed once from the owner's display
141
+ // title: the collision box below and the chiclet the renderer
142
+ // draws (`PositionedSwimlane.tab`) are the same rectangle. Every
143
+ // lane box sits at x 0 (`box` below); finalize sets only widths.
144
+ const boxX = 0;
145
+ const owner = resolveLaneOwner(lane, ctx);
146
+ const title = lane.title ?? lane.name ?? '';
147
+ const tab = title
148
+ ? frameTabGeometry(boxX, title, owner?.text, badgeWidthPx, footnoteIndicatorWidthPx)
149
+ : null;
150
+ const tabRightX = tab?.rightX ?? 0;
150
151
  // First-row Y: when the first child's desired x is past the title
151
152
  // tab, top-align with the tab and reclaim ~28 px per lane.
152
153
  // Otherwise drop below the tab.
153
- const firstChildDesiredX = firstChildStartX(lane, laneLeftX, ctx, deps);
154
+ const firstChildDesiredX = firstChildStartX(lane, laneLeftX, ctx);
154
155
  const canAlignFirstRowWithTab = !lane.title ||
155
156
  firstChildDesiredX === undefined ||
156
157
  firstChildDesiredX >= tabRightX + TAB_GUTTER_PX;
157
158
  const startY = origin.y + (canAlignFirstRowWithTab ? TAB_TOP_Y : TAB_BOTTOM_Y);
158
- // Topmost-fit row pack. See `RowPacker` for the full contract.
159
- // The packer owns the rows; we feed it children in DSL order and
160
- // it returns each child's resolved (rowIndex, y).
161
- const packer = new RowPacker({
162
- laneLeftX,
163
- originY: startY,
164
- minRowHeight: step,
165
- slackCorridors: ctx.slackCorridors,
166
- });
167
- let timeCursorX = laneLeftX;
168
- const children = [];
169
- for (const child of lane.content) {
170
- if (child.$type === 'DescriptionDirective')
171
- continue;
172
- if (!isItemDeclaration(child)) {
173
- const blockProps = child.properties ?? [];
174
- const blockStart = deps.resolveChildStart(blockProps, timeCursorX, laneLeftX, ctx);
175
- const { rowIndex, y: blockY } = packer.placeBlock();
176
- const cursor = deps.newCursor(blockStart, blockY);
177
- const positioned = deps.sequenceOne(child, cursor, ctx);
178
- children.push(positioned);
179
- const blockEnd = positioned.box.x + positioned.box.width;
180
- const blockHeight = Math.max(step, cursor.height);
181
- packer.commitBlock({
182
- rowIndex,
183
- placed: positioned,
184
- blockHeight,
185
- blockEnd,
186
- });
187
- timeCursorX = Math.max(timeCursorX, blockEnd);
188
- continue;
189
- }
190
- const props = child.properties;
191
- const desiredStart = deps.resolveChildStart(props, timeCursorX, laneLeftX, ctx);
192
- // Predict the item's logical extent so the row-pack can decide
193
- // BEFORE handing off to sequenceItem. The arithmetic mirrors
194
- // the duration → width math in `sequenceItem` (see
195
- // packages/layout/src/layout.ts).
196
- const durationDays = deriveItemDurationDays(props, ctx.sizes, ctx.cal);
197
- const naturalWidth = Math.max(MIN_ITEM_WIDTH, durationDays * ctx.timeline.pixelsPerDay);
198
- const desiredEnd = desiredStart + naturalWidth;
199
- const childId = child.name ?? '';
200
- const chipExtra = deps.predictItemChipExtraHeight(child, ctx);
201
- const predictedHeight = step + chipExtra;
202
- const { rowIndex, y: rowY } = packer.placeItem({
203
- childId,
204
- desiredStart,
205
- desiredEnd,
206
- // Row pitch = `step()` + extra chip-row height. Keeps
207
- // the inter-row visible gap (= step - bandwidth) intact
208
- // when an item's labels wrap and grow the bar.
209
- predictedHeight,
210
- });
211
- const cursor = deps.newCursor(desiredStart, rowY);
212
- const positioned = deps.sequenceItem(child, cursor, ctx);
213
- children.push(positioned);
214
- // Item end in LOGICAL space (one ITEM_INSET_PX past the visual
215
- // bar's right edge). The next chained item starts here and
216
- // lands edge-to-edge in time, with a 2 × ITEM_INSET_PX visible
217
- // gutter between bars.
218
- const itemLogicalEnd = positioned.box.x + positioned.box.width + ITEM_INSET_PX;
219
- timeCursorX = Math.max(timeCursorX, itemLogicalEnd);
220
- let spillReservation = null;
221
- const hasAnySpill = positioned.textSpills ||
222
- positioned.chipsOutside ||
223
- positioned.dotSpills ||
224
- positioned.iconSpills ||
225
- positioned.footnoteSpills;
226
- if (hasAnySpill) {
227
- // `decorationsRightX` already aggregates the spilled
228
- // dot / icon / footnote / caption right edges from
229
- // `sequenceItem`; the chip column tracks separately
230
- // via `chipsRightX`. Add a 6-px buffer so the next
231
- // chained item's bar leaves a visible gutter past
232
- // the spilled cluster instead of butting against it.
233
- const farRight = Math.max(positioned.decorationsRightX, positioned.chipsOutside ? positioned.chipsRightX : 0);
234
- spillReservation = farRight + 6;
235
- }
236
- packer.commitItem({
237
- rowIndex,
238
- placed: positioned,
239
- logicalEnd: itemLogicalEnd,
240
- spillReservation,
241
- rowHeight: predictedHeight,
242
- });
243
- }
244
- // `packer.usedHeight()` measures from `startY` (the first row,
159
+ // The shared row-track loop (row-track.ts) packs the lane's
160
+ // children below the tab offset chosen above.
161
+ const track = sequenceRowTrack(lane, { leftX: laneLeftX, firstRowY: startY }, ctx, helpers);
162
+ const { children } = track;
163
+ // `track.packer.usedHeight()` measures from `startY` (the first row,
245
164
  // below the title tab); the swimlane band spans from `origin.y`
246
165
  // (the band top, above the tab). Add the tab offset back so the
247
166
  // band height covers everything the user sees.
248
167
  const tabOffset = startY - origin.y;
249
- const bandHeight = Math.max(step + 32, tabOffset + packer.usedHeight() + 16);
168
+ const bandHeight = Math.max(step + 32, tabOffset + track.packer.usedHeight() + 16);
250
169
  // Include the chiclet's right edge in the lane's reported
251
170
  // right-extent so empty lanes still report a non-zero right edge
252
171
  // — `buildIncludeRegions` uses this to size the include's dashed
253
172
  // bracket around its content, and a lane with only a chiclet
254
173
  // (no items) should still fit visibly inside that bracket.
255
- const usedRightX = Math.max(packer.usedRightX(), tabRightX);
174
+ const usedRightX = Math.max(track.packer.usedRightX(), tabRightX);
175
+ // The band spans the canvas, whose width is final only after the
176
+ // post-placement growth: finalize (`fitWidths`, f4) sets a main
177
+ // lane's width to it and `fitIncludeRegionWidth` a region lane's to
178
+ // the region's. Placement never reads the canvas.
256
179
  const box = {
257
- x: 0,
180
+ x: boxX,
258
181
  y: origin.y,
259
- width: ctx.chartRightX,
182
+ width: 0,
260
183
  height: bandHeight,
261
184
  };
262
- // Owner display string: id → title for teams/people; falls back to id.
263
- const ownerRaw = propValue(lane.properties, 'owner');
264
- let ownerDisplay;
265
- if (ownerRaw) {
266
- const team = ctx.teams.get(ownerRaw);
267
- const person = ctx.persons.get(ownerRaw);
268
- ownerDisplay = team?.title ?? person?.title ?? ownerRaw;
269
- }
270
185
  // Lane utilization underline (m12). Computed *after* children are
271
186
  // positioned so the contributors carry their final box.x / box.width.
272
187
  // Returns null when the lane has no `capacity:`, no contributing
@@ -287,15 +202,17 @@ export class SwimlaneNode {
287
202
  return {
288
203
  positioned: {
289
204
  id: lane.name,
290
- title: lane.title ?? lane.name ?? '',
205
+ title,
291
206
  box,
292
207
  bandIndex,
293
208
  children,
294
209
  nested: [],
295
210
  style,
296
- owner: ownerDisplay,
211
+ owner: owner?.text,
212
+ ownerKind: owner?.kind,
297
213
  footnoteIndicators,
298
214
  capacity,
215
+ tab,
299
216
  utilization,
300
217
  },
301
218
  usedHeight: bandHeight,
@@ -1 +1 @@
1
- {"version":3,"file":"swimlane-node.js","sourceRoot":"","sources":["../../src/nodes/swimlane-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"swimlane-node.js","sourceRoot":"","sources":["../../src/nodes/swimlane-node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { LocaleStrings } from '../i18n.js';
2
+ import type { LayoutContext } from '../layout-context.js';
3
+ import type { Theme } from '../themes/shape.js';
4
+ import type { PositionedIncludeRegion, PositionedSwimlane, PositionedWave, PositionedWaveBoundary, PositionedWaveCrossing, PositionedWaveLegend } from '../types.js';
5
+ import { type WaveLayoutState } from '../wave-layout.js';
6
+ /** Everything `buildWaves` produces; the caller attaches it to the model. */
7
+ export interface BuiltWaves {
8
+ waves: PositionedWave[];
9
+ /** Boundary lines, left to right (empty when every wave is empty). */
10
+ boundaries: PositionedWaveBoundary[];
11
+ /** Crossings over the main lanes' background bars. */
12
+ crossings: PositionedWaveCrossing[];
13
+ /** Crossings over each isolated region's background bars, parallel to `includes`. */
14
+ regionCrossings: PositionedWaveCrossing[][];
15
+ /** True when any placed item (main lanes or regions) is background work. */
16
+ hasBackground: boolean;
17
+ }
18
+ /**
19
+ * Build the positioned waves, boundaries and crossings. `state` must be
20
+ * frozen: its `pass` is the pass that ran with the solved `S`/`E`, so its
21
+ * member counts cover the main lanes and the first-level regions exactly
22
+ * once (later placements never accumulate). `ctx.timeline.waveStrip` is
23
+ * set whenever some wave has items; when none does, nothing is drawn and the
24
+ * waves carry their spans only (specs/waves.md §9.1).
25
+ */
26
+ export declare function buildWaves(state: WaveLayoutState, ctx: LayoutContext, strings: LocaleStrings, swimlanes: PositionedSwimlane[], includes: PositionedIncludeRegion[]): BuiltWaves;
27
+ interface LabelFit {
28
+ kind: 'title' | 'id' | 'ellipsis' | 'ordinal';
29
+ label: string;
30
+ }
31
+ /**
32
+ * The first strip label candidate that fits (§9.1): the title, the id, the
33
+ * title ellipsized to 3 or more characters plus "…", then the 1-based
34
+ * `#k`. The test is the bold 10 px width estimate plus `extraWidth` (the
35
+ * footnote superscripts) plus 6 px padding on each side. Undefined: no
36
+ * label.
37
+ */
38
+ export declare function fitStripLabel(title: string, id: string, ordinal: number, visibleWidth: number, extraWidth: number): LabelFit | undefined;
39
+ /**
40
+ * `wave.labelText` when it reaches 4.5:1 against `fill` (or either colour is
41
+ * not hex), else whichever of the theme's dark (`hatch`) and light
42
+ * (`hatchOnDark`) strokes contrasts more.
43
+ */
44
+ export declare function readableLabelText(wave: Pick<Theme['wave'], 'labelText' | 'hatch' | 'hatchOnDark'>, fill: string): string;
45
+ /**
46
+ * The wave legend (§9.5), or undefined without background work (which there
47
+ * is only when some wave is drawn): one hatch swatch, `Background work (not
48
+ * in a wave)`, `WAVE_LEGEND_LINE_PX` high from `topY` at the chart origin.
49
+ */
50
+ export declare function buildWaveLegend(built: BuiltWaves, ctx: LayoutContext, strings: LocaleStrings, topY: number): PositionedWaveLegend | undefined;
51
+ export {};
52
+ //# sourceMappingURL=wave-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wave-node.d.ts","sourceRoot":"","sources":["../../src/nodes/wave-node.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAchD,OAAO,KAAK,EAGR,uBAAuB,EAEvB,kBAAkB,EAElB,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EAGvB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAIH,KAAK,eAAe,EACvB,MAAM,mBAAmB,CAAC;AAM3B,6EAA6E;AAC7E,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,sEAAsE;IACtE,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,sDAAsD;IACtD,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,qFAAqF;IACrF,eAAe,EAAE,sBAAsB,EAAE,EAAE,CAAC;IAC5C,4EAA4E;IAC5E,aAAa,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACtB,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,kBAAkB,EAAE,EAC/B,QAAQ,EAAE,uBAAuB,EAAE,GACpC,UAAU,CA4OZ;AA6BD,UAAU,QAAQ;IACd,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,UAAU,GAAG,SAAS,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;CACjB;AAOD;;;;;;GAMG;AACH,wBAAgB,aAAa,CACzB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACnB,QAAQ,GAAG,SAAS,CActB;AAuED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,aAAa,CAAC,EAChE,IAAI,EAAE,MAAM,GACb,MAAM,CAOR;AAyFD;;;;GAIG;AACH,wBAAgB,eAAe,CAC3B,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,MAAM,GACb,oBAAoB,GAAG,SAAS,CAuBlC"}