@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,120 +1,11 @@
1
1
  /**
2
2
  * Reusable list component
3
+ *
4
+ * Re-exports from @forwardimpact/libui/components/list.
3
5
  */
4
6
 
5
- import { div, h2, input, select, option } from "../lib/render.js";
6
- import { createCard, createBadge } from "./card.js";
7
-
8
- /**
9
- * Create a search/filter bar
10
- * @param {Object} options
11
- * @param {Function} options.onSearch - Search callback
12
- * @param {Array<{value: string, label: string}>} [options.filterOptions] - Filter dropdown options
13
- * @param {Function} [options.onFilter] - Filter callback
14
- * @param {string} [options.searchPlaceholder='Search...']
15
- * @param {string} [options.filterPlaceholder='All']
16
- * @returns {HTMLElement}
17
- */
18
- export function createSearchBar({
19
- onSearch,
20
- filterOptions,
21
- onFilter,
22
- searchPlaceholder = "Search...",
23
- filterPlaceholder = "All",
24
- }) {
25
- const searchInput = input({
26
- type: "text",
27
- className: "form-input",
28
- placeholder: searchPlaceholder,
29
- });
30
-
31
- searchInput.addEventListener("input", (e) => {
32
- onSearch(e.target.value);
33
- });
34
-
35
- const children = [searchInput];
36
-
37
- if (filterOptions && onFilter) {
38
- const filterSelect = select(
39
- { className: "form-select" },
40
- option({ value: "" }, filterPlaceholder),
41
- ...filterOptions.map((opt) => option({ value: opt.value }, opt.label)),
42
- );
43
-
44
- filterSelect.addEventListener("change", (e) => {
45
- onFilter(e.target.value);
46
- });
47
-
48
- children.push(filterSelect);
49
- }
50
-
51
- return div({ className: "search-bar" }, ...children);
52
- }
53
-
54
- /**
55
- * Create a list of cards
56
- * @param {Array} items - Items to render
57
- * @param {Function} renderItem - Function to render each item as a card config
58
- * @param {string} [emptyMessage='No items found']
59
- * @returns {HTMLElement}
60
- */
61
- export function createCardList(
62
- items,
63
- renderItem,
64
- emptyMessage = "No items found",
65
- ) {
66
- if (!items || items.length === 0) {
67
- return div(
68
- { className: "empty-state" },
69
- div({ className: "empty-message" }, emptyMessage),
70
- );
71
- }
72
-
73
- const cards = items.map((item) => {
74
- const config = renderItem(item);
75
- return createCard(config);
76
- });
77
-
78
- return div({ className: "grid grid-3" }, ...cards);
79
- }
80
-
81
- /**
82
- * Create a grouped list (like skills by capability)
83
- * @param {Object} groups - Object with group names as keys and arrays as values
84
- * @param {Function} renderItem - Function to render each item
85
- * @param {Function} [renderGroupHeader] - Function to render group header
86
- * @returns {HTMLElement}
87
- */
88
- export function createGroupedList(groups, renderItem, renderGroupHeader) {
89
- const sections = Object.entries(groups).map(([groupName, items]) => {
90
- const header = renderGroupHeader
91
- ? renderGroupHeader(groupName, items.length)
92
- : div(
93
- { className: "capability-header" },
94
- h2({ className: "capability-title" }, formatGroupName(groupName)),
95
- createBadge(`${items.length}`, "default"),
96
- );
97
-
98
- const cards = items.map((item) => {
99
- const config = renderItem(item);
100
- return createCard(config);
101
- });
102
-
103
- return div(
104
- { className: "capability-group" },
105
- header,
106
- div({ className: "grid grid-3" }, ...cards),
107
- );
108
- });
109
-
110
- return div({ className: "grouped-list" }, ...sections);
111
- }
112
-
113
- /**
114
- * Format a group name for display
115
- * @param {string} name
116
- * @returns {string}
117
- */
118
- function formatGroupName(name) {
119
- return name.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
120
- }
7
+ export {
8
+ createSearchBar,
9
+ createCardList,
10
+ createGroupedList,
11
+ } from "@forwardimpact/libui/components/list";
@@ -1,64 +1,11 @@
1
1
  /**
2
2
  * Navigation component helpers
3
+ *
4
+ * Re-exports from @forwardimpact/libui/components/nav.
3
5
  */
4
6
 
5
- import { div, a } from "../lib/render.js";
6
-
7
- /**
8
- * Update the active navigation link in the drawer
9
- * @param {string} path - Current path
10
- */
11
- export function updateActiveNav(path) {
12
- const links = document.querySelectorAll("#drawer-nav a");
13
- links.forEach((link) => {
14
- const href = link.getAttribute("href").slice(1); // Remove #
15
- const isActive = path === href || (href !== "/" && path.startsWith(href));
16
- link.classList.toggle("active", isActive);
17
- });
18
- }
19
-
20
- /**
21
- * Create a back link
22
- * @param {string} href - Link destination
23
- * @param {string} [text='Back'] - Link text
24
- * @returns {HTMLElement}
25
- */
26
- export function createBackLink(href, text = "← Back") {
27
- return a({ href: `#${href}`, className: "back-link" }, text);
28
- }
29
-
30
- /**
31
- * Create breadcrumbs
32
- * @param {Array<{label: string, href?: string}>} items
33
- * @returns {HTMLElement}
34
- */
35
- export function createBreadcrumbs(items) {
36
- const crumbs = items.map((item, index) => {
37
- const isLast = index === items.length - 1;
38
- if (isLast || !item.href) {
39
- return span({ className: "breadcrumb-item" }, item.label);
40
- }
41
- return a(
42
- { href: `#${item.href}`, className: "breadcrumb-item" },
43
- item.label,
44
- );
45
- });
46
-
47
- const separator = " / ";
48
- const children = [];
49
- crumbs.forEach((crumb, i) => {
50
- children.push(crumb);
51
- if (i < crumbs.length - 1) {
52
- children.push(document.createTextNode(separator));
53
- }
54
- });
55
-
56
- return div({ className: "breadcrumbs" }, ...children);
57
- }
58
-
59
- function span(attrs, text) {
60
- const el = document.createElement("span");
61
- if (attrs.className) el.className = attrs.className;
62
- if (text) el.textContent = text;
63
- return el;
64
- }
7
+ export {
8
+ updateActiveNav,
9
+ createBackLink,
10
+ createBreadcrumbs,
11
+ } from "@forwardimpact/libui/components/nav";
@@ -8,36 +8,40 @@
8
8
  /* Layer order declaration - must be first */
9
9
  @layer tokens, reset, base, components, utilities, pages;
10
10
 
11
- /* Foundation */
12
- @import "../tokens.css" layer(tokens);
13
- @import "../reset.css" layer(reset);
14
- @import "../base.css" layer(base);
15
-
16
- /* Components */
17
- @import "../components/layout.css" layer(components);
18
- @import "../components/surfaces.css" layer(components);
19
- @import "../components/typography.css" layer(components);
20
- @import "../components/badges.css" layer(components);
21
- @import "../components/buttons.css" layer(components);
22
- @import "../components/forms.css" layer(components);
23
- @import "../components/tables.css" layer(components);
24
- @import "../components/progress.css" layer(components);
25
- @import "../components/states.css" layer(components);
26
- @import "../components/nav.css" layer(components);
27
- @import "../components/top-bar.css" layer(components);
11
+ /* Foundation (from libui) */
12
+ @import "/ui/css/tokens.css" layer(tokens);
13
+ @import "/ui/css/reset.css" layer(reset);
14
+ @import "/ui/css/base.css" layer(base);
15
+
16
+ /* Components (from libui) */
17
+ @import "/ui/css/components/layout.css" layer(components);
18
+ @import "/ui/css/components/surfaces.css" layer(components);
19
+ @import "/ui/css/components/typography.css" layer(components);
20
+ @import "/ui/css/components/badges.css" layer(components);
21
+ @import "/ui/css/components/buttons.css" layer(components);
22
+ @import "/ui/css/components/forms.css" layer(components);
23
+ @import "/ui/css/components/tables.css" layer(components);
24
+ @import "/ui/css/components/progress.css" layer(components);
25
+ @import "/ui/css/components/states.css" layer(components);
26
+ @import "/ui/css/components/nav.css" layer(components);
27
+ @import "/ui/css/components/top-bar.css" layer(components);
28
+
29
+ /* Components (Pathway-specific) */
28
30
  @import "../components/command-prompt.css" layer(components);
29
31
  @import "../components/skill-file-viewer.css" layer(components);
30
32
  @import "../components/file-card.css" layer(components);
31
33
 
32
- /* Utilities */
33
- @import "../components/utilities.css" layer(utilities);
34
+ /* Utilities (from libui) */
35
+ @import "/ui/css/components/utilities.css" layer(utilities);
36
+
37
+ /* Pages (from libui) */
38
+ @import "/ui/css/pages/detail.css" layer(pages);
34
39
 
35
- /* Pages */
40
+ /* Pages (Pathway-specific) */
36
41
  @import "../pages/landing.css" layer(pages);
37
42
  @import "../pages/job-builder.css" layer(pages);
38
43
  @import "../pages/agent-builder.css" layer(pages);
39
44
  @import "../pages/lifecycle.css" layer(pages);
40
- @import "../pages/detail.css" layer(pages);
41
45
  @import "../pages/interview-builder.css" layer(pages);
42
46
  @import "../pages/self-assessment.css" layer(pages);
43
47
  @import "../pages/assessment-results.css" layer(pages);
@@ -8,36 +8,36 @@
8
8
  /* Layer order declaration - must be first */
9
9
  @layer tokens, reset, base, components, utilities, pages, slides, handout, print;
10
10
 
11
- /* Foundation */
12
- @import "../tokens.css" layer(tokens);
13
- @import "../reset.css" layer(reset);
14
- @import "../base.css" layer(base);
15
-
16
- /* Components */
17
- @import "../components/layout.css" layer(components);
18
- @import "../components/surfaces.css" layer(components);
19
- @import "../components/typography.css" layer(components);
20
- @import "../components/badges.css" layer(components);
21
- @import "../components/buttons.css" layer(components);
22
- @import "../components/forms.css" layer(components);
23
- @import "../components/tables.css" layer(components);
24
- @import "../components/progress.css" layer(components);
25
- @import "../components/states.css" layer(components);
26
-
27
- /* Utilities */
28
- @import "../components/utilities.css" layer(utilities);
29
-
30
- /* Pages (for shared formatters) */
31
- @import "../pages/detail.css" layer(pages);
32
-
33
- /* Slide views */
34
- @import "../views/slide-animations.css" layer(slides);
35
- @import "../views/slide-base.css" layer(slides);
36
- @import "../views/slide-sections.css" layer(slides);
37
- @import "../views/slide-tables.css" layer(slides);
38
-
39
- /* Handout overrides */
40
- @import "../views/handout.css" layer(handout);
41
-
42
- /* Print */
43
- @import "../views/print.css" layer(print);
11
+ /* Foundation (from libui) */
12
+ @import "/ui/css/tokens.css" layer(tokens);
13
+ @import "/ui/css/reset.css" layer(reset);
14
+ @import "/ui/css/base.css" layer(base);
15
+
16
+ /* Components (from libui) */
17
+ @import "/ui/css/components/layout.css" layer(components);
18
+ @import "/ui/css/components/surfaces.css" layer(components);
19
+ @import "/ui/css/components/typography.css" layer(components);
20
+ @import "/ui/css/components/badges.css" layer(components);
21
+ @import "/ui/css/components/buttons.css" layer(components);
22
+ @import "/ui/css/components/forms.css" layer(components);
23
+ @import "/ui/css/components/tables.css" layer(components);
24
+ @import "/ui/css/components/progress.css" layer(components);
25
+ @import "/ui/css/components/states.css" layer(components);
26
+
27
+ /* Utilities (from libui) */
28
+ @import "/ui/css/components/utilities.css" layer(utilities);
29
+
30
+ /* Pages (from libui) */
31
+ @import "/ui/css/pages/detail.css" layer(pages);
32
+
33
+ /* Slide views (from libui) */
34
+ @import "/ui/css/views/slide-animations.css" layer(slides);
35
+ @import "/ui/css/views/slide-base.css" layer(slides);
36
+ @import "/ui/css/views/slide-sections.css" layer(slides);
37
+ @import "/ui/css/views/slide-tables.css" layer(slides);
38
+
39
+ /* Handout overrides (from libui) */
40
+ @import "/ui/css/views/handout.css" layer(handout);
41
+
42
+ /* Print (from libui) */
43
+ @import "/ui/css/views/print.css" layer(print);
@@ -8,33 +8,33 @@
8
8
  /* Layer order declaration - must be first */
9
9
  @layer tokens, reset, base, components, utilities, pages, slides, print;
10
10
 
11
- /* Foundation */
12
- @import "../tokens.css" layer(tokens);
13
- @import "../reset.css" layer(reset);
14
- @import "../base.css" layer(base);
11
+ /* Foundation (from libui) */
12
+ @import "/ui/css/tokens.css" layer(tokens);
13
+ @import "/ui/css/reset.css" layer(reset);
14
+ @import "/ui/css/base.css" layer(base);
15
15
 
16
- /* Components */
17
- @import "../components/layout.css" layer(components);
18
- @import "../components/surfaces.css" layer(components);
19
- @import "../components/typography.css" layer(components);
20
- @import "../components/badges.css" layer(components);
21
- @import "../components/buttons.css" layer(components);
22
- @import "../components/forms.css" layer(components);
23
- @import "../components/tables.css" layer(components);
24
- @import "../components/progress.css" layer(components);
25
- @import "../components/states.css" layer(components);
16
+ /* Components (from libui) */
17
+ @import "/ui/css/components/layout.css" layer(components);
18
+ @import "/ui/css/components/surfaces.css" layer(components);
19
+ @import "/ui/css/components/typography.css" layer(components);
20
+ @import "/ui/css/components/badges.css" layer(components);
21
+ @import "/ui/css/components/buttons.css" layer(components);
22
+ @import "/ui/css/components/forms.css" layer(components);
23
+ @import "/ui/css/components/tables.css" layer(components);
24
+ @import "/ui/css/components/progress.css" layer(components);
25
+ @import "/ui/css/components/states.css" layer(components);
26
26
 
27
- /* Utilities */
28
- @import "../components/utilities.css" layer(utilities);
27
+ /* Utilities (from libui) */
28
+ @import "/ui/css/components/utilities.css" layer(utilities);
29
29
 
30
- /* Pages (for shared formatters) */
31
- @import "../pages/detail.css" layer(pages);
30
+ /* Pages (from libui) */
31
+ @import "/ui/css/pages/detail.css" layer(pages);
32
32
 
33
- /* Slide views */
34
- @import "../views/slide-animations.css" layer(slides);
35
- @import "../views/slide-base.css" layer(slides);
36
- @import "../views/slide-sections.css" layer(slides);
37
- @import "../views/slide-tables.css" layer(slides);
33
+ /* Slide views (from libui) */
34
+ @import "/ui/css/views/slide-animations.css" layer(slides);
35
+ @import "/ui/css/views/slide-base.css" layer(slides);
36
+ @import "/ui/css/views/slide-sections.css" layer(slides);
37
+ @import "/ui/css/views/slide-tables.css" layer(slides);
38
38
 
39
- /* Print */
40
- @import "../views/print.css" layer(print);
39
+ /* Print (from libui) */
40
+ @import "/ui/css/views/print.css" layer(print);
@@ -35,16 +35,31 @@ export function disciplineListToMarkdown(disciplines) {
35
35
  * @param {Object} context - Additional context
36
36
  * @param {Array} context.skills - All skills
37
37
  * @param {Array} context.behaviours - All behaviours
38
+ * @param {Array} [context.tracks] - All tracks (for showing valid track names)
38
39
  * @param {boolean} [context.showBehaviourModifiers=true] - Whether to show behaviour modifiers section
39
40
  * @returns {string}
40
41
  */
41
42
  export function disciplineToMarkdown(
42
43
  discipline,
43
- { skills, behaviours, showBehaviourModifiers = true } = {},
44
+ { skills, behaviours, tracks, showBehaviourModifiers = true } = {},
44
45
  ) {
45
46
  const view = prepareDisciplineDetail(discipline, { skills, behaviours });
47
+ const type = discipline.isProfessional ? "Professional" : "Management";
46
48
  const lines = [`# 📋 ${view.name}`, "", view.description, ""];
47
49
 
50
+ // Type and valid tracks
51
+ const validTracks = (discipline.validTracks || []).filter((t) => t !== null);
52
+ if (validTracks.length > 0) {
53
+ const trackNames = validTracks.map((tid) => {
54
+ const track = tracks?.find((t) => t.id === tid);
55
+ return track ? track.name : tid;
56
+ });
57
+ lines.push(`**Type:** ${type} `);
58
+ lines.push(`**Valid Tracks:** ${trackNames.join(", ")}`, "");
59
+ } else {
60
+ lines.push(`**Type:** ${type}`, "");
61
+ }
62
+
48
63
  // Core skills
49
64
  if (view.coreSkills.length > 0) {
50
65
  lines.push("## Core Skills", "");
@@ -8,13 +8,13 @@ import {
8
8
  isValidJobCombination,
9
9
  generateJobTitle,
10
10
  getDisciplineSkillIds,
11
- } from "@forwardimpact/libpathway/derivation";
11
+ } from "@forwardimpact/libskill/derivation";
12
12
  import {
13
13
  deriveMissionFitInterview,
14
14
  deriveDecompositionInterview,
15
15
  deriveStakeholderInterview,
16
- } from "@forwardimpact/libpathway/interview";
17
- import { getOrCreateJob } from "@forwardimpact/libpathway/job-cache";
16
+ } from "@forwardimpact/libskill/interview";
17
+ import { getOrCreateJob } from "@forwardimpact/libskill/job-cache";
18
18
 
19
19
  /**
20
20
  * Interview type configurations
@@ -85,7 +85,7 @@ function prepareJobDescriptionData({ job, discipline, level, track }) {
85
85
  let capabilitySkills = [];
86
86
  const derivedResponsibilities = job.derivedResponsibilities || [];
87
87
  if (derivedResponsibilities.length > 0) {
88
- // derivedResponsibilities is sorted: highest proficiency first, then by ordinalRank
88
+ // derivedResponsibilities is sorted: highest proficiency first, then by skill count
89
89
  const highestProficiency = derivedResponsibilities[0].proficiency;
90
90
 
91
91
  // Filter responsibilities to only the highest proficiency
@@ -103,7 +103,7 @@ function prepareJobDescriptionData({ job, discipline, level, track }) {
103
103
  skillsByCapability[skill.capability].push(skill);
104
104
  }
105
105
 
106
- // Build capability sections in ordinalRank order
106
+ // Build capability sections in skill count order
107
107
  capabilitySkills = topResponsibilities
108
108
  .filter((r) => skillsByCapability[r.capability]?.length > 0)
109
109
  .map((r) => {
@@ -7,13 +7,13 @@
7
7
  import {
8
8
  isValidJobCombination,
9
9
  generateJobTitle,
10
- } from "@forwardimpact/libpathway/derivation";
10
+ } from "@forwardimpact/libskill/derivation";
11
11
  import {
12
12
  analyzeProgression,
13
13
  analyzeCustomProgression,
14
14
  getNextLevel,
15
- } from "@forwardimpact/libpathway/progression";
16
- import { getOrCreateJob } from "@forwardimpact/libpathway/job-cache";
15
+ } from "@forwardimpact/libskill/progression";
16
+ import { getOrCreateJob } from "@forwardimpact/libskill/job-cache";
17
17
 
18
18
  /**
19
19
  * Get the next level for progression
@@ -8,7 +8,7 @@ import {
8
8
  groupSkillsByCapability,
9
9
  getCapabilityEmoji,
10
10
  } from "@forwardimpact/map/levels";
11
- import { getSkillTypeForDiscipline } from "@forwardimpact/libpathway/derivation";
11
+ import { getSkillTypeForDiscipline } from "@forwardimpact/libskill/derivation";
12
12
  import { truncate } from "../shared.js";
13
13
 
14
14
  /**
@@ -44,6 +44,20 @@ export function trackToMarkdown(
44
44
  const emoji = framework ? getConceptEmoji(framework, "track") : "🛤️";
45
45
  const lines = [`# ${emoji} ${view.name}`, "", view.description, ""];
46
46
 
47
+ // Show which disciplines use this track
48
+ if (disciplines) {
49
+ const usedBy = disciplines.filter(
50
+ (d) => d.validTracks && d.validTracks.includes(track.id),
51
+ );
52
+ if (usedBy.length > 0) {
53
+ const names = usedBy.map(
54
+ (d) =>
55
+ `${d.specialization || d.id} (${d.isProfessional ? "professional" : "management"})`,
56
+ );
57
+ lines.push(`**Used by:** ${names.join(", ")}`, "");
58
+ }
59
+ }
60
+
47
61
  // Skill modifiers - show expanded skills for capabilities
48
62
  if (view.skillModifiers.length > 0) {
49
63
  lines.push("## Skill Modifiers", "");
@@ -7,7 +7,7 @@
7
7
  import {
8
8
  isCapability,
9
9
  getSkillsByCapability,
10
- } from "@forwardimpact/libpathway/modifiers";
10
+ } from "@forwardimpact/libskill/modifiers";
11
11
  import { truncate } from "../shared.js";
12
12
 
13
13
  /**
package/src/handout.html CHANGED
@@ -13,19 +13,38 @@
13
13
  "@forwardimpact/map/levels": "/map/lib/levels.js",
14
14
  "@forwardimpact/map/loader": "/map/lib/loader.js",
15
15
  "@forwardimpact/map/validation": "/map/lib/validation.js",
16
- "@forwardimpact/libpathway": "/model/lib/index.js",
17
- "@forwardimpact/libpathway/derivation": "/model/lib/derivation.js",
18
- "@forwardimpact/libpathway/modifiers": "/model/lib/modifiers.js",
19
- "@forwardimpact/libpathway/agent": "/model/lib/agent.js",
20
- "@forwardimpact/libpathway/interview": "/model/lib/interview.js",
21
- "@forwardimpact/libpathway/job": "/model/lib/job.js",
22
- "@forwardimpact/libpathway/job-cache": "/model/lib/job-cache.js",
23
- "@forwardimpact/libpathway/checklist": "/model/lib/checklist.js",
24
- "@forwardimpact/libpathway/matching": "/model/lib/matching.js",
25
- "@forwardimpact/libpathway/profile": "/model/lib/profile.js",
26
- "@forwardimpact/libpathway/progression": "/model/lib/progression.js",
27
- "@forwardimpact/libpathway/policies": "/model/lib/policies/index.js",
28
- "@forwardimpact/libpathway/toolkit": "/model/lib/toolkit.js"
16
+ "@forwardimpact/libskill": "/model/lib/index.js",
17
+ "@forwardimpact/libskill/derivation": "/model/lib/derivation.js",
18
+ "@forwardimpact/libskill/modifiers": "/model/lib/modifiers.js",
19
+ "@forwardimpact/libskill/agent": "/model/lib/agent.js",
20
+ "@forwardimpact/libskill/interview": "/model/lib/interview.js",
21
+ "@forwardimpact/libskill/job": "/model/lib/job.js",
22
+ "@forwardimpact/libskill/job-cache": "/model/lib/job-cache.js",
23
+ "@forwardimpact/libskill/checklist": "/model/lib/checklist.js",
24
+ "@forwardimpact/libskill/matching": "/model/lib/matching.js",
25
+ "@forwardimpact/libskill/profile": "/model/lib/profile.js",
26
+ "@forwardimpact/libskill/progression": "/model/lib/progression.js",
27
+ "@forwardimpact/libskill/policies": "/model/lib/policies/index.js",
28
+ "@forwardimpact/libskill/toolkit": "/model/lib/toolkit.js",
29
+ "@forwardimpact/libui": "/ui/lib/index.js",
30
+ "@forwardimpact/libui/render": "/ui/lib/render.js",
31
+ "@forwardimpact/libui/reactive": "/ui/lib/reactive.js",
32
+ "@forwardimpact/libui/state": "/ui/lib/state.js",
33
+ "@forwardimpact/libui/errors": "/ui/lib/errors.js",
34
+ "@forwardimpact/libui/error-boundary": "/ui/lib/error-boundary.js",
35
+ "@forwardimpact/libui/router-core": "/ui/lib/router-core.js",
36
+ "@forwardimpact/libui/router-pages": "/ui/lib/router-pages.js",
37
+ "@forwardimpact/libui/router-slides": "/ui/lib/router-slides.js",
38
+ "@forwardimpact/libui/yaml-loader": "/ui/lib/yaml-loader.js",
39
+ "@forwardimpact/libui/markdown": "/ui/lib/markdown.js",
40
+ "@forwardimpact/libui/utils": "/ui/lib/utils.js",
41
+ "@forwardimpact/libui/components": "/ui/lib/components/index.js",
42
+ "@forwardimpact/libui/components/card": "/ui/lib/components/card.js",
43
+ "@forwardimpact/libui/components/grid": "/ui/lib/components/grid.js",
44
+ "@forwardimpact/libui/components/list": "/ui/lib/components/list.js",
45
+ "@forwardimpact/libui/components/detail": "/ui/lib/components/detail.js",
46
+ "@forwardimpact/libui/components/nav": "/ui/lib/components/nav.js",
47
+ "@forwardimpact/libui/components/error-page": "/ui/lib/components/error-page.js"
29
48
  }
30
49
  }
31
50
  </script>
package/src/index.html CHANGED
@@ -25,19 +25,38 @@
25
25
  "@forwardimpact/map/levels": "/map/lib/levels.js",
26
26
  "@forwardimpact/map/loader": "/map/lib/loader.js",
27
27
  "@forwardimpact/map/validation": "/map/lib/validation.js",
28
- "@forwardimpact/libpathway": "/model/lib/index.js",
29
- "@forwardimpact/libpathway/derivation": "/model/lib/derivation.js",
30
- "@forwardimpact/libpathway/modifiers": "/model/lib/modifiers.js",
31
- "@forwardimpact/libpathway/agent": "/model/lib/agent.js",
32
- "@forwardimpact/libpathway/interview": "/model/lib/interview.js",
33
- "@forwardimpact/libpathway/job": "/model/lib/job.js",
34
- "@forwardimpact/libpathway/job-cache": "/model/lib/job-cache.js",
35
- "@forwardimpact/libpathway/checklist": "/model/lib/checklist.js",
36
- "@forwardimpact/libpathway/matching": "/model/lib/matching.js",
37
- "@forwardimpact/libpathway/profile": "/model/lib/profile.js",
38
- "@forwardimpact/libpathway/progression": "/model/lib/progression.js",
39
- "@forwardimpact/libpathway/policies": "/model/lib/policies/index.js",
40
- "@forwardimpact/libpathway/toolkit": "/model/lib/toolkit.js"
28
+ "@forwardimpact/libskill": "/model/lib/index.js",
29
+ "@forwardimpact/libskill/derivation": "/model/lib/derivation.js",
30
+ "@forwardimpact/libskill/modifiers": "/model/lib/modifiers.js",
31
+ "@forwardimpact/libskill/agent": "/model/lib/agent.js",
32
+ "@forwardimpact/libskill/interview": "/model/lib/interview.js",
33
+ "@forwardimpact/libskill/job": "/model/lib/job.js",
34
+ "@forwardimpact/libskill/job-cache": "/model/lib/job-cache.js",
35
+ "@forwardimpact/libskill/checklist": "/model/lib/checklist.js",
36
+ "@forwardimpact/libskill/matching": "/model/lib/matching.js",
37
+ "@forwardimpact/libskill/profile": "/model/lib/profile.js",
38
+ "@forwardimpact/libskill/progression": "/model/lib/progression.js",
39
+ "@forwardimpact/libskill/policies": "/model/lib/policies/index.js",
40
+ "@forwardimpact/libskill/toolkit": "/model/lib/toolkit.js",
41
+ "@forwardimpact/libui": "/ui/lib/index.js",
42
+ "@forwardimpact/libui/render": "/ui/lib/render.js",
43
+ "@forwardimpact/libui/reactive": "/ui/lib/reactive.js",
44
+ "@forwardimpact/libui/state": "/ui/lib/state.js",
45
+ "@forwardimpact/libui/errors": "/ui/lib/errors.js",
46
+ "@forwardimpact/libui/error-boundary": "/ui/lib/error-boundary.js",
47
+ "@forwardimpact/libui/router-core": "/ui/lib/router-core.js",
48
+ "@forwardimpact/libui/router-pages": "/ui/lib/router-pages.js",
49
+ "@forwardimpact/libui/router-slides": "/ui/lib/router-slides.js",
50
+ "@forwardimpact/libui/yaml-loader": "/ui/lib/yaml-loader.js",
51
+ "@forwardimpact/libui/markdown": "/ui/lib/markdown.js",
52
+ "@forwardimpact/libui/utils": "/ui/lib/utils.js",
53
+ "@forwardimpact/libui/components": "/ui/lib/components/index.js",
54
+ "@forwardimpact/libui/components/card": "/ui/lib/components/card.js",
55
+ "@forwardimpact/libui/components/grid": "/ui/lib/components/grid.js",
56
+ "@forwardimpact/libui/components/list": "/ui/lib/components/list.js",
57
+ "@forwardimpact/libui/components/detail": "/ui/lib/components/detail.js",
58
+ "@forwardimpact/libui/components/nav": "/ui/lib/components/nav.js",
59
+ "@forwardimpact/libui/components/error-page": "/ui/lib/components/error-page.js"
41
60
  }
42
61
  }
43
62
  </script>