@forwardimpact/pathway 0.22.0 → 0.23.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 (75) hide show
  1. package/package.json +3 -2
  2. package/src/commands/agent.js +7 -3
  3. package/src/commands/behaviour.js +11 -1
  4. package/src/commands/build.js +11 -2
  5. package/src/commands/command-factory.js +4 -2
  6. package/src/commands/dev.js +9 -2
  7. package/src/commands/discipline.js +19 -2
  8. package/src/commands/driver.js +11 -1
  9. package/src/commands/job.js +25 -12
  10. package/src/commands/level.js +19 -3
  11. package/src/commands/skill.js +11 -1
  12. package/src/commands/stage.js +11 -1
  13. package/src/commands/tool.js +4 -3
  14. package/src/commands/track.js +11 -1
  15. package/src/components/card.js +8 -104
  16. package/src/components/comparison-radar.js +1 -1
  17. package/src/components/detail.js +16 -118
  18. package/src/components/error-page.js +8 -68
  19. package/src/components/grid.js +12 -106
  20. package/src/components/list.js +7 -116
  21. package/src/components/nav.js +7 -60
  22. package/src/css/bundles/app.css +25 -21
  23. package/src/css/bundles/handout.css +33 -33
  24. package/src/css/bundles/slides.css +25 -25
  25. package/src/formatters/interview/shared.js +3 -3
  26. package/src/formatters/job/description.js +2 -2
  27. package/src/formatters/progress/shared.js +3 -3
  28. package/src/formatters/skill/shared.js +1 -1
  29. package/src/formatters/track/shared.js +1 -1
  30. package/src/handout.html +32 -13
  31. package/src/index.html +32 -13
  32. package/src/lib/error-boundary.js +3 -66
  33. package/src/lib/errors.js +7 -45
  34. package/src/lib/job-cache.js +1 -1
  35. package/src/lib/markdown.js +2 -109
  36. package/src/lib/reactive.js +7 -73
  37. package/src/lib/render.js +49 -197
  38. package/src/lib/router-core.js +2 -156
  39. package/src/lib/router-pages.js +2 -11
  40. package/src/lib/router-slides.js +2 -197
  41. package/src/lib/state.js +14 -63
  42. package/src/lib/utils.js +3 -10
  43. package/src/lib/yaml-loader.js +13 -71
  44. package/src/pages/agent-builder.js +1 -1
  45. package/src/pages/assessment-results.js +1 -1
  46. package/src/pages/job-builder.js +1 -1
  47. package/src/pages/job.js +1 -1
  48. package/src/pages/skill.js +1 -1
  49. package/src/slide-main.js +1 -1
  50. package/src/slides/index.js +1 -1
  51. package/src/slides/job.js +1 -1
  52. package/src/slides/overview.js +1 -1
  53. package/src/slides.html +32 -13
  54. package/src/css/base.css +0 -56
  55. package/src/css/components/badges.css +0 -232
  56. package/src/css/components/buttons.css +0 -101
  57. package/src/css/components/forms.css +0 -191
  58. package/src/css/components/layout.css +0 -218
  59. package/src/css/components/nav.css +0 -206
  60. package/src/css/components/progress.css +0 -166
  61. package/src/css/components/states.css +0 -82
  62. package/src/css/components/surfaces.css +0 -347
  63. package/src/css/components/tables.css +0 -362
  64. package/src/css/components/top-bar.css +0 -180
  65. package/src/css/components/typography.css +0 -121
  66. package/src/css/components/utilities.css +0 -41
  67. package/src/css/pages/detail.css +0 -119
  68. package/src/css/reset.css +0 -50
  69. package/src/css/tokens.css +0 -162
  70. package/src/css/views/handout.css +0 -30
  71. package/src/css/views/print.css +0 -634
  72. package/src/css/views/slide-animations.css +0 -113
  73. package/src/css/views/slide-base.css +0 -331
  74. package/src/css/views/slide-sections.css +0 -597
  75. package/src/css/views/slide-tables.css +0 -275
@@ -1,347 +0,0 @@
1
- /**
2
- * Surface Components
3
- *
4
- * Cards, sections, and surface styles.
5
- */
6
-
7
- @layer components {
8
- /* Cards */
9
- .card {
10
- background: var(--color-surface);
11
- border-radius: var(--radius-lg);
12
- box-shadow: var(--shadow-md);
13
- padding: var(--space-lg);
14
- transition:
15
- box-shadow 0.2s,
16
- transform 0.2s;
17
- }
18
-
19
- .card:hover {
20
- box-shadow: var(--shadow-lg);
21
- }
22
-
23
- .card-clickable {
24
- cursor: pointer;
25
- }
26
-
27
- .card-clickable:hover {
28
- transform: translateY(-2px);
29
- }
30
-
31
- .card-header {
32
- display: flex;
33
- justify-content: space-between;
34
- align-items: flex-start;
35
- margin-bottom: var(--space-md);
36
- }
37
-
38
- .card-title {
39
- margin: 0;
40
- font-size: var(--font-size-lg);
41
- }
42
-
43
- .card-title-with-icon {
44
- display: flex;
45
- align-items: center;
46
- gap: var(--space-sm);
47
- }
48
-
49
- .card-title-with-icon .card-title {
50
- margin: 0;
51
- }
52
-
53
- /* Tool icons */
54
- .tool-icon {
55
- width: 28px;
56
- height: 28px;
57
- flex-shrink: 0;
58
- }
59
-
60
- /* Tool name cell with icon */
61
- .tool-name-cell {
62
- display: flex;
63
- align-items: center;
64
- gap: var(--space-sm);
65
- }
66
-
67
- .card-description {
68
- color: var(--color-text-muted);
69
- margin: 0;
70
- font-size: var(--font-size-sm);
71
- }
72
-
73
- .card-meta {
74
- display: flex;
75
- gap: var(--space-sm);
76
- flex-wrap: wrap;
77
- margin-top: var(--space-md);
78
- }
79
-
80
- /* Tool skills list (inside cards) */
81
- .tool-skills-list {
82
- list-style: none;
83
- padding: 0;
84
- margin: var(--space-sm) 0 0 0;
85
- font-size: var(--font-size-sm);
86
- }
87
-
88
- .tool-skills-list li {
89
- padding: var(--space-xs) 0;
90
- }
91
-
92
- .tool-skills-list a {
93
- color: var(--color-text-secondary);
94
- text-decoration: none;
95
- }
96
-
97
- .tool-skills-list a:hover {
98
- color: var(--color-primary);
99
- text-decoration: underline;
100
- }
101
-
102
- /* Stat cards */
103
- .stat-card {
104
- background: var(--color-surface);
105
- border-radius: var(--radius-lg);
106
- padding: var(--space-lg);
107
- text-align: center;
108
- box-shadow: var(--shadow-md);
109
- transition:
110
- transform 0.2s,
111
- box-shadow 0.2s;
112
- }
113
-
114
- .stat-card:hover {
115
- transform: translateY(-2px);
116
- box-shadow: var(--shadow-lg);
117
- }
118
-
119
- /* Surface utilities */
120
- .surface {
121
- background: var(--color-surface);
122
- border-radius: var(--radius-lg);
123
- }
124
-
125
- .surface-elevated {
126
- box-shadow: var(--shadow-md);
127
- }
128
-
129
- .surface-bordered {
130
- border: 1px solid var(--color-border);
131
- }
132
-
133
- .surface-padded {
134
- padding: var(--space-lg);
135
- }
136
-
137
- .surface-padded-sm {
138
- padding: var(--space-md);
139
- }
140
-
141
- /* Section headers */
142
- .section-header {
143
- margin-bottom: var(--space-lg);
144
- }
145
-
146
- .section-title {
147
- font-size: var(--font-size-xl);
148
- font-weight: 600;
149
- margin: 0 0 var(--space-md);
150
- color: var(--color-text);
151
- }
152
-
153
- .section-title-bordered {
154
- padding-bottom: var(--space-sm);
155
- border-bottom: 2px solid var(--color-border);
156
- }
157
-
158
- .section-description {
159
- color: var(--color-text-muted);
160
- margin: 0;
161
- }
162
-
163
- /* Page headers */
164
- .page-header {
165
- margin-bottom: var(--space-xl);
166
- }
167
-
168
- .page-title {
169
- font-size: var(--font-size-3xl);
170
- font-weight: 700;
171
- margin: 0 0 var(--space-md);
172
- }
173
-
174
- .page-description {
175
- font-size: var(--font-size-lg);
176
- color: var(--color-text-muted);
177
- margin: 0;
178
- max-width: 80ch;
179
- }
180
-
181
- .page-meta {
182
- display: flex;
183
- gap: var(--space-sm);
184
- flex-wrap: wrap;
185
- margin-top: var(--space-sm);
186
- }
187
-
188
- .page-actions {
189
- display: flex;
190
- gap: var(--space-md);
191
- margin-top: var(--space-md);
192
- flex-wrap: wrap;
193
- }
194
-
195
- @media (max-width: 640px) {
196
- .page-actions {
197
- flex-direction: column;
198
- align-items: stretch;
199
- }
200
-
201
- .page-actions .btn {
202
- text-align: center;
203
- }
204
- }
205
-
206
- /* Sections */
207
- .section {
208
- margin-top: var(--space-xl);
209
- margin-bottom: var(--space-xl);
210
- }
211
-
212
- /* Detail pages */
213
- .detail-page {
214
- max-width: var(--max-width);
215
- margin: 0 auto;
216
- }
217
-
218
- .detail-section {
219
- margin-bottom: var(--space-2xl);
220
- }
221
-
222
- .detail-section:last-child {
223
- margin-bottom: 0;
224
- }
225
-
226
- .detail-item {
227
- background: var(--color-bg);
228
- padding: var(--space-md);
229
- border-radius: var(--radius-md);
230
- }
231
-
232
- .detail-item-value {
233
- font-weight: 500;
234
- }
235
-
236
- /*
237
- * List items: 60px row height = 16px padding-top + 28px content + 16px padding-bottom
238
- * Uses bottom-border only for 1px gaps between items (like table rows)
239
- * Left/right borders and rounded corners on first/last items match table styling
240
- */
241
- .list-item {
242
- display: flex;
243
- align-items: center;
244
- gap: var(--space-sm);
245
- min-height: 60px;
246
- padding: var(--space-md) var(--space-lg);
247
- background: var(--color-surface);
248
- border: 1px solid var(--color-border);
249
- border-top: none;
250
- }
251
-
252
- /* First list-item in a sequence (handles heading before list items) */
253
- .list-item:first-child,
254
- :not(.list-item) + .list-item {
255
- border-top: 1px solid var(--color-border);
256
- border-top-left-radius: var(--radius-lg);
257
- border-top-right-radius: var(--radius-lg);
258
- }
259
-
260
- .list-item:last-child {
261
- border-bottom-left-radius: var(--radius-lg);
262
- border-bottom-right-radius: var(--radius-lg);
263
- }
264
-
265
- /* Accent borders */
266
- .accent-left {
267
- border-left: 4px solid var(--color-border);
268
- }
269
-
270
- .accent-primary {
271
- border-left-color: var(--color-primary);
272
- }
273
-
274
- .accent-success {
275
- border-left-color: var(--color-success);
276
- }
277
-
278
- .accent-warning {
279
- border-left-color: var(--color-warning);
280
- }
281
-
282
- .accent-error {
283
- border-left-color: var(--color-error);
284
- }
285
-
286
- .accent-skill-primary {
287
- border-left-color: var(--color-primary-skill);
288
- }
289
-
290
- .accent-skill-secondary {
291
- border-left-color: var(--color-secondary);
292
- }
293
-
294
- .accent-skill-broad {
295
- border-left-color: var(--color-broad);
296
- }
297
-
298
- /* Footer */
299
- #app-footer {
300
- background: var(--color-surface);
301
- border-top: 1px solid var(--color-border);
302
- padding: var(--space-lg);
303
- text-align: center;
304
- color: var(--color-text-muted);
305
- font-size: var(--font-size-sm);
306
- }
307
-
308
- #app-footer p {
309
- margin: 0 0 var(--space-sm) 0;
310
- }
311
-
312
- .footer-links {
313
- display: flex;
314
- gap: var(--space-md);
315
- justify-content: center;
316
- }
317
-
318
- .footer-links a {
319
- color: var(--color-text-muted);
320
- text-decoration: none;
321
- }
322
-
323
- .footer-links a:hover {
324
- color: var(--color-primary);
325
- text-decoration: underline;
326
- }
327
-
328
- .footer-quote {
329
- margin: var(--space-lg) auto 0;
330
- max-width: 50em;
331
- font-style: italic;
332
- color: var(--color-text-muted);
333
- border: none;
334
- padding: 0;
335
- }
336
-
337
- .footer-quote p {
338
- margin: 0 0 var(--space-xs) 0;
339
- font-size: var(--font-size-sm);
340
- line-height: 1.5;
341
- }
342
-
343
- .footer-quote cite {
344
- font-size: var(--font-size-xs);
345
- font-style: normal;
346
- }
347
- }
@@ -1,362 +0,0 @@
1
- /**
2
- * Table Components
3
- *
4
- * Base table styles for all table variants.
5
- */
6
-
7
- @layer components {
8
- /* Table container */
9
- .table-container {
10
- overflow-x: auto;
11
- background: var(--color-surface);
12
- border-radius: var(--radius-lg);
13
- box-shadow: var(--shadow-md);
14
- }
15
-
16
- /* Base table */
17
- .table {
18
- width: 100%;
19
- border-collapse: collapse;
20
- }
21
-
22
- .table th,
23
- .table td {
24
- padding: var(--space-md);
25
- text-align: left;
26
- border-bottom: 1px solid var(--color-border);
27
- }
28
-
29
- .table th {
30
- background: var(--color-bg);
31
- font-weight: 600;
32
- color: var(--color-text-muted);
33
- font-size: var(--font-size-sm);
34
- text-transform: uppercase;
35
- letter-spacing: 0.025em;
36
- }
37
-
38
- .table tr:last-child td {
39
- border-bottom: none;
40
- }
41
-
42
- .table tr:hover td {
43
- background: var(--color-bg);
44
- }
45
-
46
- /* Standard table column widths */
47
- .table .col-name {
48
- width: 20%;
49
- min-width: 160px;
50
- }
51
-
52
- .table .col-capability {
53
- width: 100px;
54
- min-width: 100px;
55
- }
56
-
57
- .table .col-type {
58
- width: 90px;
59
- min-width: 90px;
60
- }
61
-
62
- .table .col-level {
63
- width: 120px;
64
- min-width: 120px;
65
- text-align: center;
66
- }
67
-
68
- .table .col-change {
69
- width: 70px;
70
- min-width: 70px;
71
- text-align: center;
72
- }
73
-
74
- .table .col-description {
75
- width: auto;
76
- min-width: 200px;
77
- }
78
-
79
- /* Data table */
80
- .data-table {
81
- width: 100%;
82
- border-collapse: collapse;
83
- }
84
-
85
- .data-table th,
86
- .data-table td {
87
- padding: var(--space-sm) var(--space-md);
88
- text-align: left;
89
- border-bottom: 1px solid var(--color-border);
90
- }
91
-
92
- .data-table th {
93
- background: var(--color-bg);
94
- font-weight: 600;
95
- font-size: var(--font-size-sm);
96
- color: var(--color-text-muted);
97
- }
98
-
99
- .data-table tbody tr {
100
- transition: background-color 0.2s ease;
101
- }
102
-
103
- .data-table tbody tr:hover {
104
- background: var(--color-bg);
105
- }
106
-
107
- .data-table tr:last-child td {
108
- border-bottom: none;
109
- }
110
-
111
- .data-table .col-narrow {
112
- width: 100px;
113
- }
114
-
115
- .data-table .col-medium {
116
- width: 150px;
117
- }
118
-
119
- .data-table .col-center {
120
- text-align: center;
121
- }
122
-
123
- /* Level table */
124
- .level-table {
125
- width: 100%;
126
- border-collapse: separate;
127
- border-spacing: 0;
128
- margin-top: var(--space-md);
129
- border: 1px solid var(--color-border);
130
- border-radius: var(--radius-lg);
131
- overflow: hidden;
132
- background: var(--color-surface);
133
- }
134
-
135
- .level-table th,
136
- .level-table td {
137
- padding: var(--space-md) var(--space-lg);
138
- text-align: left;
139
- border-bottom: 1px solid var(--color-border);
140
- }
141
-
142
- .level-table th {
143
- font-weight: 600;
144
- font-size: var(--font-size-sm);
145
- color: var(--color-text-secondary);
146
- background: var(--color-bg);
147
- text-transform: uppercase;
148
- letter-spacing: 0.025em;
149
- position: sticky;
150
- top: 0;
151
- z-index: 10;
152
- }
153
-
154
- .level-table th:first-child {
155
- width: 180px;
156
- }
157
-
158
- .level-table tbody tr {
159
- transition: background-color 0.2s ease;
160
- }
161
-
162
- .level-table tbody tr:hover {
163
- background: var(--color-bg);
164
- }
165
-
166
- .level-table tbody tr:last-child td {
167
- border-bottom: none;
168
- }
169
-
170
- .level-table td:first-child {
171
- font-weight: 500;
172
- color: var(--color-text);
173
- }
174
-
175
- /* Progression table */
176
- .progression-table {
177
- width: 100%;
178
- border-collapse: collapse;
179
- margin-top: var(--space-md);
180
- }
181
-
182
- .progression-table th,
183
- .progression-table td {
184
- padding: var(--space-md);
185
- text-align: left;
186
- border-bottom: 1px solid var(--color-border);
187
- }
188
-
189
- .progression-table th {
190
- font-weight: 600;
191
- color: var(--color-text-secondary);
192
- background: var(--color-bg);
193
- }
194
-
195
- .progression-table tbody tr {
196
- transition: background-color 0.2s ease;
197
- }
198
-
199
- .progression-table tbody tr:hover {
200
- background: var(--color-bg);
201
- }
202
-
203
- .progression-table tr:last-child td {
204
- border-bottom: none;
205
- }
206
-
207
- /* Progression table column widths */
208
- .progression-table th:first-child,
209
- .progression-table td:first-child {
210
- width: 20%;
211
- min-width: 160px;
212
- }
213
-
214
- /* Skills table: 6 columns (Name, Capability, Type, Current, Target, Change) */
215
- .progression-table.skill-table th:nth-child(2),
216
- .progression-table.skill-table td:nth-child(2) {
217
- width: 100px;
218
- }
219
-
220
- .progression-table.skill-table th:nth-child(3),
221
- .progression-table.skill-table td:nth-child(3) {
222
- width: 90px;
223
- }
224
-
225
- .progression-table.skill-table th:nth-child(4),
226
- .progression-table.skill-table td:nth-child(4),
227
- .progression-table.skill-table th:nth-child(5),
228
- .progression-table.skill-table td:nth-child(5) {
229
- width: 120px;
230
- text-align: center;
231
- }
232
-
233
- .progression-table.skill-table th:nth-child(6),
234
- .progression-table.skill-table td:nth-child(6) {
235
- width: 70px;
236
- text-align: center;
237
- }
238
-
239
- /* Behaviour table: 4 columns (Name, Current, Target, Change) */
240
- .progression-table.behaviour-table th:nth-child(2),
241
- .progression-table.behaviour-table td:nth-child(2),
242
- .progression-table.behaviour-table th:nth-child(3),
243
- .progression-table.behaviour-table td:nth-child(3) {
244
- width: 120px;
245
- text-align: center;
246
- }
247
-
248
- .progression-table.behaviour-table th:nth-child(4),
249
- .progression-table.behaviour-table td:nth-child(4) {
250
- width: 70px;
251
- text-align: center;
252
- }
253
-
254
- /* Matrix tables */
255
- .matrix-table th:first-child,
256
- .matrix-table td:first-child {
257
- width: 25%;
258
- min-width: 220px;
259
- }
260
-
261
- .matrix-table th:nth-child(2),
262
- .matrix-table td:nth-child(2) {
263
- width: 100px;
264
- }
265
-
266
- .matrix-table th:nth-child(3),
267
- .matrix-table td:nth-child(3) {
268
- width: 90px;
269
- }
270
-
271
- .matrix-table th:nth-child(4),
272
- .matrix-table td:nth-child(4) {
273
- width: 120px;
274
- text-align: center;
275
- }
276
-
277
- .matrix-table th:last-child,
278
- .matrix-table td:last-child {
279
- width: auto;
280
- }
281
-
282
- /* Behaviour matrix */
283
- .matrix-table.behaviour-matrix th:nth-child(2),
284
- .matrix-table.behaviour-matrix td:nth-child(2) {
285
- width: 120px;
286
- text-align: center;
287
- }
288
-
289
- /* Levels table */
290
- .levels-table th:first-child,
291
- .levels-table td:first-child {
292
- width: 120px;
293
- text-align: center;
294
- }
295
-
296
- .levels-table td.level-cell {
297
- text-align: center;
298
- vertical-align: middle;
299
- }
300
-
301
- .levels-table td.level-cell .level-bar {
302
- display: inline-flex;
303
- justify-content: center;
304
- }
305
-
306
- .levels-table td.level-cell .level-label {
307
- display: block;
308
- font-size: var(--font-size-xs);
309
- color: var(--color-text-muted);
310
- margin-top: 2px;
311
- }
312
-
313
- /* Modifier tables */
314
- .modifier-table th:last-child,
315
- .modifier-table td:last-child {
316
- width: 100px;
317
- text-align: center;
318
- }
319
-
320
- /* Human-only skill indicators */
321
- .human-only-row {
322
- background: rgba(254, 243, 199, 0.3);
323
- }
324
-
325
- .human-only-indicator {
326
- font-size: var(--font-size-xs);
327
- opacity: 0.8;
328
- cursor: help;
329
- }
330
-
331
- /* Lists */
332
- .item-list {
333
- list-style: none;
334
- padding: 0;
335
- margin: 0;
336
- }
337
-
338
- .item-list li {
339
- padding: var(--space-sm) 0;
340
- border-bottom: 1px solid var(--color-border);
341
- }
342
-
343
- .item-list li:last-child {
344
- border-bottom: none;
345
- }
346
-
347
- .item-list-compact li {
348
- padding: var(--space-xs) 0;
349
- }
350
-
351
- /* Related lists */
352
- .related-list {
353
- list-style: disc;
354
- padding-left: var(--space-lg);
355
- margin: var(--space-md) 0;
356
- }
357
-
358
- .related-list li {
359
- padding: var(--space-xs) 0;
360
- color: var(--color-text);
361
- }
362
- }