@forwardimpact/pathway 0.22.0 → 0.23.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.
Files changed (78) hide show
  1. package/bin/fit-pathway.js +8 -4
  2. package/package.json +6 -2
  3. package/src/commands/agent.js +6 -3
  4. package/src/commands/behaviour.js +11 -1
  5. package/src/commands/build.js +11 -2
  6. package/src/commands/command-factory.js +4 -2
  7. package/src/commands/dev.js +9 -2
  8. package/src/commands/discipline.js +25 -10
  9. package/src/commands/driver.js +11 -1
  10. package/src/commands/job.js +127 -28
  11. package/src/commands/level.js +25 -3
  12. package/src/commands/skill.js +11 -1
  13. package/src/commands/stage.js +11 -1
  14. package/src/commands/tool.js +6 -3
  15. package/src/commands/track.js +20 -4
  16. package/src/components/card.js +8 -104
  17. package/src/components/comparison-radar.js +1 -1
  18. package/src/components/detail.js +16 -118
  19. package/src/components/error-page.js +8 -68
  20. package/src/components/grid.js +12 -106
  21. package/src/components/list.js +7 -116
  22. package/src/components/nav.js +7 -60
  23. package/src/css/bundles/app.css +25 -21
  24. package/src/css/bundles/handout.css +33 -33
  25. package/src/css/bundles/slides.css +25 -25
  26. package/src/formatters/discipline/markdown.js +16 -1
  27. package/src/formatters/interview/shared.js +3 -3
  28. package/src/formatters/job/description.js +2 -2
  29. package/src/formatters/progress/shared.js +3 -3
  30. package/src/formatters/skill/shared.js +1 -1
  31. package/src/formatters/track/markdown.js +14 -0
  32. package/src/formatters/track/shared.js +1 -1
  33. package/src/handout.html +32 -13
  34. package/src/index.html +32 -13
  35. package/src/lib/error-boundary.js +3 -66
  36. package/src/lib/errors.js +7 -45
  37. package/src/lib/job-cache.js +1 -1
  38. package/src/lib/markdown.js +2 -109
  39. package/src/lib/reactive.js +7 -73
  40. package/src/lib/render.js +49 -197
  41. package/src/lib/router-core.js +2 -156
  42. package/src/lib/router-pages.js +2 -11
  43. package/src/lib/router-slides.js +2 -197
  44. package/src/lib/state.js +14 -63
  45. package/src/lib/utils.js +3 -10
  46. package/src/lib/yaml-loader.js +13 -71
  47. package/src/pages/agent-builder.js +1 -1
  48. package/src/pages/assessment-results.js +1 -1
  49. package/src/pages/job-builder.js +1 -1
  50. package/src/pages/job.js +1 -1
  51. package/src/pages/skill.js +1 -1
  52. package/src/slide-main.js +1 -1
  53. package/src/slides/index.js +1 -1
  54. package/src/slides/job.js +1 -1
  55. package/src/slides/overview.js +1 -1
  56. package/src/slides.html +32 -13
  57. package/src/css/base.css +0 -56
  58. package/src/css/components/badges.css +0 -232
  59. package/src/css/components/buttons.css +0 -101
  60. package/src/css/components/forms.css +0 -191
  61. package/src/css/components/layout.css +0 -218
  62. package/src/css/components/nav.css +0 -206
  63. package/src/css/components/progress.css +0 -166
  64. package/src/css/components/states.css +0 -82
  65. package/src/css/components/surfaces.css +0 -347
  66. package/src/css/components/tables.css +0 -362
  67. package/src/css/components/top-bar.css +0 -180
  68. package/src/css/components/typography.css +0 -121
  69. package/src/css/components/utilities.css +0 -41
  70. package/src/css/pages/detail.css +0 -119
  71. package/src/css/reset.css +0 -50
  72. package/src/css/tokens.css +0 -162
  73. package/src/css/views/handout.css +0 -30
  74. package/src/css/views/print.css +0 -634
  75. package/src/css/views/slide-animations.css +0 -113
  76. package/src/css/views/slide-base.css +0 -331
  77. package/src/css/views/slide-sections.css +0 -597
  78. package/src/css/views/slide-tables.css +0 -275
@@ -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
- }
@@ -1,180 +0,0 @@
1
- /**
2
- * Top Bar
3
- *
4
- * Fixed bar across the top of the viewport with sidebar toggle and
5
- * CLI command display. Inspired by Safari's URL bar + sidebar layout.
6
- */
7
-
8
- @layer components {
9
- /* --------------------------------------------------------------------------
10
- Bar container - fixed across top
11
- -------------------------------------------------------------------------- */
12
- .top-bar {
13
- position: fixed;
14
- top: 0;
15
- left: 0;
16
- right: 0;
17
- height: var(--top-bar-height);
18
- z-index: 200;
19
- display: flex;
20
- align-items: center;
21
- gap: var(--space-sm);
22
- padding: 0 var(--space-sm);
23
- background: var(--color-surface);
24
- border-bottom: 1px solid var(--color-border);
25
- }
26
-
27
- /* --------------------------------------------------------------------------
28
- Sidebar toggle button
29
- -------------------------------------------------------------------------- */
30
- .top-bar__toggle {
31
- flex-shrink: 0;
32
- display: flex;
33
- align-items: center;
34
- justify-content: center;
35
- width: 36px;
36
- height: 36px;
37
- border: none;
38
- border-radius: var(--radius-md);
39
- background: transparent;
40
- color: var(--color-text-muted);
41
- cursor: pointer;
42
- transition:
43
- background 0.15s,
44
- color 0.15s;
45
- }
46
-
47
- .top-bar__toggle:hover {
48
- background: var(--color-bg-secondary);
49
- color: var(--color-text);
50
- }
51
-
52
- .top-bar__toggle:active {
53
- background: var(--color-border);
54
- }
55
-
56
- /* Sidebar icon: simple sidebar SVG */
57
- .top-bar__toggle svg {
58
- width: 18px;
59
- height: 18px;
60
- fill: none;
61
- stroke: currentColor;
62
- stroke-width: 1.5;
63
- stroke-linecap: round;
64
- stroke-linejoin: round;
65
- }
66
-
67
- /* Highlight toggle when drawer is open */
68
- .drawer-open .top-bar__toggle {
69
- color: var(--color-primary);
70
- background: rgba(59, 130, 246, 0.08);
71
- }
72
-
73
- /* --------------------------------------------------------------------------
74
- Command bar (mimics Safari-style URL bar)
75
- -------------------------------------------------------------------------- */
76
- .top-bar__command {
77
- width: 100%;
78
- max-width: 800px;
79
- margin: 0 auto;
80
- display: flex;
81
- align-items: center;
82
- height: 36px;
83
- padding: 0 var(--space-sm) 0 var(--space-md);
84
- border: 1px solid var(--color-border);
85
- border-radius: var(--radius-lg);
86
- transition:
87
- border-color 0.15s,
88
- box-shadow 0.15s;
89
- gap: var(--space-xs);
90
- }
91
-
92
- .top-bar__command:hover {
93
- border-color: var(--color-text-light);
94
- }
95
-
96
- .top-bar__command:focus-within {
97
- border-color: var(--color-primary);
98
- box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15);
99
- }
100
-
101
- /* Terminal prompt icon */
102
- .top-bar__prompt {
103
- flex-shrink: 0;
104
- font-size: var(--font-size-sm);
105
- color: var(--color-text-light);
106
- user-select: none;
107
- }
108
-
109
- /* CLI command text */
110
- .top-bar__command-text {
111
- flex: 1;
112
- min-width: 0;
113
- font-family: var(--font-family-mono);
114
- font-size: var(--font-size-xs);
115
- color: var(--color-text-secondary);
116
- white-space: nowrap;
117
- overflow: hidden;
118
- text-overflow: ellipsis;
119
- user-select: all;
120
- line-height: 36px;
121
- }
122
-
123
- /* Copy button inside the command bar */
124
- .top-bar__copy {
125
- flex-shrink: 0;
126
- display: flex;
127
- align-items: center;
128
- justify-content: center;
129
- width: 28px;
130
- height: 28px;
131
- border: none;
132
- border-radius: var(--radius-sm);
133
- background: transparent;
134
- color: var(--color-text-light);
135
- cursor: pointer;
136
- transition:
137
- background 0.15s,
138
- color 0.15s;
139
- }
140
-
141
- .top-bar__copy:hover {
142
- background: var(--color-border);
143
- color: var(--color-text);
144
- }
145
-
146
- .top-bar__copy svg {
147
- width: 14px;
148
- height: 14px;
149
- fill: none;
150
- stroke: currentColor;
151
- stroke-width: 2;
152
- stroke-linecap: round;
153
- stroke-linejoin: round;
154
- }
155
-
156
- /* Copied state */
157
- .top-bar__copy.copied {
158
- color: var(--color-success);
159
- }
160
-
161
- .top-bar__copy.copied svg {
162
- /* Swap from copy icon to checkmark via CSS — JS swaps the class */
163
- }
164
-
165
- /* --------------------------------------------------------------------------
166
- Layout adjustments - push content below the top bar
167
- -------------------------------------------------------------------------- */
168
- .app-body {
169
- padding-top: var(--top-bar-height);
170
- }
171
-
172
- /* --------------------------------------------------------------------------
173
- Mobile tweaks
174
- -------------------------------------------------------------------------- */
175
- @media (max-width: 768px) {
176
- .top-bar__prompt {
177
- display: none;
178
- }
179
- }
180
- }
@@ -1,121 +0,0 @@
1
- /**
2
- * Typography Utilities
3
- *
4
- * Text styles, labels, and typography utilities.
5
- */
6
-
7
- @layer components {
8
- /* Labels - small uppercase text (consolidated definition) */
9
- .label,
10
- .detail-item-label,
11
- .stat-label,
12
- .expectation-label,
13
- .filter-title {
14
- font-size: var(--font-size-sm);
15
- color: var(--color-text-muted);
16
- text-transform: uppercase;
17
- letter-spacing: 0.025em;
18
- }
19
-
20
- .label-xs {
21
- font-size: var(--font-size-xs);
22
- }
23
-
24
- /* Match score label uses smaller font */
25
- .score-label {
26
- font-size: var(--font-size-xs);
27
- color: var(--color-text-muted);
28
- text-transform: uppercase;
29
- }
30
-
31
- /* Labels with bottom margin */
32
- .detail-item-label,
33
- .expectation-label {
34
- margin-bottom: var(--space-xs);
35
- }
36
-
37
- /* Filter title has bold weight and wider letter-spacing */
38
- .filter-title {
39
- font-weight: 600;
40
- color: var(--color-text-secondary);
41
- letter-spacing: 0.05em;
42
- }
43
-
44
- /* Text colors */
45
- .text-muted {
46
- color: var(--color-text-muted);
47
- }
48
-
49
- .text-light {
50
- color: var(--color-text-light);
51
- }
52
-
53
- .text-primary {
54
- color: var(--color-primary);
55
- }
56
-
57
- .text-success {
58
- color: var(--color-success);
59
- }
60
-
61
- .text-warning {
62
- color: var(--color-warning);
63
- }
64
-
65
- .text-error {
66
- color: var(--color-error);
67
- }
68
-
69
- /* Text alignment */
70
- .text-center {
71
- text-align: center;
72
- }
73
-
74
- .text-right {
75
- text-align: right;
76
- }
77
-
78
- /* Font sizes */
79
- .text-xs {
80
- font-size: var(--font-size-xs);
81
- }
82
-
83
- .text-sm {
84
- font-size: var(--font-size-sm);
85
- }
86
-
87
- .text-lg {
88
- font-size: var(--font-size-lg);
89
- }
90
-
91
- .text-xl {
92
- font-size: var(--font-size-xl);
93
- }
94
-
95
- .text-2xl {
96
- font-size: var(--font-size-2xl);
97
- }
98
-
99
- /* Font weight */
100
- .font-medium {
101
- font-weight: 500;
102
- }
103
-
104
- .font-semibold {
105
- font-weight: 600;
106
- }
107
-
108
- .font-bold {
109
- font-weight: 700;
110
- }
111
-
112
- /* Code inline */
113
- .code-inline {
114
- font-family: var(--font-family-mono);
115
- font-size: 0.9em;
116
- background: var(--color-bg);
117
- padding: 0.1em 0.4em;
118
- border-radius: var(--radius-sm);
119
- border: 1px solid var(--color-border);
120
- }
121
- }
@@ -1,41 +0,0 @@
1
- /**
2
- * Utility Classes
3
- *
4
- * Spacing utilities and helper classes.
5
- */
6
-
7
- @layer utilities {
8
- /* Margin top */
9
- .mt-sm {
10
- margin-top: var(--space-sm);
11
- }
12
-
13
- .mt-md {
14
- margin-top: var(--space-md);
15
- }
16
-
17
- .mt-lg {
18
- margin-top: var(--space-lg);
19
- }
20
-
21
- .mt-xl {
22
- margin-top: var(--space-xl);
23
- }
24
-
25
- /* Margin bottom */
26
- .mb-sm {
27
- margin-bottom: var(--space-sm);
28
- }
29
-
30
- .mb-md {
31
- margin-bottom: var(--space-md);
32
- }
33
-
34
- .mb-lg {
35
- margin-bottom: var(--space-lg);
36
- }
37
-
38
- .mb-xl {
39
- margin-bottom: var(--space-xl);
40
- }
41
- }