@intellectif/lk-core 0.13.0 → 0.14.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 (55) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +1 -1
  3. package/dist/{activity-DfAmJ1sl.d.cts → activity-BVkg9VDo.d.cts} +153 -4
  4. package/dist/{activity-DfAmJ1sl.d.ts → activity-BVkg9VDo.d.ts} +153 -4
  5. package/dist/{chunk-DQKJUMUW.cjs → chunk-2NIALQEH.cjs} +24 -19
  6. package/dist/chunk-2NIALQEH.cjs.map +1 -0
  7. package/dist/{chunk-XKKKWKRH.js → chunk-6RND47QE.js} +694 -126
  8. package/dist/chunk-6RND47QE.js.map +1 -0
  9. package/dist/{chunk-FT7SAC3X.cjs → chunk-CZRUMHKW.cjs} +4 -4
  10. package/dist/{chunk-FT7SAC3X.cjs.map → chunk-CZRUMHKW.cjs.map} +1 -1
  11. package/dist/chunk-J5OIRIOW.cjs +1034 -0
  12. package/dist/chunk-J5OIRIOW.cjs.map +1 -0
  13. package/dist/{chunk-Y36S3X3L.js → chunk-NBADQ3JU.js} +7 -2
  14. package/dist/chunk-NBADQ3JU.js.map +1 -0
  15. package/dist/{chunk-PYP3HCRQ.js → chunk-R7PV3XIC.js} +2 -2
  16. package/dist/chunk-RTIR6R2U.js +1034 -0
  17. package/dist/chunk-RTIR6R2U.js.map +1 -0
  18. package/dist/{chunk-XONKWL6D.cjs → chunk-VCXIPLEW.cjs} +585 -17
  19. package/dist/chunk-VCXIPLEW.cjs.map +1 -0
  20. package/dist/{index-Bz9wUigA.d.cts → index-BE1bM2Wi.d.cts} +225 -3
  21. package/dist/{index-CJbbVE9o.d.ts → index-v2_-Fyn3.d.ts} +225 -3
  22. package/dist/index.cjs +113 -80
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.cts +50 -17
  25. package/dist/index.d.ts +50 -17
  26. package/dist/index.js +39 -6
  27. package/dist/index.js.map +1 -1
  28. package/dist/schemas.cjs +11 -3
  29. package/dist/schemas.cjs.map +1 -1
  30. package/dist/schemas.d.cts +2 -2
  31. package/dist/schemas.d.ts +2 -2
  32. package/dist/schemas.js +10 -2
  33. package/dist/scoring.cjs +23 -3
  34. package/dist/scoring.cjs.map +1 -1
  35. package/dist/scoring.d.cts +471 -16
  36. package/dist/scoring.d.ts +471 -16
  37. package/dist/scoring.js +24 -4
  38. package/dist/xapi.cjs +3 -3
  39. package/dist/xapi.d.cts +1 -1
  40. package/dist/xapi.d.ts +1 -1
  41. package/dist/xapi.js +2 -2
  42. package/package.json +1 -1
  43. package/vectors/README.md +63 -3
  44. package/vectors/replay.d.mts +7 -2
  45. package/vectors/replay.mjs +83 -1
  46. package/vectors/scoring.json +10875 -2
  47. package/dist/chunk-DQKJUMUW.cjs.map +0 -1
  48. package/dist/chunk-FGN4LLSP.js +0 -387
  49. package/dist/chunk-FGN4LLSP.js.map +0 -1
  50. package/dist/chunk-UHQVIC3P.cjs +0 -387
  51. package/dist/chunk-UHQVIC3P.cjs.map +0 -1
  52. package/dist/chunk-XKKKWKRH.js.map +0 -1
  53. package/dist/chunk-XONKWL6D.cjs.map +0 -1
  54. package/dist/chunk-Y36S3X3L.js.map +0 -1
  55. /package/dist/{chunk-PYP3HCRQ.js.map → chunk-R7PV3XIC.js.map} +0 -0
package/dist/index.d.cts CHANGED
@@ -1,9 +1,9 @@
1
- import { ScoredItem } from './scoring.cjs';
2
- export { AssessmentScore, AssessmentSectionInput, Band, CompositionPolicy, DEFAULT_PASS_THRESHOLD, DICTATION_MAX_ACCEPTED_TRANSCRIPTS, DICTATION_MAX_EQUIVALENCES, DICTATION_MAX_EQUIVALENCE_LENGTH, DICTATION_MAX_TEXT_LENGTH, DICTATION_MAX_TRANSCRIPT_LENGTH, DictationAlignment, DictationCharOp, DictationReference, DictationWordAlignment, PassFailureReason, RoundingMode, RoundingPolicy, ScoringOptions, SectionScore, alignDictation, classifyBand, composeAssessmentScore, computePassThreshold, dictationReferenceWords, diffDictationChars, evaluate, gte, roundGrade, score } from './scoring.cjs';
3
- import { w as ItemOutcome, A as ActivityData, L as LearnerResponse, V as ValidationError, e as ActivityType, a as ActivityDataMap, C as CriterionScore, p as GradeRecord, N as NativeControlHint, c as ActivityMedia, K as ScoringResult, D as DeferredScoringPartial, f as DictationData, h as DictationLearnerResponse, F as FillInTheBlanksData, k as FillInTheBlanksLearnerResponse, m as GapSelectData, o as GapSelectLearnerResponse, y as MultipleChoiceData, z as MultipleChoiceLearnerResponse, W as WrittenResponseData, Q as WrittenResponseLearnerResponse } from './activity-DfAmJ1sl.cjs';
4
- export { b as ActivityFeedback, d as ActivityResult, B as BlankConfig, g as DictationEquivalence, i as DictationSlowMedia, j as DictationTolerance, G as GapSelectBank, l as GapSelectChoice, n as GapSelectGap, q as Grader, r as GraderKind, s as GraderUsage, t as GradingState, I as InlineCorrection, u as InteractionEvent, v as InteractionKind, x as LearnerResponseMap, M as MediaPlaybackPolicy, E as MultipleChoiceOption, H as MultipleChoiceOptionMedia, S as ScoringDetail, J as ScoringOutcome, T as TextMatchPolicy, O as TextMatchResult, P as ValidationResult, R as WrittenResponseRubric, U as WrittenResponseRubricCriterion, X as XAPIActor, Y as XAPIConfig, Z as XAPIContext, _ as XAPIContextActivities, $ as XAPIError, a0 as XAPIObject, a1 as XAPIResult, a2 as XAPIScore, a3 as XAPIStatement, a4 as XAPIVerbObject, a5 as levenshteinDistance, a6 as matchText } from './activity-DfAmJ1sl.cjs';
5
- import { Y as SequenceSlot, X as SequenceEntry, I as ItemGroup } from './index-Bz9wUigA.cjs';
6
- export { B as BlankConfigSchema, D as DictationDataSchema, a as DictationEquivalenceSchema, b as DictationSlowMediaSchema, c as DictationToleranceSchema, F as FeedbackSchema, d as FillInTheBlanksDataSchema, G as GapSelectBankSchema, e as GapSelectChoiceSchema, f as GapSelectDataSchema, g as GapSelectGapSchema, h as ItemGroupSchema, M as MediaPlaybackSchema, i as MediaSchema, j as MediaUrlSchema, k as MultipleChoiceDataSchema, l as MultipleChoiceOptionMediaSchema, m as MultipleChoiceOptionSchema, N as NativeControlHintSchema, R as RedactedActivity, n as RedactedBlankConfig, o as RedactedBlankConfigSchema, p as RedactedDictationData, q as RedactedDictationDataSchema, r as RedactedDictationSlowMedia, s as RedactedDictationSlowMediaSchema, t as RedactedFillInTheBlanksData, u as RedactedFillInTheBlanksDataSchema, v as RedactedGapSelectBank, w as RedactedGapSelectBankSchema, x as RedactedGapSelectChoice, y as RedactedGapSelectChoiceSchema, z as RedactedGapSelectData, A as RedactedGapSelectDataSchema, C as RedactedGapSelectGap, E as RedactedGapSelectGapSchema, H as RedactedItemGroupSchema, J as RedactedMediaSchema, K as RedactedMultipleChoiceData, L as RedactedMultipleChoiceDataSchema, O as RedactedMultipleChoiceOption, P as RedactedMultipleChoiceOptionMedia, Q as RedactedMultipleChoiceOptionMediaSchema, S as RedactedMultipleChoiceOptionSchema, T as RedactedStimulus, U as RedactedStimulusSchema, V as RedactedWrittenResponseData, W as RedactedWrittenResponseDataSchema, Z as SequenceSlotGroup, _ as Stimulus, $ as StimulusKind, a0 as StimulusSchema, a1 as TextMatchPolicySchema, a2 as WrittenResponseDataSchema, a3 as WrittenResponseRubricCriterionSchema, a4 as WrittenResponseRubricSchema, a5 as dictationJsonSchema, a6 as fillInTheBlanksJsonSchema, a7 as gapSelectJsonSchema, a8 as itemGroupJsonSchema, a9 as jsonSchemaFor, aa as multipleChoiceJsonSchema, ab as stimulusJsonSchema, ac as validateActivity, ad as validateItemGroup, ae as writtenResponseJsonSchema } from './index-Bz9wUigA.cjs';
1
+ import { ScoredItem, RoundingPolicy } from './scoring.cjs';
2
+ export { AssessmentScore, AssessmentSectionInput, Band, CompositionPolicy, DEFAULT_PASS_THRESHOLD, DICTATION_MAX_ACCEPTED_TRANSCRIPTS, DICTATION_MAX_EQUIVALENCES, DICTATION_MAX_EQUIVALENCE_LENGTH, DICTATION_MAX_TEXT_LENGTH, DICTATION_MAX_TRANSCRIPT_LENGTH, DictationAlignment, DictationCharOp, DictationReference, DictationWordAlignment, GradeReadAloudOptions, PassFailureReason, READ_ALOUD_MAX_DIMENSION_WEIGHT, READ_ALOUD_MAX_REFERENCE_LENGTH, READ_ALOUD_MAX_SECONDS, READ_ALOUD_MAX_TAKES, ReadAloudWordAlignment, ReadAloudWordState, RoundingMode, SPEECH_ASSESSMENT_MAX_WORDS, ScoringOptions, SectionScore, SpeechAssessment, SpeechMeasurement, SpeechPhoneme, SpeechPhonemeCandidate, SpeechPlausibilityPolicy, SpeechSyllable, SpeechUnscorable, SpeechUnscorableCode, SpeechWord, SpeechWordError, WavInspection, WavInspectionPolicy, alignDictation, alignReadAloud, classifyBand, composeAssessmentScore, computePassThreshold, dictationReferenceWords, diffDictationChars, evaluate, gradeReadAloud, gte, inspectWav, outcomeFromUnscorable, roundGrade, score, validateSpeechAssessment } from './scoring.cjs';
3
+ import { x as ItemOutcome, A as ActivityData, L as LearnerResponse, Z as ValidationError, e as ActivityType, a as ActivityDataMap, C as CriterionScore, q as GradeRecord, N as NativeControlHint, c as ActivityMedia, W as ScoringResult, f as DeferredScoringPartial, g as DictationData, i as DictationLearnerResponse, F as FillInTheBlanksData, l as FillInTheBlanksLearnerResponse, n as GapSelectData, p as GapSelectLearnerResponse, z as MultipleChoiceData, E as MultipleChoiceLearnerResponse, R as ReadAloudData, P as ReadAloudLearnerResponse, $ as WrittenResponseData, a0 as WrittenResponseLearnerResponse } from './activity-BVkg9VDo.cjs';
4
+ export { b as ActivityFeedback, d as ActivityResult, B as BlankConfig, D as DeferredReason, h as DictationEquivalence, j as DictationSlowMedia, k as DictationTolerance, G as GapSelectBank, m as GapSelectChoice, o as GapSelectGap, r as Grader, s as GraderKind, t as GraderUsage, u as GradingState, I as InlineCorrection, v as InteractionEvent, w as InteractionKind, y as LearnerResponseMap, M as MediaPlaybackPolicy, H as MultipleChoiceOption, J as MultipleChoiceOptionMedia, K as ReadAloudDimension, O as ReadAloudDimensionWeight, Q as ReadAloudSlowMedia, S as RecordingBounds, T as RecordingRef, U as ScoringDetail, V as ScoringOutcome, X as TextMatchPolicy, Y as TextMatchResult, _ as ValidationResult, a1 as WrittenResponseRubric, a2 as WrittenResponseRubricCriterion, a3 as XAPIActor, a4 as XAPIConfig, a5 as XAPIContext, a6 as XAPIContextActivities, a7 as XAPIError, a8 as XAPIObject, a9 as XAPIResult, aa as XAPIScore, ab as XAPIStatement, ac as XAPIVerbObject, ad as levenshteinDistance, ae as matchText } from './activity-BVkg9VDo.cjs';
5
+ import { a0 as SequenceSlot, $ as SequenceEntry, I as ItemGroup } from './index-BE1bM2Wi.cjs';
6
+ export { B as BlankConfigSchema, D as DictationDataSchema, a as DictationEquivalenceSchema, b as DictationSlowMediaSchema, c as DictationToleranceSchema, F as FeedbackSchema, d as FillInTheBlanksDataSchema, G as GapSelectBankSchema, e as GapSelectChoiceSchema, f as GapSelectDataSchema, g as GapSelectGapSchema, h as ItemGroupSchema, M as MediaPlaybackSchema, i as MediaSchema, j as MediaUrlSchema, k as MultipleChoiceDataSchema, l as MultipleChoiceOptionMediaSchema, m as MultipleChoiceOptionSchema, N as NativeControlHintSchema, R as ReadAloudDataSchema, n as ReadAloudSlowMediaSchema, o as RedactedActivity, p as RedactedBlankConfig, q as RedactedBlankConfigSchema, r as RedactedDictationData, s as RedactedDictationDataSchema, t as RedactedDictationSlowMedia, u as RedactedDictationSlowMediaSchema, v as RedactedFillInTheBlanksData, w as RedactedFillInTheBlanksDataSchema, x as RedactedGapSelectBank, y as RedactedGapSelectBankSchema, z as RedactedGapSelectChoice, A as RedactedGapSelectChoiceSchema, C as RedactedGapSelectData, E as RedactedGapSelectDataSchema, H as RedactedGapSelectGap, J as RedactedGapSelectGapSchema, K as RedactedItemGroupSchema, L as RedactedMediaSchema, O as RedactedMultipleChoiceData, P as RedactedMultipleChoiceDataSchema, Q as RedactedMultipleChoiceOption, S as RedactedMultipleChoiceOptionMedia, T as RedactedMultipleChoiceOptionMediaSchema, U as RedactedMultipleChoiceOptionSchema, V as RedactedReadAloudData, W as RedactedReadAloudDataSchema, X as RedactedStimulus, Y as RedactedStimulusSchema, Z as RedactedWrittenResponseData, _ as RedactedWrittenResponseDataSchema, a1 as SequenceSlotGroup, a2 as Stimulus, a3 as StimulusKind, a4 as StimulusSchema, a5 as TextMatchPolicySchema, a6 as WrittenResponseDataSchema, a7 as WrittenResponseRubricCriterionSchema, a8 as WrittenResponseRubricSchema, a9 as dictationJsonSchema, aa as fillInTheBlanksJsonSchema, ab as gapSelectJsonSchema, ac as itemGroupJsonSchema, ad as jsonSchemaFor, ae as multipleChoiceJsonSchema, af as readAloudJsonSchema, ag as stimulusJsonSchema, ah as validateActivity, ai as validateItemGroup, aj as writtenResponseJsonSchema } from './index-BE1bM2Wi.cjs';
7
7
  import { z } from 'zod/v4';
8
8
  export { AnsweredStatementParams, CompletedStatementParams, SubmittedStatementParams, XAPIObjectParams, XAPIStatementParams, XAPIVerb, XAPIVerbKey, XAPI_VERB_DISPLAY, validateXAPIStatement, xAPIBuilder, xapiDefinitionFor } from './xapi.cjs';
9
9
 
@@ -413,6 +413,11 @@ declare function createItemGroupDraft(context: DraftContext): ItemGroup;
413
413
  *
414
414
  * The group is `complete` only when the container passes, every item passes its
415
415
  * own schema, and every item is itself `complete`.
416
+ *
417
+ * @throws the error a registered item type's `checkDraft` or schema throws, as
418
+ * `validateDraft` does for that item on its own. Only an unregistered type is
419
+ * turned into an issue: a fault in a type's own code is not a problem with the
420
+ * draft, and reporting it as an unknown type would hide it.
416
421
  */
417
422
  declare function validateItemGroupDraft(draft: unknown): DraftValidationResult<ItemGroup>;
418
423
 
@@ -532,12 +537,14 @@ declare class UnknownActivityTypeError extends Error {
532
537
  constructor(activityType: string);
533
538
  }
534
539
  /**
535
- * Thrown when `score()` is asked to grade a `redact()` projection (or any
536
- * activity data whose answer key is missing, yielding a non-finite score).
537
- * Redacted data is learner-safe precisely because the key was removed, so a
538
- * score derived from it is meaningless — previously this produced a silent
539
- * `NaN` that serialized to `null` in a grade column. `evaluate()` returns
540
- * `{ status: 'unscorable' }` for the same input instead of throwing.
540
+ * Thrown when a grading entry point is asked to grade a `redact()` projection
541
+ * (or any activity data whose answer key is missing, yielding a non-finite
542
+ * score). Redacted data is learner-safe precisely because the key was removed,
543
+ * so a score derived from it is meaningless — previously this produced a silent
544
+ * `NaN` that serialized to `null` in a grade column. `evaluate()` answers the
545
+ * same input without throwing, but it never grades it: a synchronously graded
546
+ * type comes back `unscorable`, and a deferred one `deferred`, as it does for
547
+ * any item of that type.
541
548
  */
542
549
  declare class RedactedScoringError extends Error {
543
550
  readonly activityType: string;
@@ -564,6 +571,19 @@ interface GradeFromRubricOptions {
564
571
  passThreshold?: number;
565
572
  /** Narrative feedback for the learner, carried onto the record verbatim. */
566
573
  feedback?: string | null;
574
+ /**
575
+ * Compare the pass line the way the score is displayed — both sides rounded,
576
+ * via `gte` — whichever threshold applies: `passThreshold` above, the
577
+ * activity's own, or the 0.7 default. The returned `score` stays unrounded.
578
+ * Opt-in, as on `score()` and `evaluate()`: switching it on moves pass/fail
579
+ * for totals in the rounding band.
580
+ *
581
+ * Checked before any criterion is read: `null` reads as no policy, and a
582
+ * policy that cannot be applied — an unknown `mode`, or a `dp` that is not a
583
+ * whole number from 0 to 15 — throws a `RangeError`, even for a rubric that
584
+ * turns out to be unscorable.
585
+ */
586
+ rounding?: RoundingPolicy;
567
587
  }
568
588
  /**
569
589
  * Computes the weighted total from per-criterion scores — the arithmetic that
@@ -812,7 +832,9 @@ type PartialScoringResult = Omit<ScoringResult, 'passed'>;
812
832
  * - `public` — safe to send to a learner before they answer.
813
833
  * - `answer-key` — reveals (or helps infer) the correct answer or the scoring
814
834
  * rules; removed unless `reveal: 'after-submit'` is requested.
815
- * - `author-only` — never leaves the authoring/grading context (e.g. rubrics).
835
+ * - `author-only` — never leaves the authoring/grading context (e.g. the
836
+ * author transcript of a listening group's stimulus). A rubric is NOT one:
837
+ * it tells the learner what they are assessed on, so it is `public`.
816
838
  */
817
839
  type Sensitivity = 'public' | 'answer-key' | 'author-only';
818
840
  /**
@@ -1011,9 +1033,13 @@ interface RedactOptions {
1011
1033
  *
1012
1034
  * Overrides can only be applied to fields; they cannot re-open a field the
1013
1035
  * caller has not classified, because unclassified still means removed.
1014
- * Note that tightening below what the type's `redactedSchema` requires is
1015
- * allowed the schema check only rejects payloads that reveal MORE than
1016
- * the learner-safe shape.
1036
+ * What can be tightened is a field the type's `redactedSchema` leaves
1037
+ * OPTIONAL, as it leaves the rubric above: the schema check rejects a
1038
+ * payload that reveals more than the learner-safe shape, and equally one
1039
+ * that is missing part of it. Tightening a field the redacted shape requires
1040
+ * — a read-aloud item's `scoring`, `recording`, `referenceText` or `locale`,
1041
+ * without which the learner has no item to read — throws
1042
+ * {@link ActivitySchemaError} instead of hiding it.
1017
1043
  */
1018
1044
  policy?: FieldPolicy;
1019
1045
  }
@@ -1090,6 +1116,13 @@ declare const gapSelectType: ActivityTypeDescriptor<GapSelectData, GapSelectLear
1090
1116
  * computation identical in a browser and on a server.
1091
1117
  */
1092
1118
  declare const dictationType: ActivityTypeDescriptor<DictationData, DictationLearnerResponse>;
1119
+ /**
1120
+ * Built-in Read Aloud descriptor. Grading is DEFERRED: the SDK calls no
1121
+ * assessor, so the synchronous outcome reports only whether a recording was
1122
+ * stored, and `gradeReadAloud` produces the grade once the application holds a
1123
+ * speech assessment.
1124
+ */
1125
+ declare const readAloudType: ActivityTypeDescriptor<ReadAloudData, ReadAloudLearnerResponse>;
1093
1126
 
1094
1127
  /**
1095
1128
  * Seeded, deterministic shuffling — the ONE algorithm every presentation-order
@@ -1190,4 +1223,4 @@ interface ThemeTokens {
1190
1223
  '--lk-transition-base': string;
1191
1224
  }
1192
1225
 
1193
- export { ActivityData, ActivityDataMap, ActivityMedia, ActivitySchemaError, ActivityType, type ActivityTypeAuthoring, type ActivityTypeDescriptor, type ActivityTypeInterop, type ActivityTypeScoring, type AttemptPlan, type AttemptPlanDrift, type AttemptPlanSlot, type AttemptProgress, type AttemptState, CriterionScore, DeferredScoringError, DeferredScoringPartial, DictationData, DictationLearnerResponse, type DraftComplete, type DraftContext, type DraftIssue, type DraftNotComplete, type DraftSeverity, type DraftValidationResult, type FieldPolicy, FillInTheBlanksData, FillInTheBlanksLearnerResponse, type FlattenSequenceOptions, GapSelectData, GapSelectLearnerResponse, type GradeFromRubricOptions, GradeRecord, ItemGroup, ItemOutcome, LearnerResponse, type MediaBudgetRef, type MediaPlayClaim, type MediaPlayGrant, type MediaPlayLedger, type MediaPlayLedgerEntry, type MissingOutcomePolicy, MultipleChoiceData, MultipleChoiceLearnerResponse, NativeControlHint, type PartialScoringResult, type PlanAttemptOptions, type PlannableEntry, type RedactOptions, type RedactedActivityData, type RedactedItemGroup, RedactedScoringError, type RegisteredActivityTypeDescriptor, type ResolvedPlaybackPolicy, type ResponseDiffEntry, ScoredItem, ScoringResult, type SeededShuffleOptions, type Sensitivity, SequenceEntry, SequenceSlot, type ShuffleVersion, type ThemeTokens, UnknownActivityTypeError, ValidationError, WrittenResponseData, WrittenResponseLearnerResponse, type XAPIInteractionType, assertRedacted, assertRedactedItemGroup, canonicalJson, contentHash, countWords, createDraft, createItemGroupDraft, defineActivityType, dictationType, diffResponses, entryKeyOf, fillInTheBlanksType, fingerprint, flattenSequence, gapSelectType, getActivityTypeDescriptor, gradeFromRubric, hasGrade, hashSeed, isItemGroup, multipleChoiceType, outcomeFromGrade, planAttempt, planMediaBudgets, redact, redactItemGroup, registerActivityType, registeredActivityTypes, resolvePlaybackPolicy, restoreAttemptState, restoreMediaPlayLedger, scoredItemsFromPlan, seededShuffle, serializeAttemptState, serializeMediaPlayLedger, slotMediaKey, stimulusMediaKey, validateDraft, validateItemGroupDraft, verifyAttemptPlan, writtenResponseType };
1226
+ export { ActivityData, ActivityDataMap, ActivityMedia, ActivitySchemaError, ActivityType, type ActivityTypeAuthoring, type ActivityTypeDescriptor, type ActivityTypeInterop, type ActivityTypeScoring, type AttemptPlan, type AttemptPlanDrift, type AttemptPlanSlot, type AttemptProgress, type AttemptState, CriterionScore, DeferredScoringError, DeferredScoringPartial, DictationData, DictationLearnerResponse, type DraftComplete, type DraftContext, type DraftIssue, type DraftNotComplete, type DraftSeverity, type DraftValidationResult, type FieldPolicy, FillInTheBlanksData, FillInTheBlanksLearnerResponse, type FlattenSequenceOptions, GapSelectData, GapSelectLearnerResponse, type GradeFromRubricOptions, GradeRecord, ItemGroup, ItemOutcome, LearnerResponse, type MediaBudgetRef, type MediaPlayClaim, type MediaPlayGrant, type MediaPlayLedger, type MediaPlayLedgerEntry, type MissingOutcomePolicy, MultipleChoiceData, MultipleChoiceLearnerResponse, NativeControlHint, type PartialScoringResult, type PlanAttemptOptions, type PlannableEntry, ReadAloudData, ReadAloudLearnerResponse, type RedactOptions, type RedactedActivityData, type RedactedItemGroup, RedactedScoringError, type RegisteredActivityTypeDescriptor, type ResolvedPlaybackPolicy, type ResponseDiffEntry, RoundingPolicy, ScoredItem, ScoringResult, type SeededShuffleOptions, type Sensitivity, SequenceEntry, SequenceSlot, type ShuffleVersion, type ThemeTokens, UnknownActivityTypeError, ValidationError, WrittenResponseData, WrittenResponseLearnerResponse, type XAPIInteractionType, assertRedacted, assertRedactedItemGroup, canonicalJson, contentHash, countWords, createDraft, createItemGroupDraft, defineActivityType, dictationType, diffResponses, entryKeyOf, fillInTheBlanksType, fingerprint, flattenSequence, gapSelectType, getActivityTypeDescriptor, gradeFromRubric, hasGrade, hashSeed, isItemGroup, multipleChoiceType, outcomeFromGrade, planAttempt, planMediaBudgets, readAloudType, redact, redactItemGroup, registerActivityType, registeredActivityTypes, resolvePlaybackPolicy, restoreAttemptState, restoreMediaPlayLedger, scoredItemsFromPlan, seededShuffle, serializeAttemptState, serializeMediaPlayLedger, slotMediaKey, stimulusMediaKey, validateDraft, validateItemGroupDraft, verifyAttemptPlan, writtenResponseType };
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { ScoredItem } from './scoring.js';
2
- export { AssessmentScore, AssessmentSectionInput, Band, CompositionPolicy, DEFAULT_PASS_THRESHOLD, DICTATION_MAX_ACCEPTED_TRANSCRIPTS, DICTATION_MAX_EQUIVALENCES, DICTATION_MAX_EQUIVALENCE_LENGTH, DICTATION_MAX_TEXT_LENGTH, DICTATION_MAX_TRANSCRIPT_LENGTH, DictationAlignment, DictationCharOp, DictationReference, DictationWordAlignment, PassFailureReason, RoundingMode, RoundingPolicy, ScoringOptions, SectionScore, alignDictation, classifyBand, composeAssessmentScore, computePassThreshold, dictationReferenceWords, diffDictationChars, evaluate, gte, roundGrade, score } from './scoring.js';
3
- import { w as ItemOutcome, A as ActivityData, L as LearnerResponse, V as ValidationError, e as ActivityType, a as ActivityDataMap, C as CriterionScore, p as GradeRecord, N as NativeControlHint, c as ActivityMedia, K as ScoringResult, D as DeferredScoringPartial, f as DictationData, h as DictationLearnerResponse, F as FillInTheBlanksData, k as FillInTheBlanksLearnerResponse, m as GapSelectData, o as GapSelectLearnerResponse, y as MultipleChoiceData, z as MultipleChoiceLearnerResponse, W as WrittenResponseData, Q as WrittenResponseLearnerResponse } from './activity-DfAmJ1sl.js';
4
- export { b as ActivityFeedback, d as ActivityResult, B as BlankConfig, g as DictationEquivalence, i as DictationSlowMedia, j as DictationTolerance, G as GapSelectBank, l as GapSelectChoice, n as GapSelectGap, q as Grader, r as GraderKind, s as GraderUsage, t as GradingState, I as InlineCorrection, u as InteractionEvent, v as InteractionKind, x as LearnerResponseMap, M as MediaPlaybackPolicy, E as MultipleChoiceOption, H as MultipleChoiceOptionMedia, S as ScoringDetail, J as ScoringOutcome, T as TextMatchPolicy, O as TextMatchResult, P as ValidationResult, R as WrittenResponseRubric, U as WrittenResponseRubricCriterion, X as XAPIActor, Y as XAPIConfig, Z as XAPIContext, _ as XAPIContextActivities, $ as XAPIError, a0 as XAPIObject, a1 as XAPIResult, a2 as XAPIScore, a3 as XAPIStatement, a4 as XAPIVerbObject, a5 as levenshteinDistance, a6 as matchText } from './activity-DfAmJ1sl.js';
5
- import { Y as SequenceSlot, X as SequenceEntry, I as ItemGroup } from './index-CJbbVE9o.js';
6
- export { B as BlankConfigSchema, D as DictationDataSchema, a as DictationEquivalenceSchema, b as DictationSlowMediaSchema, c as DictationToleranceSchema, F as FeedbackSchema, d as FillInTheBlanksDataSchema, G as GapSelectBankSchema, e as GapSelectChoiceSchema, f as GapSelectDataSchema, g as GapSelectGapSchema, h as ItemGroupSchema, M as MediaPlaybackSchema, i as MediaSchema, j as MediaUrlSchema, k as MultipleChoiceDataSchema, l as MultipleChoiceOptionMediaSchema, m as MultipleChoiceOptionSchema, N as NativeControlHintSchema, R as RedactedActivity, n as RedactedBlankConfig, o as RedactedBlankConfigSchema, p as RedactedDictationData, q as RedactedDictationDataSchema, r as RedactedDictationSlowMedia, s as RedactedDictationSlowMediaSchema, t as RedactedFillInTheBlanksData, u as RedactedFillInTheBlanksDataSchema, v as RedactedGapSelectBank, w as RedactedGapSelectBankSchema, x as RedactedGapSelectChoice, y as RedactedGapSelectChoiceSchema, z as RedactedGapSelectData, A as RedactedGapSelectDataSchema, C as RedactedGapSelectGap, E as RedactedGapSelectGapSchema, H as RedactedItemGroupSchema, J as RedactedMediaSchema, K as RedactedMultipleChoiceData, L as RedactedMultipleChoiceDataSchema, O as RedactedMultipleChoiceOption, P as RedactedMultipleChoiceOptionMedia, Q as RedactedMultipleChoiceOptionMediaSchema, S as RedactedMultipleChoiceOptionSchema, T as RedactedStimulus, U as RedactedStimulusSchema, V as RedactedWrittenResponseData, W as RedactedWrittenResponseDataSchema, Z as SequenceSlotGroup, _ as Stimulus, $ as StimulusKind, a0 as StimulusSchema, a1 as TextMatchPolicySchema, a2 as WrittenResponseDataSchema, a3 as WrittenResponseRubricCriterionSchema, a4 as WrittenResponseRubricSchema, a5 as dictationJsonSchema, a6 as fillInTheBlanksJsonSchema, a7 as gapSelectJsonSchema, a8 as itemGroupJsonSchema, a9 as jsonSchemaFor, aa as multipleChoiceJsonSchema, ab as stimulusJsonSchema, ac as validateActivity, ad as validateItemGroup, ae as writtenResponseJsonSchema } from './index-CJbbVE9o.js';
1
+ import { ScoredItem, RoundingPolicy } from './scoring.js';
2
+ export { AssessmentScore, AssessmentSectionInput, Band, CompositionPolicy, DEFAULT_PASS_THRESHOLD, DICTATION_MAX_ACCEPTED_TRANSCRIPTS, DICTATION_MAX_EQUIVALENCES, DICTATION_MAX_EQUIVALENCE_LENGTH, DICTATION_MAX_TEXT_LENGTH, DICTATION_MAX_TRANSCRIPT_LENGTH, DictationAlignment, DictationCharOp, DictationReference, DictationWordAlignment, GradeReadAloudOptions, PassFailureReason, READ_ALOUD_MAX_DIMENSION_WEIGHT, READ_ALOUD_MAX_REFERENCE_LENGTH, READ_ALOUD_MAX_SECONDS, READ_ALOUD_MAX_TAKES, ReadAloudWordAlignment, ReadAloudWordState, RoundingMode, SPEECH_ASSESSMENT_MAX_WORDS, ScoringOptions, SectionScore, SpeechAssessment, SpeechMeasurement, SpeechPhoneme, SpeechPhonemeCandidate, SpeechPlausibilityPolicy, SpeechSyllable, SpeechUnscorable, SpeechUnscorableCode, SpeechWord, SpeechWordError, WavInspection, WavInspectionPolicy, alignDictation, alignReadAloud, classifyBand, composeAssessmentScore, computePassThreshold, dictationReferenceWords, diffDictationChars, evaluate, gradeReadAloud, gte, inspectWav, outcomeFromUnscorable, roundGrade, score, validateSpeechAssessment } from './scoring.js';
3
+ import { x as ItemOutcome, A as ActivityData, L as LearnerResponse, Z as ValidationError, e as ActivityType, a as ActivityDataMap, C as CriterionScore, q as GradeRecord, N as NativeControlHint, c as ActivityMedia, W as ScoringResult, f as DeferredScoringPartial, g as DictationData, i as DictationLearnerResponse, F as FillInTheBlanksData, l as FillInTheBlanksLearnerResponse, n as GapSelectData, p as GapSelectLearnerResponse, z as MultipleChoiceData, E as MultipleChoiceLearnerResponse, R as ReadAloudData, P as ReadAloudLearnerResponse, $ as WrittenResponseData, a0 as WrittenResponseLearnerResponse } from './activity-BVkg9VDo.js';
4
+ export { b as ActivityFeedback, d as ActivityResult, B as BlankConfig, D as DeferredReason, h as DictationEquivalence, j as DictationSlowMedia, k as DictationTolerance, G as GapSelectBank, m as GapSelectChoice, o as GapSelectGap, r as Grader, s as GraderKind, t as GraderUsage, u as GradingState, I as InlineCorrection, v as InteractionEvent, w as InteractionKind, y as LearnerResponseMap, M as MediaPlaybackPolicy, H as MultipleChoiceOption, J as MultipleChoiceOptionMedia, K as ReadAloudDimension, O as ReadAloudDimensionWeight, Q as ReadAloudSlowMedia, S as RecordingBounds, T as RecordingRef, U as ScoringDetail, V as ScoringOutcome, X as TextMatchPolicy, Y as TextMatchResult, _ as ValidationResult, a1 as WrittenResponseRubric, a2 as WrittenResponseRubricCriterion, a3 as XAPIActor, a4 as XAPIConfig, a5 as XAPIContext, a6 as XAPIContextActivities, a7 as XAPIError, a8 as XAPIObject, a9 as XAPIResult, aa as XAPIScore, ab as XAPIStatement, ac as XAPIVerbObject, ad as levenshteinDistance, ae as matchText } from './activity-BVkg9VDo.js';
5
+ import { a0 as SequenceSlot, $ as SequenceEntry, I as ItemGroup } from './index-v2_-Fyn3.js';
6
+ export { B as BlankConfigSchema, D as DictationDataSchema, a as DictationEquivalenceSchema, b as DictationSlowMediaSchema, c as DictationToleranceSchema, F as FeedbackSchema, d as FillInTheBlanksDataSchema, G as GapSelectBankSchema, e as GapSelectChoiceSchema, f as GapSelectDataSchema, g as GapSelectGapSchema, h as ItemGroupSchema, M as MediaPlaybackSchema, i as MediaSchema, j as MediaUrlSchema, k as MultipleChoiceDataSchema, l as MultipleChoiceOptionMediaSchema, m as MultipleChoiceOptionSchema, N as NativeControlHintSchema, R as ReadAloudDataSchema, n as ReadAloudSlowMediaSchema, o as RedactedActivity, p as RedactedBlankConfig, q as RedactedBlankConfigSchema, r as RedactedDictationData, s as RedactedDictationDataSchema, t as RedactedDictationSlowMedia, u as RedactedDictationSlowMediaSchema, v as RedactedFillInTheBlanksData, w as RedactedFillInTheBlanksDataSchema, x as RedactedGapSelectBank, y as RedactedGapSelectBankSchema, z as RedactedGapSelectChoice, A as RedactedGapSelectChoiceSchema, C as RedactedGapSelectData, E as RedactedGapSelectDataSchema, H as RedactedGapSelectGap, J as RedactedGapSelectGapSchema, K as RedactedItemGroupSchema, L as RedactedMediaSchema, O as RedactedMultipleChoiceData, P as RedactedMultipleChoiceDataSchema, Q as RedactedMultipleChoiceOption, S as RedactedMultipleChoiceOptionMedia, T as RedactedMultipleChoiceOptionMediaSchema, U as RedactedMultipleChoiceOptionSchema, V as RedactedReadAloudData, W as RedactedReadAloudDataSchema, X as RedactedStimulus, Y as RedactedStimulusSchema, Z as RedactedWrittenResponseData, _ as RedactedWrittenResponseDataSchema, a1 as SequenceSlotGroup, a2 as Stimulus, a3 as StimulusKind, a4 as StimulusSchema, a5 as TextMatchPolicySchema, a6 as WrittenResponseDataSchema, a7 as WrittenResponseRubricCriterionSchema, a8 as WrittenResponseRubricSchema, a9 as dictationJsonSchema, aa as fillInTheBlanksJsonSchema, ab as gapSelectJsonSchema, ac as itemGroupJsonSchema, ad as jsonSchemaFor, ae as multipleChoiceJsonSchema, af as readAloudJsonSchema, ag as stimulusJsonSchema, ah as validateActivity, ai as validateItemGroup, aj as writtenResponseJsonSchema } from './index-v2_-Fyn3.js';
7
7
  import { z } from 'zod/v4';
8
8
  export { AnsweredStatementParams, CompletedStatementParams, SubmittedStatementParams, XAPIObjectParams, XAPIStatementParams, XAPIVerb, XAPIVerbKey, XAPI_VERB_DISPLAY, validateXAPIStatement, xAPIBuilder, xapiDefinitionFor } from './xapi.js';
9
9
 
@@ -413,6 +413,11 @@ declare function createItemGroupDraft(context: DraftContext): ItemGroup;
413
413
  *
414
414
  * The group is `complete` only when the container passes, every item passes its
415
415
  * own schema, and every item is itself `complete`.
416
+ *
417
+ * @throws the error a registered item type's `checkDraft` or schema throws, as
418
+ * `validateDraft` does for that item on its own. Only an unregistered type is
419
+ * turned into an issue: a fault in a type's own code is not a problem with the
420
+ * draft, and reporting it as an unknown type would hide it.
416
421
  */
417
422
  declare function validateItemGroupDraft(draft: unknown): DraftValidationResult<ItemGroup>;
418
423
 
@@ -532,12 +537,14 @@ declare class UnknownActivityTypeError extends Error {
532
537
  constructor(activityType: string);
533
538
  }
534
539
  /**
535
- * Thrown when `score()` is asked to grade a `redact()` projection (or any
536
- * activity data whose answer key is missing, yielding a non-finite score).
537
- * Redacted data is learner-safe precisely because the key was removed, so a
538
- * score derived from it is meaningless — previously this produced a silent
539
- * `NaN` that serialized to `null` in a grade column. `evaluate()` returns
540
- * `{ status: 'unscorable' }` for the same input instead of throwing.
540
+ * Thrown when a grading entry point is asked to grade a `redact()` projection
541
+ * (or any activity data whose answer key is missing, yielding a non-finite
542
+ * score). Redacted data is learner-safe precisely because the key was removed,
543
+ * so a score derived from it is meaningless — previously this produced a silent
544
+ * `NaN` that serialized to `null` in a grade column. `evaluate()` answers the
545
+ * same input without throwing, but it never grades it: a synchronously graded
546
+ * type comes back `unscorable`, and a deferred one `deferred`, as it does for
547
+ * any item of that type.
541
548
  */
542
549
  declare class RedactedScoringError extends Error {
543
550
  readonly activityType: string;
@@ -564,6 +571,19 @@ interface GradeFromRubricOptions {
564
571
  passThreshold?: number;
565
572
  /** Narrative feedback for the learner, carried onto the record verbatim. */
566
573
  feedback?: string | null;
574
+ /**
575
+ * Compare the pass line the way the score is displayed — both sides rounded,
576
+ * via `gte` — whichever threshold applies: `passThreshold` above, the
577
+ * activity's own, or the 0.7 default. The returned `score` stays unrounded.
578
+ * Opt-in, as on `score()` and `evaluate()`: switching it on moves pass/fail
579
+ * for totals in the rounding band.
580
+ *
581
+ * Checked before any criterion is read: `null` reads as no policy, and a
582
+ * policy that cannot be applied — an unknown `mode`, or a `dp` that is not a
583
+ * whole number from 0 to 15 — throws a `RangeError`, even for a rubric that
584
+ * turns out to be unscorable.
585
+ */
586
+ rounding?: RoundingPolicy;
567
587
  }
568
588
  /**
569
589
  * Computes the weighted total from per-criterion scores — the arithmetic that
@@ -812,7 +832,9 @@ type PartialScoringResult = Omit<ScoringResult, 'passed'>;
812
832
  * - `public` — safe to send to a learner before they answer.
813
833
  * - `answer-key` — reveals (or helps infer) the correct answer or the scoring
814
834
  * rules; removed unless `reveal: 'after-submit'` is requested.
815
- * - `author-only` — never leaves the authoring/grading context (e.g. rubrics).
835
+ * - `author-only` — never leaves the authoring/grading context (e.g. the
836
+ * author transcript of a listening group's stimulus). A rubric is NOT one:
837
+ * it tells the learner what they are assessed on, so it is `public`.
816
838
  */
817
839
  type Sensitivity = 'public' | 'answer-key' | 'author-only';
818
840
  /**
@@ -1011,9 +1033,13 @@ interface RedactOptions {
1011
1033
  *
1012
1034
  * Overrides can only be applied to fields; they cannot re-open a field the
1013
1035
  * caller has not classified, because unclassified still means removed.
1014
- * Note that tightening below what the type's `redactedSchema` requires is
1015
- * allowed the schema check only rejects payloads that reveal MORE than
1016
- * the learner-safe shape.
1036
+ * What can be tightened is a field the type's `redactedSchema` leaves
1037
+ * OPTIONAL, as it leaves the rubric above: the schema check rejects a
1038
+ * payload that reveals more than the learner-safe shape, and equally one
1039
+ * that is missing part of it. Tightening a field the redacted shape requires
1040
+ * — a read-aloud item's `scoring`, `recording`, `referenceText` or `locale`,
1041
+ * without which the learner has no item to read — throws
1042
+ * {@link ActivitySchemaError} instead of hiding it.
1017
1043
  */
1018
1044
  policy?: FieldPolicy;
1019
1045
  }
@@ -1090,6 +1116,13 @@ declare const gapSelectType: ActivityTypeDescriptor<GapSelectData, GapSelectLear
1090
1116
  * computation identical in a browser and on a server.
1091
1117
  */
1092
1118
  declare const dictationType: ActivityTypeDescriptor<DictationData, DictationLearnerResponse>;
1119
+ /**
1120
+ * Built-in Read Aloud descriptor. Grading is DEFERRED: the SDK calls no
1121
+ * assessor, so the synchronous outcome reports only whether a recording was
1122
+ * stored, and `gradeReadAloud` produces the grade once the application holds a
1123
+ * speech assessment.
1124
+ */
1125
+ declare const readAloudType: ActivityTypeDescriptor<ReadAloudData, ReadAloudLearnerResponse>;
1093
1126
 
1094
1127
  /**
1095
1128
  * Seeded, deterministic shuffling — the ONE algorithm every presentation-order
@@ -1190,4 +1223,4 @@ interface ThemeTokens {
1190
1223
  '--lk-transition-base': string;
1191
1224
  }
1192
1225
 
1193
- export { ActivityData, ActivityDataMap, ActivityMedia, ActivitySchemaError, ActivityType, type ActivityTypeAuthoring, type ActivityTypeDescriptor, type ActivityTypeInterop, type ActivityTypeScoring, type AttemptPlan, type AttemptPlanDrift, type AttemptPlanSlot, type AttemptProgress, type AttemptState, CriterionScore, DeferredScoringError, DeferredScoringPartial, DictationData, DictationLearnerResponse, type DraftComplete, type DraftContext, type DraftIssue, type DraftNotComplete, type DraftSeverity, type DraftValidationResult, type FieldPolicy, FillInTheBlanksData, FillInTheBlanksLearnerResponse, type FlattenSequenceOptions, GapSelectData, GapSelectLearnerResponse, type GradeFromRubricOptions, GradeRecord, ItemGroup, ItemOutcome, LearnerResponse, type MediaBudgetRef, type MediaPlayClaim, type MediaPlayGrant, type MediaPlayLedger, type MediaPlayLedgerEntry, type MissingOutcomePolicy, MultipleChoiceData, MultipleChoiceLearnerResponse, NativeControlHint, type PartialScoringResult, type PlanAttemptOptions, type PlannableEntry, type RedactOptions, type RedactedActivityData, type RedactedItemGroup, RedactedScoringError, type RegisteredActivityTypeDescriptor, type ResolvedPlaybackPolicy, type ResponseDiffEntry, ScoredItem, ScoringResult, type SeededShuffleOptions, type Sensitivity, SequenceEntry, SequenceSlot, type ShuffleVersion, type ThemeTokens, UnknownActivityTypeError, ValidationError, WrittenResponseData, WrittenResponseLearnerResponse, type XAPIInteractionType, assertRedacted, assertRedactedItemGroup, canonicalJson, contentHash, countWords, createDraft, createItemGroupDraft, defineActivityType, dictationType, diffResponses, entryKeyOf, fillInTheBlanksType, fingerprint, flattenSequence, gapSelectType, getActivityTypeDescriptor, gradeFromRubric, hasGrade, hashSeed, isItemGroup, multipleChoiceType, outcomeFromGrade, planAttempt, planMediaBudgets, redact, redactItemGroup, registerActivityType, registeredActivityTypes, resolvePlaybackPolicy, restoreAttemptState, restoreMediaPlayLedger, scoredItemsFromPlan, seededShuffle, serializeAttemptState, serializeMediaPlayLedger, slotMediaKey, stimulusMediaKey, validateDraft, validateItemGroupDraft, verifyAttemptPlan, writtenResponseType };
1226
+ export { ActivityData, ActivityDataMap, ActivityMedia, ActivitySchemaError, ActivityType, type ActivityTypeAuthoring, type ActivityTypeDescriptor, type ActivityTypeInterop, type ActivityTypeScoring, type AttemptPlan, type AttemptPlanDrift, type AttemptPlanSlot, type AttemptProgress, type AttemptState, CriterionScore, DeferredScoringError, DeferredScoringPartial, DictationData, DictationLearnerResponse, type DraftComplete, type DraftContext, type DraftIssue, type DraftNotComplete, type DraftSeverity, type DraftValidationResult, type FieldPolicy, FillInTheBlanksData, FillInTheBlanksLearnerResponse, type FlattenSequenceOptions, GapSelectData, GapSelectLearnerResponse, type GradeFromRubricOptions, GradeRecord, ItemGroup, ItemOutcome, LearnerResponse, type MediaBudgetRef, type MediaPlayClaim, type MediaPlayGrant, type MediaPlayLedger, type MediaPlayLedgerEntry, type MissingOutcomePolicy, MultipleChoiceData, MultipleChoiceLearnerResponse, NativeControlHint, type PartialScoringResult, type PlanAttemptOptions, type PlannableEntry, ReadAloudData, ReadAloudLearnerResponse, type RedactOptions, type RedactedActivityData, type RedactedItemGroup, RedactedScoringError, type RegisteredActivityTypeDescriptor, type ResolvedPlaybackPolicy, type ResponseDiffEntry, RoundingPolicy, ScoredItem, ScoringResult, type SeededShuffleOptions, type Sensitivity, SequenceEntry, SequenceSlot, type ShuffleVersion, type ThemeTokens, UnknownActivityTypeError, ValidationError, WrittenResponseData, WrittenResponseLearnerResponse, type XAPIInteractionType, assertRedacted, assertRedactedItemGroup, canonicalJson, contentHash, countWords, createDraft, createItemGroupDraft, defineActivityType, dictationType, diffResponses, entryKeyOf, fillInTheBlanksType, fingerprint, flattenSequence, gapSelectType, getActivityTypeDescriptor, gradeFromRubric, hasGrade, hashSeed, isItemGroup, multipleChoiceType, outcomeFromGrade, planAttempt, planMediaBudgets, readAloudType, redact, redactItemGroup, registerActivityType, registeredActivityTypes, resolvePlaybackPolicy, restoreAttemptState, restoreMediaPlayLedger, scoredItemsFromPlan, seededShuffle, serializeAttemptState, serializeMediaPlayLedger, slotMediaKey, stimulusMediaKey, validateDraft, validateItemGroupDraft, verifyAttemptPlan, writtenResponseType };
package/dist/index.js CHANGED
@@ -1,24 +1,29 @@
1
1
  import {
2
2
  DEFAULT_PASS_THRESHOLD,
3
+ alignReadAloud,
3
4
  classifyBand,
4
5
  composeAssessmentScore,
5
6
  computePassThreshold,
6
7
  diffDictationChars,
7
8
  evaluate,
8
9
  gradeFromRubric,
10
+ gradeReadAloud,
9
11
  gte,
10
12
  hasGrade,
13
+ inspectWav,
11
14
  outcomeFromGrade,
15
+ outcomeFromUnscorable,
12
16
  roundGrade,
13
- score
14
- } from "./chunk-FGN4LLSP.js";
17
+ score,
18
+ validateSpeechAssessment
19
+ } from "./chunk-RTIR6R2U.js";
15
20
  import {
16
21
  XAPIVerb,
17
22
  XAPI_VERB_DISPLAY,
18
23
  validateXAPIStatement,
19
24
  xAPIBuilder,
20
25
  xapiDefinitionFor
21
- } from "./chunk-PYP3HCRQ.js";
26
+ } from "./chunk-R7PV3XIC.js";
22
27
  import {
23
28
  ItemGroupSchema,
24
29
  RedactedItemGroupSchema,
@@ -30,11 +35,12 @@ import {
30
35
  itemGroupJsonSchema,
31
36
  jsonSchemaFor,
32
37
  multipleChoiceJsonSchema,
38
+ readAloudJsonSchema,
33
39
  stimulusJsonSchema,
34
40
  validateActivity,
35
41
  validateItemGroup,
36
42
  writtenResponseJsonSchema
37
- } from "./chunk-Y36S3X3L.js";
43
+ } from "./chunk-NBADQ3JU.js";
38
44
  import {
39
45
  ActivitySchemaError,
40
46
  BlankConfigSchema,
@@ -64,6 +70,12 @@ import {
64
70
  MultipleChoiceOptionMediaSchema,
65
71
  MultipleChoiceOptionSchema,
66
72
  NativeControlHintSchema,
73
+ READ_ALOUD_MAX_DIMENSION_WEIGHT,
74
+ READ_ALOUD_MAX_REFERENCE_LENGTH,
75
+ READ_ALOUD_MAX_SECONDS,
76
+ READ_ALOUD_MAX_TAKES,
77
+ ReadAloudDataSchema,
78
+ ReadAloudSlowMediaSchema,
67
79
  RedactedBlankConfigSchema,
68
80
  RedactedDictationDataSchema,
69
81
  RedactedDictationSlowMediaSchema,
@@ -76,8 +88,10 @@ import {
76
88
  RedactedMultipleChoiceDataSchema,
77
89
  RedactedMultipleChoiceOptionMediaSchema,
78
90
  RedactedMultipleChoiceOptionSchema,
91
+ RedactedReadAloudDataSchema,
79
92
  RedactedScoringError,
80
93
  RedactedWrittenResponseDataSchema,
94
+ SPEECH_ASSESSMENT_MAX_WORDS,
81
95
  TextMatchPolicySchema,
82
96
  UnknownActivityTypeError,
83
97
  WrittenResponseDataSchema,
@@ -104,12 +118,13 @@ import {
104
118
  matchText,
105
119
  multipleChoiceType,
106
120
  pathKey,
121
+ readAloudType,
107
122
  refusesEmpty,
108
123
  registerActivityType,
109
124
  registeredActivityTypes,
110
125
  withValidationScope,
111
126
  writtenResponseType
112
- } from "./chunk-XKKKWKRH.js";
127
+ } from "./chunk-6RND47QE.js";
113
128
 
114
129
  // src/content-hash.ts
115
130
  function canonicalJson(value, seen = /* @__PURE__ */ new Set()) {
@@ -858,7 +873,10 @@ function checkItems(draft) {
858
873
  let result;
859
874
  try {
860
875
  result = validateDraft(item.type, item);
861
- } catch {
876
+ } catch (error) {
877
+ if (!(error instanceof UnknownActivityTypeError) || error.activityType !== item.type) {
878
+ throw error;
879
+ }
862
880
  issues.push(
863
881
  issue(
864
882
  "ig_item_type_unknown",
@@ -1207,6 +1225,12 @@ export {
1207
1225
  MultipleChoiceOptionMediaSchema,
1208
1226
  MultipleChoiceOptionSchema,
1209
1227
  NativeControlHintSchema,
1228
+ READ_ALOUD_MAX_DIMENSION_WEIGHT,
1229
+ READ_ALOUD_MAX_REFERENCE_LENGTH,
1230
+ READ_ALOUD_MAX_SECONDS,
1231
+ READ_ALOUD_MAX_TAKES,
1232
+ ReadAloudDataSchema,
1233
+ ReadAloudSlowMediaSchema,
1210
1234
  RedactedBlankConfigSchema,
1211
1235
  RedactedDictationDataSchema,
1212
1236
  RedactedDictationSlowMediaSchema,
@@ -1220,9 +1244,11 @@ export {
1220
1244
  RedactedMultipleChoiceDataSchema,
1221
1245
  RedactedMultipleChoiceOptionMediaSchema,
1222
1246
  RedactedMultipleChoiceOptionSchema,
1247
+ RedactedReadAloudDataSchema,
1223
1248
  RedactedScoringError,
1224
1249
  RedactedStimulusSchema,
1225
1250
  RedactedWrittenResponseDataSchema,
1251
+ SPEECH_ASSESSMENT_MAX_WORDS,
1226
1252
  StimulusSchema,
1227
1253
  TextMatchPolicySchema,
1228
1254
  UnknownActivityTypeError,
@@ -1232,6 +1258,7 @@ export {
1232
1258
  XAPIVerb,
1233
1259
  XAPI_VERB_DISPLAY,
1234
1260
  alignDictation,
1261
+ alignReadAloud,
1235
1262
  assertRedacted,
1236
1263
  assertRedactedItemGroup,
1237
1264
  canonicalJson,
@@ -1258,9 +1285,11 @@ export {
1258
1285
  gapSelectType,
1259
1286
  getActivityTypeDescriptor,
1260
1287
  gradeFromRubric,
1288
+ gradeReadAloud,
1261
1289
  gte,
1262
1290
  hasGrade,
1263
1291
  hashSeed,
1292
+ inspectWav,
1264
1293
  isItemGroup,
1265
1294
  itemGroupJsonSchema,
1266
1295
  jsonSchemaFor,
@@ -1269,8 +1298,11 @@ export {
1269
1298
  multipleChoiceJsonSchema,
1270
1299
  multipleChoiceType,
1271
1300
  outcomeFromGrade,
1301
+ outcomeFromUnscorable,
1272
1302
  planAttempt,
1273
1303
  planMediaBudgets,
1304
+ readAloudJsonSchema,
1305
+ readAloudType,
1274
1306
  redact,
1275
1307
  redactItemGroup,
1276
1308
  registerActivityType,
@@ -1291,6 +1323,7 @@ export {
1291
1323
  validateDraft,
1292
1324
  validateItemGroup,
1293
1325
  validateItemGroupDraft,
1326
+ validateSpeechAssessment,
1294
1327
  validateXAPIStatement,
1295
1328
  verifyAttemptPlan,
1296
1329
  writtenResponseJsonSchema,