@intellectif/lk-react 12.0.1 → 14.0.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/CHANGELOG.md +73 -0
- package/README.md +17 -6
- package/dist/{WrittenResponse-BgcpEM-e.d.ts → WrittenResponse-C0P34En1.d.ts} +1 -1
- package/dist/{WrittenResponse-ByzXYEoW.d.cts → WrittenResponse-pB1ik8hg.d.cts} +1 -1
- package/dist/chunk-36FTYJWJ.cjs +869 -0
- package/dist/chunk-36FTYJWJ.cjs.map +1 -0
- package/dist/chunk-47HHC4GD.js +763 -0
- package/dist/chunk-47HHC4GD.js.map +1 -0
- package/dist/chunk-62AKSD5Y.js +509 -0
- package/dist/chunk-62AKSD5Y.js.map +1 -0
- package/dist/{chunk-XKGBD3UK.js → chunk-72UGRIMM.js} +6 -5
- package/dist/chunk-72UGRIMM.js.map +1 -0
- package/dist/{chunk-FX7VMZHQ.cjs → chunk-B2XQLU2E.cjs} +58 -8
- package/dist/chunk-B2XQLU2E.cjs.map +1 -0
- package/dist/{chunk-ZFWC4KZC.js → chunk-BO6P723E.js} +26 -31
- package/dist/chunk-BO6P723E.js.map +1 -0
- package/dist/chunk-BRPEB43C.cjs +13 -0
- package/dist/chunk-BRPEB43C.cjs.map +1 -0
- package/dist/{chunk-6KMEB7TF.cjs → chunk-BVRUUYYR.cjs} +42 -15
- package/dist/chunk-BVRUUYYR.cjs.map +1 -0
- package/dist/{chunk-AMGK7DDM.cjs → chunk-D4DQFTA7.cjs} +2 -2
- package/dist/chunk-D4DQFTA7.cjs.map +1 -0
- package/dist/chunk-D57QZILZ.js +863 -0
- package/dist/chunk-D57QZILZ.js.map +1 -0
- package/dist/chunk-F4TBCRGI.cjs +518 -0
- package/dist/chunk-F4TBCRGI.cjs.map +1 -0
- package/dist/{chunk-V6M57YMK.js → chunk-I33FOKZ7.js} +227 -30
- package/dist/chunk-I33FOKZ7.js.map +1 -0
- package/dist/{chunk-GVBEI5R3.cjs → chunk-J2CDPIRC.cjs} +233 -36
- package/dist/chunk-J2CDPIRC.cjs.map +1 -0
- package/dist/{chunk-KYOCDRUO.cjs → chunk-LB3FEV7Z.cjs} +97 -2
- package/dist/chunk-LB3FEV7Z.cjs.map +1 -0
- package/dist/{chunk-QXYAOILF.js → chunk-LGCUOLP6.js} +6 -5
- package/dist/chunk-LGCUOLP6.js.map +1 -0
- package/dist/{chunk-GWD75Q25.js → chunk-LLXCX5KK.js} +6 -5
- package/dist/chunk-LLXCX5KK.js.map +1 -0
- package/dist/chunk-MCO52PV5.js +520 -0
- package/dist/chunk-MCO52PV5.js.map +1 -0
- package/dist/{chunk-G6PUWKQC.cjs → chunk-NDQD3ZRY.cjs} +15 -14
- package/dist/chunk-NDQD3ZRY.cjs.map +1 -0
- package/dist/chunk-OD65OZIW.cjs +159 -0
- package/dist/chunk-OD65OZIW.cjs.map +1 -0
- package/dist/chunk-RCMYEWBE.js +11 -0
- package/dist/chunk-RCMYEWBE.js.map +1 -0
- package/dist/{chunk-KSXEBV2H.cjs → chunk-RRH7ZPXC.cjs} +6 -6
- package/dist/{chunk-KSXEBV2H.cjs.map → chunk-RRH7ZPXC.cjs.map} +1 -1
- package/dist/{chunk-DQNVAXG6.js → chunk-RXS455MR.js} +2 -2
- package/dist/chunk-RXS455MR.js.map +1 -0
- package/dist/{chunk-LIHKQEIP.cjs → chunk-SE6WWDVW.cjs} +15 -14
- package/dist/chunk-SE6WWDVW.cjs.map +1 -0
- package/dist/{chunk-5IH3NRXE.js → chunk-SWY6PWXK.js} +4 -4
- package/dist/{chunk-5IH3NRXE.js.map → chunk-SWY6PWXK.js.map} +1 -1
- package/dist/chunk-TDJEKXEP.js +212 -0
- package/dist/chunk-TDJEKXEP.js.map +1 -0
- package/dist/{chunk-NK5EVL5C.cjs → chunk-U3APKQ7P.cjs} +15 -14
- package/dist/chunk-U3APKQ7P.cjs.map +1 -0
- package/dist/chunk-UDCQTOVU.cjs +523 -0
- package/dist/chunk-UDCQTOVU.cjs.map +1 -0
- package/dist/{chunk-EWTAMY6L.cjs → chunk-USBANZ7K.cjs} +27 -33
- package/dist/chunk-USBANZ7K.cjs.map +1 -0
- package/dist/chunk-WTS34S5E.cjs +765 -0
- package/dist/chunk-WTS34S5E.cjs.map +1 -0
- package/dist/{chunk-2Y6V5E7H.js → chunk-XIBOFTOL.js} +57 -7
- package/dist/chunk-XIBOFTOL.js.map +1 -0
- package/dist/{chunk-ZFSRMGWO.js → chunk-XUEIUEPI.js} +6 -5
- package/dist/chunk-XUEIUEPI.js.map +1 -0
- package/dist/{chunk-64AJVB6O.cjs → chunk-YEYKJFEC.cjs} +14 -13
- package/dist/chunk-YEYKJFEC.cjs.map +1 -0
- package/dist/{chunk-5S2YDMEJ.js → chunk-YMBBM5K7.js} +36 -9
- package/dist/chunk-YMBBM5K7.js.map +1 -0
- package/dist/chunk-YORQQXGO.js +155 -0
- package/dist/chunk-YORQQXGO.js.map +1 -0
- package/dist/components/ActivityPreview.cjs +15 -9
- package/dist/components/ActivityPreview.d.cts +9 -3
- package/dist/components/ActivityPreview.d.ts +9 -3
- package/dist/components/ActivityPreview.js +14 -8
- package/dist/components/ActivitySequence.cjs +16 -10
- package/dist/components/ActivitySequence.d.cts +112 -6
- package/dist/components/ActivitySequence.d.ts +112 -6
- package/dist/components/ActivitySequence.js +15 -9
- package/dist/components/Dictation.cjs +19 -0
- package/dist/components/Dictation.cjs.map +1 -0
- package/dist/components/Dictation.d.cts +17 -0
- package/dist/components/Dictation.d.ts +17 -0
- package/dist/components/Dictation.js +10 -0
- package/dist/components/Dictation.js.map +1 -0
- package/dist/components/FillInTheBlanks.cjs +6 -5
- package/dist/components/FillInTheBlanks.d.cts +2 -1
- package/dist/components/FillInTheBlanks.d.ts +2 -1
- package/dist/components/FillInTheBlanks.js +5 -4
- package/dist/components/GapSelect.cjs +6 -5
- package/dist/components/GapSelect.d.cts +2 -1
- package/dist/components/GapSelect.d.ts +2 -1
- package/dist/components/GapSelect.js +5 -4
- package/dist/components/MultipleChoice.cjs +6 -5
- package/dist/components/MultipleChoice.d.cts +2 -1
- package/dist/components/MultipleChoice.d.ts +2 -1
- package/dist/components/MultipleChoice.js +5 -4
- package/dist/components/PronunciationFeedback.cjs +16 -0
- package/dist/components/PronunciationFeedback.cjs.map +1 -0
- package/dist/components/PronunciationFeedback.d.cts +64 -0
- package/dist/components/PronunciationFeedback.d.ts +64 -0
- package/dist/components/PronunciationFeedback.js +7 -0
- package/dist/components/PronunciationFeedback.js.map +1 -0
- package/dist/components/ReadAloud.cjs +21 -0
- package/dist/components/ReadAloud.cjs.map +1 -0
- package/dist/components/ReadAloud.d.cts +15 -0
- package/dist/components/ReadAloud.d.ts +15 -0
- package/dist/components/ReadAloud.js +12 -0
- package/dist/components/ReadAloud.js.map +1 -0
- package/dist/components/StimulusPanel.cjs +4 -4
- package/dist/components/StimulusPanel.d.cts +2 -1
- package/dist/components/StimulusPanel.d.ts +2 -1
- package/dist/components/StimulusPanel.js +3 -3
- package/dist/components/WrittenResponse.cjs +6 -5
- package/dist/components/WrittenResponse.d.cts +4 -3
- package/dist/components/WrittenResponse.d.ts +4 -3
- package/dist/components/WrittenResponse.js +5 -4
- package/dist/hooks/useSpeechRecorder.cjs +17 -0
- package/dist/hooks/useSpeechRecorder.cjs.map +1 -0
- package/dist/hooks/useSpeechRecorder.d.cts +127 -0
- package/dist/hooks/useSpeechRecorder.d.ts +127 -0
- package/dist/hooks/useSpeechRecorder.js +4 -0
- package/dist/hooks/useSpeechRecorder.js.map +1 -0
- package/dist/i18n/LkIntlProvider.cjs +7 -7
- package/dist/i18n/LkIntlProvider.d.cts +3 -2
- package/dist/i18n/LkIntlProvider.d.ts +3 -2
- package/dist/i18n/LkIntlProvider.js +1 -1
- package/dist/index.cjs +59 -33
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -2
- package/dist/index.d.ts +7 -2
- package/dist/index.js +17 -11
- package/dist/index.js.map +1 -1
- package/dist/machine-CuwKqWXC.d.cts +26 -0
- package/dist/machine-CuwKqWXC.d.ts +26 -0
- package/dist/{strings-CN7n-BlE.d.ts → strings--ADnHcaA.d.cts} +261 -8
- package/dist/{strings-CN7n-BlE.d.cts → strings-CtdSf2St.d.ts} +261 -8
- package/dist/theme/ThemeProvider.cjs +6 -6
- package/dist/theme/ThemeProvider.d.cts +4 -4
- package/dist/theme/ThemeProvider.d.ts +4 -4
- package/dist/theme/ThemeProvider.js +1 -1
- package/dist/theme/skin.css +1050 -3
- package/package.json +43 -3
- package/dist/chunk-2Y6V5E7H.js.map +0 -1
- package/dist/chunk-5S2YDMEJ.js.map +0 -1
- package/dist/chunk-64AJVB6O.cjs.map +0 -1
- package/dist/chunk-6KMEB7TF.cjs.map +0 -1
- package/dist/chunk-AMGK7DDM.cjs.map +0 -1
- package/dist/chunk-CK7Z275S.js +0 -117
- package/dist/chunk-CK7Z275S.js.map +0 -1
- package/dist/chunk-DQNVAXG6.js.map +0 -1
- package/dist/chunk-EWTAMY6L.cjs.map +0 -1
- package/dist/chunk-FX7VMZHQ.cjs.map +0 -1
- package/dist/chunk-G6PUWKQC.cjs.map +0 -1
- package/dist/chunk-GVBEI5R3.cjs.map +0 -1
- package/dist/chunk-GWD75Q25.js.map +0 -1
- package/dist/chunk-KYOCDRUO.cjs.map +0 -1
- package/dist/chunk-LIHKQEIP.cjs.map +0 -1
- package/dist/chunk-NK5EVL5C.cjs.map +0 -1
- package/dist/chunk-QXYAOILF.js.map +0 -1
- package/dist/chunk-V6M57YMK.js.map +0 -1
- package/dist/chunk-XKGBD3UK.js.map +0 -1
- package/dist/chunk-ZFSRMGWO.js.map +0 -1
- package/dist/chunk-ZFWC4KZC.js.map +0 -1
|
@@ -1,4 +1,74 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SpeechAssessment, GradeRecord, ReadAloudData, RecordingRef, LearnerResponse, ActivityData, ActivityResult, ItemOutcome, MediaPlayLedgerEntry, MediaPlayClaim, MediaPlayGrant, InteractionEvent, ThemeTokens, RedactedActivityData, ItemGroup, SequenceEntry, ReadAloudDimension, ReadAloudWordState, Stimulus } from '@intellectif/lk-core';
|
|
2
|
+
import { R as RecordedTake, S as SpeechRecorderError } from './machine-CuwKqWXC.cjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* What an application's assessor came back with.
|
|
6
|
+
*
|
|
7
|
+
* `code` is a plain `string` and not `SpeechUnscorableCode`: an application's
|
|
8
|
+
* own assessor may refuse a take for a reason the SDK has no name for, and a
|
|
9
|
+
* narrower type would make it unreportable. This component classifies the two
|
|
10
|
+
* codes that mean "nothing was heard" and treats every other one the same way.
|
|
11
|
+
*/
|
|
12
|
+
type ReadAloudAssessResult = {
|
|
13
|
+
status: 'graded';
|
|
14
|
+
assessment: SpeechAssessment;
|
|
15
|
+
grade: GradeRecord;
|
|
16
|
+
} | {
|
|
17
|
+
status: 'unscorable';
|
|
18
|
+
code: string;
|
|
19
|
+
assessment?: SpeechAssessment;
|
|
20
|
+
} | {
|
|
21
|
+
status: 'failed';
|
|
22
|
+
retryable: boolean;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* How a take reaches the application, and how a judgement comes back.
|
|
26
|
+
*
|
|
27
|
+
* Named `recordingBinding` rather than `recording` because both
|
|
28
|
+
* `ReadAloudData.recording` (the bounds) and `ReadAloudLearnerResponse.recording`
|
|
29
|
+
* (the stored take) already exist: the plain name would read as one of those.
|
|
30
|
+
*/
|
|
31
|
+
interface RecordingBinding {
|
|
32
|
+
/**
|
|
33
|
+
* Puts the take in your storage and returns its key. **Required** outside
|
|
34
|
+
* `review`: without it a learner can speak into a control that submits
|
|
35
|
+
* nothing. Settle it — a promise that never does leaves the submit pending
|
|
36
|
+
* for ever.
|
|
37
|
+
*/
|
|
38
|
+
upload(take: RecordedTake): Promise<RecordingRef>;
|
|
39
|
+
/**
|
|
40
|
+
* Judges the stored take. `practice` only — an exam never assesses on the
|
|
41
|
+
* client. Optional: a binding without it records, uploads and submits, and
|
|
42
|
+
* the feedback is replaced by a notice.
|
|
43
|
+
*/
|
|
44
|
+
assess?(ref: RecordingRef): Promise<ReadAloudAssessResult>;
|
|
45
|
+
/** A playable link to a stored take. `review` only. */
|
|
46
|
+
playbackUrl?(ref: RecordingRef): Promise<string>;
|
|
47
|
+
}
|
|
48
|
+
interface ReadAloudProps extends ActivityProps<ReadAloudData> {
|
|
49
|
+
/** How a take is stored and judged. See {@link RecordingBinding}. */
|
|
50
|
+
recordingBinding?: RecordingBinding;
|
|
51
|
+
/**
|
|
52
|
+
* The evidence behind a stored grade, for `review`. Without it a graded
|
|
53
|
+
* outcome still shows its marks, rebuilt from `outcome.grade.details`; with
|
|
54
|
+
* neither, the score is shown and no marks are.
|
|
55
|
+
*/
|
|
56
|
+
assessment?: SpeechAssessment;
|
|
57
|
+
/**
|
|
58
|
+
* Confidence above which a break note is shown, 0..1, forwarded to
|
|
59
|
+
* {@link PronunciationFeedback}. No default — see its own prop.
|
|
60
|
+
*/
|
|
61
|
+
breakThreshold?: number;
|
|
62
|
+
/** The same, for the monotone note. */
|
|
63
|
+
monotoneThreshold?: number;
|
|
64
|
+
/**
|
|
65
|
+
* Never called. A read-aloud answer is a key in your storage, and there is
|
|
66
|
+
* none until the take has been uploaded — so there is no intermediate
|
|
67
|
+
* response to report, and reporting the take itself would offer a host a
|
|
68
|
+
* recording it has nowhere to put. `onSubmit` carries the response, once.
|
|
69
|
+
*/
|
|
70
|
+
onChange?: (response: LearnerResponse) => void;
|
|
71
|
+
}
|
|
2
72
|
|
|
3
73
|
/**
|
|
4
74
|
* How an activity is being presented. This is the single switch that decides
|
|
@@ -132,8 +202,10 @@ interface ActivityProps<TData extends ActivityData = ActivityData> {
|
|
|
132
202
|
* a different one re-declares the language of every SDK string in this
|
|
133
203
|
* subtree without changing the words.
|
|
134
204
|
*
|
|
135
|
-
* It is NOT `data.locale`, which labels xAPI statements
|
|
136
|
-
*
|
|
205
|
+
* It is NOT `data.locale`, which labels xAPI statements — and, on a
|
|
206
|
+
* dictation, places the dictation's own words: `<Dictation>` puts it, and
|
|
207
|
+
* the direction it names, on its title, hints, marks and solution. Other
|
|
208
|
+
* authored content in another language belongs on `stimulus.locale`, which
|
|
137
209
|
* `<StimulusPanel>` puts on the passage alone.
|
|
138
210
|
*/
|
|
139
211
|
locale?: string;
|
|
@@ -189,10 +261,17 @@ declare function asRenderable<TData extends ActivityData>(redacted: RedactedActi
|
|
|
189
261
|
* ```
|
|
190
262
|
*
|
|
191
263
|
* Pass `renderMode="exam"` (or `"review"`). Redacted data has no answer key, and
|
|
192
|
-
*
|
|
193
|
-
* rather than fail later: `<MultipleChoice
|
|
194
|
-
*
|
|
195
|
-
*
|
|
264
|
+
* almost every built-in activity throws at render in the default `practice`
|
|
265
|
+
* mode rather than fail later: `<MultipleChoice>`, `<FillInTheBlanks>`,
|
|
266
|
+
* `<GapSelect>` and `<Dictation>` because they grade locally, and
|
|
267
|
+
* `<WrittenResponse>` because `practice` still runs its local submit path and
|
|
268
|
+
* emits a practice-mode xAPI statement.
|
|
269
|
+
*
|
|
270
|
+
* `<ReadAloud>` is the exception and renders a projection in every mode: a
|
|
271
|
+
* read-aloud item has no answer key to withhold, so `redact()` removes only the
|
|
272
|
+
* authored feedback and leaves the reading, its language and its bounds — which
|
|
273
|
+
* is everything the component puts on screen. It grades nothing locally either;
|
|
274
|
+
* the grade comes back from whatever the application asked to judge the take.
|
|
196
275
|
*/
|
|
197
276
|
declare function asRenderableSequence(entries: readonly (RedactedActivityData | RedactedItemGroupData)[]): readonly SequenceEntry<RenderableActivity>[];
|
|
198
277
|
/** Structural shape of a `redactItemGroup()` projection, as it arrives from a server. */
|
|
@@ -328,6 +407,47 @@ interface SequenceMediaBudget {
|
|
|
328
407
|
/** Translations for the transport chrome. Defaults are English. */
|
|
329
408
|
strings?: Partial<MediaTransportStrings>;
|
|
330
409
|
}
|
|
410
|
+
/**
|
|
411
|
+
* Which slot a recording belongs to, stamped on every call the pager makes.
|
|
412
|
+
*
|
|
413
|
+
* Exactly the shape {@link ActivitySequenceProps.onSubmit} already passes, so
|
|
414
|
+
* one identity travels with the answer and with the take that answer points at
|
|
415
|
+
* — and a consumer writes `slotId` in both places rather than reconciling two
|
|
416
|
+
* spellings of "which question was this".
|
|
417
|
+
*/
|
|
418
|
+
interface SequenceRecordingSlot {
|
|
419
|
+
/** Identity from `flattenSequence` — stable under shuffling. Store against THIS. */
|
|
420
|
+
slotId: string;
|
|
421
|
+
/** Presented position, which moves under shuffling. */
|
|
422
|
+
index: number;
|
|
423
|
+
activityId: string;
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* The pager-level half of a read-aloud recording binding: where every take in
|
|
427
|
+
* this sequence is stored, and how a judgement comes back.
|
|
428
|
+
*
|
|
429
|
+
* One prop at both levels, because it is one concept — the media-budget
|
|
430
|
+
* precedent ({@link SequenceMediaBudget} beside {@link MediaBudgetBinding}).
|
|
431
|
+
* The difference is the second argument: a per-slot binding knows which slot it
|
|
432
|
+
* belongs to, so a sequence-level one is told.
|
|
433
|
+
*
|
|
434
|
+
* The SDK records and hands over; it never judges. `assess` is `practice` only
|
|
435
|
+
* and optional — a sequence that only stores takes gets the "assessment is not
|
|
436
|
+
* available" notice rather than a throw — and `playbackUrl` is `review` only.
|
|
437
|
+
* A slot whose activity is not a read-aloud never calls any of them.
|
|
438
|
+
*/
|
|
439
|
+
interface SequenceRecordingBinding {
|
|
440
|
+
/**
|
|
441
|
+
* Puts the take in your storage and returns its key. **Required** outside
|
|
442
|
+
* `review`: without it a learner can speak into a control that submits
|
|
443
|
+
* nothing, which the component refuses to render. Settle it.
|
|
444
|
+
*/
|
|
445
|
+
upload(take: RecordedTake, slot: SequenceRecordingSlot): Promise<RecordingRef>;
|
|
446
|
+
/** Judges the stored take. `practice` only; an exam never assesses on the client. */
|
|
447
|
+
assess?(ref: RecordingRef, slot: SequenceRecordingSlot): Promise<ReadAloudAssessResult>;
|
|
448
|
+
/** A playable link to a stored take. `review` only. */
|
|
449
|
+
playbackUrl?(ref: RecordingRef, slot: SequenceRecordingSlot): Promise<string>;
|
|
450
|
+
}
|
|
331
451
|
|
|
332
452
|
/**
|
|
333
453
|
* Every string the SDK's own chrome renders.
|
|
@@ -417,6 +537,139 @@ interface LkStrings {
|
|
|
417
537
|
questionProgress: (index: number, total: number) => string;
|
|
418
538
|
/** Shown when no renderer is registered for an activity type. */
|
|
419
539
|
unsupportedActivity: string;
|
|
540
|
+
/** Accessible name of the box the learner types the recording into. */
|
|
541
|
+
dictationInputLabel: string;
|
|
542
|
+
/** Accessible name of the group holding the recording. */
|
|
543
|
+
dictationRecording: string;
|
|
544
|
+
/** Accessible name of the group holding the slower recording, and its default `alt`. */
|
|
545
|
+
dictationSlowRecording: string;
|
|
546
|
+
/** The progressive-hint button, with how many transcript words are shown so far. */
|
|
547
|
+
dictationRevealNextWord: (revealed: number, total: number) => string;
|
|
548
|
+
/** Hides every revealed hint word again. */
|
|
549
|
+
dictationResetHints: string;
|
|
550
|
+
/** The solution toggle: shows the transcript after the attempt is marked. */
|
|
551
|
+
showSolution: string;
|
|
552
|
+
hideSolution: string;
|
|
553
|
+
/** Accessible name of the revealed transcript. */
|
|
554
|
+
dictationSolutionLabel: string;
|
|
555
|
+
/** Accessible name of the word-by-word marked result. */
|
|
556
|
+
dictationMarksLabel: string;
|
|
557
|
+
/** Tells the learner the marks compare the normalised text, not what they typed. */
|
|
558
|
+
dictationDiffNote: string;
|
|
559
|
+
/**
|
|
560
|
+
* The four sentences a screen reader hears for a marked word — the only
|
|
561
|
+
* channel the marks have for assistive technology; the glyphs and the
|
|
562
|
+
* character diff are decoration.
|
|
563
|
+
*/
|
|
564
|
+
dictationWordCorrect: (word: string) => string;
|
|
565
|
+
dictationWordWrong: (word: string, expected: string) => string;
|
|
566
|
+
dictationWordMissing: (expected: string) => string;
|
|
567
|
+
dictationWordExtra: (word: string) => string;
|
|
568
|
+
/** The legend rows; the character-level marks reuse the same four. */
|
|
569
|
+
dictationLegendCorrect: string;
|
|
570
|
+
dictationLegendWrong: string;
|
|
571
|
+
dictationLegendMissing: string;
|
|
572
|
+
dictationLegendExtra: string;
|
|
573
|
+
/** Marked result of an attempt with no words in it once punctuation and spacing are ignored, an empty one included. */
|
|
574
|
+
dictationNothingTyped: string;
|
|
575
|
+
/**
|
|
576
|
+
* Appended to the score announcement, e.g. "4 of 6 words correct." — a whole
|
|
577
|
+
* sentence, because authored feedback may follow it.
|
|
578
|
+
*/
|
|
579
|
+
dictationWordsSummary: (correct: number, total: number) => string;
|
|
580
|
+
/** Accessible name of the group holding the model recording. */
|
|
581
|
+
readAloudModelRecording: string;
|
|
582
|
+
/** Accessible name of the group holding the slower model recording, and its default `alt`. */
|
|
583
|
+
readAloudSlowRecording: string;
|
|
584
|
+
/** Starts a take. */
|
|
585
|
+
readAloudRecord: string;
|
|
586
|
+
/** Ends the take in progress. */
|
|
587
|
+
readAloudStop: string;
|
|
588
|
+
/** Throws the take away so the learner can start over. */
|
|
589
|
+
readAloudRerecord: string;
|
|
590
|
+
/** Accessible name of the player for the take the learner just made. */
|
|
591
|
+
readAloudYourRecording: string;
|
|
592
|
+
/**
|
|
593
|
+
* Live progress while recording. Whole seconds, not a `m:ss` clock: a
|
|
594
|
+
* recording is bounded in seconds by the item, and a translation should not
|
|
595
|
+
* have to reimplement a clock to change the word around it.
|
|
596
|
+
*
|
|
597
|
+
* Shown on screen and hidden from assistive technology: it changes every
|
|
598
|
+
* second, and a screen reader that spoke each change would speak into the
|
|
599
|
+
* take being assessed. The two sentences below are what is announced instead.
|
|
600
|
+
*/
|
|
601
|
+
readAloudRecordingProgress: (seconds: number, maxSeconds: number) => string;
|
|
602
|
+
/** Announced once when a capture begins. */
|
|
603
|
+
readAloudRecordingStarted: string;
|
|
604
|
+
/**
|
|
605
|
+
* Announced once when a capture ends, by the learner or at its own bound.
|
|
606
|
+
* Carries the length because the progress counter is not announced: a take
|
|
607
|
+
* that reads back as "20 of 20 seconds" is one that stopped itself.
|
|
608
|
+
*/
|
|
609
|
+
readAloudRecordingStopped: (seconds: number, maxSeconds: number) => string;
|
|
610
|
+
/** How many takes are left. Called with 0 as well, so the wording is one translation's. */
|
|
611
|
+
readAloudTakesRemaining: (remaining: number, max: number) => string;
|
|
612
|
+
/** `exam` only: hands the item in with no recording at all, deliberately. */
|
|
613
|
+
readAloudSubmitWithoutRecording: string;
|
|
614
|
+
/** Pending, while the take travels to the application's storage. */
|
|
615
|
+
readAloudUploading: string;
|
|
616
|
+
/** The take never reached storage, so nothing was submitted. */
|
|
617
|
+
readAloudUploadFailed: string;
|
|
618
|
+
/** Retries whichever step just failed. */
|
|
619
|
+
readAloudTryAgain: string;
|
|
620
|
+
/** Pending, while the assessor judges the take. */
|
|
621
|
+
readAloudAssessing: string;
|
|
622
|
+
/** The binding stores recordings but judges none, so there is no feedback to show. */
|
|
623
|
+
readAloudAssessmentUnavailable: string;
|
|
624
|
+
/** The assessor found no speech, or too little of it, in the take. */
|
|
625
|
+
readAloudNotHeard: string;
|
|
626
|
+
/** The assessor produced no grade for any other reason. The code itself is never shown. */
|
|
627
|
+
readAloudNotAssessed: string;
|
|
628
|
+
/** The assessment could not be run at all — a failure of the call, not of the reading. */
|
|
629
|
+
readAloudAssessmentFailed: string;
|
|
630
|
+
/**
|
|
631
|
+
* What went wrong with the microphone or with the take. One function rather
|
|
632
|
+
* than five keys, so a translation keeps the five sentences together and the
|
|
633
|
+
* SDK keeps one name for the concept.
|
|
634
|
+
*/
|
|
635
|
+
readAloudRecorderError: (reason: SpeechRecorderError) => string;
|
|
636
|
+
/** Accessible name of the whole feedback region. */
|
|
637
|
+
pronunciationFeedbackLabel: string;
|
|
638
|
+
/** Name of one scored dimension, as a learner reads it. */
|
|
639
|
+
pronunciationDimension: (dimension: ReadAloudDimension) => string;
|
|
640
|
+
/** A dimension or a word the engine did not measure. NEVER rendered as 0%. */
|
|
641
|
+
pronunciationNotAssessed: string;
|
|
642
|
+
/** Accessible name of the word-by-word marks. */
|
|
643
|
+
pronunciationWordsLabel: string;
|
|
644
|
+
/** One legend row per marking state — the same four states the marks carry. */
|
|
645
|
+
pronunciationLegend: (state: ReadAloudWordState) => string;
|
|
646
|
+
/**
|
|
647
|
+
* The four sentences a screen reader hears for a marked word: the only
|
|
648
|
+
* channel the marks have for assistive technology, since the glyph and the
|
|
649
|
+
* decoration are both hidden from it.
|
|
650
|
+
*/
|
|
651
|
+
pronunciationWordCorrect: (word: string) => string;
|
|
652
|
+
pronunciationWordMispronounced: (word: string) => string;
|
|
653
|
+
pronunciationWordOmitted: (word: string) => string;
|
|
654
|
+
pronunciationWordInserted: (word: string) => string;
|
|
655
|
+
/** Opens one word's syllables, sounds and timings. */
|
|
656
|
+
pronunciationWordDetails: (word: string) => string;
|
|
657
|
+
pronunciationSyllables: string;
|
|
658
|
+
pronunciationPhonemes: string;
|
|
659
|
+
/** A syllable the engine also spelled out, e.g. `('ˈhæ', 'ha')`. */
|
|
660
|
+
pronunciationSyllableSpelling: (syllable: string, grapheme: string) => string;
|
|
661
|
+
/** A sound the engine named no symbol for; `ordinal` is 1-based. */
|
|
662
|
+
pronunciationPhonemePosition: (ordinal: number) => string;
|
|
663
|
+
/** Introduces the sounds the engine thought it heard in a sound's place. */
|
|
664
|
+
pronunciationHeardAs: string;
|
|
665
|
+
/** Plays one word out of the learner's own take. */
|
|
666
|
+
pronunciationPlayWord: (word: string) => string;
|
|
667
|
+
pronunciationBreakUnexpected: string;
|
|
668
|
+
pronunciationBreakMissing: string;
|
|
669
|
+
/** Shown only past the caller's own monotone threshold; the SDK sets none. */
|
|
670
|
+
pronunciationMonotone: string;
|
|
671
|
+
/** Names the alphabet the phoneme symbols are written in. */
|
|
672
|
+
pronunciationIpaNote: string;
|
|
420
673
|
/**
|
|
421
674
|
* `<ActivityPreview>`, in place of a draft that still has something missing.
|
|
422
675
|
* Author-facing, not learner-facing — but an editor is translated too.
|
|
@@ -475,4 +728,4 @@ declare const DEFAULT_STRINGS: LkStrings;
|
|
|
475
728
|
*/
|
|
476
729
|
declare function mergeStrings(base: LkStrings, override?: LkStringsOverride): LkStrings;
|
|
477
730
|
|
|
478
|
-
export { type ActivityProps as A, DEFAULT_STRINGS as D, type HtmlSanitizer as H, type LkStrings as L, type MediaBudgetBinding as M, type
|
|
731
|
+
export { type ActivityProps as A, DEFAULT_STRINGS as D, type HtmlSanitizer as H, type LkStrings as L, type MediaBudgetBinding as M, type ReadAloudAssessResult as R, type SequenceMediaBudget as S, type LkStringsOverride as a, type MediaTransportStrings as b, type ReadAloudProps as c, type RecordingBinding as d, type RenderMode as e, type Renderable as f, type RenderableActivity as g, type SequenceRecordingBinding as h, type SequenceRecordingSlot as i, asRenderable as j, asRenderableSequence as k, mergeStrings as m };
|
|
@@ -1,4 +1,74 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SpeechAssessment, GradeRecord, ReadAloudData, RecordingRef, LearnerResponse, ActivityData, ActivityResult, ItemOutcome, MediaPlayLedgerEntry, MediaPlayClaim, MediaPlayGrant, InteractionEvent, ThemeTokens, RedactedActivityData, ItemGroup, SequenceEntry, ReadAloudDimension, ReadAloudWordState, Stimulus } from '@intellectif/lk-core';
|
|
2
|
+
import { R as RecordedTake, S as SpeechRecorderError } from './machine-CuwKqWXC.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* What an application's assessor came back with.
|
|
6
|
+
*
|
|
7
|
+
* `code` is a plain `string` and not `SpeechUnscorableCode`: an application's
|
|
8
|
+
* own assessor may refuse a take for a reason the SDK has no name for, and a
|
|
9
|
+
* narrower type would make it unreportable. This component classifies the two
|
|
10
|
+
* codes that mean "nothing was heard" and treats every other one the same way.
|
|
11
|
+
*/
|
|
12
|
+
type ReadAloudAssessResult = {
|
|
13
|
+
status: 'graded';
|
|
14
|
+
assessment: SpeechAssessment;
|
|
15
|
+
grade: GradeRecord;
|
|
16
|
+
} | {
|
|
17
|
+
status: 'unscorable';
|
|
18
|
+
code: string;
|
|
19
|
+
assessment?: SpeechAssessment;
|
|
20
|
+
} | {
|
|
21
|
+
status: 'failed';
|
|
22
|
+
retryable: boolean;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* How a take reaches the application, and how a judgement comes back.
|
|
26
|
+
*
|
|
27
|
+
* Named `recordingBinding` rather than `recording` because both
|
|
28
|
+
* `ReadAloudData.recording` (the bounds) and `ReadAloudLearnerResponse.recording`
|
|
29
|
+
* (the stored take) already exist: the plain name would read as one of those.
|
|
30
|
+
*/
|
|
31
|
+
interface RecordingBinding {
|
|
32
|
+
/**
|
|
33
|
+
* Puts the take in your storage and returns its key. **Required** outside
|
|
34
|
+
* `review`: without it a learner can speak into a control that submits
|
|
35
|
+
* nothing. Settle it — a promise that never does leaves the submit pending
|
|
36
|
+
* for ever.
|
|
37
|
+
*/
|
|
38
|
+
upload(take: RecordedTake): Promise<RecordingRef>;
|
|
39
|
+
/**
|
|
40
|
+
* Judges the stored take. `practice` only — an exam never assesses on the
|
|
41
|
+
* client. Optional: a binding without it records, uploads and submits, and
|
|
42
|
+
* the feedback is replaced by a notice.
|
|
43
|
+
*/
|
|
44
|
+
assess?(ref: RecordingRef): Promise<ReadAloudAssessResult>;
|
|
45
|
+
/** A playable link to a stored take. `review` only. */
|
|
46
|
+
playbackUrl?(ref: RecordingRef): Promise<string>;
|
|
47
|
+
}
|
|
48
|
+
interface ReadAloudProps extends ActivityProps<ReadAloudData> {
|
|
49
|
+
/** How a take is stored and judged. See {@link RecordingBinding}. */
|
|
50
|
+
recordingBinding?: RecordingBinding;
|
|
51
|
+
/**
|
|
52
|
+
* The evidence behind a stored grade, for `review`. Without it a graded
|
|
53
|
+
* outcome still shows its marks, rebuilt from `outcome.grade.details`; with
|
|
54
|
+
* neither, the score is shown and no marks are.
|
|
55
|
+
*/
|
|
56
|
+
assessment?: SpeechAssessment;
|
|
57
|
+
/**
|
|
58
|
+
* Confidence above which a break note is shown, 0..1, forwarded to
|
|
59
|
+
* {@link PronunciationFeedback}. No default — see its own prop.
|
|
60
|
+
*/
|
|
61
|
+
breakThreshold?: number;
|
|
62
|
+
/** The same, for the monotone note. */
|
|
63
|
+
monotoneThreshold?: number;
|
|
64
|
+
/**
|
|
65
|
+
* Never called. A read-aloud answer is a key in your storage, and there is
|
|
66
|
+
* none until the take has been uploaded — so there is no intermediate
|
|
67
|
+
* response to report, and reporting the take itself would offer a host a
|
|
68
|
+
* recording it has nowhere to put. `onSubmit` carries the response, once.
|
|
69
|
+
*/
|
|
70
|
+
onChange?: (response: LearnerResponse) => void;
|
|
71
|
+
}
|
|
2
72
|
|
|
3
73
|
/**
|
|
4
74
|
* How an activity is being presented. This is the single switch that decides
|
|
@@ -132,8 +202,10 @@ interface ActivityProps<TData extends ActivityData = ActivityData> {
|
|
|
132
202
|
* a different one re-declares the language of every SDK string in this
|
|
133
203
|
* subtree without changing the words.
|
|
134
204
|
*
|
|
135
|
-
* It is NOT `data.locale`, which labels xAPI statements
|
|
136
|
-
*
|
|
205
|
+
* It is NOT `data.locale`, which labels xAPI statements — and, on a
|
|
206
|
+
* dictation, places the dictation's own words: `<Dictation>` puts it, and
|
|
207
|
+
* the direction it names, on its title, hints, marks and solution. Other
|
|
208
|
+
* authored content in another language belongs on `stimulus.locale`, which
|
|
137
209
|
* `<StimulusPanel>` puts on the passage alone.
|
|
138
210
|
*/
|
|
139
211
|
locale?: string;
|
|
@@ -189,10 +261,17 @@ declare function asRenderable<TData extends ActivityData>(redacted: RedactedActi
|
|
|
189
261
|
* ```
|
|
190
262
|
*
|
|
191
263
|
* Pass `renderMode="exam"` (or `"review"`). Redacted data has no answer key, and
|
|
192
|
-
*
|
|
193
|
-
* rather than fail later: `<MultipleChoice
|
|
194
|
-
*
|
|
195
|
-
*
|
|
264
|
+
* almost every built-in activity throws at render in the default `practice`
|
|
265
|
+
* mode rather than fail later: `<MultipleChoice>`, `<FillInTheBlanks>`,
|
|
266
|
+
* `<GapSelect>` and `<Dictation>` because they grade locally, and
|
|
267
|
+
* `<WrittenResponse>` because `practice` still runs its local submit path and
|
|
268
|
+
* emits a practice-mode xAPI statement.
|
|
269
|
+
*
|
|
270
|
+
* `<ReadAloud>` is the exception and renders a projection in every mode: a
|
|
271
|
+
* read-aloud item has no answer key to withhold, so `redact()` removes only the
|
|
272
|
+
* authored feedback and leaves the reading, its language and its bounds — which
|
|
273
|
+
* is everything the component puts on screen. It grades nothing locally either;
|
|
274
|
+
* the grade comes back from whatever the application asked to judge the take.
|
|
196
275
|
*/
|
|
197
276
|
declare function asRenderableSequence(entries: readonly (RedactedActivityData | RedactedItemGroupData)[]): readonly SequenceEntry<RenderableActivity>[];
|
|
198
277
|
/** Structural shape of a `redactItemGroup()` projection, as it arrives from a server. */
|
|
@@ -328,6 +407,47 @@ interface SequenceMediaBudget {
|
|
|
328
407
|
/** Translations for the transport chrome. Defaults are English. */
|
|
329
408
|
strings?: Partial<MediaTransportStrings>;
|
|
330
409
|
}
|
|
410
|
+
/**
|
|
411
|
+
* Which slot a recording belongs to, stamped on every call the pager makes.
|
|
412
|
+
*
|
|
413
|
+
* Exactly the shape {@link ActivitySequenceProps.onSubmit} already passes, so
|
|
414
|
+
* one identity travels with the answer and with the take that answer points at
|
|
415
|
+
* — and a consumer writes `slotId` in both places rather than reconciling two
|
|
416
|
+
* spellings of "which question was this".
|
|
417
|
+
*/
|
|
418
|
+
interface SequenceRecordingSlot {
|
|
419
|
+
/** Identity from `flattenSequence` — stable under shuffling. Store against THIS. */
|
|
420
|
+
slotId: string;
|
|
421
|
+
/** Presented position, which moves under shuffling. */
|
|
422
|
+
index: number;
|
|
423
|
+
activityId: string;
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* The pager-level half of a read-aloud recording binding: where every take in
|
|
427
|
+
* this sequence is stored, and how a judgement comes back.
|
|
428
|
+
*
|
|
429
|
+
* One prop at both levels, because it is one concept — the media-budget
|
|
430
|
+
* precedent ({@link SequenceMediaBudget} beside {@link MediaBudgetBinding}).
|
|
431
|
+
* The difference is the second argument: a per-slot binding knows which slot it
|
|
432
|
+
* belongs to, so a sequence-level one is told.
|
|
433
|
+
*
|
|
434
|
+
* The SDK records and hands over; it never judges. `assess` is `practice` only
|
|
435
|
+
* and optional — a sequence that only stores takes gets the "assessment is not
|
|
436
|
+
* available" notice rather than a throw — and `playbackUrl` is `review` only.
|
|
437
|
+
* A slot whose activity is not a read-aloud never calls any of them.
|
|
438
|
+
*/
|
|
439
|
+
interface SequenceRecordingBinding {
|
|
440
|
+
/**
|
|
441
|
+
* Puts the take in your storage and returns its key. **Required** outside
|
|
442
|
+
* `review`: without it a learner can speak into a control that submits
|
|
443
|
+
* nothing, which the component refuses to render. Settle it.
|
|
444
|
+
*/
|
|
445
|
+
upload(take: RecordedTake, slot: SequenceRecordingSlot): Promise<RecordingRef>;
|
|
446
|
+
/** Judges the stored take. `practice` only; an exam never assesses on the client. */
|
|
447
|
+
assess?(ref: RecordingRef, slot: SequenceRecordingSlot): Promise<ReadAloudAssessResult>;
|
|
448
|
+
/** A playable link to a stored take. `review` only. */
|
|
449
|
+
playbackUrl?(ref: RecordingRef, slot: SequenceRecordingSlot): Promise<string>;
|
|
450
|
+
}
|
|
331
451
|
|
|
332
452
|
/**
|
|
333
453
|
* Every string the SDK's own chrome renders.
|
|
@@ -417,6 +537,139 @@ interface LkStrings {
|
|
|
417
537
|
questionProgress: (index: number, total: number) => string;
|
|
418
538
|
/** Shown when no renderer is registered for an activity type. */
|
|
419
539
|
unsupportedActivity: string;
|
|
540
|
+
/** Accessible name of the box the learner types the recording into. */
|
|
541
|
+
dictationInputLabel: string;
|
|
542
|
+
/** Accessible name of the group holding the recording. */
|
|
543
|
+
dictationRecording: string;
|
|
544
|
+
/** Accessible name of the group holding the slower recording, and its default `alt`. */
|
|
545
|
+
dictationSlowRecording: string;
|
|
546
|
+
/** The progressive-hint button, with how many transcript words are shown so far. */
|
|
547
|
+
dictationRevealNextWord: (revealed: number, total: number) => string;
|
|
548
|
+
/** Hides every revealed hint word again. */
|
|
549
|
+
dictationResetHints: string;
|
|
550
|
+
/** The solution toggle: shows the transcript after the attempt is marked. */
|
|
551
|
+
showSolution: string;
|
|
552
|
+
hideSolution: string;
|
|
553
|
+
/** Accessible name of the revealed transcript. */
|
|
554
|
+
dictationSolutionLabel: string;
|
|
555
|
+
/** Accessible name of the word-by-word marked result. */
|
|
556
|
+
dictationMarksLabel: string;
|
|
557
|
+
/** Tells the learner the marks compare the normalised text, not what they typed. */
|
|
558
|
+
dictationDiffNote: string;
|
|
559
|
+
/**
|
|
560
|
+
* The four sentences a screen reader hears for a marked word — the only
|
|
561
|
+
* channel the marks have for assistive technology; the glyphs and the
|
|
562
|
+
* character diff are decoration.
|
|
563
|
+
*/
|
|
564
|
+
dictationWordCorrect: (word: string) => string;
|
|
565
|
+
dictationWordWrong: (word: string, expected: string) => string;
|
|
566
|
+
dictationWordMissing: (expected: string) => string;
|
|
567
|
+
dictationWordExtra: (word: string) => string;
|
|
568
|
+
/** The legend rows; the character-level marks reuse the same four. */
|
|
569
|
+
dictationLegendCorrect: string;
|
|
570
|
+
dictationLegendWrong: string;
|
|
571
|
+
dictationLegendMissing: string;
|
|
572
|
+
dictationLegendExtra: string;
|
|
573
|
+
/** Marked result of an attempt with no words in it once punctuation and spacing are ignored, an empty one included. */
|
|
574
|
+
dictationNothingTyped: string;
|
|
575
|
+
/**
|
|
576
|
+
* Appended to the score announcement, e.g. "4 of 6 words correct." — a whole
|
|
577
|
+
* sentence, because authored feedback may follow it.
|
|
578
|
+
*/
|
|
579
|
+
dictationWordsSummary: (correct: number, total: number) => string;
|
|
580
|
+
/** Accessible name of the group holding the model recording. */
|
|
581
|
+
readAloudModelRecording: string;
|
|
582
|
+
/** Accessible name of the group holding the slower model recording, and its default `alt`. */
|
|
583
|
+
readAloudSlowRecording: string;
|
|
584
|
+
/** Starts a take. */
|
|
585
|
+
readAloudRecord: string;
|
|
586
|
+
/** Ends the take in progress. */
|
|
587
|
+
readAloudStop: string;
|
|
588
|
+
/** Throws the take away so the learner can start over. */
|
|
589
|
+
readAloudRerecord: string;
|
|
590
|
+
/** Accessible name of the player for the take the learner just made. */
|
|
591
|
+
readAloudYourRecording: string;
|
|
592
|
+
/**
|
|
593
|
+
* Live progress while recording. Whole seconds, not a `m:ss` clock: a
|
|
594
|
+
* recording is bounded in seconds by the item, and a translation should not
|
|
595
|
+
* have to reimplement a clock to change the word around it.
|
|
596
|
+
*
|
|
597
|
+
* Shown on screen and hidden from assistive technology: it changes every
|
|
598
|
+
* second, and a screen reader that spoke each change would speak into the
|
|
599
|
+
* take being assessed. The two sentences below are what is announced instead.
|
|
600
|
+
*/
|
|
601
|
+
readAloudRecordingProgress: (seconds: number, maxSeconds: number) => string;
|
|
602
|
+
/** Announced once when a capture begins. */
|
|
603
|
+
readAloudRecordingStarted: string;
|
|
604
|
+
/**
|
|
605
|
+
* Announced once when a capture ends, by the learner or at its own bound.
|
|
606
|
+
* Carries the length because the progress counter is not announced: a take
|
|
607
|
+
* that reads back as "20 of 20 seconds" is one that stopped itself.
|
|
608
|
+
*/
|
|
609
|
+
readAloudRecordingStopped: (seconds: number, maxSeconds: number) => string;
|
|
610
|
+
/** How many takes are left. Called with 0 as well, so the wording is one translation's. */
|
|
611
|
+
readAloudTakesRemaining: (remaining: number, max: number) => string;
|
|
612
|
+
/** `exam` only: hands the item in with no recording at all, deliberately. */
|
|
613
|
+
readAloudSubmitWithoutRecording: string;
|
|
614
|
+
/** Pending, while the take travels to the application's storage. */
|
|
615
|
+
readAloudUploading: string;
|
|
616
|
+
/** The take never reached storage, so nothing was submitted. */
|
|
617
|
+
readAloudUploadFailed: string;
|
|
618
|
+
/** Retries whichever step just failed. */
|
|
619
|
+
readAloudTryAgain: string;
|
|
620
|
+
/** Pending, while the assessor judges the take. */
|
|
621
|
+
readAloudAssessing: string;
|
|
622
|
+
/** The binding stores recordings but judges none, so there is no feedback to show. */
|
|
623
|
+
readAloudAssessmentUnavailable: string;
|
|
624
|
+
/** The assessor found no speech, or too little of it, in the take. */
|
|
625
|
+
readAloudNotHeard: string;
|
|
626
|
+
/** The assessor produced no grade for any other reason. The code itself is never shown. */
|
|
627
|
+
readAloudNotAssessed: string;
|
|
628
|
+
/** The assessment could not be run at all — a failure of the call, not of the reading. */
|
|
629
|
+
readAloudAssessmentFailed: string;
|
|
630
|
+
/**
|
|
631
|
+
* What went wrong with the microphone or with the take. One function rather
|
|
632
|
+
* than five keys, so a translation keeps the five sentences together and the
|
|
633
|
+
* SDK keeps one name for the concept.
|
|
634
|
+
*/
|
|
635
|
+
readAloudRecorderError: (reason: SpeechRecorderError) => string;
|
|
636
|
+
/** Accessible name of the whole feedback region. */
|
|
637
|
+
pronunciationFeedbackLabel: string;
|
|
638
|
+
/** Name of one scored dimension, as a learner reads it. */
|
|
639
|
+
pronunciationDimension: (dimension: ReadAloudDimension) => string;
|
|
640
|
+
/** A dimension or a word the engine did not measure. NEVER rendered as 0%. */
|
|
641
|
+
pronunciationNotAssessed: string;
|
|
642
|
+
/** Accessible name of the word-by-word marks. */
|
|
643
|
+
pronunciationWordsLabel: string;
|
|
644
|
+
/** One legend row per marking state — the same four states the marks carry. */
|
|
645
|
+
pronunciationLegend: (state: ReadAloudWordState) => string;
|
|
646
|
+
/**
|
|
647
|
+
* The four sentences a screen reader hears for a marked word: the only
|
|
648
|
+
* channel the marks have for assistive technology, since the glyph and the
|
|
649
|
+
* decoration are both hidden from it.
|
|
650
|
+
*/
|
|
651
|
+
pronunciationWordCorrect: (word: string) => string;
|
|
652
|
+
pronunciationWordMispronounced: (word: string) => string;
|
|
653
|
+
pronunciationWordOmitted: (word: string) => string;
|
|
654
|
+
pronunciationWordInserted: (word: string) => string;
|
|
655
|
+
/** Opens one word's syllables, sounds and timings. */
|
|
656
|
+
pronunciationWordDetails: (word: string) => string;
|
|
657
|
+
pronunciationSyllables: string;
|
|
658
|
+
pronunciationPhonemes: string;
|
|
659
|
+
/** A syllable the engine also spelled out, e.g. `('ˈhæ', 'ha')`. */
|
|
660
|
+
pronunciationSyllableSpelling: (syllable: string, grapheme: string) => string;
|
|
661
|
+
/** A sound the engine named no symbol for; `ordinal` is 1-based. */
|
|
662
|
+
pronunciationPhonemePosition: (ordinal: number) => string;
|
|
663
|
+
/** Introduces the sounds the engine thought it heard in a sound's place. */
|
|
664
|
+
pronunciationHeardAs: string;
|
|
665
|
+
/** Plays one word out of the learner's own take. */
|
|
666
|
+
pronunciationPlayWord: (word: string) => string;
|
|
667
|
+
pronunciationBreakUnexpected: string;
|
|
668
|
+
pronunciationBreakMissing: string;
|
|
669
|
+
/** Shown only past the caller's own monotone threshold; the SDK sets none. */
|
|
670
|
+
pronunciationMonotone: string;
|
|
671
|
+
/** Names the alphabet the phoneme symbols are written in. */
|
|
672
|
+
pronunciationIpaNote: string;
|
|
420
673
|
/**
|
|
421
674
|
* `<ActivityPreview>`, in place of a draft that still has something missing.
|
|
422
675
|
* Author-facing, not learner-facing — but an editor is translated too.
|
|
@@ -475,4 +728,4 @@ declare const DEFAULT_STRINGS: LkStrings;
|
|
|
475
728
|
*/
|
|
476
729
|
declare function mergeStrings(base: LkStrings, override?: LkStringsOverride): LkStrings;
|
|
477
730
|
|
|
478
|
-
export { type ActivityProps as A, DEFAULT_STRINGS as D, type HtmlSanitizer as H, type LkStrings as L, type MediaBudgetBinding as M, type
|
|
731
|
+
export { type ActivityProps as A, DEFAULT_STRINGS as D, type HtmlSanitizer as H, type LkStrings as L, type MediaBudgetBinding as M, type ReadAloudAssessResult as R, type SequenceMediaBudget as S, type LkStringsOverride as a, type MediaTransportStrings as b, type ReadAloudProps as c, type RecordingBinding as d, type RenderMode as e, type Renderable as f, type RenderableActivity as g, type SequenceRecordingBinding as h, type SequenceRecordingSlot as i, asRenderable as j, asRenderableSequence as k, mergeStrings as m };
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkD4DQFTA7_cjs = require('../chunk-D4DQFTA7.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "ThemeProvider", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkD4DQFTA7_cjs.ThemeProvider; }
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "createTailwindTheme", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunkD4DQFTA7_cjs.createTailwindTheme; }
|
|
15
15
|
});
|
|
16
16
|
Object.defineProperty(exports, "darkTheme", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkD4DQFTA7_cjs.darkTheme; }
|
|
19
19
|
});
|
|
20
20
|
Object.defineProperty(exports, "defaultTheme", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunkD4DQFTA7_cjs.defaultTheme; }
|
|
23
23
|
});
|
|
24
24
|
Object.defineProperty(exports, "useTheme", {
|
|
25
25
|
enumerable: true,
|
|
26
|
-
get: function () { return
|
|
26
|
+
get: function () { return chunkD4DQFTA7_cjs.useTheme; }
|
|
27
27
|
});
|
|
28
28
|
//# sourceMappingURL=ThemeProvider.cjs.map
|
|
29
29
|
//# sourceMappingURL=ThemeProvider.cjs.map
|
|
@@ -31,10 +31,10 @@ declare function createTailwindTheme(theme: Partial<ThemeTokens>): TailwindTheme
|
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* Canonical default theme token values. `defaults.css` mirrors these exactly.
|
|
34
|
-
* Palette is a neutral monochrome
|
|
35
|
-
* out of the box; consumers rebrand via `ThemeProvider`. All
|
|
36
|
-
* verified to meet WCAG 2.2 AA: 4.5:1 for normal text, 3:1 for
|
|
37
|
-
* (see theme/__tests__/contrast.test.ts).
|
|
34
|
+
* Palette is a neutral monochrome, deliberately unbranded, so the SDK carries
|
|
35
|
+
* nobody's look out of the box; consumers rebrand via `ThemeProvider`. All
|
|
36
|
+
* colour pairs are verified to meet WCAG 2.2 AA: 4.5:1 for normal text, 3:1 for
|
|
37
|
+
* UI / focus ring (see theme/__tests__/contrast.test.ts).
|
|
38
38
|
*/
|
|
39
39
|
declare const defaultTheme: ThemeTokens;
|
|
40
40
|
|