@nowline/renderer 0.0.0-dev.20261020002921.g70f418b → 0.0.0-dev.20261020011950.gce8a91f
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/svg/swimlanes.d.ts.map +1 -1
- package/dist/svg/swimlanes.js +16 -16
- package/dist/svg/swimlanes.js.map +1 -1
- package/package.json +3 -3
- package/src/svg/swimlanes.ts +18 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swimlanes.d.ts","sourceRoot":"","sources":["../../src/svg/swimlanes.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGR,kBAAkB,EAElB,KAAK,EACR,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"swimlanes.d.ts","sourceRoot":"","sources":["../../src/svg/swimlanes.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGR,kBAAkB,EAElB,KAAK,EACR,MAAM,iBAAiB,CAAC;AAgBzB,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA8J/D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,GAAG,MAAM,CAgB9E;AAED,wBAAgB,cAAc,CAC1B,CAAC,EAAE,kBAAkB,EACrB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,KAAK,EACd,KAAK,EAAE,YAAY,GACpB,MAAM,CA4GR"}
|
package/dist/svg/swimlanes.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
// The swimlane layers: the lane background tint and tri-state utilization
|
|
2
2
|
// underline, the lane frame tab and badges, and the group and parallel
|
|
3
3
|
// containers that wrap a lane's items.
|
|
4
|
-
import { CONTAINER_BODY_FILL_OPACITY, CONTAINER_BRACKET_LINE_OFFSET_PX, CONTAINER_HEADER_TITLE_BASELINE_PX, CONTAINER_HEADER_TITLE_FONT_SIZE_PX, CONTAINER_MAX_FILLED_DEPTH, CONTAINER_NESTED_BODY_FILL_OPACITY, containerHeaderTitleX, FRAME_TAB_HEIGHT_PX, FRAME_TAB_LABEL_BASELINE_OFFSET_PX,
|
|
4
|
+
import { CONTAINER_BODY_FILL_OPACITY, CONTAINER_BRACKET_LINE_OFFSET_PX, CONTAINER_HEADER_TITLE_BASELINE_PX, CONTAINER_HEADER_TITLE_FONT_SIZE_PX, CONTAINER_MAX_FILLED_DEPTH, CONTAINER_NESTED_BODY_FILL_OPACITY, containerHeaderTitleX, FRAME_TAB_HEIGHT_PX, FRAME_TAB_LABEL_BASELINE_OFFSET_PX, FRAME_TAB_OWNER_GLYPH_PX, } from '@nowline/layout';
|
|
5
|
+
import { CAPACITY_ICON_SVG } from './icons.js';
|
|
5
6
|
import { hasAfterPin, renderCapacitySuffix, renderInlineDatePins, renderItem } from './item.js';
|
|
6
7
|
import { fontAttrs } from './primitives.js';
|
|
7
|
-
import { num, tag, textTag } from './xml.js';
|
|
8
|
+
import { escAttr, num, tag, textTag } from './xml.js';
|
|
8
9
|
/**
|
|
9
10
|
* A group or parallel, drawn above and around its content
|
|
10
11
|
* (specs/true-width-layout.md §3.3): a body shaded with the container's `bg`
|
|
@@ -151,20 +152,14 @@ export function renderSwimlane(s, options, idPrefix, palette, fonts) {
|
|
|
151
152
|
const ownerText = palette.swimlane.ownerText;
|
|
152
153
|
const footnoteColor = palette.swimlane.footnoteIndicator;
|
|
153
154
|
const parts = [];
|
|
154
|
-
// Frame-tab chiclet at the top-left of the band
|
|
155
|
-
// title
|
|
156
|
-
//
|
|
157
|
-
//
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
// tab after the owner (or after the title if no owner). Layout
|
|
161
|
-
// measured both widths (the ones it sized the tab's collision box
|
|
162
|
-
// with), so `frameTabGeometry` sizes the chiclet to fit them, then
|
|
163
|
-
// the placement positions are read back out — no second placement
|
|
164
|
-
// pass in the renderer.
|
|
155
|
+
// Frame-tab chiclet at the top-left of the band, auto-sized to fit
|
|
156
|
+
// title, owner, capacity badge and footnote indicators. Layout sized it
|
|
157
|
+
// (`PositionedSwimlane.tab`, the same rectangle it reserved for the
|
|
158
|
+
// row packer) and placed each element inside it; this only draws.
|
|
159
|
+
const tab = s.tab;
|
|
160
|
+
if (tab) {
|
|
165
161
|
const LANE_BADGE_FONT_SIZE_PX = 10;
|
|
166
162
|
const footnoteIndicatorText = s.footnoteIndicators.length > 0 ? s.footnoteIndicators.join(',') : '';
|
|
167
|
-
const tab = frameTabGeometry(s.box.x, s.title, s.owner, s.capacityBadgeWidth, s.footnoteIndicatorWidth);
|
|
168
163
|
const tabH = FRAME_TAB_HEIGHT_PX;
|
|
169
164
|
const tabY = s.box.y + 10;
|
|
170
165
|
const labelY = tabY + FRAME_TAB_LABEL_BASELINE_OFFSET_PX;
|
|
@@ -188,13 +183,18 @@ export function renderSwimlane(s, options, idPrefix, palette, fonts) {
|
|
|
188
183
|
fill: tabText,
|
|
189
184
|
}, s.title));
|
|
190
185
|
if (s.owner) {
|
|
186
|
+
// A person or people glyph leads the owner name, lifted onto
|
|
187
|
+
// the text's x-height like the capacity badge's glyph.
|
|
188
|
+
const glyph = CAPACITY_ICON_SVG[s.ownerKind === 'person' ? 'person' : 'people'];
|
|
189
|
+
const glyphSize = FRAME_TAB_OWNER_GLYPH_PX;
|
|
190
|
+
parts.push(`<svg x="${num(tab.ownerX)}" y="${num(labelY - glyphSize * 0.85)}" width="${num(glyphSize)}" height="${num(glyphSize)}" viewBox="${glyph.viewBox}" style="color:${escAttr(ownerText)}" aria-hidden="true">${glyph.body}</svg>`);
|
|
191
191
|
parts.push(textTag({
|
|
192
|
-
x: num(tab.
|
|
192
|
+
x: num(tab.ownerTextX),
|
|
193
193
|
y: num(labelY),
|
|
194
194
|
'font-family': fonts[s.style.font],
|
|
195
195
|
'font-size': 10,
|
|
196
196
|
fill: ownerText,
|
|
197
|
-
},
|
|
197
|
+
}, s.owner));
|
|
198
198
|
}
|
|
199
199
|
if (s.capacity) {
|
|
200
200
|
// Re-uses the same `renderCapacitySuffix` helper that paints
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swimlanes.js","sourceRoot":"","sources":["../../src/svg/swimlanes.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,uEAAuE;AACvE,uCAAuC;AASvC,OAAO,EACH,2BAA2B,EAC3B,gCAAgC,EAChC,kCAAkC,EAClC,mCAAmC,EACnC,0BAA0B,EAC1B,kCAAkC,EAClC,qBAAqB,EACrB,mBAAmB,EACnB,kCAAkC,EAClC,
|
|
1
|
+
{"version":3,"file":"swimlanes.js","sourceRoot":"","sources":["../../src/svg/swimlanes.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nowline/renderer",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.20261020011950.gce8a91f",
|
|
4
4
|
"description": "Nowline renderer — draws a laid-out roadmap as an SVG image.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"engines": {
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"src/"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@nowline/core": "0.0.0-dev.
|
|
26
|
-
"@nowline/layout": "0.0.0-dev.
|
|
25
|
+
"@nowline/core": "0.0.0-dev.20261020011950.gce8a91f",
|
|
26
|
+
"@nowline/layout": "0.0.0-dev.20261020011950.gce8a91f",
|
|
27
27
|
"langium": "~4.4.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
package/src/svg/swimlanes.ts
CHANGED
|
@@ -19,12 +19,13 @@ import {
|
|
|
19
19
|
containerHeaderTitleX,
|
|
20
20
|
FRAME_TAB_HEIGHT_PX,
|
|
21
21
|
FRAME_TAB_LABEL_BASELINE_OFFSET_PX,
|
|
22
|
-
|
|
22
|
+
FRAME_TAB_OWNER_GLYPH_PX,
|
|
23
23
|
} from '@nowline/layout';
|
|
24
|
+
import { CAPACITY_ICON_SVG } from './icons.js';
|
|
24
25
|
import { hasAfterPin, renderCapacitySuffix, renderInlineDatePins, renderItem } from './item.js';
|
|
25
26
|
import { fontAttrs } from './primitives.js';
|
|
26
27
|
import type { FontFamilies, RenderOptions } from './render.js';
|
|
27
|
-
import { num, tag, textTag } from './xml.js';
|
|
28
|
+
import { escAttr, num, tag, textTag } from './xml.js';
|
|
28
29
|
|
|
29
30
|
/**
|
|
30
31
|
* A group or parallel, drawn above and around its content
|
|
@@ -212,27 +213,15 @@ export function renderSwimlane(
|
|
|
212
213
|
const ownerText = palette.swimlane.ownerText;
|
|
213
214
|
const footnoteColor = palette.swimlane.footnoteIndicator;
|
|
214
215
|
const parts: string[] = [];
|
|
215
|
-
// Frame-tab chiclet at the top-left of the band
|
|
216
|
-
// title
|
|
217
|
-
//
|
|
218
|
-
//
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
// tab after the owner (or after the title if no owner). Layout
|
|
222
|
-
// measured both widths (the ones it sized the tab's collision box
|
|
223
|
-
// with), so `frameTabGeometry` sizes the chiclet to fit them, then
|
|
224
|
-
// the placement positions are read back out — no second placement
|
|
225
|
-
// pass in the renderer.
|
|
216
|
+
// Frame-tab chiclet at the top-left of the band, auto-sized to fit
|
|
217
|
+
// title, owner, capacity badge and footnote indicators. Layout sized it
|
|
218
|
+
// (`PositionedSwimlane.tab`, the same rectangle it reserved for the
|
|
219
|
+
// row packer) and placed each element inside it; this only draws.
|
|
220
|
+
const tab = s.tab;
|
|
221
|
+
if (tab) {
|
|
226
222
|
const LANE_BADGE_FONT_SIZE_PX = 10;
|
|
227
223
|
const footnoteIndicatorText =
|
|
228
224
|
s.footnoteIndicators.length > 0 ? s.footnoteIndicators.join(',') : '';
|
|
229
|
-
const tab = frameTabGeometry(
|
|
230
|
-
s.box.x,
|
|
231
|
-
s.title,
|
|
232
|
-
s.owner,
|
|
233
|
-
s.capacityBadgeWidth,
|
|
234
|
-
s.footnoteIndicatorWidth,
|
|
235
|
-
);
|
|
236
225
|
const tabH = FRAME_TAB_HEIGHT_PX;
|
|
237
226
|
const tabY = s.box.y + 10;
|
|
238
227
|
const labelY = tabY + FRAME_TAB_LABEL_BASELINE_OFFSET_PX;
|
|
@@ -263,16 +252,23 @@ export function renderSwimlane(
|
|
|
263
252
|
),
|
|
264
253
|
);
|
|
265
254
|
if (s.owner) {
|
|
255
|
+
// A person or people glyph leads the owner name, lifted onto
|
|
256
|
+
// the text's x-height like the capacity badge's glyph.
|
|
257
|
+
const glyph = CAPACITY_ICON_SVG[s.ownerKind === 'person' ? 'person' : 'people'];
|
|
258
|
+
const glyphSize = FRAME_TAB_OWNER_GLYPH_PX;
|
|
259
|
+
parts.push(
|
|
260
|
+
`<svg x="${num(tab.ownerX)}" y="${num(labelY - glyphSize * 0.85)}" width="${num(glyphSize)}" height="${num(glyphSize)}" viewBox="${glyph.viewBox}" style="color:${escAttr(ownerText)}" aria-hidden="true">${glyph.body}</svg>`,
|
|
261
|
+
);
|
|
266
262
|
parts.push(
|
|
267
263
|
textTag(
|
|
268
264
|
{
|
|
269
|
-
x: num(tab.
|
|
265
|
+
x: num(tab.ownerTextX),
|
|
270
266
|
y: num(labelY),
|
|
271
267
|
'font-family': fonts[s.style.font],
|
|
272
268
|
'font-size': 10,
|
|
273
269
|
fill: ownerText,
|
|
274
270
|
},
|
|
275
|
-
|
|
271
|
+
s.owner,
|
|
276
272
|
),
|
|
277
273
|
);
|
|
278
274
|
}
|