@nowline/layout 0.0.0-dev.20261013203301.g9c71cbb → 0.0.0-dev.20261013224238.g0a3e5fc
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/calendar-resolver.d.ts.map +1 -1
- package/dist/calendar-resolver.js +20 -61
- package/dist/calendar-resolver.js.map +1 -1
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +4 -6
- package/dist/calendar.js.map +1 -1
- package/dist/capacity.d.ts.map +1 -1
- package/dist/capacity.js +8 -24
- package/dist/capacity.js.map +1 -1
- package/dist/dsl-utils.d.ts +2 -5
- package/dist/dsl-utils.d.ts.map +1 -1
- package/dist/dsl-utils.js +6 -27
- package/dist/dsl-utils.js.map +1 -1
- package/dist/inline-date-pin-geometry.d.ts.map +1 -1
- package/dist/inline-date-pin-geometry.js +2 -1
- package/dist/inline-date-pin-geometry.js.map +1 -1
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +8 -32
- package/dist/layout.js.map +1 -1
- package/dist/nodes/anchor-node.js +2 -2
- package/dist/nodes/anchor-node.js.map +1 -1
- package/dist/nodes/milestone-node.js +2 -2
- package/dist/nodes/milestone-node.js.map +1 -1
- package/dist/nodes/roadmap-node.d.ts.map +1 -1
- package/dist/nodes/roadmap-node.js +6 -9
- package/dist/nodes/roadmap-node.js.map +1 -1
- package/dist/nodes/wave-node.d.ts.map +1 -1
- package/dist/nodes/wave-node.js +2 -2
- package/dist/nodes/wave-node.js.map +1 -1
- package/dist/non-working-display.d.ts +3 -2
- package/dist/non-working-display.d.ts.map +1 -1
- package/dist/non-working-display.js +6 -4
- package/dist/non-working-display.js.map +1 -1
- package/dist/resolve-today.d.ts.map +1 -1
- package/dist/resolve-today.js +5 -5
- package/dist/resolve-today.js.map +1 -1
- package/dist/schedule.js +6 -6
- package/dist/schedule.js.map +1 -1
- package/dist/start-terms.js +4 -4
- package/dist/start-terms.js.map +1 -1
- package/dist/style-resolution.d.ts.map +1 -1
- package/dist/style-resolution.js +18 -44
- package/dist/style-resolution.js.map +1 -1
- package/dist/view-preset.d.ts.map +1 -1
- package/dist/view-preset.js +5 -7
- package/dist/view-preset.js.map +1 -1
- package/package.json +2 -2
- package/src/calendar-resolver.ts +19 -63
- package/src/calendar.ts +4 -7
- package/src/capacity.ts +8 -25
- package/src/dsl-utils.ts +6 -29
- package/src/inline-date-pin-geometry.ts +2 -1
- package/src/layout.ts +8 -30
- package/src/nodes/anchor-node.ts +2 -2
- package/src/nodes/milestone-node.ts +2 -2
- package/src/nodes/roadmap-node.ts +6 -10
- package/src/nodes/wave-node.ts +2 -2
- package/src/non-working-display.ts +8 -5
- package/src/resolve-today.ts +6 -12
- package/src/schedule.ts +6 -6
- package/src/start-terms.ts +4 -4
- package/src/style-resolution.ts +23 -58
- package/src/view-preset.ts +5 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar-resolver.d.ts","sourceRoot":"","sources":["../src/calendar-resolver.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"calendar-resolver.d.ts","sourceRoot":"","sources":["../src/calendar-resolver.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAER,WAAW,EACX,aAAa,EAEhB,MAAM,eAAe,CAAC;AAMvB,OAAO,EAAE,KAAK,cAAc,EAAmB,MAAM,eAAe,CAAC;AACrE,OAAO,EAIH,KAAK,eAAe,EACvB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,gBAAgB;IAC7B,iDAAiD;IACjD,MAAM,EAAE,cAAc,CAAC;IACvB;;;;;OAKG;IACH,OAAO,EAAE,eAAe,CAAC;CAC5B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAClC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,aAAa,GACxB,gBAAgB,CASlB"}
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
// It lives apart from `calendar.ts` because `working-calendar.ts` already
|
|
11
11
|
// imports values from there; building a `WorkingCalendar` in `calendar.ts`
|
|
12
12
|
// would close a value-import cycle.
|
|
13
|
+
import { classifyCalendarDeclaration, parseIsoDate, replacesPresetWeekend, } from '@nowline/core/internal';
|
|
13
14
|
import { resolveCalendar } from './calendar.js';
|
|
14
|
-
import { formatIsoDate, parseDate, propValues } from './dsl-utils.js';
|
|
15
15
|
import { fromCalendarConfig, presetRules, } from './working-calendar.js';
|
|
16
16
|
/**
|
|
17
17
|
* Resolve the calendar a roadmap declares (`calendar:` on the roadmap plus
|
|
@@ -36,24 +36,13 @@ export function resolveWorkingCalendar(file, resolved) {
|
|
|
36
36
|
return { config, working: fromCalendarConfig(config) };
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
/** UTC weekday numbers (Sunday is 0) of the names `every:` takes. */
|
|
40
|
-
const WEEKDAY_INDEX = {
|
|
41
|
-
sun: 0,
|
|
42
|
-
mon: 1,
|
|
43
|
-
tue: 2,
|
|
44
|
-
wed: 3,
|
|
45
|
-
thu: 4,
|
|
46
|
-
fri: 5,
|
|
47
|
-
sat: 6,
|
|
48
|
-
};
|
|
49
39
|
/**
|
|
50
40
|
* The preset's rules, unless a `non-working` declaration is named `weekend`
|
|
51
41
|
* (decision 14), plus one rule per well-formed declaration, in canonical
|
|
52
42
|
* order.
|
|
53
43
|
*/
|
|
54
44
|
function calendarRules(config, declarations) {
|
|
55
|
-
const
|
|
56
|
-
const rules = replacesWeekend ? [] : presetRules(config.mode);
|
|
45
|
+
const rules = replacesPresetWeekend(declarations) ? [] : presetRules(config.mode);
|
|
57
46
|
for (const decl of declarations) {
|
|
58
47
|
const rule = declarationRule(decl);
|
|
59
48
|
if (rule)
|
|
@@ -62,63 +51,33 @@ function calendarRules(config, declarations) {
|
|
|
62
51
|
return rules.sort(compareRules);
|
|
63
52
|
}
|
|
64
53
|
/**
|
|
65
|
-
* The rule one declaration stands for, or undefined when
|
|
66
|
-
* value
|
|
67
|
-
* count; any other key is the validator's NL.E0901 and
|
|
54
|
+
* The rule one declaration stands for, or undefined when core's classifier
|
|
55
|
+
* finds its shape or a value malformed. Only the first `date:`, `start:`,
|
|
56
|
+
* `end:` and `every:` count; any other key is the validator's NL.E0901 and
|
|
57
|
+
* changes nothing here.
|
|
68
58
|
*/
|
|
69
59
|
function declarationRule(decl) {
|
|
70
|
-
const
|
|
71
|
-
|
|
60
|
+
const facts = classifyCalendarDeclaration(decl);
|
|
61
|
+
if (!facts.wellFormed)
|
|
62
|
+
return undefined;
|
|
72
63
|
const rule = { working: decl.$type === 'WorkingDeclaration' };
|
|
73
64
|
if (decl.name)
|
|
74
65
|
rule.id = decl.name;
|
|
75
66
|
if (decl.title !== undefined)
|
|
76
67
|
rule.title = decl.title;
|
|
77
|
-
if (
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
if (!has('every') && !(has('start') && has('end')))
|
|
87
|
-
return undefined;
|
|
88
|
-
for (const key of ['start', 'end']) {
|
|
89
|
-
if (!has(key))
|
|
90
|
-
continue;
|
|
91
|
-
const date = singleDate(props, key);
|
|
92
|
-
if (!date)
|
|
93
|
-
return undefined;
|
|
94
|
-
rule[key] = date;
|
|
95
|
-
}
|
|
96
|
-
if (rule.start && rule.end && rule.end < rule.start)
|
|
97
|
-
return undefined;
|
|
98
|
-
if (has('every')) {
|
|
99
|
-
const weekdays = propValues(props, 'every').map((name) => WEEKDAY_INDEX[name]);
|
|
100
|
-
if (weekdays.length === 0 || weekdays.some((day) => day === undefined))
|
|
101
|
-
return undefined;
|
|
102
|
-
rule.every = new Set(weekdays);
|
|
103
|
-
}
|
|
68
|
+
if (facts.dates)
|
|
69
|
+
rule.dates = facts.dates.map(utcDate);
|
|
70
|
+
if (facts.start)
|
|
71
|
+
rule.start = utcDate(facts.start);
|
|
72
|
+
if (facts.end)
|
|
73
|
+
rule.end = utcDate(facts.end);
|
|
74
|
+
if (facts.weekdays)
|
|
75
|
+
rule.every = new Set(facts.weekdays);
|
|
104
76
|
return rule;
|
|
105
77
|
}
|
|
106
|
-
/**
|
|
107
|
-
function
|
|
108
|
-
|
|
109
|
-
return values.length === 1 ? realDate(values[0]) : undefined;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* A `YYYY-MM-DD` that names a real calendar day, at UTC midnight. `parseDate`
|
|
113
|
-
* rolls `2026-02-30` over to March 2; the validator rejects it (NL.E0405), so
|
|
114
|
-
* the resolver does too.
|
|
115
|
-
*/
|
|
116
|
-
function realDate(raw) {
|
|
117
|
-
const date = parseDate(raw);
|
|
118
|
-
return date && formatIsoDate(date) === raw ? date : undefined;
|
|
119
|
-
}
|
|
120
|
-
function stripColon(key) {
|
|
121
|
-
return key.endsWith(':') ? key.slice(0, -1) : key;
|
|
78
|
+
/** A real `YYYY-MM-DD` the classifier already checked, at UTC midnight. */
|
|
79
|
+
function utcDate(iso) {
|
|
80
|
+
return parseIsoDate(iso);
|
|
122
81
|
}
|
|
123
82
|
/**
|
|
124
83
|
* Canonical rule order (decision 18): first date (none first), then title,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar-resolver.js","sourceRoot":"","sources":["../src/calendar-resolver.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,yEAAyE;AACzE,oEAAoE;AACpE,2EAA2E;AAC3E,EAAE;AACF,kEAAkE;AAClE,4EAA4E;AAC5E,yEAAyE;AACzE,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,oCAAoC;
|
|
1
|
+
{"version":3,"file":"calendar-resolver.js","sourceRoot":"","sources":["../src/calendar-resolver.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,yEAAyE;AACzE,oEAAoE;AACpE,2EAA2E;AAC3E,EAAE;AACF,kEAAkE;AAClE,4EAA4E;AAC5E,yEAAyE;AACzE,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,oCAAoC;AAQpC,OAAO,EACH,2BAA2B,EAC3B,YAAY,EACZ,qBAAqB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAuB,eAAe,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAEH,kBAAkB,EAClB,WAAW,GAEd,MAAM,uBAAuB,CAAC;AAc/B;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAClC,IAAiB,EACjB,QAAuB;IAEvB,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC1E,IAAI,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC;YAAE,MAAM,GAAG,CAAC;QAC5C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3D,CAAC;AACL,CAAC;AAID;;;;GAIG;AACH,SAAS,aAAa,CAClB,MAAsB,EACtB,YAAgD;IAEhD,MAAM,KAAK,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClF,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,IAAyB;IAC9C,MAAM,KAAK,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,IAAI,GAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,KAAK,oBAAoB,EAAE,CAAC;IAC5E,IAAI,IAAI,CAAC,IAAI;QAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;IACnC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACtD,IAAI,KAAK,CAAC,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,KAAK,CAAC,GAAG;QAAE,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,QAAQ;QAAE,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,2EAA2E;AAC3E,SAAS,OAAO,CAAC,GAAW;IACxB,OAAO,YAAY,CAAC,GAAG,CAAS,CAAC;AACrC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,CAAe,EAAE,CAAe;IAClD,OAAO,CACH,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;QACjC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACrC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3C,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QACvD,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;QACnD,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAC7C,CAAC;AACN,CAAC;AAED,8FAA8F;AAC9F,SAAS,QAAQ,CAAC,IAAkB;IAChC,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7E,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,SAAS,CAAC,IAAkB;IACjC,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK;QAAE,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC;IACvD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,4EAA4E;AAC5E,SAAS,eAAe,CAA4B,CAAgB,EAAE,CAAgB;IAClF,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,YAAY,CAAC,CAAsB,EAAE,CAAsB;IAChE,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AACtC,CAAC"}
|
package/dist/calendar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAKjG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACvB;AAkBD,wBAAgB,eAAe,CAC3B,IAAI,EAAE,WAAW,EACjB,WAAW,EAAE,aAAa,GAAG,SAAS,GACvC,cAAc,CAoBhB;AAKD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,MAAM,CAkB1E;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAChC,GAAG,EAAE,cAAc,GACpB,MAAM,CAIR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,cAAc,EAAE,EACvB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAChC,GAAG,EAAE,cAAc,GACpB,MAAM,CAUR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACjC,KAAK,EAAE,cAAc,EAAE,EACvB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAChC,GAAG,EAAE,cAAc,GACpB,MAAM,CAUR;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CACxB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,EACnC,GAAG,EAAE,cAAc,GACpB,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAgB3B;AAID,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,MAAM,CAGxD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAItD"}
|
package/dist/calendar.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// effort:<literal>` declaration whose effort literal is calendar-resolved
|
|
4
4
|
// once into a `ResolvedSize`. The calendar block controls how literal units
|
|
5
5
|
// translate into absolute days.
|
|
6
|
+
import { findProp } from '@nowline/core/internal';
|
|
6
7
|
import { parseCapacityValue } from './capacity.js';
|
|
7
8
|
import { propValue } from './dsl-utils.js';
|
|
8
9
|
const BUSINESS = {
|
|
@@ -20,7 +21,7 @@ const FULL = {
|
|
|
20
21
|
daysPerYear: 365,
|
|
21
22
|
};
|
|
22
23
|
export function resolveCalendar(file, customBlock) {
|
|
23
|
-
const calProp = file.roadmapDecl?.properties
|
|
24
|
+
const calProp = findProp(file.roadmapDecl?.properties ?? [], 'calendar');
|
|
24
25
|
const mode = calProp?.value ?? 'business';
|
|
25
26
|
if (mode === 'business')
|
|
26
27
|
return { ...BUSINESS };
|
|
@@ -28,7 +29,7 @@ export function resolveCalendar(file, customBlock) {
|
|
|
28
29
|
return { ...FULL };
|
|
29
30
|
if (customBlock) {
|
|
30
31
|
const get = (key, fallback) => {
|
|
31
|
-
const p = customBlock.properties
|
|
32
|
+
const p = findProp(customBlock.properties, key);
|
|
32
33
|
const n = p ? parseInt(p.value, 10) : NaN;
|
|
33
34
|
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
34
35
|
};
|
|
@@ -139,7 +140,7 @@ export function deriveTotalEffortDays(props, sizes, cal) {
|
|
|
139
140
|
export function resolveSizes(decls, cal) {
|
|
140
141
|
const out = new Map();
|
|
141
142
|
for (const [name, decl] of decls) {
|
|
142
|
-
const effortProp = decl.properties
|
|
143
|
+
const effortProp = findProp(decl.properties, 'effort');
|
|
143
144
|
const effortLiteral = effortProp?.value;
|
|
144
145
|
if (!effortLiteral)
|
|
145
146
|
continue;
|
|
@@ -155,9 +156,6 @@ export function resolveSizes(decls, cal) {
|
|
|
155
156
|
}
|
|
156
157
|
return out;
|
|
157
158
|
}
|
|
158
|
-
function stripColon(key) {
|
|
159
|
-
return key.endsWith(':') ? key.slice(0, -1) : key;
|
|
160
|
-
}
|
|
161
159
|
// Date arithmetic in day units. All coordinates are relative to the roadmap
|
|
162
160
|
// start date; today is computed in days since start.
|
|
163
161
|
export function daysBetween(from, to) {
|
package/dist/calendar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,sEAAsE;AACtE,0EAA0E;AAC1E,4EAA4E;AAC5E,gCAAgC;
|
|
1
|
+
{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,sEAAsE;AACtE,0EAA0E;AAC1E,4EAA4E;AAC5E,gCAAgC;AAGhC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAa3C,MAAM,QAAQ,GAAmB;IAC7B,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,EAAE;IAChB,cAAc,EAAE,EAAE;IAClB,WAAW,EAAE,GAAG;CACnB,CAAC;AAEF,MAAM,IAAI,GAAmB;IACzB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,EAAE;IAChB,cAAc,EAAE,EAAE;IAClB,WAAW,EAAE,GAAG;CACnB,CAAC;AAEF,MAAM,UAAU,eAAe,CAC3B,IAAiB,EACjB,WAAsC;IAEtC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;IACzE,MAAM,IAAI,GAAkB,OAAO,EAAE,KAAsB,IAAI,UAAU,CAAC;IAC1E,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;IAChD,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;IACxC,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,QAAgB,EAAU,EAAE;YAClD,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACtD,CAAC,CAAC;QACF,OAAO;YACH,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,WAAW,CAAC;YACvD,YAAY,EAAE,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,YAAY,CAAC;YAC1D,cAAc,EAAE,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,cAAc,CAAC;YAChE,WAAW,EAAE,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,WAAW,CAAC;SAC1D,CAAC;IACN,CAAC;IACD,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;AAC3B,CAAC;AAED,iFAAiF;AACjF,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAEjD,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,GAAmB;IAC9D,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACjB,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACX,KAAK,GAAG;YACJ,OAAO,CAAC,CAAC;QACb,KAAK,GAAG;YACJ,OAAO,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;QAC/B,KAAK,GAAG;YACJ,OAAO,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC;QAChC,KAAK,GAAG;YACJ,OAAO,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC;QAClC,KAAK,GAAG;YACJ,OAAO,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;QAC/B;YACI,OAAO,CAAC,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC3B,KAAyB,EACzB,KAAgC,EAChC,GAAmB;IAEnB,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC;IACrB,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CAClC,KAAuB,EACvB,KAAgC,EAChC,GAAmB;IAEnB,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACjD,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,OAAO,aAAa,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CACjC,KAAuB,EACvB,KAAgC,EAChC,GAAmB;IAEnB,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,UAAU,CAAC;IACjC,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACjD,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;QACvE,OAAO,aAAa,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC;IACtD,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CACxB,KAAmC,EACnC,GAAmB;IAEnB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,UAAU,EAAE,KAAK,CAAC;QACxC,IAAI,CAAC,aAAa;YAAE,SAAS;QAC7B,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACrD,IAAI,UAAU,IAAI,CAAC;YAAE,SAAS;QAC9B,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;YACV,IAAI;YACJ,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;YAC9B,UAAU;YACV,aAAa;SAChB,CAAC,CAAC;IACP,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,4EAA4E;AAC5E,qDAAqD;AACrD,MAAM,UAAU,WAAW,CAAC,IAAU,EAAE,EAAQ;IAC5C,MAAM,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;IAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAU,EAAE,IAAY;IAC5C,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;IACxC,OAAO,GAAG,CAAC;AACf,CAAC"}
|
package/dist/capacity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capacity.d.ts","sourceRoot":"","sources":["../src/capacity.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"capacity.d.ts","sourceRoot":"","sources":["../src/capacity.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAe1D;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAezE;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAS3D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GACxC,oBAAoB,GAAG,IAAI,CAc7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACvC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,oBAAoB,GAAG,IAAI,EACjC,UAAU,EAAE,MAAM,GACnB,MAAM,CAcR"}
|
package/dist/capacity.js
CHANGED
|
@@ -18,22 +18,15 @@
|
|
|
18
18
|
// All three helpers are pure — no AST, no theme, no side effects — so they
|
|
19
19
|
// can be tested in isolation and reused by future capacity consumers (e.g.
|
|
20
20
|
// the lane badge in m7 and the overload sweep in m8).
|
|
21
|
+
import { BUILTIN_CAPACITY_ICONS, propKey } from '@nowline/core/internal';
|
|
21
22
|
/**
|
|
22
|
-
* Built-in `capacity-icon:` names the renderer understands directly
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* diverge briefly during refactors but should converge before each release.
|
|
23
|
+
* Built-in `capacity-icon:` names the renderer understands directly
|
|
24
|
+
* (`BUILTIN_CAPACITY_ICONS` in core's `value-tables.ts`): the validator uses
|
|
25
|
+
* the list to decide whether a value is a known built-in; the layout uses it
|
|
26
|
+
* to decide whether to forward the value as-is or dereference it through the
|
|
27
|
+
* glyph map.
|
|
28
28
|
*/
|
|
29
|
-
const
|
|
30
|
-
'none',
|
|
31
|
-
'multiplier',
|
|
32
|
-
'person',
|
|
33
|
-
'people',
|
|
34
|
-
'points',
|
|
35
|
-
'time',
|
|
36
|
-
]);
|
|
29
|
+
const BUILTIN_CAPACITY_ICON_SET = new Set(BUILTIN_CAPACITY_ICONS);
|
|
37
30
|
const POSITIVE_INT_RE = /^\d+$/;
|
|
38
31
|
const POSITIVE_DECIMAL_RE = /^\d+\.\d+$/;
|
|
39
32
|
const POSITIVE_PERCENT_RE = /^\d+(?:\.\d+)?%$/;
|
|
@@ -82,15 +75,6 @@ export function formatCapacityNumber(value) {
|
|
|
82
75
|
s = s.replace(/\.$/, '');
|
|
83
76
|
return s;
|
|
84
77
|
}
|
|
85
|
-
/**
|
|
86
|
-
* Read a property value off a Langium-shaped EntityProperty, normalizing the
|
|
87
|
-
* trailing-colon form. Validator-side uses the same trick — the grammar
|
|
88
|
-
* stores `key` as the *raw* token, including the colon for `unicode:`-style
|
|
89
|
-
* property keys.
|
|
90
|
-
*/
|
|
91
|
-
function propKey(prop) {
|
|
92
|
-
return prop.key.endsWith(':') ? prop.key.slice(0, -1) : prop.key;
|
|
93
|
-
}
|
|
94
78
|
function symbolUnicode(decl) {
|
|
95
79
|
for (const p of decl.properties) {
|
|
96
80
|
if (propKey(p) === 'unicode' && p.value)
|
|
@@ -122,7 +106,7 @@ function symbolUnicode(decl) {
|
|
|
122
106
|
export function resolveCapacityIcon(icon, symbols) {
|
|
123
107
|
if (icon === 'none')
|
|
124
108
|
return null;
|
|
125
|
-
if (
|
|
109
|
+
if (BUILTIN_CAPACITY_ICON_SET.has(icon)) {
|
|
126
110
|
return {
|
|
127
111
|
kind: 'builtin',
|
|
128
112
|
name: icon,
|
package/dist/capacity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capacity.js","sourceRoot":"","sources":["../src/capacity.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,sEAAsE;AACtE,0EAA0E;AAC1E,2EAA2E;AAC3E,eAAe;AACf,uEAAuE;AACvE,0EAA0E;AAC1E,uEAAuE;AACvE,yEAAyE;AACzE,2EAA2E;AAC3E,iDAAiD;AACjD,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,sDAAsD;
|
|
1
|
+
{"version":3,"file":"capacity.js","sourceRoot":"","sources":["../src/capacity.ts"],"names":[],"mappings":"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"}
|
package/dist/dsl-utils.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export declare function propValues(props: EntityProperty[], key: string): string[];
|
|
4
|
-
export declare function parseDate(raw: string | undefined): Date | null;
|
|
5
|
-
/** A UTC-midnight date as `YYYY-MM-DD`, the inverse of `parseDate`. */
|
|
1
|
+
export { parseIsoDate, propValue, propValues } from '@nowline/core/internal';
|
|
2
|
+
/** A UTC-midnight date as `YYYY-MM-DD`, the inverse of `parseIsoDate`. */
|
|
6
3
|
export declare function formatIsoDate(date: Date): string;
|
|
7
4
|
//# sourceMappingURL=dsl-utils.d.ts.map
|
package/dist/dsl-utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dsl-utils.d.ts","sourceRoot":"","sources":["../src/dsl-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dsl-utils.d.ts","sourceRoot":"","sources":["../src/dsl-utils.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAE7E,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEhD"}
|
package/dist/dsl-utils.js
CHANGED
|
@@ -1,31 +1,10 @@
|
|
|
1
1
|
// Tiny DSL utilities shared between `layout.ts` and the per-entity nodes
|
|
2
|
-
// under `nodes/`. Kept intentionally trivial and pure:
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return key.endsWith(':') ? key.slice(0, -1) : key;
|
|
9
|
-
}
|
|
10
|
-
export function propValue(props, key) {
|
|
11
|
-
return props.find((p) => stripColon(p.key) === key)?.value;
|
|
12
|
-
}
|
|
13
|
-
export function propValues(props, key) {
|
|
14
|
-
const p = props.find((x) => stripColon(x.key) === key);
|
|
15
|
-
if (!p)
|
|
16
|
-
return [];
|
|
17
|
-
return p.value !== undefined ? [p.value] : [...p.values];
|
|
18
|
-
}
|
|
19
|
-
export function parseDate(raw) {
|
|
20
|
-
if (!raw)
|
|
21
|
-
return null;
|
|
22
|
-
const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(raw);
|
|
23
|
-
if (!m)
|
|
24
|
-
return null;
|
|
25
|
-
const d = new Date(Date.UTC(parseInt(m[1], 10), parseInt(m[2], 10) - 1, parseInt(m[3], 10)));
|
|
26
|
-
return Number.isNaN(d.getTime()) ? null : d;
|
|
27
|
-
}
|
|
28
|
-
/** A UTC-midnight date as `YYYY-MM-DD`, the inverse of `parseDate`. */
|
|
2
|
+
// under `nodes/`. Kept intentionally trivial and pure: core's property
|
|
3
|
+
// lookups and strict ISO-date parser, re-exported, and a date formatter.
|
|
4
|
+
// Anything that needs configuration or non-trivial resolution (durations,
|
|
5
|
+
// calendars, styles) stays in the modules that own those concerns.
|
|
6
|
+
export { parseIsoDate, propValue, propValues } from '@nowline/core/internal';
|
|
7
|
+
/** A UTC-midnight date as `YYYY-MM-DD`, the inverse of `parseIsoDate`. */
|
|
29
8
|
export function formatIsoDate(date) {
|
|
30
9
|
return date.toISOString().slice(0, 10);
|
|
31
10
|
}
|
package/dist/dsl-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dsl-utils.js","sourceRoot":"","sources":["../src/dsl-utils.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,
|
|
1
|
+
{"version":3,"file":"dsl-utils.js","sourceRoot":"","sources":["../src/dsl-utils.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,uEAAuE;AACvE,yEAAyE;AACzE,0EAA0E;AAC1E,mEAAmE;AAEnE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAE7E,0EAA0E;AAC1E,MAAM,UAAU,aAAa,CAAC,IAAU;IACpC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline-date-pin-geometry.d.ts","sourceRoot":"","sources":["../src/inline-date-pin-geometry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inline-date-pin-geometry.d.ts","sourceRoot":"","sources":["../src/inline-date-pin-geometry.ts"],"names":[],"mappings":"AA6CA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAS,MAAM,YAAY,CAAC;AAEpE,MAAM,WAAW,uBAAuB;IACpC,GAAG,EAAE,WAAW,CAAC;IACjB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,gFAAgF;IAChF,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,6EAA6E;IAC7E,aAAa,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,uBAAuB,GAAG,aAAa,EAAE,CAmDxF;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,iBAAiB,GACvB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,WAAW,4BAA4B;IACzC;;0DAEsD;IACtD,GAAG,EAAE,WAAW,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,GAAG,EAAE,iBAAiB,CAAC;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,8BAA8B,CAC1C,IAAI,EAAE,4BAA4B,GACnC,aAAa,EAAE,CAqDjB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAK5E"}
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
// other container reserves above it (see `computeContainerInlineDatePins`).
|
|
25
25
|
// Containers don't carry status dots or footnote indicators, so the
|
|
26
26
|
// only neighbor to clear is the container's own title.
|
|
27
|
+
import { ISO_DATE_RE } from '@nowline/core/internal';
|
|
27
28
|
import { CONTAINER_HEADER_BAND_PX, containerHeaderTitleWidth, containerHeaderTitleX, } from './container-header-geometry.js';
|
|
28
29
|
import { INLINE_DATE_GLYPH_GAP_PX, INLINE_DATE_GLYPH_INSET_LEFT_PX, INLINE_DATE_GLYPH_INSET_RIGHT_PX, INLINE_DATE_GLYPH_INSET_TOP_PX, INLINE_DATE_GLYPH_TILE_SIZE_PX, ITEM_CAPTION_SPILL_GAP_PX, inlineDateGlyphSpills, itemAfterGlyphInsideLeftX, itemBeforeGlyphInsideLeftX, } from './item-bar-geometry.js';
|
|
29
30
|
import { GROUP_TITLE_TAB_HEIGHT_PX } from './themes/shared.js';
|
|
@@ -159,7 +160,7 @@ export function computeContainerInlineDatePins(opts) {
|
|
|
159
160
|
*/
|
|
160
161
|
export function pickInlineDate(values) {
|
|
161
162
|
for (const v of values) {
|
|
162
|
-
if (
|
|
163
|
+
if (ISO_DATE_RE.test(v))
|
|
163
164
|
return v;
|
|
164
165
|
}
|
|
165
166
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline-date-pin-geometry.js","sourceRoot":"","sources":["../src/inline-date-pin-geometry.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"inline-date-pin-geometry.js","sourceRoot":"","sources":["../src/inline-date-pin-geometry.ts"],"names":[],"mappings":"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"}
|
package/dist/layout.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKR,WAAW,EAEX,aAAa,EAEhB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKR,WAAW,EAEX,aAAa,EAEhB,MAAM,eAAe,CAAC;AA6BvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAyCvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,KAAK,eAAe,EAAmB,MAAM,eAAe,CAAC;AAItE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAanD,OAAO,KAAK,EAYR,iBAAiB,EAKpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAY1E,MAAM,WAAW,aAAa;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAmqC7C,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,IAAI,GAAG,SAAS,EACvB,KAAK,EAAE,UAAU,GAClB;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CA0CpC;AA+KD,wBAAgB,aAAa,CACzB,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,aAAkB,GAC5B,YAAY,CA2Bd"}
|
package/dist/layout.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { buildWavePlan, isGroupBlock, isItemDeclaration, isParallelBlock } from '@nowline/core';
|
|
2
|
+
import { trackNodes } from '@nowline/core/internal';
|
|
2
3
|
import { deriveTotalEffortDays, literalToDays, resolveDuration } from './calendar.js';
|
|
3
4
|
import { estimateCapacitySuffixWidth, formatCapacityNumber, parseCapacityValue, resolveCapacityIcon, } from './capacity.js';
|
|
4
|
-
import { formatIsoDate,
|
|
5
|
+
import { formatIsoDate, parseIsoDate, propValue, propValues } from './dsl-utils.js';
|
|
5
6
|
import { ChannelGrid, collectRoutingObstacles, routeChannelEdges, } from './edge-routing.js';
|
|
6
7
|
import { HEADER_AUTHOR_FONT_SIZE_PX, HEADER_AUTHOR_LINE_HEIGHT_PX, HEADER_CARD_PADDING_BOTTOM, HEADER_CARD_PADDING_TOP, HEADER_CARD_PADDING_X, HEADER_LOGO_GAP_PX, HEADER_LOGO_PAD_Y_PX, HEADER_TITLE_FONT_SIZE_PX, HEADER_TITLE_LINE_HEIGHT_PX, HEADER_TITLE_TO_AUTHOR_GAP_PX, } from './header-card-geometry.js';
|
|
7
8
|
import { localeStrings } from './i18n.js';
|
|
@@ -318,7 +319,7 @@ function sequenceItem(node, cursor, ctx, ownerOverride) {
|
|
|
318
319
|
let earliestCapX;
|
|
319
320
|
let earliestCapRef;
|
|
320
321
|
for (const ref of beforeRaw) {
|
|
321
|
-
const inlineDate =
|
|
322
|
+
const inlineDate = parseIsoDate(ref);
|
|
322
323
|
const capX = inlineDate
|
|
323
324
|
? (ctx.scale.forwardWithinDomain(inlineDate) ?? undefined)
|
|
324
325
|
: ctx.entityLeftEdges.get(ref);
|
|
@@ -1226,39 +1227,14 @@ function buildNowline(today, ctx, locale) {
|
|
|
1226
1227
|
};
|
|
1227
1228
|
}
|
|
1228
1229
|
// Mutable layout-time context shared across helpers.
|
|
1229
|
-
//
|
|
1230
|
+
// Every item under the lanes, keyed by id. Title-only items register under a
|
|
1231
|
+
// synthetic, non-referenceable handle so they still appear as dependency-edge
|
|
1232
|
+
// targets.
|
|
1230
1233
|
function collectItems(swimlanes) {
|
|
1231
1234
|
const out = new Map();
|
|
1232
|
-
const
|
|
1233
|
-
if (isItemDeclaration(node))
|
|
1234
|
-
// Title-only items register under a synthetic, non-referenceable
|
|
1235
|
-
// handle so they still appear as dependency-edge targets.
|
|
1235
|
+
for (const node of trackNodes(swimlanes)) {
|
|
1236
|
+
if (isItemDeclaration(node))
|
|
1236
1237
|
out.set(node.name ?? syntheticItemKey(node), node);
|
|
1237
|
-
return;
|
|
1238
|
-
}
|
|
1239
|
-
if (isParallelBlock(node)) {
|
|
1240
|
-
for (const child of node.content) {
|
|
1241
|
-
if (child.$type === 'DescriptionDirective')
|
|
1242
|
-
continue;
|
|
1243
|
-
walk(child);
|
|
1244
|
-
}
|
|
1245
|
-
return;
|
|
1246
|
-
}
|
|
1247
|
-
if (isGroupBlock(node)) {
|
|
1248
|
-
for (const child of node.content) {
|
|
1249
|
-
if (child.$type === 'DescriptionDirective')
|
|
1250
|
-
continue;
|
|
1251
|
-
walk(child);
|
|
1252
|
-
}
|
|
1253
|
-
return;
|
|
1254
|
-
}
|
|
1255
|
-
};
|
|
1256
|
-
for (const lane of swimlanes) {
|
|
1257
|
-
for (const child of lane.content) {
|
|
1258
|
-
if (child.$type === 'DescriptionDirective')
|
|
1259
|
-
continue;
|
|
1260
|
-
walk(child);
|
|
1261
|
-
}
|
|
1262
1238
|
}
|
|
1263
1239
|
return out;
|
|
1264
1240
|
}
|