tessera-learn 0.3.0 → 0.4.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.
- package/AGENTS.md +17 -12
- package/README.md +1 -1
- package/dist/{audit-DkXqQTqn.js → audit-DsYqXbqm.js} +211 -183
- package/dist/audit-DsYqXbqm.js.map +1 -0
- package/dist/{build-commands-CyzuCDXg.js → build-commands-BFuiAxaR.js} +4 -4
- package/dist/build-commands-BFuiAxaR.js.map +1 -0
- package/dist/{inline-config-BEXyRqsJ.js → inline-config-DVvOCKht.js} +6 -6
- package/dist/inline-config-DVvOCKht.js.map +1 -0
- package/dist/plugin/cli.d.ts +5 -1
- package/dist/plugin/cli.d.ts.map +1 -1
- package/dist/plugin/cli.js +38 -7
- package/dist/plugin/cli.js.map +1 -1
- package/dist/plugin/index.d.ts +7 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +2 -2
- package/dist/{plugin-CFUFgwHB.js → plugin-BuMiDTmU.js} +29 -38
- package/dist/plugin-BuMiDTmU.js.map +1 -0
- package/package.json +1 -1
- package/src/components/MultipleChoice.svelte +1 -2
- package/src/plugin/build-commands.ts +7 -4
- package/src/plugin/cli.ts +54 -3
- package/src/plugin/index.ts +31 -42
- package/src/plugin/inline-config.ts +4 -2
- package/src/plugin/manifest.ts +21 -0
- package/src/plugin/validate-cli.ts +5 -2
- package/src/plugin/validation.ts +214 -233
- package/src/runtime/App.svelte +4 -1
- package/src/runtime/adapters/scorm-base.ts +15 -14
- package/src/runtime/adapters/scorm12.ts +6 -25
- package/src/runtime/adapters/scorm2004.ts +12 -55
- package/src/runtime/adapters/web.ts +5 -13
- package/src/runtime/fingerprint.ts +28 -0
- package/src/runtime/interaction-format.ts +0 -1
- package/src/runtime/persistence.ts +4 -0
- package/src/runtime/types.ts +3 -0
- package/src/runtime/xapi/publisher.ts +11 -14
- package/dist/audit-DkXqQTqn.js.map +0 -1
- package/dist/build-commands-CyzuCDXg.js.map +0 -1
- package/dist/inline-config-BEXyRqsJ.js.map +0 -1
- package/dist/plugin-CFUFgwHB.js.map +0 -1
package/AGENTS.md
CHANGED
|
@@ -54,7 +54,8 @@ From the workspace root (`pnpm`; corepack provisions it). Each command takes the
|
|
|
54
54
|
pnpm install # first time only
|
|
55
55
|
pnpm dev <course> # dev server at http://localhost:5173 (Ctrl+C to stop)
|
|
56
56
|
pnpm export <course> # build + package for the LMS standard in course.config.js
|
|
57
|
-
pnpm
|
|
57
|
+
pnpm export <course> --standard <web|scorm12|scorm2004|cmi5|xapi> # override that standard for this build
|
|
58
|
+
pnpm validate <course> # run validation only — no server, no bundle (also takes --standard)
|
|
58
59
|
pnpm a11y <course> # runtime a11y audit on its own (the audit half of check)
|
|
59
60
|
pnpm check <course> # validate, then the runtime a11y audit (axe) over the built course
|
|
60
61
|
```
|
|
@@ -518,6 +519,7 @@ export default {
|
|
|
518
519
|
author: '',
|
|
519
520
|
version: '1.0.0',
|
|
520
521
|
language: 'en', // BCP-47 tag for <html lang>; defaults to "en"
|
|
522
|
+
resume: 'auto', // "auto" (default) restores progress unless page structure changed | "never"
|
|
521
523
|
|
|
522
524
|
branding: {
|
|
523
525
|
logo: '', // e.g. "$assets/logo.png"
|
|
@@ -553,17 +555,18 @@ export default {
|
|
|
553
555
|
|
|
554
556
|
### Field behaviour
|
|
555
557
|
|
|
556
|
-
| Field | Behaviour
|
|
557
|
-
| ------------------------------- |
|
|
558
|
-
| `id` | Unique course identity; seeds the web localStorage key and the cmi5/xAPI activity id. Scaffolders mint a `urn:uuid:…`. Missing → falls back to a fixed value (collides across courses) and the build warns. `tessera duplicate` regenerates it.
|
|
559
|
-
| `language` | Sets `<html lang>` (WCAG 3.1.1). Missing/implausible value warns and falls back to `"en"`
|
|
560
|
-
| `
|
|
561
|
-
| `navigation.mode: "
|
|
562
|
-
| `
|
|
563
|
-
| `completion.mode: "
|
|
564
|
-
| `completion.mode: "
|
|
565
|
-
| `
|
|
566
|
-
| `a11y.
|
|
558
|
+
| Field | Behaviour |
|
|
559
|
+
| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
560
|
+
| `id` | Unique course identity; seeds the web localStorage key and the cmi5/xAPI activity id. Scaffolders mint a `urn:uuid:…`. Missing → falls back to a fixed value (collides across courses) and the build warns. `tessera duplicate` regenerates it. |
|
|
561
|
+
| `language` | Sets `<html lang>` (WCAG 3.1.1). Missing/implausible value warns and falls back to `"en"` |
|
|
562
|
+
| `resume` | `"auto"` (default) restores saved progress, but **discards it when the page structure changed** (pages added/removed/reordered/renamed) since it was saved. `"never"` always starts fresh. Re-uploading a changed course to an LMS: upload as a _new version_/registration, not overwrite-in-place, so learners get a clean attempt — `"auto"` still protects learners if your LMS overwrites in place, but old-structure scores/progress are dropped by design (they can't be safely remapped) |
|
|
563
|
+
| `navigation.mode: "free"` | All pages accessible except those blocked by gating quizzes |
|
|
564
|
+
| `navigation.mode: "sequential"` | Pages unlock one at a time as each completes |
|
|
565
|
+
| `completion.mode: "percentage"` | Completes when `visitedPages / totalPages * 100 >= percentageThreshold` |
|
|
566
|
+
| `completion.mode: "quiz"` | Completes when graded quiz average >= `scoring.passingScore` |
|
|
567
|
+
| `completion.mode: "manual"` | Completes when an author trigger fires. See [Manual completion](#manual-completion) |
|
|
568
|
+
| `a11y.level: "error"` | Promotes captions/transcript, heading order, contrast, language, Svelte a11y warnings to errors. Hard errors (missing `alt`, missing media `title`) always block regardless |
|
|
569
|
+
| `a11y.ignore` | Flat list matched literally against every diagnostic rule ID across all tiers (`tessera/…`, `a11y_…`, bare axe IDs) |
|
|
567
570
|
|
|
568
571
|
### Minimum config
|
|
569
572
|
|
|
@@ -602,6 +605,8 @@ canAccess: (ctx) => {
|
|
|
602
605
|
|
|
603
606
|
Upload the LMS zips via your LMS's import flow; drop `dist/` (web) on any static host.
|
|
604
607
|
|
|
608
|
+
`--standard <web|scorm12|scorm2004|cmi5|xapi>` overrides `export.standard` for one build without editing `course.config.js` — e.g. `pnpm export <course> --standard scorm2004`. Useful for packaging the same course for multiple LMSs from one config. `pnpm validate <course> --standard <value>` takes the same flag to preview validation against the overridden standard. An unknown value fails before the build runs.
|
|
609
|
+
|
|
605
610
|
### Web export Content-Security-Policy
|
|
606
611
|
|
|
607
612
|
Web builds emit a baseline CSP `<meta>` (LMS packages and the dev server don't). It allows any `https:` for images/media/frames/network, but **not** for scripts, styles, or fonts — so a CDN script/stylesheet/font is blocked until you allow its origin. Extend per-directive via `export.csp` (sources are **appended** to the baseline, never replaced):
|
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ That creates a workspace with Tessera wired up, a seed course, and a root `AGENT
|
|
|
19
19
|
- **Hooks** (`tessera-learn`): `useQuestion`, `useQuiz`, `useNavigation`, `useProgress`, `useCompletion`, `usePersistence`, `useXAPI`.
|
|
20
20
|
- **Vite plugin** (`tessera-learn/plugin`): `tesseraPlugin()` — wires page/layout discovery, the LMS adapter, the `$shared` alias, and the export pipeline. The `tessera` CLI (`new`/`dev`/`export`/`validate`/`a11y`/`check`) runs Vite with this plugin for you, so scaffolded workspaces need no `vite.config.js`.
|
|
21
21
|
- **Built-in components** (`tessera-learn`): `Callout`, `Image`, `Audio`, `Video`, `Accordion` / `AccordionItem`, `Carousel` / `CarouselSlide`, `RevealModal`, `Quiz`, `MultipleChoice`, `FillInTheBlank`, `Matching`, `Sorting`, `DefaultLayout`.
|
|
22
|
-
- **LMS adapters**: SCORM 1.2, SCORM 2004 4th Edition, cmi5, xAPI 1.0.3 ("Tin Can"), static Web — selected via `course.config.js` `export.standard
|
|
22
|
+
- **LMS adapters**: SCORM 1.2, SCORM 2004 4th Edition, cmi5, xAPI 1.0.3 ("Tin Can"), static Web — selected via `course.config.js` `export.standard`, or overridden per build with `tessera export --standard <value>`.
|
|
23
23
|
- **Accessibility checks**: static rules (alt text, media titles/captions, heading order, contrast, `<html lang>`) run inside validation and the build with zero extra dependencies; an opt-in runtime audit (`tessera a11y`, with `playwright` + `@axe-core/playwright` as optional peers) renders every page and gates on axe-core violations.
|
|
24
24
|
|
|
25
25
|
See `AGENTS.md` for usage, signatures, and authoring conventions.
|