@profpowell/vb-project-planning 0.1.0 → 0.2.1
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 +27 -5
- package/dist/vb-project-planning.css +61 -5
- package/dist/vb-project-planning.js +304 -27
- package/dist/vb-project-planning.min.css +1 -1
- package/dist/vb-project-planning.min.js +101 -101
- package/package.json +5 -4
- package/src/web-components/iron-triangle/_capacity.js +1 -1
- package/src/web-components/iron-triangle/_triangle-geometry.js +1 -1
- package/src/web-components/iron-triangle/api.json +3 -3
- package/src/web-components/iron-triangle/logic.js +200 -5
- package/src/web-components/iron-triangle/styles.css +81 -3
- package/src/web-components/product-roadmap/logic.js +25 -13
- package/src/web-components/quality-target/api.json +2 -3
- package/src/web-components/quality-target/logic.js +85 -13
- package/src/web-components/requirement-card/api.json +1 -1
- package/src/web-components/requirement-card/logic.js +27 -3
- package/src/web-components/requirement-card/static.html +1 -1
- package/src/web-components/user-persona/logic.js +1 -1
- package/src/web-components/user-story/logic.js +2 -1
package/README.md
CHANGED
|
@@ -35,7 +35,7 @@ Project- and UX-planning Web Components for the research, planning, and delivery
|
|
|
35
35
|
npm install @profpowell/vb-project-planning
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
-
Or load from a CDN
|
|
38
|
+
Or load from a CDN:
|
|
39
39
|
|
|
40
40
|
```html
|
|
41
41
|
<script type="module" src="https://unpkg.com/@profpowell/vb-project-planning/dist/vb-project-planning.min.js"></script>
|
|
@@ -62,9 +62,12 @@ import '@profpowell/vb-project-planning/kanban-board';
|
|
|
62
62
|
<user-persona name="Fred" role="Engineer">…</user-persona>
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
##
|
|
65
|
+
## Runtime peers: `<drag-surface>` and `<data-table>`
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
Two Vanilla Breeze core 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
|
+
|
|
69
|
+
- `<drag-surface>` — the drag-to-reorder components (`kanban-board`, `quadrant-grid`, `impact-effort`, `story-map`). Without it, drag-reordering is off.
|
|
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.
|
|
68
71
|
|
|
69
72
|
## Design-token contract
|
|
70
73
|
|
|
@@ -74,7 +77,7 @@ These components are **token-driven**: they read Vanilla Breeze CSS custom prope
|
|
|
74
77
|
<link rel="stylesheet" href="https://unpkg.com/vanilla-breeze/dist/cdn/vanilla-breeze.css">
|
|
75
78
|
```
|
|
76
79
|
|
|
77
|
-
`vanilla-breeze` is declared as an **optional peer dependency**: required if you want VB to supply tokens/themes and the `<drag-surface>`
|
|
80
|
+
`vanilla-breeze` is declared as an **optional peer dependency**: required if you want VB to supply tokens/themes and the `<drag-surface>` / `<data-table>` peers (most consumers do).
|
|
78
81
|
|
|
79
82
|
## Relationship to Vanilla Breeze
|
|
80
83
|
|
|
@@ -84,9 +87,28 @@ This package was decomposed out of `vanilla-breeze` core so that framework stays
|
|
|
84
87
|
|
|
85
88
|
```bash
|
|
86
89
|
npm run build # bundle dist/ (esm + minified, js + css) via esbuild
|
|
90
|
+
npm test # Playwright component specs (serves the built docs/ on :4331)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
`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
|
+
|
|
95
|
+
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.
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
cd site && npm ci && npm run dev # local preview
|
|
99
|
+
cd site && npm run build && node scripts/publish-docs.js /vb-project-planning # regenerate docs/
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
GitHub Pages serves the committed `docs/` folder. The **Publish docs** workflow regenerates and commits it automatically when `site/` or `dist/` change on `main`.
|
|
103
|
+
|
|
104
|
+
### Releasing
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npm version minor # bumps package.json and tags vX.Y.Z
|
|
108
|
+
git push --follow-tags
|
|
87
109
|
```
|
|
88
110
|
|
|
89
|
-
|
|
111
|
+
The **Release** workflow builds, runs the tests, publishes to npm with provenance, and creates a GitHub release from the matching `CHANGELOG.md` section. CI publishing needs an `NPM_TOKEN` repository secret. Without one, publish from a logged-in terminal first (`npm publish --access public`) and then push the tag; the workflow sees the version is already on the registry, skips the publish, and still creates the GitHub release.
|
|
90
112
|
|
|
91
113
|
## License
|
|
92
114
|
|
|
@@ -1321,20 +1321,76 @@ iron-triangle svg .center:hover .quality-label,
|
|
|
1321
1321
|
iron-triangle svg .center:focus-visible .quality-label {
|
|
1322
1322
|
fill: var(--color-interactive);
|
|
1323
1323
|
}
|
|
1324
|
+
iron-triangle > .iron-triangle-status {
|
|
1325
|
+
display: flex;
|
|
1326
|
+
flex-wrap: wrap;
|
|
1327
|
+
align-items: center;
|
|
1328
|
+
justify-content: center;
|
|
1329
|
+
gap: var(--size-s, 0.75rem);
|
|
1330
|
+
margin-block-start: var(--size-xs, 0.5rem);
|
|
1331
|
+
font-size: var(--font-size-sm, 0.875rem);
|
|
1332
|
+
}
|
|
1333
|
+
iron-triangle > .iron-triangle-status .iron-triangle-readout {
|
|
1334
|
+
position: absolute;
|
|
1335
|
+
inline-size: 1px;
|
|
1336
|
+
block-size: 1px;
|
|
1337
|
+
margin: -1px;
|
|
1338
|
+
padding: 0;
|
|
1339
|
+
overflow: hidden;
|
|
1340
|
+
clip-path: inset(50%);
|
|
1341
|
+
white-space: nowrap;
|
|
1342
|
+
border: 0;
|
|
1343
|
+
}
|
|
1344
|
+
iron-triangle > .iron-triangle-status .iron-triangle-mode {
|
|
1345
|
+
font-size: inherit;
|
|
1346
|
+
font-weight: var(--font-weight-normal, 400);
|
|
1347
|
+
padding-block: 0;
|
|
1348
|
+
padding-inline: var(--size-xs, 0.5rem);
|
|
1349
|
+
border-color: transparent;
|
|
1350
|
+
color: var(--color-text-muted);
|
|
1351
|
+
}
|
|
1352
|
+
iron-triangle > .iron-triangle-status .iron-triangle-mode:hover {
|
|
1353
|
+
color: var(--color-text);
|
|
1354
|
+
}
|
|
1355
|
+
iron-triangle > .iron-triangle-status .iron-triangle-mode[aria-pressed=true] {
|
|
1356
|
+
color: var(--color-interactive);
|
|
1357
|
+
text-decoration: underline;
|
|
1358
|
+
text-decoration-thickness: var(--border-width-medium, 2px);
|
|
1359
|
+
text-underline-offset: 0.25em;
|
|
1360
|
+
}
|
|
1361
|
+
iron-triangle > .iron-triangle-status .iron-triangle-warning {
|
|
1362
|
+
margin: 0;
|
|
1363
|
+
padding: var(--size-2xs, 0.25rem) var(--size-xs, 0.5rem);
|
|
1364
|
+
border-radius: var(--radius-s, 0.25rem);
|
|
1365
|
+
border: var(--border-width-thin, 1px) solid var(--iron-triangle-warning-color, var(--color-warning));
|
|
1366
|
+
color: var(--iron-triangle-warning-color, var(--color-warning));
|
|
1367
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
1368
|
+
}
|
|
1369
|
+
iron-triangle > .iron-triangle-status .iron-triangle-warning::before {
|
|
1370
|
+
content: "\26a0\fe0e ";
|
|
1371
|
+
}
|
|
1372
|
+
iron-triangle > dialog.iron-triangle-dialog [hidden] {
|
|
1373
|
+
display: none;
|
|
1374
|
+
}
|
|
1375
|
+
iron-triangle > dialog.iron-triangle-dialog .iron-triangle-dialog__hint {
|
|
1376
|
+
margin: 0;
|
|
1377
|
+
color: var(--color-text-muted);
|
|
1378
|
+
font-size: var(--font-size-sm, 0.875rem);
|
|
1379
|
+
}
|
|
1324
1380
|
iron-triangle:state(over-deadline) svg .triangle {
|
|
1325
|
-
stroke: var(--color-warning);
|
|
1381
|
+
stroke: var(--iron-triangle-warning-color, var(--color-warning));
|
|
1326
1382
|
}
|
|
1327
1383
|
iron-triangle:state(unbudgeted) svg .capacity {
|
|
1328
|
-
fill: var(--color-warning);
|
|
1329
|
-
}
|
|
1330
|
-
iron-triangle:state(manual) svg .quality-label::after {
|
|
1331
|
-
content: " (manual)";
|
|
1384
|
+
fill: var(--iron-triangle-warning-color, var(--color-warning));
|
|
1332
1385
|
}
|
|
1333
1386
|
iron-triangle[disabled],
|
|
1334
1387
|
iron-triangle[locked] {
|
|
1335
1388
|
opacity: 0.85;
|
|
1336
1389
|
pointer-events: none;
|
|
1337
1390
|
}
|
|
1391
|
+
iron-triangle[locked]:not([disabled]) svg .center[data-target=quality] {
|
|
1392
|
+
pointer-events: auto;
|
|
1393
|
+
}
|
|
1338
1394
|
iron-triangle > dialog.iron-triangle-dialog {
|
|
1339
1395
|
inline-size: min(28rem, 92vw);
|
|
1340
1396
|
border: var(--border-width-thin, 1px) solid var(--color-border);
|