@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,113 +0,0 @@
1
- /**
2
- * Slide Animations
3
- *
4
- * All animation keyframes for slide views - consolidated definition.
5
- */
6
-
7
- @layer slides {
8
- /* Background gradient animation */
9
- @keyframes gradientShift {
10
- 0%,
11
- 100% {
12
- background-position: 0% 50%;
13
- }
14
- 50% {
15
- background-position: 100% 50%;
16
- }
17
- }
18
-
19
- /* Brand tag gradient animation */
20
- @keyframes gradient-shift {
21
- 0%,
22
- 100% {
23
- background-position: 0% 50%;
24
- }
25
- 50% {
26
- background-position: 100% 50%;
27
- }
28
- }
29
-
30
- /* Loading pulse */
31
- @keyframes pulse {
32
- 0%,
33
- 100% {
34
- opacity: 1;
35
- }
36
- 50% {
37
- opacity: 0.5;
38
- }
39
- }
40
-
41
- /* Header shimmer effect */
42
- @keyframes shimmer {
43
- 0% {
44
- left: -100%;
45
- }
46
- 100% {
47
- left: 100%;
48
- }
49
- }
50
-
51
- /* Title fade in and scale */
52
- @keyframes fadeInScale {
53
- from {
54
- opacity: 0;
55
- transform: scale(0.95);
56
- }
57
- to {
58
- opacity: 1;
59
- transform: scale(1);
60
- }
61
- }
62
-
63
- /* Badge pop in */
64
- @keyframes badgePopIn {
65
- 0% {
66
- opacity: 0;
67
- transform: scale(0) rotate(-12deg);
68
- }
69
- 60% {
70
- transform: scale(1.1) rotate(2deg);
71
- }
72
- 100% {
73
- opacity: 1;
74
- transform: scale(1) rotate(0deg);
75
- }
76
- }
77
-
78
- /* Dot fill animation */
79
- @keyframes dotFillUp {
80
- 0% {
81
- transform: scale(0.3);
82
- opacity: 0;
83
- }
84
- 50% {
85
- transform: scale(1.15);
86
- }
87
- 100% {
88
- transform: scale(1);
89
- opacity: 1;
90
- }
91
- }
92
-
93
- /* Dot pulse animation */
94
- @keyframes dotPulse {
95
- 0%,
96
- 100% {
97
- transform: scale(1);
98
- }
99
- 50% {
100
- transform: scale(1.08);
101
- }
102
- }
103
-
104
- /* Fade in animation */
105
- @keyframes fadeIn {
106
- from {
107
- opacity: 0;
108
- }
109
- to {
110
- opacity: 1;
111
- }
112
- }
113
- }
@@ -1,331 +0,0 @@
1
- /**
2
- * Slide View Base Styles
3
- *
4
- * Base styles for the slide view layout and navigation.
5
- */
6
-
7
- @layer slides {
8
- .slide-view {
9
- max-width: 1400px;
10
- margin: 0 auto;
11
- padding: var(--space-xl);
12
- background: linear-gradient(
13
- 135deg,
14
- #ffffff 0%,
15
- #f8fafc 25%,
16
- #f1f5f9 50%,
17
- #f8fafc 75%,
18
- #ffffff 100%
19
- );
20
- background-size: 400% 400%;
21
- animation: gradientShift 15s ease infinite;
22
- min-height: 100vh;
23
- position: relative;
24
- }
25
-
26
- .slide-view::before {
27
- content: "";
28
- position: fixed;
29
- top: 0;
30
- left: 0;
31
- right: 0;
32
- height: 300px;
33
- background: radial-gradient(
34
- ellipse at top,
35
- rgba(59, 130, 246, 0.08) 0%,
36
- rgba(147, 51, 234, 0.05) 40%,
37
- transparent 70%
38
- );
39
- pointer-events: none;
40
- z-index: 0;
41
- }
42
-
43
- .slide-view main {
44
- padding-bottom: 5rem; /* Account for fixed nav */
45
- position: relative;
46
- z-index: 1;
47
- }
48
-
49
- /* Loading state */
50
- .slide-loading {
51
- display: flex;
52
- align-items: center;
53
- justify-content: center;
54
- min-height: 200px;
55
- font-size: var(--font-size-lg);
56
- background: linear-gradient(135deg, #3b82f6, #9333ea);
57
- -webkit-background-clip: text;
58
- -webkit-text-fill-color: transparent;
59
- background-clip: text;
60
- font-weight: 600;
61
- animation: pulse 2s ease-in-out infinite;
62
- }
63
-
64
- .slide-loading.hidden {
65
- display: none;
66
- }
67
-
68
- /* Navigation */
69
- .slide-nav {
70
- position: fixed;
71
- bottom: 0;
72
- left: 0;
73
- right: 0;
74
- display: flex;
75
- align-items: center;
76
- justify-content: center;
77
- gap: var(--space-xl);
78
- padding: var(--space-md);
79
- background: rgba(255, 255, 255, 0.85);
80
- backdrop-filter: blur(20px) saturate(180%);
81
- -webkit-backdrop-filter: blur(20px) saturate(180%);
82
- border-top: 1px solid rgba(59, 130, 246, 0.15);
83
- box-shadow:
84
- 0 -4px 20px rgba(59, 130, 246, 0.08),
85
- 0 -1px 4px rgba(147, 51, 234, 0.05);
86
- z-index: 100;
87
- }
88
-
89
- .slide-nav-btn {
90
- padding: var(--space-sm) var(--space-md);
91
- border: 1px solid transparent;
92
- border-radius: var(--radius-md);
93
- background:
94
- linear-gradient(white, white) padding-box,
95
- linear-gradient(135deg, rgba(59, 130, 246, 0.3), rgba(147, 51, 234, 0.3))
96
- border-box;
97
- color: var(--color-text);
98
- cursor: pointer;
99
- font-size: var(--font-size-sm);
100
- font-family: inherit;
101
- font-weight: 500;
102
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
103
- box-shadow: 0 2px 8px rgba(59, 130, 246, 0.1);
104
- position: relative;
105
- overflow: hidden;
106
- }
107
-
108
- .slide-nav-btn::before {
109
- content: "";
110
- position: absolute;
111
- top: 0;
112
- left: -100%;
113
- width: 100%;
114
- height: 100%;
115
- background: linear-gradient(
116
- 90deg,
117
- transparent,
118
- rgba(255, 255, 255, 0.3),
119
- transparent
120
- );
121
- transition: left 0.5s;
122
- }
123
-
124
- .slide-nav-btn:hover:not(:disabled)::before {
125
- left: 100%;
126
- }
127
-
128
- .slide-nav-btn:hover:not(:disabled) {
129
- background: linear-gradient(135deg, #3b82f6, #9333ea);
130
- color: white;
131
- transform: translateY(-1px);
132
- box-shadow:
133
- 0 4px 16px rgba(59, 130, 246, 0.3),
134
- 0 2px 8px rgba(147, 51, 234, 0.2);
135
- }
136
-
137
- .slide-nav-btn:disabled {
138
- opacity: 0.4;
139
- cursor: not-allowed;
140
- background: rgba(248, 250, 252, 0.5);
141
- box-shadow: none;
142
- }
143
-
144
- .slide-nav-chapter {
145
- min-width: 44px;
146
- padding: var(--space-sm);
147
- font-size: var(--font-size-md);
148
- aspect-ratio: 1;
149
- }
150
-
151
- .slide-indicator {
152
- font-size: var(--font-size-sm);
153
- color: var(--color-text-muted);
154
- font-weight: 500;
155
- background: linear-gradient(135deg, #3b82f6, #9333ea);
156
- -webkit-background-clip: text;
157
- -webkit-text-fill-color: transparent;
158
- background-clip: text;
159
- min-width: 80px;
160
- text-align: center;
161
- }
162
-
163
- /* Page header */
164
- .slide-view .page-header {
165
- border-bottom: 2px solid transparent;
166
- border-image: linear-gradient(
167
- 90deg,
168
- rgba(59, 130, 246, 0.3),
169
- rgba(147, 51, 234, 0.3),
170
- rgba(59, 130, 246, 0.3)
171
- )
172
- 1;
173
- margin-bottom: var(--space-xl);
174
- padding-bottom: var(--space-lg);
175
- background: linear-gradient(
176
- 135deg,
177
- rgba(255, 255, 255, 0.9) 0%,
178
- rgba(248, 250, 252, 0.8) 100%
179
- );
180
- backdrop-filter: blur(10px);
181
- border-radius: var(--radius-lg);
182
- padding: var(--space-lg);
183
- box-shadow:
184
- 0 4px 20px rgba(59, 130, 246, 0.08),
185
- 0 2px 8px rgba(147, 51, 234, 0.05);
186
- position: relative;
187
- overflow: hidden;
188
- }
189
-
190
- .slide-view .page-header::before {
191
- content: "";
192
- position: absolute;
193
- top: 0;
194
- left: -100%;
195
- width: 200%;
196
- height: 100%;
197
- background: linear-gradient(
198
- 90deg,
199
- transparent,
200
- rgba(59, 130, 246, 0.03),
201
- transparent
202
- );
203
- animation: shimmer 3s infinite;
204
- }
205
-
206
- .slide-view .page-title {
207
- font-size: var(--font-size-3xl);
208
- font-weight: 700;
209
- margin: 0 0 var(--space-sm);
210
- color: var(--color-text);
211
- position: relative;
212
- animation: fadeInScale 0.6s cubic-bezier(0.4, 0, 0.2, 1);
213
- }
214
-
215
- .slide-view .page-title .gradient-text {
216
- background: linear-gradient(135deg, #1e40af, #7c3aed);
217
- -webkit-background-clip: text;
218
- -webkit-text-fill-color: transparent;
219
- background-clip: text;
220
- }
221
-
222
- .slide-view .page-description {
223
- font-size: var(--font-size-lg);
224
- color: var(--color-text-muted);
225
- max-width: 80ch;
226
- margin: 0;
227
- position: relative;
228
- }
229
-
230
- .slide-view .page-meta {
231
- display: flex;
232
- gap: var(--space-md);
233
- margin-top: var(--space-md);
234
- flex-wrap: wrap;
235
- position: relative;
236
- }
237
-
238
- /* Hide elements in slide mode */
239
- .slide-view .nav,
240
- .slide-view .page-actions,
241
- .slide-view footer,
242
- .slide-view .action-buttons,
243
- .slide-view .back-link,
244
- .slide-view #app-drawer,
245
- .slide-view .top-bar,
246
- .slide-view #app-footer {
247
- display: none !important;
248
- }
249
-
250
- /* Hide job description HTML on screen - only show when printing */
251
- .slide-view .job-description-print-section {
252
- display: none;
253
- }
254
-
255
- /* Page brand header */
256
- .page-brand-header {
257
- display: flex;
258
- align-items: center;
259
- justify-content: space-between;
260
- padding: var(--space-sm) var(--space-lg);
261
- margin-bottom: var(--space-lg);
262
- border-bottom: 1px solid var(--color-border);
263
- }
264
-
265
- .page-brand-header .brand-title {
266
- font-size: var(--font-size-sm);
267
- font-weight: 600;
268
- color: var(--color-text-muted);
269
- }
270
-
271
- .page-brand-header .brand-tag {
272
- font-size: var(--font-size-xs);
273
- font-weight: 600;
274
- letter-spacing: 0.5px;
275
- padding: 2px 8px;
276
- border-radius: 9999px;
277
- background: linear-gradient(135deg, #f472b6 0%, #a78bfa 50%, #38bdf8 100%);
278
- background-size: 200% 200%;
279
- color: white;
280
- animation: gradient-shift 6s ease infinite;
281
- opacity: 0.9;
282
- }
283
-
284
- /* Chapter cover page */
285
- .chapter-cover {
286
- display: flex;
287
- flex-direction: column;
288
- justify-content: center;
289
- align-items: center;
290
- min-height: 60vh;
291
- text-align: center;
292
- padding: var(--space-xl);
293
- }
294
-
295
- .chapter-title {
296
- font-size: 3rem;
297
- font-weight: 700;
298
- color: var(--color-text);
299
- margin-bottom: var(--space-lg);
300
- }
301
-
302
- .chapter-title .gradient-text {
303
- background: linear-gradient(135deg, #3b82f6, #9333ea);
304
- -webkit-background-clip: text;
305
- -webkit-text-fill-color: transparent;
306
- background-clip: text;
307
- }
308
-
309
- .chapter-description {
310
- font-size: 1.25rem;
311
- max-width: 600px;
312
- line-height: 1.6;
313
- color: var(--color-text-muted);
314
- }
315
-
316
- /* Responsive */
317
- @media (max-width: 768px) {
318
- .slide-view {
319
- padding: var(--space-md);
320
- }
321
-
322
- .slide-view .page-title {
323
- font-size: var(--font-size-2xl);
324
- }
325
-
326
- .slide-nav {
327
- gap: var(--space-md);
328
- padding: var(--space-sm);
329
- }
330
- }
331
- }