learngraph 0.5.0 → 0.7.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 (235) hide show
  1. package/dist/cjs/api/routes/analytics.js +288 -0
  2. package/dist/cjs/api/routes/analytics.js.map +1 -0
  3. package/dist/cjs/api/routes/assessments.js +269 -0
  4. package/dist/cjs/api/routes/assessments.js.map +1 -0
  5. package/dist/cjs/api/routes/curriculum.js +345 -0
  6. package/dist/cjs/api/routes/curriculum.js.map +1 -0
  7. package/dist/cjs/api/routes/edges.js +162 -0
  8. package/dist/cjs/api/routes/edges.js.map +1 -0
  9. package/dist/cjs/api/routes/explore.js +224 -0
  10. package/dist/cjs/api/routes/explore.js.map +1 -0
  11. package/dist/cjs/api/routes/learners.js +324 -0
  12. package/dist/cjs/api/routes/learners.js.map +1 -0
  13. package/dist/cjs/api/routes/me.js +404 -0
  14. package/dist/cjs/api/routes/me.js.map +1 -0
  15. package/dist/cjs/api/routes/skills.js +319 -0
  16. package/dist/cjs/api/routes/skills.js.map +1 -0
  17. package/dist/cjs/api/server.js +185 -0
  18. package/dist/cjs/api/server.js.map +1 -0
  19. package/dist/cjs/api/types.js +10 -0
  20. package/dist/cjs/api/types.js.map +1 -0
  21. package/dist/cjs/assessment/adaptive.js +390 -0
  22. package/dist/cjs/assessment/adaptive.js.map +1 -0
  23. package/dist/cjs/assessment/bkt.js +362 -0
  24. package/dist/cjs/assessment/bkt.js.map +1 -0
  25. package/dist/cjs/assessment/index.js +54 -0
  26. package/dist/cjs/assessment/index.js.map +1 -0
  27. package/dist/cjs/assessment/irt.js +420 -0
  28. package/dist/cjs/assessment/irt.js.map +1 -0
  29. package/dist/cjs/assessment/mastery-engine.js +411 -0
  30. package/dist/cjs/assessment/mastery-engine.js.map +1 -0
  31. package/dist/cjs/components/LearningPathView.js +320 -0
  32. package/dist/cjs/components/LearningPathView.js.map +1 -0
  33. package/dist/cjs/components/ProgressDashboard.js +308 -0
  34. package/dist/cjs/components/ProgressDashboard.js.map +1 -0
  35. package/dist/cjs/components/SkillCard.js +264 -0
  36. package/dist/cjs/components/SkillCard.js.map +1 -0
  37. package/dist/cjs/components/SkillExplorer.js +401 -0
  38. package/dist/cjs/components/SkillExplorer.js.map +1 -0
  39. package/dist/cjs/components/SkillGraph.js +435 -0
  40. package/dist/cjs/components/SkillGraph.js.map +1 -0
  41. package/dist/cjs/components/hooks.js +510 -0
  42. package/dist/cjs/components/hooks.js.map +1 -0
  43. package/dist/cjs/components/index.js +77 -0
  44. package/dist/cjs/components/index.js.map +1 -0
  45. package/dist/cjs/components/types.js +34 -0
  46. package/dist/cjs/components/types.js.map +1 -0
  47. package/dist/cjs/index.js +35 -1
  48. package/dist/cjs/index.js.map +1 -1
  49. package/dist/cjs/llm/adapters/anthropic.js +91 -3
  50. package/dist/cjs/llm/adapters/anthropic.js.map +1 -1
  51. package/dist/cjs/llm/adapters/gemini.js +101 -8
  52. package/dist/cjs/llm/adapters/gemini.js.map +1 -1
  53. package/dist/cjs/llm/adapters/index.js +42 -1
  54. package/dist/cjs/llm/adapters/index.js.map +1 -1
  55. package/dist/cjs/llm/adapters/ollama.js +120 -3
  56. package/dist/cjs/llm/adapters/ollama.js.map +1 -1
  57. package/dist/cjs/llm/adapters/openai.js +108 -2
  58. package/dist/cjs/llm/adapters/openai.js.map +1 -1
  59. package/dist/cjs/mcp/cli.js +302 -0
  60. package/dist/cjs/mcp/cli.js.map +1 -0
  61. package/dist/cjs/mcp/index.js +79 -0
  62. package/dist/cjs/mcp/index.js.map +1 -0
  63. package/dist/cjs/mcp/prompts.js +425 -0
  64. package/dist/cjs/mcp/prompts.js.map +1 -0
  65. package/dist/cjs/mcp/resources.js +371 -0
  66. package/dist/cjs/mcp/resources.js.map +1 -0
  67. package/dist/cjs/mcp/server.js +410 -0
  68. package/dist/cjs/mcp/server.js.map +1 -0
  69. package/dist/cjs/mcp/tools.js +612 -0
  70. package/dist/cjs/mcp/tools.js.map +1 -0
  71. package/dist/cjs/mcp/types.js +10 -0
  72. package/dist/cjs/mcp/types.js.map +1 -0
  73. package/dist/cjs/types/assessment.js +46 -0
  74. package/dist/cjs/types/assessment.js.map +1 -0
  75. package/dist/cjs/types/bloom.js +12 -1
  76. package/dist/cjs/types/bloom.js.map +1 -1
  77. package/dist/cjs/types/index.js +7 -1
  78. package/dist/cjs/types/index.js.map +1 -1
  79. package/dist/esm/api/routes/analytics.js +285 -0
  80. package/dist/esm/api/routes/analytics.js.map +1 -0
  81. package/dist/esm/api/routes/assessments.js +266 -0
  82. package/dist/esm/api/routes/assessments.js.map +1 -0
  83. package/dist/esm/api/routes/curriculum.js +342 -0
  84. package/dist/esm/api/routes/curriculum.js.map +1 -0
  85. package/dist/esm/api/routes/edges.js +159 -0
  86. package/dist/esm/api/routes/edges.js.map +1 -0
  87. package/dist/esm/api/routes/explore.js +221 -0
  88. package/dist/esm/api/routes/explore.js.map +1 -0
  89. package/dist/esm/api/routes/learners.js +321 -0
  90. package/dist/esm/api/routes/learners.js.map +1 -0
  91. package/dist/esm/api/routes/me.js +401 -0
  92. package/dist/esm/api/routes/me.js.map +1 -0
  93. package/dist/esm/api/routes/skills.js +316 -0
  94. package/dist/esm/api/routes/skills.js.map +1 -0
  95. package/dist/esm/api/server.js +179 -0
  96. package/dist/esm/api/server.js.map +1 -0
  97. package/dist/esm/api/types.js +9 -0
  98. package/dist/esm/api/types.js.map +1 -0
  99. package/dist/esm/assessment/adaptive.js +384 -0
  100. package/dist/esm/assessment/adaptive.js.map +1 -0
  101. package/dist/esm/assessment/bkt.js +354 -0
  102. package/dist/esm/assessment/bkt.js.map +1 -0
  103. package/dist/esm/assessment/index.js +21 -0
  104. package/dist/esm/assessment/index.js.map +1 -0
  105. package/dist/esm/assessment/irt.js +406 -0
  106. package/dist/esm/assessment/irt.js.map +1 -0
  107. package/dist/esm/assessment/mastery-engine.js +406 -0
  108. package/dist/esm/assessment/mastery-engine.js.map +1 -0
  109. package/dist/esm/components/LearningPathView.js +316 -0
  110. package/dist/esm/components/LearningPathView.js.map +1 -0
  111. package/dist/esm/components/ProgressDashboard.js +304 -0
  112. package/dist/esm/components/ProgressDashboard.js.map +1 -0
  113. package/dist/esm/components/SkillCard.js +260 -0
  114. package/dist/esm/components/SkillCard.js.map +1 -0
  115. package/dist/esm/components/SkillExplorer.js +397 -0
  116. package/dist/esm/components/SkillExplorer.js.map +1 -0
  117. package/dist/esm/components/SkillGraph.js +398 -0
  118. package/dist/esm/components/SkillGraph.js.map +1 -0
  119. package/dist/esm/components/hooks.js +502 -0
  120. package/dist/esm/components/hooks.js.map +1 -0
  121. package/dist/esm/components/index.js +61 -0
  122. package/dist/esm/components/index.js.map +1 -0
  123. package/dist/esm/components/types.js +31 -0
  124. package/dist/esm/components/types.js.map +1 -0
  125. package/dist/esm/index.js +12 -0
  126. package/dist/esm/index.js.map +1 -1
  127. package/dist/esm/llm/adapters/anthropic.js +88 -2
  128. package/dist/esm/llm/adapters/anthropic.js.map +1 -1
  129. package/dist/esm/llm/adapters/gemini.js +98 -7
  130. package/dist/esm/llm/adapters/gemini.js.map +1 -1
  131. package/dist/esm/llm/adapters/index.js +15 -4
  132. package/dist/esm/llm/adapters/index.js.map +1 -1
  133. package/dist/esm/llm/adapters/ollama.js +117 -2
  134. package/dist/esm/llm/adapters/ollama.js.map +1 -1
  135. package/dist/esm/llm/adapters/openai.js +105 -1
  136. package/dist/esm/llm/adapters/openai.js.map +1 -1
  137. package/dist/esm/mcp/cli.js +267 -0
  138. package/dist/esm/mcp/cli.js.map +1 -0
  139. package/dist/esm/mcp/index.js +39 -0
  140. package/dist/esm/mcp/index.js.map +1 -0
  141. package/dist/esm/mcp/prompts.js +419 -0
  142. package/dist/esm/mcp/prompts.js.map +1 -0
  143. package/dist/esm/mcp/resources.js +359 -0
  144. package/dist/esm/mcp/resources.js.map +1 -0
  145. package/dist/esm/mcp/server.js +372 -0
  146. package/dist/esm/mcp/server.js.map +1 -0
  147. package/dist/esm/mcp/tools.js +598 -0
  148. package/dist/esm/mcp/tools.js.map +1 -0
  149. package/dist/esm/mcp/types.js +9 -0
  150. package/dist/esm/mcp/types.js.map +1 -0
  151. package/dist/esm/types/assessment.js +40 -0
  152. package/dist/esm/types/assessment.js.map +1 -0
  153. package/dist/esm/types/bloom.js +11 -0
  154. package/dist/esm/types/bloom.js.map +1 -1
  155. package/dist/esm/types/index.js +2 -1
  156. package/dist/esm/types/index.js.map +1 -1
  157. package/dist/types/api/routes/analytics.d.ts +14 -0
  158. package/dist/types/api/routes/analytics.d.ts.map +1 -0
  159. package/dist/types/api/routes/assessments.d.ts +14 -0
  160. package/dist/types/api/routes/assessments.d.ts.map +1 -0
  161. package/dist/types/api/routes/curriculum.d.ts +14 -0
  162. package/dist/types/api/routes/curriculum.d.ts.map +1 -0
  163. package/dist/types/api/routes/edges.d.ts +14 -0
  164. package/dist/types/api/routes/edges.d.ts.map +1 -0
  165. package/dist/types/api/routes/explore.d.ts +14 -0
  166. package/dist/types/api/routes/explore.d.ts.map +1 -0
  167. package/dist/types/api/routes/learners.d.ts +14 -0
  168. package/dist/types/api/routes/learners.d.ts.map +1 -0
  169. package/dist/types/api/routes/me.d.ts +14 -0
  170. package/dist/types/api/routes/me.d.ts.map +1 -0
  171. package/dist/types/api/routes/skills.d.ts +14 -0
  172. package/dist/types/api/routes/skills.d.ts.map +1 -0
  173. package/dist/types/api/server.d.ts +147 -0
  174. package/dist/types/api/server.d.ts.map +1 -0
  175. package/dist/types/api/types.d.ts +443 -0
  176. package/dist/types/api/types.d.ts.map +1 -0
  177. package/dist/types/assessment/adaptive.d.ts +155 -0
  178. package/dist/types/assessment/adaptive.d.ts.map +1 -0
  179. package/dist/types/assessment/bkt.d.ts +185 -0
  180. package/dist/types/assessment/bkt.d.ts.map +1 -0
  181. package/dist/types/assessment/index.d.ts +18 -0
  182. package/dist/types/assessment/index.d.ts.map +1 -0
  183. package/dist/types/assessment/irt.d.ts +159 -0
  184. package/dist/types/assessment/irt.d.ts.map +1 -0
  185. package/dist/types/assessment/mastery-engine.d.ts +178 -0
  186. package/dist/types/assessment/mastery-engine.d.ts.map +1 -0
  187. package/dist/types/components/LearningPathView.d.ts +40 -0
  188. package/dist/types/components/LearningPathView.d.ts.map +1 -0
  189. package/dist/types/components/ProgressDashboard.d.ts +49 -0
  190. package/dist/types/components/ProgressDashboard.d.ts.map +1 -0
  191. package/dist/types/components/SkillCard.d.ts +34 -0
  192. package/dist/types/components/SkillCard.d.ts.map +1 -0
  193. package/dist/types/components/SkillExplorer.d.ts +39 -0
  194. package/dist/types/components/SkillExplorer.d.ts.map +1 -0
  195. package/dist/types/components/SkillGraph.d.ts +38 -0
  196. package/dist/types/components/SkillGraph.d.ts.map +1 -0
  197. package/dist/types/components/hooks.d.ts +187 -0
  198. package/dist/types/components/hooks.d.ts.map +1 -0
  199. package/dist/types/components/index.d.ts +59 -0
  200. package/dist/types/components/index.d.ts.map +1 -0
  201. package/dist/types/components/types.d.ts +410 -0
  202. package/dist/types/components/types.d.ts.map +1 -0
  203. package/dist/types/index.d.ts +1 -0
  204. package/dist/types/index.d.ts.map +1 -1
  205. package/dist/types/llm/adapters/anthropic.d.ts +84 -1
  206. package/dist/types/llm/adapters/anthropic.d.ts.map +1 -1
  207. package/dist/types/llm/adapters/gemini.d.ts +93 -6
  208. package/dist/types/llm/adapters/gemini.d.ts.map +1 -1
  209. package/dist/types/llm/adapters/index.d.ts +13 -4
  210. package/dist/types/llm/adapters/index.d.ts.map +1 -1
  211. package/dist/types/llm/adapters/ollama.d.ts +126 -1
  212. package/dist/types/llm/adapters/ollama.d.ts.map +1 -1
  213. package/dist/types/llm/adapters/openai.d.ts +104 -1
  214. package/dist/types/llm/adapters/openai.d.ts.map +1 -1
  215. package/dist/types/mcp/cli.d.ts +15 -0
  216. package/dist/types/mcp/cli.d.ts.map +1 -0
  217. package/dist/types/mcp/index.d.ts +32 -0
  218. package/dist/types/mcp/index.d.ts.map +1 -0
  219. package/dist/types/mcp/prompts.d.ts +27 -0
  220. package/dist/types/mcp/prompts.d.ts.map +1 -0
  221. package/dist/types/mcp/resources.d.ts +59 -0
  222. package/dist/types/mcp/resources.d.ts.map +1 -0
  223. package/dist/types/mcp/server.d.ts +136 -0
  224. package/dist/types/mcp/server.d.ts.map +1 -0
  225. package/dist/types/mcp/tools.d.ts +344 -0
  226. package/dist/types/mcp/tools.d.ts.map +1 -0
  227. package/dist/types/mcp/types.d.ts +137 -0
  228. package/dist/types/mcp/types.d.ts.map +1 -0
  229. package/dist/types/types/assessment.d.ts +512 -0
  230. package/dist/types/types/assessment.d.ts.map +1 -0
  231. package/dist/types/types/bloom.d.ts +4 -0
  232. package/dist/types/types/bloom.d.ts.map +1 -1
  233. package/dist/types/types/index.d.ts +3 -1
  234. package/dist/types/types/index.d.ts.map +1 -1
  235. package/package.json +48 -3
@@ -0,0 +1,401 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SkillExplorer = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ /**
6
+ * SkillExplorer Component
7
+ *
8
+ * Interactive skill browser with filtering and search.
9
+ *
10
+ * @packageDocumentation
11
+ */
12
+ const react_1 = require("react");
13
+ const types_js_1 = require("./types.js");
14
+ const FilterBar = ({ filters, availableTags, onChange, enableSearch, }) => {
15
+ const containerStyle = {
16
+ display: 'flex',
17
+ flexWrap: 'wrap',
18
+ gap: '12px',
19
+ padding: '16px',
20
+ backgroundColor: '#ffffff',
21
+ borderRadius: '12px',
22
+ border: '1px solid #e5e7eb',
23
+ marginBottom: '16px',
24
+ };
25
+ const inputStyle = {
26
+ flex: '1 1 200px',
27
+ padding: '8px 12px',
28
+ border: '1px solid #e5e7eb',
29
+ borderRadius: '8px',
30
+ fontSize: '14px',
31
+ outline: 'none',
32
+ };
33
+ const selectStyle = {
34
+ padding: '8px 12px',
35
+ border: '1px solid #e5e7eb',
36
+ borderRadius: '8px',
37
+ fontSize: '14px',
38
+ backgroundColor: '#ffffff',
39
+ outline: 'none',
40
+ cursor: 'pointer',
41
+ };
42
+ const bloomLevels = [
43
+ 'remember',
44
+ 'understand',
45
+ 'apply',
46
+ 'analyze',
47
+ 'evaluate',
48
+ 'create',
49
+ ];
50
+ return ((0, jsx_runtime_1.jsxs)("div", { style: containerStyle, children: [enableSearch && ((0, jsx_runtime_1.jsx)("input", { type: "text", placeholder: "Search skills...", value: filters.query || '', onChange: (e) => onChange({ ...filters, query: e.currentTarget.value }), style: inputStyle })), (0, jsx_runtime_1.jsxs)("select", { value: filters.bloomLevels?.[0] || '', onChange: (e) => onChange({
51
+ ...filters,
52
+ bloomLevels: e.currentTarget.value ? [e.currentTarget.value] : undefined,
53
+ }), style: selectStyle, children: [(0, jsx_runtime_1.jsx)("option", { value: "", children: "All Levels" }), bloomLevels.map((level) => ((0, jsx_runtime_1.jsx)("option", { value: level, children: level.charAt(0).toUpperCase() + level.slice(1) }, level)))] }), (0, jsx_runtime_1.jsxs)("select", { value: filters.tags?.[0] || '', onChange: (e) => onChange({
54
+ ...filters,
55
+ tags: e.currentTarget.value ? [e.currentTarget.value] : undefined,
56
+ }), style: selectStyle, children: [(0, jsx_runtime_1.jsx)("option", { value: "", children: "All Tags" }), availableTags.map((tag) => ((0, jsx_runtime_1.jsx)("option", { value: tag, children: tag }, tag)))] }), (0, jsx_runtime_1.jsxs)("select", { value: filters.masteryStatus || 'all', onChange: (e) => onChange({
57
+ ...filters,
58
+ masteryStatus: e.currentTarget.value,
59
+ }), style: selectStyle, children: [(0, jsx_runtime_1.jsx)("option", { value: "all", children: "All Status" }), (0, jsx_runtime_1.jsx)("option", { value: "mastered", children: "Mastered" }), (0, jsx_runtime_1.jsx)("option", { value: "available", children: "Available" }), (0, jsx_runtime_1.jsx)("option", { value: "locked", children: "Locked" })] }), (0, jsx_runtime_1.jsxs)("select", { value: filters.sortBy || 'name', onChange: (e) => onChange({
60
+ ...filters,
61
+ sortBy: e.currentTarget.value,
62
+ }), style: selectStyle, children: [(0, jsx_runtime_1.jsx)("option", { value: "name", children: "Sort by Name" }), (0, jsx_runtime_1.jsx)("option", { value: "bloomLevel", children: "Sort by Level" }), (0, jsx_runtime_1.jsx)("option", { value: "estimatedMinutes", children: "Sort by Time" })] })] }));
63
+ };
64
+ const ViewToggle = ({ viewMode, onChange }) => {
65
+ const containerStyle = {
66
+ display: 'flex',
67
+ gap: '4px',
68
+ padding: '4px',
69
+ backgroundColor: '#f3f4f6',
70
+ borderRadius: '8px',
71
+ };
72
+ const buttonStyle = (isActive) => ({
73
+ padding: '6px 12px',
74
+ backgroundColor: isActive ? '#ffffff' : 'transparent',
75
+ border: 'none',
76
+ borderRadius: '6px',
77
+ fontSize: '12px',
78
+ fontWeight: isActive ? 600 : 400,
79
+ color: isActive ? '#1f2937' : '#6b7280',
80
+ cursor: 'pointer',
81
+ boxShadow: isActive ? '0 1px 2px rgba(0,0,0,0.05)' : 'none',
82
+ transition: 'all 0.15s ease',
83
+ });
84
+ return ((0, jsx_runtime_1.jsxs)("div", { style: containerStyle, children: [(0, jsx_runtime_1.jsx)("button", { style: buttonStyle(viewMode === 'grid'), onClick: () => onChange('grid'), children: "Grid" }), (0, jsx_runtime_1.jsx)("button", { style: buttonStyle(viewMode === 'list'), onClick: () => onChange('list'), children: "List" }), (0, jsx_runtime_1.jsx)("button", { style: buttonStyle(viewMode === 'graph'), onClick: () => onChange('graph'), children: "Graph" })] }));
85
+ };
86
+ const GridSkillCard = ({ skill, isMastered, isAvailable, onClick, onSetGoal, }) => {
87
+ const status = isMastered ? 'mastered' : isAvailable ? 'available' : 'locked';
88
+ const statusColor = isMastered
89
+ ? types_js_1.STATUS_COLORS.mastered
90
+ : isAvailable
91
+ ? types_js_1.STATUS_COLORS.available
92
+ : types_js_1.STATUS_COLORS.locked;
93
+ const cardStyle = {
94
+ backgroundColor: '#ffffff',
95
+ borderRadius: '12px',
96
+ border: '1px solid #e5e7eb',
97
+ padding: '16px',
98
+ cursor: 'pointer',
99
+ transition: 'box-shadow 0.2s ease, transform 0.1s ease',
100
+ };
101
+ const headerStyle = {
102
+ display: 'flex',
103
+ justifyContent: 'space-between',
104
+ alignItems: 'flex-start',
105
+ marginBottom: '8px',
106
+ };
107
+ const titleStyle = {
108
+ fontSize: '14px',
109
+ fontWeight: 600,
110
+ color: '#1f2937',
111
+ margin: 0,
112
+ flex: 1,
113
+ };
114
+ const badgeStyle = {
115
+ padding: '2px 8px',
116
+ borderRadius: '9999px',
117
+ fontSize: '10px',
118
+ fontWeight: 500,
119
+ backgroundColor: statusColor,
120
+ color: status === 'locked' ? '#374151' : '#ffffff',
121
+ };
122
+ const descStyle = {
123
+ fontSize: '12px',
124
+ color: '#6b7280',
125
+ lineHeight: 1.5,
126
+ marginBottom: '8px',
127
+ display: '-webkit-box',
128
+ WebkitLineClamp: 2,
129
+ WebkitBoxOrient: 'vertical',
130
+ overflow: 'hidden',
131
+ };
132
+ const metaStyle = {
133
+ display: 'flex',
134
+ justifyContent: 'space-between',
135
+ alignItems: 'center',
136
+ marginTop: '12px',
137
+ paddingTop: '12px',
138
+ borderTop: '1px solid #f3f4f6',
139
+ };
140
+ const levelStyle = {
141
+ padding: '2px 8px',
142
+ borderRadius: '4px',
143
+ fontSize: '11px',
144
+ fontWeight: 500,
145
+ textTransform: 'capitalize',
146
+ backgroundColor: types_js_1.DEFAULT_BLOOM_COLORS[skill.bloomLevel],
147
+ color: '#ffffff',
148
+ };
149
+ const goalButtonStyle = {
150
+ padding: '4px 8px',
151
+ backgroundColor: 'transparent',
152
+ border: '1px solid #e5e7eb',
153
+ borderRadius: '4px',
154
+ fontSize: '11px',
155
+ color: '#6b7280',
156
+ cursor: 'pointer',
157
+ };
158
+ return ((0, jsx_runtime_1.jsxs)("div", { style: cardStyle, onClick: onClick, children: [(0, jsx_runtime_1.jsxs)("div", { style: headerStyle, children: [(0, jsx_runtime_1.jsx)("h4", { style: titleStyle, children: skill.name }), (0, jsx_runtime_1.jsx)("span", { style: badgeStyle, children: status.charAt(0).toUpperCase() + status.slice(1) })] }), skill.description && (0, jsx_runtime_1.jsx)("p", { style: descStyle, children: skill.description }), (0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', gap: '4px', flexWrap: 'wrap' }, children: skill.tags.slice(0, 3).map((tag) => ((0, jsx_runtime_1.jsx)("span", { style: {
159
+ padding: '2px 6px',
160
+ backgroundColor: '#f3f4f6',
161
+ borderRadius: '4px',
162
+ fontSize: '10px',
163
+ color: '#6b7280',
164
+ }, children: tag }, tag))) }), (0, jsx_runtime_1.jsxs)("div", { style: metaStyle, children: [(0, jsx_runtime_1.jsx)("span", { style: levelStyle, children: skill.bloomLevel }), (0, jsx_runtime_1.jsxs)("span", { style: { fontSize: '11px', color: '#6b7280' }, children: [skill.estimatedMinutes, " min"] }), onSetGoal && !isMastered && ((0, jsx_runtime_1.jsx)("button", { style: goalButtonStyle, onClick: (e) => {
165
+ e.stopPropagation();
166
+ onSetGoal();
167
+ }, children: "Set Goal" }))] })] }));
168
+ };
169
+ const ListSkillRow = ({ skill, isMastered, isAvailable, onClick, }) => {
170
+ const status = isMastered ? 'mastered' : isAvailable ? 'available' : 'locked';
171
+ const statusColor = isMastered
172
+ ? types_js_1.STATUS_COLORS.mastered
173
+ : isAvailable
174
+ ? types_js_1.STATUS_COLORS.available
175
+ : types_js_1.STATUS_COLORS.locked;
176
+ const rowStyle = {
177
+ display: 'flex',
178
+ alignItems: 'center',
179
+ padding: '12px 16px',
180
+ backgroundColor: '#ffffff',
181
+ borderBottom: '1px solid #f3f4f6',
182
+ cursor: 'pointer',
183
+ transition: 'background-color 0.15s ease',
184
+ };
185
+ const statusDotStyle = {
186
+ width: '10px',
187
+ height: '10px',
188
+ borderRadius: '50%',
189
+ backgroundColor: statusColor,
190
+ marginRight: '12px',
191
+ flexShrink: 0,
192
+ };
193
+ const nameStyle = {
194
+ flex: 1,
195
+ fontSize: '14px',
196
+ fontWeight: 500,
197
+ color: '#1f2937',
198
+ };
199
+ const levelStyle = {
200
+ padding: '2px 8px',
201
+ borderRadius: '4px',
202
+ fontSize: '11px',
203
+ fontWeight: 500,
204
+ textTransform: 'capitalize',
205
+ backgroundColor: types_js_1.DEFAULT_BLOOM_COLORS[skill.bloomLevel],
206
+ color: '#ffffff',
207
+ marginRight: '16px',
208
+ };
209
+ const timeStyle = {
210
+ fontSize: '12px',
211
+ color: '#6b7280',
212
+ width: '60px',
213
+ textAlign: 'right',
214
+ };
215
+ return ((0, jsx_runtime_1.jsxs)("div", { style: rowStyle, onClick: onClick, children: [(0, jsx_runtime_1.jsx)("div", { style: statusDotStyle }), (0, jsx_runtime_1.jsx)("span", { style: nameStyle, children: skill.name }), (0, jsx_runtime_1.jsx)("span", { style: levelStyle, children: skill.bloomLevel }), (0, jsx_runtime_1.jsxs)("span", { style: timeStyle, children: [skill.estimatedMinutes, " min"] })] }));
216
+ };
217
+ // ─────────────────────────────────────────────────────────────────────────────
218
+ // Main Component
219
+ // ─────────────────────────────────────────────────────────────────────────────
220
+ /**
221
+ * SkillExplorer Component
222
+ *
223
+ * Interactive browser for exploring and filtering skills.
224
+ *
225
+ * @example
226
+ * ```tsx
227
+ * import { SkillExplorer } from 'learngraph/components';
228
+ *
229
+ * function CurriculumBrowser() {
230
+ * const { skills, edges } = useLearnGraph();
231
+ *
232
+ * return (
233
+ * <SkillExplorer
234
+ * skills={skills}
235
+ * edges={edges}
236
+ * masteredSkillIds={['skill-1', 'skill-2']}
237
+ * viewMode="grid"
238
+ * enableSearch
239
+ * enableFilters
240
+ * onSkillSelect={(skill) => navigate(`/skill/${skill.id}`)}
241
+ * onSetGoal={(skill) => setLearningGoal(skill.id)}
242
+ * />
243
+ * );
244
+ * }
245
+ * ```
246
+ */
247
+ const SkillExplorer = ({ skills, edges, masteredSkillIds = [], availableTags: providedTags, initialFilters = {}, viewMode: initialViewMode = 'grid', onFiltersChange, onSkillSelect, onSetGoal, enableSearch = true, enableFilters = true, enableViewToggle = true, className, style, }) => {
248
+ const [filters, setFilters] = (0, react_1.useState)(initialFilters);
249
+ const [viewMode, setViewMode] = (0, react_1.useState)(initialViewMode);
250
+ const masteredSet = (0, react_1.useMemo)(() => new Set(masteredSkillIds), [masteredSkillIds]);
251
+ // Build prerequisite map
252
+ const prereqMap = (0, react_1.useMemo)(() => {
253
+ const map = new Map();
254
+ for (const edge of edges) {
255
+ const targetId = String(edge.targetId);
256
+ const sourceId = String(edge.sourceId);
257
+ if (!map.has(targetId)) {
258
+ map.set(targetId, new Set());
259
+ }
260
+ map.get(targetId).add(sourceId);
261
+ }
262
+ return map;
263
+ }, [edges]);
264
+ // Check if skill is available
265
+ const isAvailable = (0, react_1.useCallback)((skillId) => {
266
+ if (masteredSet.has(skillId))
267
+ return false;
268
+ const prereqs = prereqMap.get(skillId);
269
+ if (!prereqs || prereqs.size === 0)
270
+ return true;
271
+ return Array.from(prereqs).every((id) => masteredSet.has(id));
272
+ }, [prereqMap, masteredSet]);
273
+ // Collect available tags
274
+ const availableTags = (0, react_1.useMemo)(() => {
275
+ if (providedTags)
276
+ return providedTags;
277
+ const tagSet = new Set();
278
+ for (const skill of skills) {
279
+ for (const tag of skill.tags) {
280
+ tagSet.add(tag);
281
+ }
282
+ }
283
+ return Array.from(tagSet).sort();
284
+ }, [skills, providedTags]);
285
+ // Filter and sort skills
286
+ const filteredSkills = (0, react_1.useMemo)(() => {
287
+ let result = [...skills];
288
+ // Text search
289
+ if (filters.query) {
290
+ const lowerQuery = filters.query.toLowerCase();
291
+ result = result.filter((skill) => skill.name.toLowerCase().includes(lowerQuery) ||
292
+ (skill.description?.toLowerCase().includes(lowerQuery) ?? false) ||
293
+ skill.tags.some((tag) => tag.toLowerCase().includes(lowerQuery)));
294
+ }
295
+ // Bloom level filter
296
+ if (filters.bloomLevels && filters.bloomLevels.length > 0) {
297
+ result = result.filter((skill) => filters.bloomLevels.includes(skill.bloomLevel));
298
+ }
299
+ // Tag filter
300
+ if (filters.tags && filters.tags.length > 0) {
301
+ result = result.filter((skill) => skill.tags.some((tag) => filters.tags.includes(tag)));
302
+ }
303
+ // Mastery status filter
304
+ if (filters.masteryStatus && filters.masteryStatus !== 'all') {
305
+ result = result.filter((skill) => {
306
+ const skillId = String(skill.id);
307
+ const isMastered = masteredSet.has(skillId);
308
+ const available = isAvailable(skillId);
309
+ switch (filters.masteryStatus) {
310
+ case 'mastered':
311
+ return isMastered;
312
+ case 'available':
313
+ return !isMastered && available;
314
+ case 'locked':
315
+ return !isMastered && !available;
316
+ default:
317
+ return true;
318
+ }
319
+ });
320
+ }
321
+ // Sort
322
+ const sortBy = filters.sortBy || 'name';
323
+ const sortDir = filters.sortDirection || 'asc';
324
+ result.sort((a, b) => {
325
+ let comparison = 0;
326
+ switch (sortBy) {
327
+ case 'name':
328
+ comparison = a.name.localeCompare(b.name);
329
+ break;
330
+ case 'bloomLevel':
331
+ const levels = [
332
+ 'remember',
333
+ 'understand',
334
+ 'apply',
335
+ 'analyze',
336
+ 'evaluate',
337
+ 'create',
338
+ ];
339
+ comparison =
340
+ levels.indexOf(a.bloomLevel) - levels.indexOf(b.bloomLevel);
341
+ break;
342
+ case 'estimatedMinutes':
343
+ comparison = a.estimatedMinutes - b.estimatedMinutes;
344
+ break;
345
+ }
346
+ return sortDir === 'desc' ? -comparison : comparison;
347
+ });
348
+ return result;
349
+ }, [skills, filters, masteredSet, isAvailable]);
350
+ const handleFiltersChange = (0, react_1.useCallback)((newFilters) => {
351
+ setFilters(newFilters);
352
+ onFiltersChange?.(newFilters);
353
+ }, [onFiltersChange]);
354
+ const containerStyle = {
355
+ ...style,
356
+ };
357
+ const headerStyle = {
358
+ display: 'flex',
359
+ justifyContent: 'space-between',
360
+ alignItems: 'center',
361
+ marginBottom: '16px',
362
+ };
363
+ const countStyle = {
364
+ fontSize: '14px',
365
+ color: '#6b7280',
366
+ };
367
+ const gridStyle = {
368
+ display: 'grid',
369
+ gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))',
370
+ gap: '16px',
371
+ };
372
+ const listStyle = {
373
+ backgroundColor: '#ffffff',
374
+ borderRadius: '12px',
375
+ border: '1px solid #e5e7eb',
376
+ overflow: 'hidden',
377
+ };
378
+ return ((0, jsx_runtime_1.jsxs)("div", { className: className, style: containerStyle, children: [enableFilters && ((0, jsx_runtime_1.jsx)(FilterBar, { filters: filters, availableTags: availableTags, onChange: handleFiltersChange, enableSearch: enableSearch })), (0, jsx_runtime_1.jsxs)("div", { style: headerStyle, children: [(0, jsx_runtime_1.jsxs)("span", { style: countStyle, children: ["Showing ", filteredSkills.length, " of ", skills.length, " skills"] }), enableViewToggle && ((0, jsx_runtime_1.jsx)(ViewToggle, { viewMode: viewMode, onChange: setViewMode }))] }), viewMode === 'grid' && ((0, jsx_runtime_1.jsx)("div", { style: gridStyle, children: filteredSkills.map((skill) => ((0, jsx_runtime_1.jsx)(GridSkillCard, { skill: skill, isMastered: masteredSet.has(String(skill.id)), isAvailable: isAvailable(String(skill.id)), onClick: () => onSkillSelect?.(skill), onSetGoal: onSetGoal ? () => onSetGoal(skill) : undefined }, String(skill.id)))) })), viewMode === 'list' && ((0, jsx_runtime_1.jsx)("div", { style: listStyle, children: filteredSkills.map((skill) => ((0, jsx_runtime_1.jsx)(ListSkillRow, { skill: skill, isMastered: masteredSet.has(String(skill.id)), isAvailable: isAvailable(String(skill.id)), onClick: () => onSkillSelect?.(skill) }, String(skill.id)))) })), viewMode === 'graph' && ((0, jsx_runtime_1.jsxs)("div", { style: {
379
+ padding: '40px',
380
+ textAlign: 'center',
381
+ color: '#6b7280',
382
+ backgroundColor: '#f9fafb',
383
+ borderRadius: '12px',
384
+ border: '1px solid #e5e7eb',
385
+ }, children: [(0, jsx_runtime_1.jsx)("p", { children: "Graph view requires the SkillGraph component." }), (0, jsx_runtime_1.jsx)("p", { style: { fontSize: '12px' }, children: "Use the SkillGraph component directly for graph visualization." })] })), filteredSkills.length === 0 && ((0, jsx_runtime_1.jsxs)("div", { style: {
386
+ padding: '40px',
387
+ textAlign: 'center',
388
+ color: '#6b7280',
389
+ }, children: [(0, jsx_runtime_1.jsx)("p", { children: "No skills match your filters." }), (0, jsx_runtime_1.jsx)("button", { style: {
390
+ marginTop: '12px',
391
+ padding: '8px 16px',
392
+ backgroundColor: '#3b82f6',
393
+ color: '#ffffff',
394
+ border: 'none',
395
+ borderRadius: '6px',
396
+ cursor: 'pointer',
397
+ }, onClick: () => handleFiltersChange({}), children: "Clear Filters" })] }))] }));
398
+ };
399
+ exports.SkillExplorer = SkillExplorer;
400
+ exports.default = exports.SkillExplorer;
401
+ //# sourceMappingURL=SkillExplorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillExplorer.js","sourceRoot":"","sources":["../../../src/components/SkillExplorer.tsx"],"names":[],"mappings":"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"}