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,62 @@
1
+ <xs:schema targetNamespace="http://ltsc.ieee.org/xsd/LOM"
2
+ xmlns="http://ltsc.ieee.org/xsd/LOM"
3
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
4
+ elementFormDefault="qualified"
5
+ version="IEEE LTSC LOM XML 1.0">
6
+
7
+ <xs:annotation>
8
+ <xs:documentation>
9
+ This work is licensed under the Creative Commons Attribution-ShareAlike
10
+ License. To view a copy of this license, see the file license.txt,
11
+ visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
12
+ Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
13
+ </xs:documentation>
14
+ <xs:documentation>
15
+ This file represents a composite schema for validation of the following:
16
+ 1) No validation of vocabularies
17
+ 2) Uniqueness constraints defined by 1484.12.1-2002
18
+ 3) The use of custom extensions to the LOM Base Schema
19
+ </xs:documentation>
20
+ <xs:documentation>
21
+ ****************************************************************************
22
+ ** CHANGE HISTORY **
23
+ ****************************************************************************
24
+ ** 09/22/2003: - Updated comment describing vocab/strict.xsd. Indicated **
25
+ ** that the strict.xsd is used to validate vocabularies **
26
+ ** defined in the LOM V1.0 Base Schema. **
27
+ ** - Moved included schema elementNames.xsd just before **
28
+ ** elementTypes.xsd. **
29
+ ** - Moved the element declaration for the top-level lom **
30
+ ** metadata element to a separate file (rootElement.xsd) **
31
+ ** and included this file just after elementTypes.xsd. **
32
+ ** - Moved the XML Schema import statements before the XML **
33
+ ** Schema include statements. **
34
+ ** - Moved the element group declaration named **
35
+ ** lom:customElements to a separate file (anyElement.xsd) **
36
+ ** and included this new file just before the XML Schema **
37
+ ** import statments. **
38
+ ****************************************************************************
39
+ </xs:documentation>
40
+ </xs:annotation>
41
+
42
+ <!-- Learning Object Metadata -->
43
+
44
+ <xs:include schemaLocation="common/anyElement.xsd"/>
45
+
46
+ <xs:import namespace="http://ltsc.ieee.org/xsd/LOM/unique"
47
+ schemaLocation="unique/strict.xsd"/>
48
+
49
+ <xs:import namespace="http://ltsc.ieee.org/xsd/LOM/vocab"
50
+ schemaLocation="vocab/loose.xsd"/>
51
+
52
+ <xs:import namespace="http://ltsc.ieee.org/xsd/LOM/extend"
53
+ schemaLocation="extend/custom.xsd"/>
54
+
55
+ <xs:include schemaLocation="common/dataTypes.xsd"/>
56
+ <xs:include schemaLocation="common/elementNames.xsd"/>
57
+ <xs:include schemaLocation="common/elementTypes.xsd"/>
58
+ <xs:include schemaLocation="common/rootElement.xsd"/>
59
+ <xs:include schemaLocation="common/vocabValues.xsd"/>
60
+ <xs:include schemaLocation="common/vocabTypes.xsd"/>
61
+
62
+ </xs:schema>
@@ -0,0 +1,62 @@
1
+ <xs:schema targetNamespace="http://ltsc.ieee.org/xsd/LOM"
2
+ xmlns="http://ltsc.ieee.org/xsd/LOM"
3
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
4
+ elementFormDefault="qualified"
5
+ version="IEEE LTSC LOM XML 1.0">
6
+
7
+ <xs:annotation>
8
+ <xs:documentation>
9
+ This work is licensed under the Creative Commons Attribution-ShareAlike
10
+ License. To view a copy of this license, see the file license.txt,
11
+ visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
12
+ Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
13
+ </xs:documentation>
14
+ <xs:documentation>
15
+ This file represents a composite schema for validation of the following:
16
+ 1) The use of LOM Base Schema vocabulary source/value pairs only
17
+ 2) Uniqueness constraints defined by 1484.12.1-2002
18
+ 3) No existenace of any defined extensions
19
+ </xs:documentation>
20
+ <xs:documentation>
21
+ ****************************************************************************
22
+ ** CHANGE HISTORY **
23
+ ****************************************************************************
24
+ ** 09/22/2003: - Updated comment describing vocab/strict.xsd. Indicated **
25
+ ** that the strict.xsd is used to validate vocabularies **
26
+ ** defined in the LOM V1.0 Base Schema. **
27
+ ** - Moved included schema elementNames.xsd just before **
28
+ ** elementTypes.xsd. **
29
+ ** - Moved the element declaration for the top-level lom **
30
+ ** metadata element to a separate file (rootElement.xsd) **
31
+ ** and included this file just after elementTypes.xsd. **
32
+ ** - Moved the XML Schema import statements before the XML **
33
+ ** Schema include statements. **
34
+ ** - Moved the element group declaration named **
35
+ ** lom:customElements to a separate file (anyElement.xsd) **
36
+ ** and included this new file just before the XML Schema **
37
+ ** import statments. **
38
+ ****************************************************************************
39
+ </xs:documentation>
40
+ </xs:annotation>
41
+
42
+ <!-- Learning Object Metadata -->
43
+
44
+ <xs:include schemaLocation="common/anyElement.xsd"/>
45
+
46
+ <xs:import namespace="http://ltsc.ieee.org/xsd/LOM/unique"
47
+ schemaLocation="unique/strict.xsd"/>
48
+
49
+ <xs:import namespace="http://ltsc.ieee.org/xsd/LOM/vocab"
50
+ schemaLocation="vocab/strict.xsd"/>
51
+
52
+ <xs:import namespace="http://ltsc.ieee.org/xsd/LOM/extend"
53
+ schemaLocation="extend/strict.xsd"/>
54
+
55
+ <xs:include schemaLocation="common/dataTypes.xsd"/>
56
+ <xs:include schemaLocation="common/elementNames.xsd"/>
57
+ <xs:include schemaLocation="common/elementTypes.xsd"/>
58
+ <xs:include schemaLocation="common/rootElement.xsd"/>
59
+ <xs:include schemaLocation="common/vocabValues.xsd"/>
60
+ <xs:include schemaLocation="common/vocabTypes.xsd"/>
61
+
62
+ </xs:schema>
@@ -0,0 +1,81 @@
1
+ <?xml version='1.0'?>
2
+ <!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd" >
3
+ <xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="en">
4
+
5
+ <xs:annotation>
6
+ <xs:documentation>
7
+ See http://www.w3.org/XML/1998/namespace.html and
8
+ http://www.w3.org/TR/REC-xml for information about this namespace.
9
+ </xs:documentation>
10
+ </xs:annotation>
11
+
12
+ <xs:annotation>
13
+ <xs:documentation>This schema defines attributes and an attribute group
14
+ suitable for use by
15
+ schemas wishing to allow xml:base, xml:lang or xml:space attributes
16
+ on elements they define.
17
+
18
+ To enable this, such a schema must import this schema
19
+ for the XML namespace, e.g. as follows:
20
+ &lt;schema . . .>
21
+ . . .
22
+ &lt;import namespace="http://www.w3.org/XML/1998/namespace"
23
+ schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
24
+
25
+ Subsequently, qualified reference to any of the attributes
26
+ or the group defined below will have the desired effect, e.g.
27
+
28
+ &lt;type . . .>
29
+ . . .
30
+ &lt;attributeGroup ref="xml:specialAttrs"/>
31
+
32
+ will define a type which will schema-validate an instance
33
+ element with any of those attributes</xs:documentation>
34
+ </xs:annotation>
35
+
36
+ <xs:annotation>
37
+ <xs:documentation>In keeping with the XML Schema WG's standard versioning
38
+ policy, this schema document will persist at
39
+ http://www.w3.org/2001/03/xml.xsd.
40
+ At the date of issue it can also be found at
41
+ http://www.w3.org/2001/xml.xsd.
42
+ The schema document at that URI may however change in the future,
43
+ in order to remain compatible with the latest version of XML Schema
44
+ itself. In other words, if the XML Schema namespace changes, the version
45
+ of this document at
46
+ http://www.w3.org/2001/xml.xsd will change
47
+ accordingly; the version at
48
+ http://www.w3.org/2001/03/xml.xsd will not change.
49
+ </xs:documentation>
50
+ </xs:annotation>
51
+
52
+ <xs:attribute name="lang" type="xs:language">
53
+ <xs:annotation>
54
+ <xs:documentation>In due course, we should install the relevant ISO 2- and 3-letter
55
+ codes as the enumerated possible values . . .</xs:documentation>
56
+ </xs:annotation>
57
+ </xs:attribute>
58
+
59
+ <xs:attribute name="space" default="preserve">
60
+ <xs:simpleType>
61
+ <xs:restriction base="xs:NCName">
62
+ <xs:enumeration value="default"/>
63
+ <xs:enumeration value="preserve"/>
64
+ </xs:restriction>
65
+ </xs:simpleType>
66
+ </xs:attribute>
67
+
68
+ <xs:attribute name="base" type="xs:anyURI">
69
+ <xs:annotation>
70
+ <xs:documentation>See http://www.w3.org/TR/xmlbase/ for
71
+ information about this attribute.</xs:documentation>
72
+ </xs:annotation>
73
+ </xs:attribute>
74
+
75
+ <xs:attributeGroup name="specialAttrs">
76
+ <xs:attribute ref="xml:base"/>
77
+ <xs:attribute ref="xml:lang"/>
78
+ <xs:attribute ref="xml:space"/>
79
+ </xs:attributeGroup>
80
+
81
+ </xs:schema>
@@ -0,0 +1,92 @@
1
+ # ============================================
2
+ # TTS Provider Selection
3
+ # ============================================
4
+ # Explicitly choose a provider: elevenlabs, openai, google, azure, deepgram
5
+ # If not set, auto-detects based on available API keys (default: deepgram)
6
+ # TTS_PROVIDER=deepgram
7
+
8
+ # ============================================
9
+ # ElevenLabs (Default)
10
+ # ============================================
11
+ # Get your key at: https://elevenlabs.io/
12
+ ELEVENLABS_API_KEY=
13
+
14
+ # Optional: Default voice ID
15
+ # ELEVENLABS_VOICE_ID=S9UjcNYIwfBOtZiDnIQT
16
+
17
+ # Optional: Model ID (default: eleven_v3)
18
+ # Options: eleven_v3, eleven_turbo_v2_5, eleven_turbo_v2, eleven_multilingual_v2, eleven_flash_v2_5, eleven_flash_v2
19
+ # ELEVENLABS_MODEL_ID=eleven_v3
20
+
21
+ # ============================================
22
+ # OpenAI TTS
23
+ # ============================================
24
+ # Get your key at: https://platform.openai.com/api-keys
25
+ # OPENAI_API_KEY=sk-...
26
+
27
+ # Optional: Voice (default: alloy)
28
+ # Options: alloy, echo, fable, onyx, nova, shimmer
29
+ # OPENAI_VOICE=alloy
30
+
31
+ # Optional: Model (default: tts-1)
32
+ # Options: tts-1 (faster), tts-1-hd (higher quality)
33
+ # OPENAI_MODEL=tts-1
34
+
35
+ # ============================================
36
+ # Google Cloud TTS (Chirp)
37
+ # ============================================
38
+ # Setup:
39
+ # 1. Go to: https://console.cloud.google.com/iam-admin/serviceaccounts
40
+ # 2. Create a service account with "Cloud Text-to-Speech API User" role
41
+ # 3. Create a JSON key and download it to your project root
42
+ # 4. Set the path below (file is auto-ignored by .gitignore)
43
+ # GOOGLE_APPLICATION_CREDENTIALS=google-service-account.json
44
+
45
+ # Optional: Voice (default: en-US-Neural2-J)
46
+ # Voice types: Neural2, Chirp3-HD, Wavenet, Standard
47
+ #
48
+ # Examples:
49
+ # en-US-Neural2-J - Male, natural (default)
50
+ # en-US-Neural2-F - Female, natural
51
+ # en-US-Chirp3-HD-Leda - Female, professional
52
+ # en-US-Chirp3-HD-Orion - Male, authoritative
53
+ #
54
+ # GOOGLE_VOICE=en-US-Neural2-J
55
+
56
+ # Optional: Language code (default: en-US)
57
+ # GOOGLE_LANGUAGE=en-US
58
+
59
+ # ============================================
60
+ # Azure Cognitive Services TTS
61
+ # ============================================
62
+ # Get credentials at: https://portal.azure.com/ (Create a Speech resource)
63
+ # AZURE_SPEECH_KEY=
64
+ # AZURE_SPEECH_REGION=eastus
65
+
66
+ # Optional: Voice (default: en-US-JennyNeural)
67
+ # AZURE_VOICE=en-US-JennyNeural
68
+
69
+ # ============================================
70
+ # Deepgram TTS (Aura)
71
+ # ============================================
72
+ # Get your key at: https://console.deepgram.com/
73
+ # DEEPGRAM_API_KEY=
74
+
75
+ # Optional: Voice (default: aura-2-hermes-en)
76
+ # Aura 2 voices:
77
+ # aura-2-asteria-en - Female, American - warm and conversational
78
+ # aura-2-luna-en - Female, American - soft and calm
79
+ # aura-2-athena-en - Female, British - refined
80
+ # aura-2-hermes-en - Male, American - conversational (default)
81
+ # aura-2-orion-en - Male, American - deep and steady
82
+ # aura-2-perseus-en - Male, American - warm and friendly
83
+ # aura-2-helios-en - Male, British - refined
84
+ #
85
+ # DEEPGRAM_VOICE=aura-2-hermes-en
86
+
87
+ # ============================================
88
+ # Network Settings
89
+ # ============================================
90
+ # Optional: Disable SSL certificate verification (for corporate proxies with SSL inspection)
91
+ # WARNING: Only use this if you trust your network. Set to "true" to disable.
92
+ # NODE_TLS_REJECT_UNAUTHORIZED=0
@@ -0,0 +1,39 @@
1
+ # Sample Document
2
+
3
+ This demonstrates **markdown rendering** in the lightbox component.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Features](#features)
8
+ - [Quick Reference](#quick-reference)
9
+ - [Code Examples](#code-examples)
10
+
11
+ ---
12
+
13
+ ## Features
14
+
15
+ - Bold and *italic* text
16
+ - Bullet lists
17
+ - Code blocks
18
+ - Tables with borders
19
+
20
+ ## Quick Reference
21
+
22
+ | Feature | Supported |
23
+ |---------|-----------|
24
+ | Headers | ✅ |
25
+ | Lists | ✅ |
26
+ | Tables | ✅ |
27
+ | Code | ✅ |
28
+ | Links | ✅ |
29
+ | Blockquotes | ✅ |
30
+
31
+ ## Code Examples
32
+
33
+ ```javascript
34
+ // Syntax highlighting works too!
35
+ const greeting = "Hello, CourseCode!";
36
+ console.log(greeting);
37
+ ```
38
+
39
+ > **Tip:** You can click anywhere outside the lightbox to close it, or press the Escape key.
@@ -0,0 +1,41 @@
1
+ # Reference Table
2
+
3
+ A sample table demonstrating markdown table rendering.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Comparison Table](#comparison-table)
8
+ - [Pricing Example](#pricing-example)
9
+ - [Status Legend](#status-legend)
10
+
11
+ ---
12
+
13
+ ## Comparison Table
14
+
15
+ | Component | Description | Status |
16
+ |-----------|-------------|--------|
17
+ | Accordion | Expandable content sections | Active |
18
+ | Tabs | Tabbed navigation panels | Active |
19
+ | Lightbox | Click-to-enlarge media viewer | Active |
20
+ | Carousel | Image slideshow | Active |
21
+ | Modal | Overlay dialogs | Active |
22
+
23
+ ## Pricing Example
24
+
25
+ | Plan | Monthly | Annual | Features |
26
+ |------|---------|--------|----------|
27
+ | Basic | $9 | $99 | 5 courses |
28
+ | Pro | $29 | $299 | Unlimited |
29
+ | Enterprise | Custom | Custom | White-label |
30
+
31
+ ## Status Legend
32
+
33
+ | Symbol | Meaning |
34
+ |--------|---------|
35
+ | ✅ | Fully supported |
36
+ | ⚠️ | Partial support |
37
+ | ❌ | Not available |
38
+
39
+ ---
40
+
41
+ *Tables render beautifully in the lightbox!*
@@ -0,0 +1,36 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 400">
2
+ <!-- Background -->
3
+ <rect width="800" height="400" fill="#f8f9fa" />
4
+
5
+ <!-- Connections -->
6
+ <path d="M200 200 L400 200" stroke="#adb5bd" stroke-width="4" />
7
+ <path d="M400 200 L600 200" stroke="#adb5bd" stroke-width="4" />
8
+
9
+ <!-- Slides (Left) -->
10
+ <g id="slides">
11
+ <rect x="50" y="100" width="150" height="200" rx="10" fill="#e2e8f0" stroke="#475569" stroke-width="4" />
12
+ <text x="125" y="180" font-family="Arial" font-size="16" text-anchor="middle" fill="#475569">SLIDES</text>
13
+ <text x="125" y="200" font-family="Arial" font-size="16" text-anchor="middle" fill="#475569">&amp; CONTENT</text>
14
+ <path d="M100 230 L150 230" stroke="#f7b801" stroke-width="4" />
15
+ <circle cx="125" cy="140" r="15" fill="#f7b801" />
16
+ </g>
17
+
18
+ <!-- Framework (Center) -->
19
+ <g id="framework">
20
+ <rect x="325" y="125" width="150" height="150" rx="10" fill="#e2e8f0" stroke="#475569" stroke-width="4" />
21
+ <text x="400" y="190" font-family="Arial" font-size="16" text-anchor="middle" fill="#475569">COURSECODE</text>
22
+ <text x="400" y="210" font-family="Arial" font-size="16" text-anchor="middle" fill="#475569">FRAMEWORK</text>
23
+ <rect x="350" y="230" width="100" height="20" fill="#14213d" />
24
+ <circle cx="400" cy="150" r="10" fill="#14213d" />
25
+ </g>
26
+
27
+ <!-- LMS Package (Right) -->
28
+ <g id="lms-package">
29
+ <rect x="600" y="100" width="150" height="200" rx="10" fill="#e2e8f0" stroke="#475569" stroke-width="4" />
30
+ <text x="675" y="180" font-family="Arial" font-size="16" text-anchor="middle" fill="#475569">LMS</text>
31
+ <text x="675" y="200" font-family="Arial" font-size="16" text-anchor="middle" fill="#475569">PACKAGE</text>
32
+ <circle cx="640" cy="240" r="8" fill="#22c55e" />
33
+ <circle cx="675" cy="240" r="8" fill="#22c55e" />
34
+ <circle cx="710" cy="240" r="8" fill="#22c55e" />
35
+ </g>
36
+ </svg>
@@ -0,0 +1,14 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 18 100 64" width="64" height="41" fill="none" stroke="currentColor" stroke-width="5" stroke-linecap="round" stroke-linejoin="round">
2
+ <!-- Left angle bracket < -->
3
+ <polyline points="25,22 5,50 25,78" />
4
+
5
+ <!-- Right angle bracket > -->
6
+ <polyline points="75,22 95,50 75,78" />
7
+
8
+ <!-- Lightbulb: rounded top -->
9
+ <path d="M50,28 C40,28 33,36 33,45 C33,52 38,56 42,60 L42,65 L58,65 L58,60 C62,56 67,52 67,45 C67,36 60,28 50,28" stroke-width="4" />
10
+
11
+ <!-- Lightbulb: base lines -->
12
+ <line x1="44" y1="70" x2="56" y2="70" stroke-width="4" />
13
+ <line x1="46" y1="75" x2="54" y2="75" stroke-width="4" />
14
+ </svg>
@@ -0,0 +1,190 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Counter Widget Demo</title>
7
+ <style>
8
+ * {
9
+ margin: 0;
10
+ padding: 0;
11
+ box-sizing: border-box;
12
+ }
13
+
14
+ body {
15
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
16
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
17
+ min-height: 100vh;
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: center;
21
+ padding: 20px;
22
+ }
23
+
24
+ .widget {
25
+ background: white;
26
+ border-radius: 16px;
27
+ padding: 32px;
28
+ text-align: center;
29
+ box-shadow: 0 10px 40px rgba(0,0,0,0.2);
30
+ max-width: 300px;
31
+ width: 100%;
32
+ }
33
+
34
+ h1 {
35
+ font-size: 1.25rem;
36
+ color: #333;
37
+ margin-bottom: 16px;
38
+ }
39
+
40
+ .counter-display {
41
+ font-size: 4rem;
42
+ font-weight: bold;
43
+ color: #667eea;
44
+ margin: 24px 0;
45
+ font-variant-numeric: tabular-nums;
46
+ }
47
+
48
+ .controls {
49
+ display: flex;
50
+ gap: 12px;
51
+ justify-content: center;
52
+ margin-bottom: 24px;
53
+ }
54
+
55
+ button {
56
+ width: 48px;
57
+ height: 48px;
58
+ border: none;
59
+ border-radius: 50%;
60
+ font-size: 1.5rem;
61
+ cursor: pointer;
62
+ transition: transform 0.1s, box-shadow 0.1s;
63
+ }
64
+
65
+ button:active {
66
+ transform: scale(0.95);
67
+ }
68
+
69
+ .btn-decrement {
70
+ background: #ff6b6b;
71
+ color: white;
72
+ }
73
+
74
+ .btn-increment {
75
+ background: #51cf66;
76
+ color: white;
77
+ }
78
+
79
+ .btn-complete {
80
+ background: #667eea;
81
+ color: white;
82
+ width: 100%;
83
+ height: auto;
84
+ padding: 12px 24px;
85
+ border-radius: 8px;
86
+ font-size: 1rem;
87
+ font-weight: 500;
88
+ }
89
+
90
+ .btn-complete:disabled {
91
+ background: #ccc;
92
+ cursor: not-allowed;
93
+ }
94
+
95
+ .status {
96
+ margin-top: 16px;
97
+ padding: 8px 16px;
98
+ border-radius: 8px;
99
+ font-size: 0.875rem;
100
+ }
101
+
102
+ .status.success {
103
+ background: #d3f9d8;
104
+ color: #2b8a3e;
105
+ }
106
+
107
+ .status.info {
108
+ background: #e7f5ff;
109
+ color: #1971c2;
110
+ }
111
+ </style>
112
+ </head>
113
+ <body>
114
+ <div class="widget">
115
+ <h1>Interactive Counter Widget</h1>
116
+ <div class="counter-display" id="counter">0</div>
117
+ <div class="controls">
118
+ <button class="btn-decrement" onclick="decrement()">−</button>
119
+ <button class="btn-increment" onclick="increment()">+</button>
120
+ </div>
121
+ <button class="btn-complete" id="complete-btn" onclick="markComplete()">
122
+ Mark Complete (requires 5+)
123
+ </button>
124
+ <div class="status info" id="status">
125
+ Reach 5 to unlock completion
126
+ </div>
127
+ </div>
128
+
129
+ <script>
130
+ let count = 0;
131
+ let isComplete = false;
132
+
133
+ function updateDisplay() {
134
+ document.getElementById('counter').textContent = count;
135
+ const btn = document.getElementById('complete-btn');
136
+ const status = document.getElementById('status');
137
+
138
+ if (isComplete) {
139
+ btn.disabled = true;
140
+ btn.textContent = '✓ Completed';
141
+ status.className = 'status success';
142
+ status.textContent = 'Widget interaction complete!';
143
+ } else if (count >= 5) {
144
+ btn.disabled = false;
145
+ status.className = 'status info';
146
+ status.textContent = 'Ready to complete!';
147
+ } else {
148
+ btn.disabled = true;
149
+ status.className = 'status info';
150
+ status.textContent = `Reach 5 to unlock (${5 - count} more)`;
151
+ }
152
+ }
153
+
154
+ function increment() {
155
+ count++;
156
+ updateDisplay();
157
+ }
158
+
159
+ function decrement() {
160
+ if (count > 0) {
161
+ count--;
162
+ updateDisplay();
163
+ }
164
+ }
165
+
166
+ function markComplete() {
167
+ if (count >= 5 && !isComplete) {
168
+ isComplete = true;
169
+ updateDisplay();
170
+
171
+ // Communicate completion to CourseCode framework
172
+ parent.postMessage({
173
+ type: 'coursecode:flag',
174
+ key: 'counter-widget-complete',
175
+ value: true
176
+ }, '*');
177
+
178
+ parent.postMessage({
179
+ type: 'coursecode:log',
180
+ level: 'info',
181
+ message: 'Counter widget completed with value: ' + count
182
+ }, '*');
183
+ }
184
+ }
185
+
186
+ // Signal ready state to parent
187
+ parent.postMessage({ type: 'coursecode:ready' }, '*');
188
+ </script>
189
+ </body>
190
+ </html>