@profpowell/vb-project-planning 0.2.1 → 0.2.3
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/README.md +10 -5
- package/dist/vb-project-planning.css +69 -3
- package/dist/vb-project-planning.js +3191 -2544
- package/dist/vb-project-planning.min.css +1 -1
- package/dist/vb-project-planning.min.js +221 -197
- package/package.json +7 -4
- package/src/lib/board-surface.js +158 -0
- package/src/lib/bundle-registry.js +2 -75
- package/src/lib/dates.js +125 -0
- package/src/lib/escape.js +34 -0
- package/src/lib/hash.js +16 -0
- package/src/lib/portrait-url.js +3 -29
- package/src/lib/src-loader.js +78 -0
- package/src/lib/vb-view-transition.js +7 -1
- package/src/utils/copy-init.js +56 -17
- package/src/web-components/_ux-base.js +409 -24
- package/src/web-components/adr-wc/README.md +18 -16
- package/src/web-components/adr-wc/api.json +7 -5
- package/src/web-components/adr-wc/logic.js +50 -136
- package/src/web-components/burndown-chart/api.json +8 -6
- package/src/web-components/burndown-chart/logic.js +75 -39
- package/src/web-components/empathy-map/api.json +13 -13
- package/src/web-components/empathy-map/logic.js +161 -168
- package/src/web-components/empathy-map/static.html +3 -3
- package/src/web-components/empathy-map/styles.js +1 -0
- package/src/web-components/gantt-chart/README.md +12 -6
- package/src/web-components/gantt-chart/api.json +23 -7
- package/src/web-components/gantt-chart/logic.js +456 -431
- package/src/web-components/gantt-chart/styles.css +14 -1
- package/src/web-components/impact-effort/api.json +9 -7
- package/src/web-components/impact-effort/logic.js +238 -209
- package/src/web-components/impact-effort/static.html +12 -4
- package/src/web-components/iron-triangle/_capacity.js +0 -18
- package/src/web-components/kanban-board/api.json +8 -6
- package/src/web-components/kanban-board/logic.js +289 -333
- package/src/web-components/product-roadmap/api.json +14 -13
- package/src/web-components/product-roadmap/logic.js +393 -246
- package/src/web-components/product-roadmap/styles.css +40 -0
- package/src/web-components/quadrant-grid/api.json +9 -4
- package/src/web-components/quadrant-grid/logic.js +80 -12
- package/src/web-components/quadrant-grid/styles.css +7 -0
- package/src/web-components/quality-target/_quality-utils.js +2 -46
- package/src/web-components/review-surface/README.md +9 -5
- package/src/web-components/review-surface/api.json +10 -8
- package/src/web-components/review-surface/logic.js +349 -218
- package/src/web-components/risk-register/api.json +1 -6
- package/src/web-components/risk-register/logic.js +71 -24
- package/src/web-components/risk-register/styles.css +9 -1
- package/src/web-components/story-map/api.json +8 -6
- package/src/web-components/story-map/logic.js +280 -281
- package/src/web-components/story-map/static.html +15 -5
- package/src/web-components/traceability-matrix/api.json +10 -3
- package/src/web-components/traceability-matrix/logic.js +112 -63
- package/src/web-components/traceability-matrix/styles.css +22 -1
- package/src/web-components/user-journey/api.json +25 -24
- package/src/web-components/user-journey/logic.js +76 -127
- package/src/web-components/user-journey/static.html +2 -2
- package/src/web-components/user-persona/api.json +15 -14
- package/src/web-components/user-persona/logic.js +71 -117
- package/src/web-components/user-persona/styles.js +1 -0
- package/src/web-components/user-story/api.json +13 -11
- package/src/web-components/user-story/logic.js +164 -195
- package/src/web-components/user-story/styles.js +28 -1
- package/src/web-components/work-item/README.md +3 -3
- package/src/web-components/work-item/api.json +13 -11
- package/src/web-components/work-item/logic.js +58 -154
package/README.md
CHANGED
|
@@ -62,12 +62,14 @@ import '@profpowell/vb-project-planning/kanban-board';
|
|
|
62
62
|
<user-persona name="Fred" role="Engineer">…</user-persona>
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
## Runtime peers
|
|
65
|
+
## Runtime peers from Vanilla Breeze
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
Four Vanilla Breeze elements are used as runtime peers. Load VB on the page (the full bundle, or the per-component files under `dist/cdn/components/`) and they light up; without them the components still render, only the composed behaviour is unavailable.
|
|
68
68
|
|
|
69
69
|
- `<drag-surface>` — the drag-to-reorder components (`kanban-board`, `quadrant-grid`, `impact-effort`, `story-map`). Without it, drag-reordering is off.
|
|
70
70
|
- `<data-table>` — `risk-register` and `traceability-matrix` compose it for the severity rollup, heatmap, and sortable headers. Without it, the plain table renders but those features are inert.
|
|
71
|
+
- `<form-field>` — `iron-triangle` and `quality-target` (and `capacity-plan`, which embeds a quality target) wrap their dialog inputs in it for labels and validation messages. Without it, the inputs still work with native validation only.
|
|
72
|
+
- `<chart-wc>` — `burndown-chart` draws its chart with it. It ships in VB's optional charts bundle (`dist/cdn/vanilla-breeze-charts.js` + `.css`), not the main bundle. Without it no chart appears (the data lives in a `<template>`); only the scope-change notes render, so load the charts bundle wherever you use `burndown-chart`.
|
|
71
73
|
|
|
72
74
|
## Design-token contract
|
|
73
75
|
|
|
@@ -77,7 +79,7 @@ These components are **token-driven**: they read Vanilla Breeze CSS custom prope
|
|
|
77
79
|
<link rel="stylesheet" href="https://unpkg.com/vanilla-breeze/dist/cdn/vanilla-breeze.css">
|
|
78
80
|
```
|
|
79
81
|
|
|
80
|
-
`vanilla-breeze` is declared as an **optional peer dependency**: required if you want VB to supply tokens/themes and the
|
|
82
|
+
`vanilla-breeze` is declared as an **optional peer dependency**: required if you want VB to supply tokens/themes and the peers above (most consumers do).
|
|
81
83
|
|
|
82
84
|
## Relationship to Vanilla Breeze
|
|
83
85
|
|
|
@@ -86,10 +88,13 @@ This package was decomposed out of `vanilla-breeze` core so that framework stays
|
|
|
86
88
|
## Development
|
|
87
89
|
|
|
88
90
|
```bash
|
|
89
|
-
npm run build
|
|
90
|
-
npm
|
|
91
|
+
npm run build # bundle dist/ (esm + minified, js + css) via esbuild
|
|
92
|
+
npm run typecheck # tsc checkJs over src/ (JSDoc types, no unused locals)
|
|
93
|
+
npm test # unit tests (src/lib, run with TZ=America/Los_Angeles) + Playwright specs
|
|
91
94
|
```
|
|
92
95
|
|
|
96
|
+
The Playwright specs load the demo pages from the committed `docs/` site but serve the component bundle from `dist/`, so run `npm run build` first and they test your current `src/`. Set `VB_TEST_PORT` to run the suite in more than one checkout at once (default 4331).
|
|
97
|
+
|
|
93
98
|
`dist/` is committed: it is what the npm tarball ships and what the docs site vendors. CI fails if `src/` changes without a rebuilt `dist/`.
|
|
94
99
|
|
|
95
100
|
The docs site lives in `site/` (CookSSG, styled by Vanilla Breeze) and depends on `vanilla-breeze` for tokens/themes and the `<drag-surface>` / `<data-table>` peers. It imports this package's `dist/` directly.
|
|
@@ -265,6 +265,9 @@ quadrant-grid {
|
|
|
265
265
|
border-radius: var(--radius-s, 0.25rem);
|
|
266
266
|
font-size: var(--font-size-sm, 0.875rem);
|
|
267
267
|
}
|
|
268
|
+
.qg-items > li.qg-pin-item {
|
|
269
|
+
display: contents;
|
|
270
|
+
}
|
|
268
271
|
.qg-pinned {
|
|
269
272
|
position: absolute;
|
|
270
273
|
inline-size: max-content;
|
|
@@ -332,9 +335,14 @@ risk-register {
|
|
|
332
335
|
}
|
|
333
336
|
.rr-layout {
|
|
334
337
|
display: grid;
|
|
335
|
-
grid-template-columns: 1fr;
|
|
338
|
+
grid-template-columns: minmax(0, 1fr);
|
|
336
339
|
gap: var(--size-l, 1.5rem);
|
|
337
340
|
}
|
|
341
|
+
.rr-layout > data-table {
|
|
342
|
+
display: block;
|
|
343
|
+
min-inline-size: 0;
|
|
344
|
+
overflow-x: auto;
|
|
345
|
+
}
|
|
338
346
|
@media (width >= 64rem) {
|
|
339
347
|
.rr-layout {
|
|
340
348
|
grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
|
|
@@ -353,6 +361,11 @@ traceability-matrix {
|
|
|
353
361
|
color: var(--color-text, #1a1a1a);
|
|
354
362
|
}
|
|
355
363
|
@scope (traceability-matrix) {
|
|
364
|
+
:scope > data-table {
|
|
365
|
+
display: block;
|
|
366
|
+
max-inline-size: 100%;
|
|
367
|
+
overflow-x: auto;
|
|
368
|
+
}
|
|
356
369
|
.tm-label {
|
|
357
370
|
display: block;
|
|
358
371
|
font-size: var(--font-size-xs, 0.75rem);
|
|
@@ -402,9 +415,19 @@ traceability-matrix {
|
|
|
402
415
|
border-block-end: var(--border-width-thin, 1px) solid var(--color-border, oklch(85% 0 0));
|
|
403
416
|
cursor: default;
|
|
404
417
|
}
|
|
405
|
-
|
|
418
|
+
.tm-cell-btn {
|
|
419
|
+
all: unset;
|
|
420
|
+
box-sizing: border-box;
|
|
421
|
+
display: block;
|
|
422
|
+
inline-size: 100%;
|
|
423
|
+
min-block-size: 1.5em;
|
|
424
|
+
text-align: inherit;
|
|
406
425
|
cursor: pointer;
|
|
407
426
|
}
|
|
427
|
+
.tm-cell-btn:focus-visible {
|
|
428
|
+
outline: 2px solid var(--color-accent, oklch(45% 0.18 260));
|
|
429
|
+
outline-offset: 2px;
|
|
430
|
+
}
|
|
408
431
|
}
|
|
409
432
|
[data-state-highlighted]:not(traceability-matrix *) {
|
|
410
433
|
outline: 2px solid var(--color-accent, oklch(45% 0.18 260));
|
|
@@ -584,6 +607,38 @@ product-roadmap > section[data-lane] {
|
|
|
584
607
|
border-start-end-radius: var(--radius-s, 0.25rem);
|
|
585
608
|
border-end-end-radius: var(--radius-s, 0.25rem);
|
|
586
609
|
}
|
|
610
|
+
.rm-bar:focus-visible {
|
|
611
|
+
outline: var(--border-width-medium, 2px) solid var(--color-focus, var(--color-interactive, #0066cc));
|
|
612
|
+
outline-offset: 2px;
|
|
613
|
+
}
|
|
614
|
+
.rm-bar[data-dragging] {
|
|
615
|
+
cursor: grabbing;
|
|
616
|
+
z-index: 3;
|
|
617
|
+
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.25);
|
|
618
|
+
}
|
|
619
|
+
.rm-bar-status {
|
|
620
|
+
flex: none;
|
|
621
|
+
font-size: var(--font-size-xs, 0.75rem);
|
|
622
|
+
font-weight: 600;
|
|
623
|
+
opacity: 0.9;
|
|
624
|
+
white-space: nowrap;
|
|
625
|
+
padding-inline-end: var(--size-xs, 0.5rem);
|
|
626
|
+
}
|
|
627
|
+
.rm-track[data-drop-target] {
|
|
628
|
+
outline: var(--border-width-medium, 2px) dashed var(--color-interactive, #0066cc);
|
|
629
|
+
outline-offset: -2px;
|
|
630
|
+
}
|
|
631
|
+
.rm-sr-only {
|
|
632
|
+
position: absolute;
|
|
633
|
+
inline-size: 1px;
|
|
634
|
+
block-size: 1px;
|
|
635
|
+
margin: -1px;
|
|
636
|
+
padding: 0;
|
|
637
|
+
overflow: hidden;
|
|
638
|
+
clip-path: inset(50%);
|
|
639
|
+
white-space: nowrap;
|
|
640
|
+
border: 0;
|
|
641
|
+
}
|
|
587
642
|
.rm-bar[data-status=planned] {
|
|
588
643
|
background: var(--color-info, oklch(60% 0.12 240));
|
|
589
644
|
}
|
|
@@ -617,6 +672,9 @@ product-roadmap:not([editable]) .rm-bar {
|
|
|
617
672
|
product-roadmap:not([editable]) .rm-bar-handle {
|
|
618
673
|
display: none;
|
|
619
674
|
}
|
|
675
|
+
product-roadmap[editable] .rm-bar {
|
|
676
|
+
touch-action: none;
|
|
677
|
+
}
|
|
620
678
|
@media (prefers-reduced-motion: reduce) {
|
|
621
679
|
product-roadmap .rm-bar {
|
|
622
680
|
transition: none;
|
|
@@ -999,6 +1057,13 @@ gantt-chart:not([data-upgraded]) > table {
|
|
|
999
1057
|
overflow: hidden;
|
|
1000
1058
|
text-overflow: ellipsis;
|
|
1001
1059
|
}
|
|
1060
|
+
.gc-task-status {
|
|
1061
|
+
flex: none;
|
|
1062
|
+
margin-inline-start: auto;
|
|
1063
|
+
font-size: 11px;
|
|
1064
|
+
font-weight: 600;
|
|
1065
|
+
color: var(--color-text-muted, #666666);
|
|
1066
|
+
}
|
|
1002
1067
|
.gc-task-dates {
|
|
1003
1068
|
position: absolute;
|
|
1004
1069
|
width: 1px;
|
|
@@ -1149,10 +1214,10 @@ gantt-chart:not([data-upgraded]) > table {
|
|
|
1149
1214
|
fill: none;
|
|
1150
1215
|
stroke: var(--color-text-muted, #666666);
|
|
1151
1216
|
stroke-width: 1.5;
|
|
1152
|
-
marker-end: url(#gc-arrowhead);
|
|
1153
1217
|
}
|
|
1154
1218
|
.gc-sr-only {
|
|
1155
1219
|
position: absolute;
|
|
1220
|
+
table-layout: fixed;
|
|
1156
1221
|
width: 1px;
|
|
1157
1222
|
height: 1px;
|
|
1158
1223
|
padding: 0;
|
|
@@ -1209,6 +1274,7 @@ gantt-chart[compact] .gc-group-spacer {
|
|
|
1209
1274
|
}
|
|
1210
1275
|
gantt-chart[data-upgraded] .gc-sr-only {
|
|
1211
1276
|
position: static;
|
|
1277
|
+
table-layout: auto;
|
|
1212
1278
|
width: auto;
|
|
1213
1279
|
height: auto;
|
|
1214
1280
|
margin: 0;
|