coursecode 0.1.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 (362) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +322 -0
  3. package/THIRD_PARTY_NOTICES.md +22 -0
  4. package/bin/cli.js +331 -0
  5. package/framework/assets/logo-coursecode-black.svg +14 -0
  6. package/framework/assets/logo-coursecode-white.svg +14 -0
  7. package/framework/assets/logo-coursecode.svg +14 -0
  8. package/framework/css/01-base.css +160 -0
  9. package/framework/css/02-layout.css +499 -0
  10. package/framework/css/accessibility.css +834 -0
  11. package/framework/css/components/accordions.css +710 -0
  12. package/framework/css/components/assessments.css +520 -0
  13. package/framework/css/components/audio-player.css +570 -0
  14. package/framework/css/components/badges.css +80 -0
  15. package/framework/css/components/breadcrumbs.css +87 -0
  16. package/framework/css/components/buttons.css +707 -0
  17. package/framework/css/components/callouts.css +1280 -0
  18. package/framework/css/components/cards.css +475 -0
  19. package/framework/css/components/carousel.css +193 -0
  20. package/framework/css/components/checkbox-group.css +123 -0
  21. package/framework/css/components/checklist.css +203 -0
  22. package/framework/css/components/collapse.css +96 -0
  23. package/framework/css/components/comparison.css +33 -0
  24. package/framework/css/components/content-image.css +36 -0
  25. package/framework/css/components/document-gallery.css +425 -0
  26. package/framework/css/components/dropdown.css +115 -0
  27. package/framework/css/components/embed-frame.css +142 -0
  28. package/framework/css/components/engagement.css +412 -0
  29. package/framework/css/components/features.css +35 -0
  30. package/framework/css/components/flip-cards.css +253 -0
  31. package/framework/css/components/footer.css +353 -0
  32. package/framework/css/components/forms.css +294 -0
  33. package/framework/css/components/hero.css +216 -0
  34. package/framework/css/components/images.css +528 -0
  35. package/framework/css/components/interactive-timeline.css +274 -0
  36. package/framework/css/components/intro-cards.css +30 -0
  37. package/framework/css/components/lightbox.css +666 -0
  38. package/framework/css/components/loading.css +65 -0
  39. package/framework/css/components/modals.css +235 -0
  40. package/framework/css/components/notifications.css +107 -0
  41. package/framework/css/components/quote.css +150 -0
  42. package/framework/css/components/sidebar.css +684 -0
  43. package/framework/css/components/slide-header.css +52 -0
  44. package/framework/css/components/spinner.css +62 -0
  45. package/framework/css/components/stats.css +44 -0
  46. package/framework/css/components/steps.css +232 -0
  47. package/framework/css/components/tables.css +90 -0
  48. package/framework/css/components/tabs.css +347 -0
  49. package/framework/css/components/timeline.css +154 -0
  50. package/framework/css/components/toggle.css +95 -0
  51. package/framework/css/components/tooltip.css +226 -0
  52. package/framework/css/components/video-player.css +438 -0
  53. package/framework/css/design-tokens.css +707 -0
  54. package/framework/css/framework.css +86 -0
  55. package/framework/css/interactions/accessibility.css +75 -0
  56. package/framework/css/interactions/base.css +92 -0
  57. package/framework/css/interactions/drag-drop.css +295 -0
  58. package/framework/css/interactions/fill-in-the-blank.css +236 -0
  59. package/framework/css/interactions/hotspots.css +69 -0
  60. package/framework/css/interactions/index.css +45 -0
  61. package/framework/css/interactions/interactive-image.css +359 -0
  62. package/framework/css/interactions/likert.css +126 -0
  63. package/framework/css/interactions/matching.css +354 -0
  64. package/framework/css/interactions/numeric-input.css +78 -0
  65. package/framework/css/interactions/sequencing.css +378 -0
  66. package/framework/css/interactions/true-false.css +177 -0
  67. package/framework/css/layouts/article.css +258 -0
  68. package/framework/css/layouts/base.css +30 -0
  69. package/framework/css/layouts/canvas.css +38 -0
  70. package/framework/css/layouts/focused.css +236 -0
  71. package/framework/css/layouts/index.css +29 -0
  72. package/framework/css/layouts/presentation.css +191 -0
  73. package/framework/css/layouts/traditional.css +52 -0
  74. package/framework/css/responsive.css +439 -0
  75. package/framework/css/utilities/accessibility-utils.css +59 -0
  76. package/framework/css/utilities/animations.css +419 -0
  77. package/framework/css/utilities/borders.css +72 -0
  78. package/framework/css/utilities/colors.css +76 -0
  79. package/framework/css/utilities/container.css +46 -0
  80. package/framework/css/utilities/decorative.css +442 -0
  81. package/framework/css/utilities/display.css +257 -0
  82. package/framework/css/utilities/flexbox.css +80 -0
  83. package/framework/css/utilities/grid.css +69 -0
  84. package/framework/css/utilities/icons.css +534 -0
  85. package/framework/css/utilities/lists.css +190 -0
  86. package/framework/css/utilities/spacing.css +167 -0
  87. package/framework/css/utilities/tables.css +81 -0
  88. package/framework/css/utilities/typography.css +159 -0
  89. package/framework/css/utilities/visibility.css +117 -0
  90. package/framework/docs/COURSE_AUTHORING_GUIDE.md +1773 -0
  91. package/framework/docs/COURSE_OUTLINE_GUIDE.md +725 -0
  92. package/framework/docs/COURSE_OUTLINE_TEMPLATE.md +161 -0
  93. package/framework/docs/DATA_MODEL.md +409 -0
  94. package/framework/docs/FRAMEWORK_GUIDE.md +1088 -0
  95. package/framework/docs/USER_GUIDE.md +583 -0
  96. package/framework/docs/examples/cloudflare-channel-relay.js +169 -0
  97. package/framework/docs/examples/cloudflare-data-worker.js +102 -0
  98. package/framework/docs/examples/cloudflare-error-worker.js +228 -0
  99. package/framework/index.html +175 -0
  100. package/framework/js/app/AppActions.js +410 -0
  101. package/framework/js/app/AppState.js +225 -0
  102. package/framework/js/app/AppUI.js +616 -0
  103. package/framework/js/assessment/AssessmentActions.js +615 -0
  104. package/framework/js/assessment/AssessmentFactory.js +471 -0
  105. package/framework/js/assessment/AssessmentState.js +322 -0
  106. package/framework/js/assessment/AssessmentUI.js +451 -0
  107. package/framework/js/automation/api-engagement.js +196 -0
  108. package/framework/js/automation/api-interactions.js +167 -0
  109. package/framework/js/automation/api.js +242 -0
  110. package/framework/js/automation/index.js +41 -0
  111. package/framework/js/components/interactions/drag-drop.js +884 -0
  112. package/framework/js/components/interactions/fill-in.js +535 -0
  113. package/framework/js/components/interactions/hotspot.js +702 -0
  114. package/framework/js/components/interactions/interaction-base.js +511 -0
  115. package/framework/js/components/interactions/likert.js +301 -0
  116. package/framework/js/components/interactions/matching.js +699 -0
  117. package/framework/js/components/interactions/multiple-choice.js +377 -0
  118. package/framework/js/components/interactions/numeric.js +271 -0
  119. package/framework/js/components/interactions/sequencing.js +423 -0
  120. package/framework/js/components/interactions/true-false.js +241 -0
  121. package/framework/js/components/ui-components/accordion.js +442 -0
  122. package/framework/js/components/ui-components/alert.js +88 -0
  123. package/framework/js/components/ui-components/audio-player.js +1193 -0
  124. package/framework/js/components/ui-components/callout.js +121 -0
  125. package/framework/js/components/ui-components/carousel.js +145 -0
  126. package/framework/js/components/ui-components/checkbox-group.js +87 -0
  127. package/framework/js/components/ui-components/checklist.js +40 -0
  128. package/framework/js/components/ui-components/collapse.js +114 -0
  129. package/framework/js/components/ui-components/comparison.js +30 -0
  130. package/framework/js/components/ui-components/conditional-display.js +150 -0
  131. package/framework/js/components/ui-components/content-image.js +41 -0
  132. package/framework/js/components/ui-components/dropdown.js +262 -0
  133. package/framework/js/components/ui-components/embed-frame.js +274 -0
  134. package/framework/js/components/ui-components/features.js +33 -0
  135. package/framework/js/components/ui-components/flip-card.js +230 -0
  136. package/framework/js/components/ui-components/form-validator.js +76 -0
  137. package/framework/js/components/ui-components/hero.js +49 -0
  138. package/framework/js/components/ui-components/index.js +12 -0
  139. package/framework/js/components/ui-components/interactive-image.js +235 -0
  140. package/framework/js/components/ui-components/interactive-timeline.js +285 -0
  141. package/framework/js/components/ui-components/intro-cards.js +35 -0
  142. package/framework/js/components/ui-components/lightbox.js +652 -0
  143. package/framework/js/components/ui-components/modal.js +386 -0
  144. package/framework/js/components/ui-components/notifications.js +145 -0
  145. package/framework/js/components/ui-components/progress.js +88 -0
  146. package/framework/js/components/ui-components/quote.js +41 -0
  147. package/framework/js/components/ui-components/stats.js +33 -0
  148. package/framework/js/components/ui-components/steps.js +41 -0
  149. package/framework/js/components/ui-components/tabs.js +255 -0
  150. package/framework/js/components/ui-components/timeline.js +42 -0
  151. package/framework/js/components/ui-components/toggle-group.js +73 -0
  152. package/framework/js/components/ui-components/tooltip.js +458 -0
  153. package/framework/js/components/ui-components/value-display.js +133 -0
  154. package/framework/js/components/ui-components/video-player.js +686 -0
  155. package/framework/js/core/component-catalog.js +121 -0
  156. package/framework/js/core/event-bus.js +178 -0
  157. package/framework/js/core/interaction-catalog.js +149 -0
  158. package/framework/js/dev/runtime-linter.js +1725 -0
  159. package/framework/js/drivers/cmi5-driver.js +768 -0
  160. package/framework/js/drivers/driver-factory.js +77 -0
  161. package/framework/js/drivers/driver-interface.js +110 -0
  162. package/framework/js/drivers/http-driver-base.js +241 -0
  163. package/framework/js/drivers/lti-driver.js +508 -0
  164. package/framework/js/drivers/proxy-driver.js +444 -0
  165. package/framework/js/drivers/scorm-12-driver.js +560 -0
  166. package/framework/js/drivers/scorm-2004-driver.js +775 -0
  167. package/framework/js/drivers/scorm-driver-base.js +112 -0
  168. package/framework/js/engagement/engagement-manager.js +404 -0
  169. package/framework/js/engagement/engagement-progress.js +191 -0
  170. package/framework/js/engagement/engagement-trackers.js +215 -0
  171. package/framework/js/engagement/requirement-strategies.js +268 -0
  172. package/framework/js/main.js +727 -0
  173. package/framework/js/managers/accessibility-manager.js +499 -0
  174. package/framework/js/managers/assessment-manager.js +230 -0
  175. package/framework/js/managers/audio-manager.js +944 -0
  176. package/framework/js/managers/comment-manager.js +88 -0
  177. package/framework/js/managers/flag-manager.js +86 -0
  178. package/framework/js/managers/interaction-manager.js +254 -0
  179. package/framework/js/managers/interaction-registry.js +96 -0
  180. package/framework/js/managers/objective-manager.js +423 -0
  181. package/framework/js/managers/score-manager.js +441 -0
  182. package/framework/js/managers/video-manager.js +536 -0
  183. package/framework/js/navigation/Breadcrumbs.js +234 -0
  184. package/framework/js/navigation/NavigationActions.js +1132 -0
  185. package/framework/js/navigation/NavigationState.js +276 -0
  186. package/framework/js/navigation/NavigationUI.js +574 -0
  187. package/framework/js/navigation/document-gallery.js +357 -0
  188. package/framework/js/navigation/navigation-helpers.js +175 -0
  189. package/framework/js/navigation/navigation-validators.js +174 -0
  190. package/framework/js/state/index.js +8 -0
  191. package/framework/js/state/lms-connection.js +482 -0
  192. package/framework/js/state/lms-error-utils.js +58 -0
  193. package/framework/js/state/state-commits.js +200 -0
  194. package/framework/js/state/state-domains.js +86 -0
  195. package/framework/js/state/state-manager.js +502 -0
  196. package/framework/js/state/state-validation.js +311 -0
  197. package/framework/js/state/transaction-log.js +41 -0
  198. package/framework/js/state/xapi-statement-service.js +325 -0
  199. package/framework/js/utilities/access-control.js +99 -0
  200. package/framework/js/utilities/breakpoint-manager.js +315 -0
  201. package/framework/js/utilities/canvas-slide.js +35 -0
  202. package/framework/js/utilities/conditional-display.js +388 -0
  203. package/framework/js/utilities/course-channel.js +214 -0
  204. package/framework/js/utilities/course-helpers.js +420 -0
  205. package/framework/js/utilities/data-reporter.js +273 -0
  206. package/framework/js/utilities/error-reporter.js +313 -0
  207. package/framework/js/utilities/hotspot-helper.js +341 -0
  208. package/framework/js/utilities/icons.js +348 -0
  209. package/framework/js/utilities/logger.js +92 -0
  210. package/framework/js/utilities/markdown-renderer.js +45 -0
  211. package/framework/js/utilities/scroll-tracker.js +68 -0
  212. package/framework/js/utilities/ui-initializer.js +146 -0
  213. package/framework/js/utilities/utilities.js +293 -0
  214. package/framework/js/utilities/view-manager.js +227 -0
  215. package/framework/js/validation/html-validators.js +422 -0
  216. package/framework/js/validation/scorm-validators.js +438 -0
  217. package/framework/js/vendor/pipwerks.js +931 -0
  218. package/framework/scripts/generate-narration.js +629 -0
  219. package/framework/scripts/tts-providers/azure-provider.js +178 -0
  220. package/framework/scripts/tts-providers/base-provider.js +81 -0
  221. package/framework/scripts/tts-providers/deepgram-provider.js +135 -0
  222. package/framework/scripts/tts-providers/elevenlabs-provider.js +148 -0
  223. package/framework/scripts/tts-providers/google-provider.js +272 -0
  224. package/framework/scripts/tts-providers/index.js +158 -0
  225. package/framework/scripts/tts-providers/openai-provider.js +143 -0
  226. package/framework/version.json +63 -0
  227. package/lib/authoring-api.js +919 -0
  228. package/lib/build-linter.js +450 -0
  229. package/lib/build-packaging.js +186 -0
  230. package/lib/build.js +88 -0
  231. package/lib/cloud.js +691 -0
  232. package/lib/convert.js +341 -0
  233. package/lib/course-parser.js +936 -0
  234. package/lib/course-writer.js +258 -0
  235. package/lib/create.js +248 -0
  236. package/lib/css-index.js +237 -0
  237. package/lib/dev.js +51 -0
  238. package/lib/export-content.js +1246 -0
  239. package/lib/headless-browser.js +413 -0
  240. package/lib/import.js +377 -0
  241. package/lib/index.js +80 -0
  242. package/lib/info.js +79 -0
  243. package/lib/interaction-formatters.js +568 -0
  244. package/lib/manifest/cmi5-manifest.js +63 -0
  245. package/lib/manifest/lti-tool-config.js +53 -0
  246. package/lib/manifest/manifest-factory.js +99 -0
  247. package/lib/manifest/scorm-12-manifest.js +61 -0
  248. package/lib/manifest/scorm-2004-manifest.js +94 -0
  249. package/lib/manifest/scorm-proxy-manifest.js +104 -0
  250. package/lib/manifest-parser.js +96 -0
  251. package/lib/mcp-prompts.js +753 -0
  252. package/lib/mcp-server.js +316 -0
  253. package/lib/narration.js +53 -0
  254. package/lib/pdf-structure.js +142 -0
  255. package/lib/preview-export.js +231 -0
  256. package/lib/preview-routes-api.js +662 -0
  257. package/lib/preview-routes-editing.js +159 -0
  258. package/lib/preview-routes-lms.js +230 -0
  259. package/lib/preview-server.js +564 -0
  260. package/lib/project-utils.js +269 -0
  261. package/lib/proxy-templates/proxy.html +68 -0
  262. package/lib/proxy-templates/scorm-bridge.js +112 -0
  263. package/lib/scaffold.js +193 -0
  264. package/lib/schema-extractor.js +361 -0
  265. package/lib/slide-source-editor.js +586 -0
  266. package/lib/stub-player/app-viewer.js +195 -0
  267. package/lib/stub-player/app.js +370 -0
  268. package/lib/stub-player/catalog-panel.js +312 -0
  269. package/lib/stub-player/config-panel.js +1303 -0
  270. package/lib/stub-player/content-generator.js +586 -0
  271. package/lib/stub-player/content-viewer.js +173 -0
  272. package/lib/stub-player/debug-panel.js +420 -0
  273. package/lib/stub-player/edit-mode.js +922 -0
  274. package/lib/stub-player/edit-utils.js +400 -0
  275. package/lib/stub-player/header-bar.js +354 -0
  276. package/lib/stub-player/interaction-editor.js +210 -0
  277. package/lib/stub-player/interactions-panel.js +565 -0
  278. package/lib/stub-player/lms-api.js +1094 -0
  279. package/lib/stub-player/login-screen.js +74 -0
  280. package/lib/stub-player/outline-mode.js +689 -0
  281. package/lib/stub-player/styles/_assessments-panel.css +245 -0
  282. package/lib/stub-player/styles/_base.css +89 -0
  283. package/lib/stub-player/styles/_catalog-icons.css +96 -0
  284. package/lib/stub-player/styles/_catalog-panel.css +291 -0
  285. package/lib/stub-player/styles/_config-panel.css +636 -0
  286. package/lib/stub-player/styles/_content-viewer.css +834 -0
  287. package/lib/stub-player/styles/_debug-panel.css +576 -0
  288. package/lib/stub-player/styles/_edit-mode.css +128 -0
  289. package/lib/stub-player/styles/_header-bar.css +343 -0
  290. package/lib/stub-player/styles/_interaction-editor.css +140 -0
  291. package/lib/stub-player/styles/_interactions-panel.css +1038 -0
  292. package/lib/stub-player/styles/_login-screen.css +102 -0
  293. package/lib/stub-player/styles/_outline-mode.css +752 -0
  294. package/lib/stub-player/styles.css +15 -0
  295. package/lib/stub-player.js +160 -0
  296. package/lib/test-data-reporting.js +176 -0
  297. package/lib/test-error-reporting.js +146 -0
  298. package/lib/token.js +86 -0
  299. package/lib/upgrade.js +257 -0
  300. package/lib/validation-rules.js +517 -0
  301. package/lib/vite-plugin-content-discovery.js +296 -0
  302. package/package.json +108 -0
  303. package/schemas/XMLSchema.dtd +402 -0
  304. package/schemas/adlcp_v1p3.xsd +111 -0
  305. package/schemas/adlnav_v1p3.xsd +61 -0
  306. package/schemas/adlseq_v1p3.xsd +93 -0
  307. package/schemas/common/anyElement.xsd +27 -0
  308. package/schemas/common/dataTypes.xsd +138 -0
  309. package/schemas/common/elementNames.xsd +767 -0
  310. package/schemas/common/elementTypes.xsd +786 -0
  311. package/schemas/common/rootElement.xsd +31 -0
  312. package/schemas/common/vocabTypes.xsd +345 -0
  313. package/schemas/common/vocabValues.xsd +257 -0
  314. package/schemas/datatypes.dtd +203 -0
  315. package/schemas/ims_xml.xsd +35 -0
  316. package/schemas/imscp_v1p1.xsd +368 -0
  317. package/schemas/imsss_v1p0.xsd +67 -0
  318. package/schemas/imsss_v1p0auxresource.xsd +19 -0
  319. package/schemas/imsss_v1p0control.xsd +20 -0
  320. package/schemas/imsss_v1p0delivery.xsd +17 -0
  321. package/schemas/imsss_v1p0limit.xsd +47 -0
  322. package/schemas/imsss_v1p0objective.xsd +67 -0
  323. package/schemas/imsss_v1p0random.xsd +16 -0
  324. package/schemas/imsss_v1p0rollup.xsd +46 -0
  325. package/schemas/imsss_v1p0seqrule.xsd +108 -0
  326. package/schemas/imsss_v1p0util.xsd +94 -0
  327. package/schemas/license.txt +17 -0
  328. package/schemas/lom.xsd +102 -0
  329. package/schemas/lomCustom.xsd +62 -0
  330. package/schemas/lomLoose.xsd +62 -0
  331. package/schemas/lomStrict.xsd +62 -0
  332. package/schemas/xml.xsd +81 -0
  333. package/template/.env.example +92 -0
  334. package/template/course/assets/audio/example-intro.mp3 +0 -0
  335. package/template/course/assets/audio/example-ui-demo--compact-player.mp3 +0 -0
  336. package/template/course/assets/audio/example-ui-demo--demo-modal.mp3 +0 -0
  337. package/template/course/assets/audio/example-ui-demo--full-player.mp3 +0 -0
  338. package/template/course/assets/docs/example_md_1.md +39 -0
  339. package/template/course/assets/docs/example_md_2.md +41 -0
  340. package/template/course/assets/docs/example_pdf_1_thumbnail.png +0 -0
  341. package/template/course/assets/docs/example_pdf_2.pdf +0 -0
  342. package/template/course/assets/images/course-architecture.svg +36 -0
  343. package/template/course/assets/images/logo.svg +14 -0
  344. package/template/course/assets/widgets/counter-demo.html +190 -0
  345. package/template/course/assets/widgets/gravity-painter.html +384 -0
  346. package/template/course/course-config.js +539 -0
  347. package/template/course/icons.js +19 -0
  348. package/template/course/interactions/PLUGIN_GUIDE.md +97 -0
  349. package/template/course/slides/example-course-structure.js +138 -0
  350. package/template/course/slides/example-final-exam.js +144 -0
  351. package/template/course/slides/example-finishing.js +127 -0
  352. package/template/course/slides/example-interactions-showcase.js +615 -0
  353. package/template/course/slides/example-preview-tour.js +129 -0
  354. package/template/course/slides/example-remedial.js +143 -0
  355. package/template/course/slides/example-summary.js +103 -0
  356. package/template/course/slides/example-ui-showcase.js +1805 -0
  357. package/template/course/slides/example-welcome.js +123 -0
  358. package/template/course/slides/example-workflow.js +140 -0
  359. package/template/course/theme.css +165 -0
  360. package/template/eslint.config.js +47 -0
  361. package/template/package.json +28 -0
  362. package/template/vite.config.js +339 -0
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Welcome slide - Introduction to CourseCode for non-developers
3
+ * A stunning, professional welcome experience with modern design
4
+ */
5
+
6
+ const { NavigationActions, iconManager } = CourseCode;
7
+
8
+ export const slide = {
9
+ render(_root, _context) {
10
+ const container = document.createElement('div');
11
+ container.innerHTML = `
12
+ <div class="stack-lg" data-content-width="wide">
13
+
14
+ <!-- Hero Section -->
15
+ <div data-component="hero" class="hero-gradient hero-full-bleed hero-flush-top animate-fade-in" style="--hero-start: var(--color-primary); --hero-end: var(--color-gray-700);">
16
+ <div class="hero-content">
17
+ <span class="hero-badge hero-badge-borderless animate-fade-up delay-200" style="background: var(--palette-orange); color: black;">${iconManager.getIcon('sparkles', { size: 'sm' })} AI-Powered Course Creation</span>
18
+ <h1 class="hero-title animate-fade-up delay-300">Welcome to <span class="text-gradient">CourseCode</span></h1>
19
+ <p class="hero-subtitle animate-fade-up delay-400">Build interactive e-learning courses with AI assistance. No coding required.</p>
20
+ </div>
21
+ </div>
22
+
23
+ <!-- Feature Cards -->
24
+ <section data-component="features">
25
+ <div class="feature-item animate-fade-up delay-200">
26
+ <div class="icon-circle icon-bg-primary mb-3" style="padding: 1.25rem;">
27
+ ${iconManager.getIcon('zap', { size: '3xl', class: 'icon-primary' })}
28
+ </div>
29
+ <h3 class="font-semibold">AI-Powered</h3>
30
+ <p class="text-primary">Describe what you want, and your AI assistant builds it. Focus on content, not code.</p>
31
+ </div>
32
+ <div class="feature-item animate-fade-up delay-300">
33
+ <div class="icon-circle icon-bg-accent mb-3" style="padding: 1.25rem;">
34
+ ${iconManager.getIcon('upload', { size: '3xl', class: 'icon-accent' })}
35
+ </div>
36
+ <h3 class="font-semibold">Use Your Content</h3>
37
+ <p class="text-primary">Convert PowerPoints, Word docs, and PDFs into interactive courses automatically.</p>
38
+ </div>
39
+ <div class="feature-item animate-fade-up delay-400">
40
+ <div class="icon-circle icon-bg-success mb-3" style="padding: 1.25rem;">
41
+ ${iconManager.getIcon('check-circle', { size: '3xl', class: 'icon-success' })}
42
+ </div>
43
+ <h3 class="font-semibold">LMS Ready</h3>
44
+ <p class="text-primary">Export your course as a single ZIP file that works with any standards-compliant LMS.</p>
45
+ </div>
46
+ </section>
47
+
48
+ <!-- Who is this for -->
49
+ <section class="card card-elevated animate-fade-up delay-500">
50
+ <div class="card-header">
51
+ <h2 class="flex items-center gap-2">
52
+ ${iconManager.getIcon('users', { size: 'lg', class: 'icon-primary' })}
53
+ <span>Who is CourseCode for?</span>
54
+ </h2>
55
+ </div>
56
+ <div class="card-body">
57
+ <div class="card-grid-2 gap-8">
58
+ <div class="stack-sm">
59
+ <h3 class="flex items-center gap-2 font-semibold">
60
+ ${iconManager.getIcon('check-circle', { size: 'md', class: 'icon-success' })}
61
+ <span>Great for:</span>
62
+ </h3>
63
+ <ul class="list-styled list-compact">
64
+ <li>Instructional designers</li>
65
+ <li>Training teams</li>
66
+ <li>Subject matter experts</li>
67
+ <li>Non-technical authors</li>
68
+ </ul>
69
+ </div>
70
+ <div class="stack-sm">
71
+ <h3 class="flex items-center gap-2 font-semibold">
72
+ ${iconManager.getIcon('info', { size: 'md', class: 'icon-info' })}
73
+ <span>How it works:</span>
74
+ </h3>
75
+ <ul class="list-styled list-compact">
76
+ <li>You describe what you want in plain language</li>
77
+ <li>Your AI assistant writes the technical parts</li>
78
+ <li>You preview and refine using visual editing tools</li>
79
+ <li>No need to understand the underlying code</li>
80
+ </ul>
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </section>
85
+
86
+ <!-- What you'll learn -->
87
+ <section class="card card-flat animate-fade-up delay-700">
88
+ <h3 class="flex items-center justify-center gap-2 font-semibold mb-4">
89
+ ${iconManager.getIcon('book-open', { size: 'lg', class: 'icon-info' })}
90
+ <span>What you'll learn in this course</span>
91
+ </h3>
92
+ <div class="flex justify-center gap-8">
93
+ <ul class="list-none stack-xs m-0">
94
+ <li class="flex items-center gap-2">${iconManager.getIcon('check', { size: 'sm', class: 'icon-success' })} The 4-step AI workflow</li>
95
+ <li class="flex items-center gap-2">${iconManager.getIcon('check', { size: 'sm', class: 'icon-success' })} Preview and editing tools</li>
96
+ <li class="flex items-center gap-2">${iconManager.getIcon('check', { size: 'sm', class: 'icon-success' })} Course structure</li>
97
+ </ul>
98
+ <ul class="list-none stack-xs m-0">
99
+ <li class="flex items-center gap-2">${iconManager.getIcon('check', { size: 'sm', class: 'icon-success' })} UI components</li>
100
+ <li class="flex items-center gap-2">${iconManager.getIcon('check', { size: 'sm', class: 'icon-success' })} Theming and branding</li>
101
+ <li class="flex items-center gap-2">${iconManager.getIcon('check', { size: 'sm', class: 'icon-success' })} Building and deploying</li>
102
+ </ul>
103
+ </div>
104
+ </section>
105
+
106
+ <!-- Navigation -->
107
+ <div class="flex justify-center gap-3 animate-fade-up delay-1000">
108
+ <button id="start-btn" class="btn btn-gradient btn-lg btn-pill">
109
+ ${iconManager.getIcon('arrow-right', { size: 'md', class: 'icon-dark' })}
110
+ <span class="text-dark">Let's Get Started</span>
111
+ </button>
112
+ </div>
113
+
114
+ </div>
115
+ `;
116
+
117
+ container.querySelector('#start-btn').addEventListener('click', () => {
118
+ NavigationActions.goToNextAvailableSlide();
119
+ });
120
+
121
+ return container;
122
+ }
123
+ };
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Workflow slide - The AI-driven workflow with MCP integration
3
+ */
4
+
5
+ const { iconManager } = CourseCode;
6
+
7
+ export const slide = {
8
+ render(_root, _context) {
9
+ const container = document.createElement('div');
10
+ container.innerHTML = `
11
+ <div class="stack-lg">
12
+
13
+ <!-- Header -->
14
+ <header class="slide-header">
15
+ <h1>The AI Workflow</h1>
16
+ <p>Four steps to create professional e-learning courses with AI assistance.</p>
17
+ </header>
18
+
19
+ <!-- Two Approaches -->
20
+ <section class="card no-hover">
21
+ <h2 class="text-lg font-bold border-bottom pb-2 mb-4">${iconManager.getIcon('zap')} Two Ways to Work with AI</h2>
22
+ <div class="card-grid-2 gap-6">
23
+ <div class="card card-accent-left" data-accent="primary">
24
+ <div class="card-body stack-sm">
25
+ <h3 class="font-bold">${iconManager.getIcon('cpu', { size: 'md' })} MCP (Recommended)</h3>
26
+ <p class="text-sm">Your AI connects directly to CourseCode through the <strong>Model Context Protocol</strong>. It can preview your course, take screenshots, test interactions, and fix issues automatically.</p>
27
+ <div class="callout callout--success callout--compact">
28
+ <strong>Setup:</strong> Add CourseCode as an MCP server in your AI tool. See the User Guide for instructions.
29
+ </div>
30
+ </div>
31
+ </div>
32
+ <div class="card card-accent-left" data-accent="secondary">
33
+ <div class="card-body stack-sm">
34
+ <h3 class="font-bold">${iconManager.getIcon('message-square', { size: 'md' })} Chat-Based (Manual)</h3>
35
+ <p class="text-sm">Share documentation files with your AI and describe what you want. You preview the course yourself and report issues back to the AI.</p>
36
+ <div class="callout callout--compact">
37
+ <strong>No setup needed</strong>, but you do more of the work.
38
+ </div>
39
+ </div>
40
+ </div>
41
+ </div>
42
+ </section>
43
+
44
+ <!-- Steps -->
45
+ <section data-component="steps" data-style="connected">
46
+ <div class="step">
47
+ <div class="step-number">1</div>
48
+ <div class="step-content">
49
+ <h3>Convert Your Materials</h3>
50
+ <p><strong>What you'll do:</strong> Turn your existing training documents into a format AI can read.</p>
51
+ <div class="callout callout--info callout--compact mt-2">
52
+ <strong>Where to put your files:</strong> Copy your PDFs, Word docs, or PowerPoints into the <code>course/references/</code> folder.
53
+ </div>
54
+ <p class="mt-2"><strong>The command to run:</strong></p>
55
+ <pre class="bg-gray-100 p-2 rounded text-sm"><code>coursecode convert</code></pre>
56
+ <p class="text-sm text-muted mt-2">Creates text versions in <code>course/references/converted/</code>. <em>Skip if starting from scratch.</em></p>
57
+ </div>
58
+ </div>
59
+ <div class="step">
60
+ <div class="step-number">2</div>
61
+ <div class="step-content">
62
+ <h3>Create Your Outline</h3>
63
+ <p><strong>What you'll do:</strong> Plan the structure of your course before building it.</p>
64
+ <div class="cols-2 gap-4 mt-2">
65
+ <div class="callout callout--info callout--compact">
66
+ <strong>${iconManager.getIcon('cpu', { size: 'sm' })} With MCP:</strong>
67
+ <p class="text-sm mt-1 mb-0 font-mono">"Create a course outline for <em>[topic]</em>. The audience is <em>[description]</em> and it should take <em>[duration]</em>."</p>
68
+ <p class="text-sm text-muted mt-1 mb-0">The AI reads your references and the outline template automatically.</p>
69
+ </div>
70
+ <div class="callout callout--compact">
71
+ <strong>${iconManager.getIcon('message-square', { size: 'sm' })} Without MCP:</strong>
72
+ <p class="text-sm mt-1 mb-0">Share your converted docs, <code>COURSE_OUTLINE_TEMPLATE.md</code>, and <code>COURSE_OUTLINE_GUIDE.md</code> with your AI.</p>
73
+ </div>
74
+ </div>
75
+ <p class="text-sm text-muted mt-2"><strong>Important:</strong> Review the outline carefully. Ask for changes until you're happy.</p>
76
+ </div>
77
+ </div>
78
+ <div class="step">
79
+ <div class="step-number">3</div>
80
+ <div class="step-content">
81
+ <h3>Build the Course</h3>
82
+ <p><strong>What you'll do:</strong> Have your AI create all slides based on your approved outline.</p>
83
+ <div class="cols-2 gap-4 mt-2">
84
+ <div class="callout callout--info callout--compact">
85
+ <strong>${iconManager.getIcon('cpu', { size: 'sm' })} With MCP:</strong>
86
+ <p class="text-sm mt-1 mb-0 font-mono">"Build the course from the outline. Use engaging components and interactions."</p>
87
+ <p class="text-sm text-muted mt-1 mb-0">The AI reads all docs, lints its work, and screenshots slides to verify.</p>
88
+ </div>
89
+ <div class="callout callout--compact">
90
+ <strong>${iconManager.getIcon('message-square', { size: 'sm' })} Without MCP:</strong>
91
+ <p class="text-sm mt-1 mb-0">Share your outline and <code>COURSE_AUTHORING_GUIDE.md</code> with your AI.</p>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ </div>
96
+ <div class="step">
97
+ <div class="step-number">4</div>
98
+ <div class="step-content">
99
+ <h3>Preview & Refine</h3>
100
+ <p><strong>What you'll do:</strong> Review and polish your course until it's ready.</p>
101
+ <div class="cols-2 gap-4 mt-2">
102
+ <div class="callout callout--info callout--compact">
103
+ <strong>${iconManager.getIcon('cpu', { size: 'sm' })} With MCP:</strong>
104
+ <p class="text-sm mt-1 mb-0 font-mono">"Screenshot the intro slide. The heading color should be darker."</p>
105
+ <p class="text-sm text-muted mt-1 mb-0">The AI sees and fixes issues directly. No copy-pasting error messages.</p>
106
+ </div>
107
+ <div class="callout callout--compact">
108
+ <strong>${iconManager.getIcon('message-square', { size: 'sm' })} Without MCP:</strong>
109
+ <p class="text-sm mt-1 mb-0">Run <code>coursecode preview</code>, browse to <code>localhost:4173</code>, and describe issues to your AI.</p>
110
+ </div>
111
+ </div>
112
+ </div>
113
+ </div>
114
+ </section>
115
+
116
+ <!-- MCP Advantage Callout -->
117
+ <div class="callout callout--success">
118
+ <h3 class="font-bold">${iconManager.getIcon('zap')} Why MCP Makes a Difference</h3>
119
+ <div class="cols-3 gap-4 mt-2">
120
+ <div class="stack-xs">
121
+ <strong>Self-correcting</strong>
122
+ <p class="text-sm m-0">AI lints its own code and catches errors before you do.</p>
123
+ </div>
124
+ <div class="stack-xs">
125
+ <strong>Visual verification</strong>
126
+ <p class="text-sm m-0">AI screenshots slides to verify layout and design.</p>
127
+ </div>
128
+ <div class="stack-xs">
129
+ <strong>Faster iteration</strong>
130
+ <p class="text-sm m-0">No manual file sharing, no copy-pasting between tools.</p>
131
+ </div>
132
+ </div>
133
+ </div>
134
+
135
+ </div>
136
+ `;
137
+
138
+ return container;
139
+ }
140
+ };
@@ -0,0 +1,165 @@
1
+ /* ============================================================================
2
+ Course Theme Token Overrides — Safe to Customize
3
+ ============================================================================
4
+
5
+ Override any global design tokens for this course by redefining variables
6
+ inside the :root selector below. Only include the tokens you want to change;
7
+ all other values continue to use the defaults from framework/css/design-tokens.css.
8
+
9
+ ============================================================================ */
10
+
11
+
12
+ /* stylelint-disable block-no-empty */
13
+ :root {
14
+
15
+ /* =========================================================================
16
+ QUICK START: Override palette colors for instant branding
17
+ =========================================================================
18
+
19
+ The entire color system derives from 9 palette values via color-mix().
20
+ Override any of these to rebrand the course — all other colors,
21
+ light/dark variants, and alpha values are calculated automatically.
22
+ */
23
+
24
+ /* Core palette (change these to rebrand) */
25
+ /* --palette-white: #ffffff; */
26
+ /* --palette-black: #000000; */
27
+ /* --palette-gray: #808080; */
28
+ /* --palette-charcoal: #23272e; */ /* → Premium neutral ink (optional) */
29
+ /* --palette-blue: #14213d; */ /* → Primary brand color */
30
+ /* --palette-blue-light: #4a6fa5; */ /* → Info color */
31
+ /* --palette-green: #1d7648; */ /* → Success color */
32
+ /* --palette-yellow: #f7b801; */ /* → Accent color */
33
+ /* --palette-amber: #f18701; */ /* → Secondary / Warning color */
34
+ /* --palette-orange: #f35b04; */ /* → Brand vibrant color */
35
+ /* --palette-red: #c7322b; */ /* → Semantic danger/error red */
36
+
37
+
38
+ /* =========================================================================
39
+ SEMANTIC UI TOKENS - Direct control over specific UI areas
40
+ =========================================================================
41
+
42
+ Override these for fine-grained control. Each comment shows which
43
+ palette color it derives from so you can see the effect of changes. */
44
+
45
+ /* Slide / content background ← palette-gray (via gray-50) */
46
+ /* --bg-page: var(--color-gray-50); */
47
+
48
+ /* Text colors ← palette-gray + charcoal roles */
49
+ /* --text-ink: var(--palette-charcoal); */ /* Brand ink (headings/logos/high emphasis) */
50
+ /* --text-primary: var(--color-gray-900); */ /* Default text hierarchy (system) */
51
+ /* --text-body: var(--color-gray-900); */ /* Paragraph text */
52
+ /* --text-muted: var(--color-gray-600); */ /* Secondary/helper text */
53
+ /* --color-on-warning: var(--palette-charcoal); */ /* Text on warning fills */
54
+ /* --color-on-danger: var(--palette-charcoal); */ /* Text on danger fills */
55
+
56
+ /* Header appearance ← palette-blue */
57
+ /* --header-bg: var(--gradient-header); */ /* Gradient: palette-blue → gray-700 */
58
+ /* --header-text: #ffffff; */ /* Header text */
59
+ /* --header-border: var(--color-secondary); */ /* Bottom border ← palette-amber */
60
+ /* --header-border-width: 3px; */ /* Border thickness */
61
+ /* --header-title-size: var(--font-size-lg); */ /* Title font size (18px) */
62
+ /* --header-title-weight: 700; */ /* Title font weight */
63
+ /* --header-title-letter-spacing: -0.01em; */ /* Title letter spacing */
64
+
65
+ /* Sidebar appearance ← palette-white (surface) */
66
+ /* --sidebar-bg: var(--bg-surface); */ /* Background */
67
+ /* --sidebar-text: var(--color-gray-700); */ /* Text ← palette-gray */
68
+ /* --sidebar-active-bg: var(--color-primary-alpha-10); */ /* Active bg ← palette-blue */
69
+ /* --sidebar-active-text: var(--color-primary); */ /* Active text ← palette-blue */
70
+ /* --sidebar-width: 280px; */ /* Width */
71
+
72
+ /* Footer appearance ← palette-white (surface) */
73
+ /* --footer-bg: var(--bg-surface); */ /* Background */
74
+ /* --footer-border: var(--border-default); */ /* Top border ← palette-gray */
75
+
76
+
77
+
78
+ /* =========================================================================
79
+ TYPOGRAPHY - Fonts, sizes, and text appearance
80
+ =========================================================================
81
+
82
+ Override fonts and sizes for your brand. Load custom fonts with
83
+ @import or @font-face at the top of this file before :root.
84
+
85
+ Example:
86
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
87
+ Then set: --font-family-sans: 'Inter', sans-serif;
88
+ */
89
+
90
+ /* Font families */
91
+ /* --font-family-sans: system-ui, sans-serif; */ /* UI, body, navigation */
92
+ /* --font-family-display: var(--font-family-sans); */ /* Headings and titles */
93
+ /* --font-family-mono: ui-monospace, monospace; */ /* Code/technical text */
94
+
95
+ /* Font sizes (adjust the scale to match your brand) */
96
+ /* --font-size-base: 1rem; */ /* Body text (16px default) */
97
+ /* --font-size-lg: 1.125rem; */ /* Emphasized text (18px) */
98
+ /* --font-size-xl: 1.25rem; */ /* Subheadings (20px) */
99
+ /* --font-size-2xl: 1.5rem; */ /* Section headings (24px) */
100
+ /* --font-size-3xl: 1.875rem; */ /* Large headings (30px) */
101
+ /* --font-size-4xl: 2.25rem; */ /* Main headings (36px) */
102
+ /* --font-size-sm: 0.875rem; */ /* Secondary text (14px) */
103
+
104
+
105
+ /* =========================================================================
106
+ LAYOUT SIZING - Header, sidebar, and footer dimensions
107
+ =========================================================================
108
+
109
+ Adjust height, padding, and width of structural UI areas.
110
+ */
111
+
112
+ /* Header sizing */
113
+ /* --header-height: 72px; */ /* Header bar height */
114
+ /* --header-padding-x: 1.5rem; */ /* Header horizontal padding */
115
+ /* --header-padding-y: 0.75rem; */ /* Header vertical padding */
116
+
117
+ /* Footer sizing */
118
+ /* --footer-padding-x: 1.5rem; */ /* Footer horizontal padding */
119
+ /* --footer-padding-y: 0.75rem; */ /* Footer vertical padding */
120
+
121
+
122
+ /* =========================================================================
123
+ COMPONENT STYLE VARIANTS
124
+ =========================================================================
125
+
126
+ Set global default styles for UI components. The framework reads these
127
+ tokens and applies them site-wide. Individual components can still
128
+ override by setting data-*-style attributes in HTML.
129
+
130
+ Available values:
131
+
132
+ --tab-style: default | pills | buttons | minimal | boxed
133
+ --accordion-style: default | flush | separated | minimal | boxed
134
+ --button-shape: default | square | pill
135
+ --card-style: default | outlined | elevated | flat | gradient | accent-top
136
+ --callout-style: default | outlined | filled | minimal | banner | card
137
+ --header-style: gradient | solid | minimal | dark | transparent
138
+ --sidebar-style: default | dark | primary | minimal
139
+ --footer-style: default | centered | minimal | floating
140
+ */
141
+
142
+ /* --tab-style: pills; */
143
+ /* --accordion-style: separated; */
144
+ /* --button-shape: pill; */
145
+ /* --card-style: elevated; */
146
+ /* --callout-style: filled; */
147
+ /* --header-style: solid; */
148
+ /* --sidebar-style: minimal; */
149
+ /* --footer-style: centered; */
150
+
151
+ }
152
+ /* stylelint-enable block-no-empty */
153
+
154
+ /* ============================================================================
155
+ Custom Course Styles
156
+ ============================================================================ */
157
+
158
+ /*
159
+ Add any course-specific custom styles below. For example:
160
+
161
+ .my-custom-class {
162
+ font-family: 'Comic Sans MS', cursive;
163
+ color: pink;
164
+ }
165
+ */
@@ -0,0 +1,47 @@
1
+ import globals from 'globals';
2
+
3
+ export default [
4
+ {
5
+ ignores: [
6
+ 'dist/**',
7
+ 'node_modules/**',
8
+ '*.min.js',
9
+ '**/vendor/**',
10
+ 'docs/**'
11
+ ]
12
+ },
13
+ {
14
+ // Build scripts and lib helpers can use console.log for progress output
15
+ files: ['vite.config.js', 'eslint.config.js', 'lib/**/*.js'],
16
+ languageOptions: {
17
+ ecmaVersion: 2022,
18
+ sourceType: 'module',
19
+ globals: {
20
+ ...globals.node
21
+ }
22
+ },
23
+ rules: {
24
+ 'no-console': 'off',
25
+ 'semi': ['error', 'always'],
26
+ 'quotes': ['error', 'single', { avoidEscape: true }]
27
+ }
28
+ },
29
+ {
30
+ files: ['**/*.js'],
31
+ ignores: ['vite.config.js', 'eslint.config.js', 'lib/**/*.js'],
32
+ languageOptions: {
33
+ ecmaVersion: 2022,
34
+ sourceType: 'module',
35
+ globals: {
36
+ ...globals.browser,
37
+ ...globals.node
38
+ }
39
+ },
40
+ rules: {
41
+ 'no-unused-vars': ['warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_' }],
42
+ 'no-console': ['error', { allow: ['warn', 'error'] }],
43
+ 'semi': ['error', 'always'],
44
+ 'quotes': ['error', 'single', { avoidEscape: true }]
45
+ }
46
+ }
47
+ ];
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "my-coursecode-project",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "description": "CourseCode project",
7
+ "scripts": {
8
+ "dev": "vite build --mode development --watch",
9
+ "build": "npm run lint && vite build",
10
+ "build:watch": "vite build --mode development --watch",
11
+ "lint": "eslint . --max-warnings 0",
12
+ "lint:fix": "eslint . --fix"
13
+ },
14
+ "dependencies": {
15
+ "@xapi/cmi5": "^1.0.0",
16
+ "jose": "^6.1.3",
17
+ "lz-string": "^1.5.0",
18
+ "marked": "^17.0.1",
19
+ "marked-gfm-heading-id": "^4.1.3"
20
+ },
21
+ "devDependencies": {
22
+ "@vitejs/plugin-legacy": "^7.2.1",
23
+ "archiver": "^7.0.1",
24
+ "eslint": "^9.39.1",
25
+ "vite": "^7.2.2",
26
+ "vite-plugin-static-copy": "^3.1.4"
27
+ }
28
+ }