@intellectif/lk-react 20.0.0 → 22.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.
Files changed (174) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +33 -5
  3. package/dist/{WrittenResponse-D2YI8xOK.d.ts → WrittenResponse-CgRrjM4S.d.ts} +14 -4
  4. package/dist/{WrittenResponse-obIDDYDH.d.cts → WrittenResponse-D2K1VW_V.d.cts} +14 -4
  5. package/dist/ai/LkAiProvider.cjs +3 -3
  6. package/dist/ai/LkAiProvider.d.cts +17 -4
  7. package/dist/ai/LkAiProvider.d.ts +17 -4
  8. package/dist/ai/LkAiProvider.js +1 -1
  9. package/dist/ai/useAiHelp.cjs +9 -5
  10. package/dist/ai/useAiHelp.d.cts +58 -3
  11. package/dist/ai/useAiHelp.d.ts +58 -3
  12. package/dist/ai/useAiHelp.js +3 -3
  13. package/dist/{chunk-BGA2IVQY.js → chunk-3GLYK37F.js} +119 -26
  14. package/dist/chunk-3GLYK37F.js.map +1 -0
  15. package/dist/{chunk-LX2X4KC7.cjs → chunk-5YGVGMMV.cjs} +7 -7
  16. package/dist/{chunk-LX2X4KC7.cjs.map → chunk-5YGVGMMV.cjs.map} +1 -1
  17. package/dist/{chunk-3XP6VO4G.js → chunk-62K4Q565.js} +139 -45
  18. package/dist/chunk-62K4Q565.js.map +1 -0
  19. package/dist/{chunk-CEUEXISZ.cjs → chunk-6QY7GC55.cjs} +131 -50
  20. package/dist/chunk-6QY7GC55.cjs.map +1 -0
  21. package/dist/chunk-7EEKZWTQ.js +241 -0
  22. package/dist/chunk-7EEKZWTQ.js.map +1 -0
  23. package/dist/{chunk-3FBBP5QR.cjs → chunk-B4JRBV56.cjs} +6 -6
  24. package/dist/{chunk-3FBBP5QR.cjs.map → chunk-B4JRBV56.cjs.map} +1 -1
  25. package/dist/{chunk-RT2PP4SO.cjs → chunk-BL5SIBQA.cjs} +30 -30
  26. package/dist/{chunk-RT2PP4SO.cjs.map → chunk-BL5SIBQA.cjs.map} +1 -1
  27. package/dist/{chunk-YRNEOBXA.js → chunk-C4PSJ3ZC.js} +19 -2
  28. package/dist/chunk-C4PSJ3ZC.js.map +1 -0
  29. package/dist/{chunk-FEOFX4QW.js → chunk-FB47DQPS.js} +3 -3
  30. package/dist/{chunk-FEOFX4QW.js.map → chunk-FB47DQPS.js.map} +1 -1
  31. package/dist/chunk-FKNEHCNT.cjs +251 -0
  32. package/dist/chunk-FKNEHCNT.cjs.map +1 -0
  33. package/dist/{chunk-AG7MWZYZ.js → chunk-FPM2GQZY.js} +144 -55
  34. package/dist/chunk-FPM2GQZY.js.map +1 -0
  35. package/dist/{chunk-NWNQ2PHT.js → chunk-HNZ3JMAN.js} +8 -8
  36. package/dist/{chunk-NWNQ2PHT.js.map → chunk-HNZ3JMAN.js.map} +1 -1
  37. package/dist/{chunk-BY4UQH2Y.js → chunk-HYOUMTPW.js} +3 -3
  38. package/dist/{chunk-BY4UQH2Y.js.map → chunk-HYOUMTPW.js.map} +1 -1
  39. package/dist/{chunk-7K4B2EMU.js → chunk-HZIT24BK.js} +4 -4
  40. package/dist/{chunk-7K4B2EMU.js.map → chunk-HZIT24BK.js.map} +1 -1
  41. package/dist/{chunk-BJLQKJZX.cjs → chunk-J2QIHZ3H.cjs} +2 -2
  42. package/dist/chunk-J2QIHZ3H.cjs.map +1 -0
  43. package/dist/{chunk-DZVF3IGB.cjs → chunk-JII7XSCT.cjs} +59 -25
  44. package/dist/chunk-JII7XSCT.cjs.map +1 -0
  45. package/dist/{chunk-HI6BUUIJ.js → chunk-KFPCZ7N3.js} +48 -14
  46. package/dist/chunk-KFPCZ7N3.js.map +1 -0
  47. package/dist/{chunk-W6DMHN33.js → chunk-LRWFU3KS.js} +10 -10
  48. package/dist/{chunk-W6DMHN33.js.map → chunk-LRWFU3KS.js.map} +1 -1
  49. package/dist/{chunk-G7AGM2Y7.js → chunk-LX4JI262.js} +4 -4
  50. package/dist/{chunk-G7AGM2Y7.js.map → chunk-LX4JI262.js.map} +1 -1
  51. package/dist/{chunk-IXMT7X3E.cjs → chunk-M4UJBLVR.cjs} +17 -6
  52. package/dist/chunk-M4UJBLVR.cjs.map +1 -0
  53. package/dist/{chunk-AHGB5HH6.cjs → chunk-NFGUJ52G.cjs} +19 -2
  54. package/dist/chunk-NFGUJ52G.cjs.map +1 -0
  55. package/dist/{chunk-PWLJDP3X.cjs → chunk-NP5YC4NV.cjs} +95 -27
  56. package/dist/chunk-NP5YC4NV.cjs.map +1 -0
  57. package/dist/{chunk-ZDYNAWDZ.cjs → chunk-OJGTJOWI.cjs} +2 -2
  58. package/dist/chunk-OJGTJOWI.cjs.map +1 -0
  59. package/dist/{chunk-ORBU3XKH.js → chunk-PJMXHDY5.js} +16 -5
  60. package/dist/chunk-PJMXHDY5.js.map +1 -0
  61. package/dist/{chunk-TRMWBJWT.cjs → chunk-PZVRZ6OX.cjs} +141 -10
  62. package/dist/chunk-PZVRZ6OX.cjs.map +1 -0
  63. package/dist/{chunk-QKW2GGTV.js → chunk-R4ZNFDTK.js} +84 -16
  64. package/dist/chunk-R4ZNFDTK.js.map +1 -0
  65. package/dist/{chunk-YNDKAYW3.js → chunk-RX3A6KIY.js} +2 -2
  66. package/dist/chunk-RX3A6KIY.js.map +1 -0
  67. package/dist/{chunk-UHIOVOFK.cjs → chunk-TQN5CJO6.cjs} +125 -32
  68. package/dist/chunk-TQN5CJO6.cjs.map +1 -0
  69. package/dist/{chunk-AQIAQHJC.js → chunk-TRXUZSOY.js} +138 -8
  70. package/dist/chunk-TRXUZSOY.js.map +1 -0
  71. package/dist/{chunk-WBLYD5QA.js → chunk-U4KTOH7C.js} +2 -2
  72. package/dist/chunk-U4KTOH7C.js.map +1 -0
  73. package/dist/{chunk-L7WY5YFQ.cjs → chunk-UKUHVCZX.cjs} +5 -5
  74. package/dist/{chunk-L7WY5YFQ.cjs.map → chunk-UKUHVCZX.cjs.map} +1 -1
  75. package/dist/{chunk-HREA5SMB.cjs → chunk-UWFJGFB6.cjs} +116 -47
  76. package/dist/chunk-UWFJGFB6.cjs.map +1 -0
  77. package/dist/{chunk-JLDSCHY5.cjs → chunk-UXTYFEIC.cjs} +150 -61
  78. package/dist/chunk-UXTYFEIC.cjs.map +1 -0
  79. package/dist/{chunk-5GI53C6T.js → chunk-V2QZM2P2.js} +109 -40
  80. package/dist/chunk-V2QZM2P2.js.map +1 -0
  81. package/dist/{chunk-6S2CKZ4H.cjs → chunk-WFGDKBBP.cjs} +145 -51
  82. package/dist/chunk-WFGDKBBP.cjs.map +1 -0
  83. package/dist/{chunk-APZ6JFN6.cjs → chunk-Y5H4NOM6.cjs} +5 -5
  84. package/dist/{chunk-APZ6JFN6.cjs.map → chunk-Y5H4NOM6.cjs.map} +1 -1
  85. package/dist/{chunk-IQ55QNBI.js → chunk-YIXO6C4Z.js} +125 -44
  86. package/dist/chunk-YIXO6C4Z.js.map +1 -0
  87. package/dist/{chunk-LK5VXNMR.cjs → chunk-ZUE32Z67.cjs} +18 -18
  88. package/dist/{chunk-LK5VXNMR.cjs.map → chunk-ZUE32Z67.cjs.map} +1 -1
  89. package/dist/components/ActivityPreview.cjs +17 -17
  90. package/dist/components/ActivityPreview.d.cts +2 -2
  91. package/dist/components/ActivityPreview.d.ts +2 -2
  92. package/dist/components/ActivityPreview.js +16 -16
  93. package/dist/components/ActivitySequence.cjs +18 -18
  94. package/dist/components/ActivitySequence.d.cts +22 -4
  95. package/dist/components/ActivitySequence.d.ts +22 -4
  96. package/dist/components/ActivitySequence.js +17 -17
  97. package/dist/components/Dictation.cjs +10 -10
  98. package/dist/components/Dictation.d.cts +1 -1
  99. package/dist/components/Dictation.d.ts +1 -1
  100. package/dist/components/Dictation.js +9 -9
  101. package/dist/components/FillInTheBlanks.cjs +10 -10
  102. package/dist/components/FillInTheBlanks.d.cts +1 -1
  103. package/dist/components/FillInTheBlanks.d.ts +1 -1
  104. package/dist/components/FillInTheBlanks.js +9 -9
  105. package/dist/components/GapSelect.cjs +10 -10
  106. package/dist/components/GapSelect.d.cts +1 -1
  107. package/dist/components/GapSelect.d.ts +1 -1
  108. package/dist/components/GapSelect.js +9 -9
  109. package/dist/components/InteractiveVideo.cjs +17 -17
  110. package/dist/components/InteractiveVideo.d.cts +19 -3
  111. package/dist/components/InteractiveVideo.d.ts +19 -3
  112. package/dist/components/InteractiveVideo.js +15 -15
  113. package/dist/components/MultipleChoice.cjs +10 -10
  114. package/dist/components/MultipleChoice.d.cts +1 -1
  115. package/dist/components/MultipleChoice.d.ts +1 -1
  116. package/dist/components/MultipleChoice.js +9 -9
  117. package/dist/components/PronunciationFeedback.cjs +4 -4
  118. package/dist/components/PronunciationFeedback.d.cts +1 -1
  119. package/dist/components/PronunciationFeedback.d.ts +1 -1
  120. package/dist/components/PronunciationFeedback.js +3 -3
  121. package/dist/components/ReadAloud.cjs +8 -8
  122. package/dist/components/ReadAloud.d.cts +2 -2
  123. package/dist/components/ReadAloud.d.ts +2 -2
  124. package/dist/components/ReadAloud.js +7 -7
  125. package/dist/components/StimulusPanel.cjs +4 -4
  126. package/dist/components/StimulusPanel.d.cts +1 -1
  127. package/dist/components/StimulusPanel.d.ts +1 -1
  128. package/dist/components/StimulusPanel.js +3 -3
  129. package/dist/components/WrittenResponse.cjs +9 -7
  130. package/dist/components/WrittenResponse.d.cts +3 -3
  131. package/dist/components/WrittenResponse.d.ts +3 -3
  132. package/dist/components/WrittenResponse.js +8 -6
  133. package/dist/i18n/LkIntlProvider.cjs +7 -7
  134. package/dist/i18n/LkIntlProvider.d.cts +2 -2
  135. package/dist/i18n/LkIntlProvider.d.ts +2 -2
  136. package/dist/i18n/LkIntlProvider.js +1 -1
  137. package/dist/index.cjs +45 -41
  138. package/dist/index.cjs.map +1 -1
  139. package/dist/index.d.cts +3 -3
  140. package/dist/index.d.ts +3 -3
  141. package/dist/index.js +19 -19
  142. package/dist/index.js.map +1 -1
  143. package/dist/theme/skin.css +78 -0
  144. package/dist/{types-B_PCcqO-.d.cts → types-CO0XLEN6.d.cts} +67 -1
  145. package/dist/{types-C-GMCJ0g.d.ts → types-CrtIcRcK.d.ts} +67 -1
  146. package/package.json +3 -3
  147. package/dist/chunk-3XP6VO4G.js.map +0 -1
  148. package/dist/chunk-5GI53C6T.js.map +0 -1
  149. package/dist/chunk-6S2CKZ4H.cjs.map +0 -1
  150. package/dist/chunk-AG7MWZYZ.js.map +0 -1
  151. package/dist/chunk-AHGB5HH6.cjs.map +0 -1
  152. package/dist/chunk-AQIAQHJC.js.map +0 -1
  153. package/dist/chunk-BGA2IVQY.js.map +0 -1
  154. package/dist/chunk-BJLQKJZX.cjs.map +0 -1
  155. package/dist/chunk-CEUEXISZ.cjs.map +0 -1
  156. package/dist/chunk-DZVF3IGB.cjs.map +0 -1
  157. package/dist/chunk-HI6BUUIJ.js.map +0 -1
  158. package/dist/chunk-HREA5SMB.cjs.map +0 -1
  159. package/dist/chunk-IQ55QNBI.js.map +0 -1
  160. package/dist/chunk-IXMT7X3E.cjs.map +0 -1
  161. package/dist/chunk-JLDSCHY5.cjs.map +0 -1
  162. package/dist/chunk-NOC2M6LU.cjs +0 -118
  163. package/dist/chunk-NOC2M6LU.cjs.map +0 -1
  164. package/dist/chunk-ORBU3XKH.js.map +0 -1
  165. package/dist/chunk-PWLJDP3X.cjs.map +0 -1
  166. package/dist/chunk-QKW2GGTV.js.map +0 -1
  167. package/dist/chunk-RUS42NMN.js +0 -115
  168. package/dist/chunk-RUS42NMN.js.map +0 -1
  169. package/dist/chunk-TRMWBJWT.cjs.map +0 -1
  170. package/dist/chunk-UHIOVOFK.cjs.map +0 -1
  171. package/dist/chunk-WBLYD5QA.js.map +0 -1
  172. package/dist/chunk-YNDKAYW3.js.map +0 -1
  173. package/dist/chunk-YRNEOBXA.js.map +0 -1
  174. package/dist/chunk-ZDYNAWDZ.cjs.map +0 -1
@@ -1,11 +1,11 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { LearnerResponse, ItemOutcome, DraftNotComplete, ThemeTokens } from '@intellectif/lk-core';
3
3
  import { ReactNode } from 'react';
4
- import { e as RenderMode, H as HtmlSanitizer, a as LkStringsOverride } from '../types-B_PCcqO-.cjs';
4
+ import { e as RenderMode, H as HtmlSanitizer, a as LkStringsOverride } from '../types-CO0XLEN6.cjs';
5
5
  import { ActivityRenderer } from './ActivitySequence.cjs';
6
6
  import '../ai/LkAiProvider.cjs';
7
7
  import '../machine-CuwKqWXC.cjs';
8
- import '../WrittenResponse-obIDDYDH.cjs';
8
+ import '../WrittenResponse-D2K1VW_V.cjs';
9
9
 
10
10
  interface ActivityPreviewProps {
11
11
  /**
@@ -1,11 +1,11 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { LearnerResponse, ItemOutcome, DraftNotComplete, ThemeTokens } from '@intellectif/lk-core';
3
3
  import { ReactNode } from 'react';
4
- import { e as RenderMode, H as HtmlSanitizer, a as LkStringsOverride } from '../types-C-GMCJ0g.js';
4
+ import { e as RenderMode, H as HtmlSanitizer, a as LkStringsOverride } from '../types-CrtIcRcK.js';
5
5
  import { ActivityRenderer } from './ActivitySequence.js';
6
6
  import '../ai/LkAiProvider.js';
7
7
  import '../machine-CuwKqWXC.js';
8
- import '../WrittenResponse-D2YI8xOK.js';
8
+ import '../WrittenResponse-CgRrjM4S.js';
9
9
 
10
10
  interface ActivityPreviewProps {
11
11
  /**
@@ -1,23 +1,23 @@
1
1
  'use client';
2
- export { ActivityPreview } from '../chunk-W6DMHN33.js';
3
- import '../chunk-BGA2IVQY.js';
4
- import '../chunk-AG7MWZYZ.js';
5
- import '../chunk-3XP6VO4G.js';
6
- import '../chunk-IQ55QNBI.js';
7
- import '../chunk-5GI53C6T.js';
8
- import '../chunk-RUS42NMN.js';
9
- import '../chunk-AQIAQHJC.js';
10
- import '../chunk-YNDKAYW3.js';
11
- import '../chunk-NWNQ2PHT.js';
12
- import '../chunk-G7AGM2Y7.js';
2
+ export { ActivityPreview } from '../chunk-LRWFU3KS.js';
3
+ import '../chunk-3GLYK37F.js';
4
+ import '../chunk-FPM2GQZY.js';
5
+ import '../chunk-62K4Q565.js';
6
+ import '../chunk-YIXO6C4Z.js';
7
+ import '../chunk-V2QZM2P2.js';
8
+ import '../chunk-7EEKZWTQ.js';
9
+ import '../chunk-TRXUZSOY.js';
10
+ import '../chunk-RX3A6KIY.js';
11
+ import '../chunk-HNZ3JMAN.js';
12
+ import '../chunk-LX4JI262.js';
13
13
  import '../chunk-MCO52PV5.js';
14
14
  import '../chunk-YORQQXGO.js';
15
- import '../chunk-ORBU3XKH.js';
16
- import '../chunk-WBLYD5QA.js';
17
- import '../chunk-FEOFX4QW.js';
15
+ import '../chunk-PJMXHDY5.js';
16
+ import '../chunk-U4KTOH7C.js';
17
+ import '../chunk-FB47DQPS.js';
18
18
  import '../chunk-PPFVTXGJ.js';
19
- import '../chunk-BY4UQH2Y.js';
19
+ import '../chunk-HYOUMTPW.js';
20
20
  import '../chunk-6N43WDVG.js';
21
- import '../chunk-YRNEOBXA.js';
21
+ import '../chunk-C4PSJ3ZC.js';
22
22
  //# sourceMappingURL=ActivityPreview.js.map
23
23
  //# sourceMappingURL=ActivityPreview.js.map
@@ -1,33 +1,33 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkPWLJDP3X_cjs = require('../chunk-PWLJDP3X.cjs');
5
- require('../chunk-3FBBP5QR.cjs');
6
- require('../chunk-UHIOVOFK.cjs');
7
- require('../chunk-JLDSCHY5.cjs');
8
- require('../chunk-6S2CKZ4H.cjs');
9
- require('../chunk-CEUEXISZ.cjs');
10
- require('../chunk-HREA5SMB.cjs');
11
- require('../chunk-NOC2M6LU.cjs');
12
- require('../chunk-TRMWBJWT.cjs');
13
- require('../chunk-ZDYNAWDZ.cjs');
14
- require('../chunk-RT2PP4SO.cjs');
15
- require('../chunk-LX2X4KC7.cjs');
4
+ var chunkNP5YC4NV_cjs = require('../chunk-NP5YC4NV.cjs');
5
+ require('../chunk-B4JRBV56.cjs');
6
+ require('../chunk-TQN5CJO6.cjs');
7
+ require('../chunk-UXTYFEIC.cjs');
8
+ require('../chunk-WFGDKBBP.cjs');
9
+ require('../chunk-6QY7GC55.cjs');
10
+ require('../chunk-UWFJGFB6.cjs');
11
+ require('../chunk-FKNEHCNT.cjs');
12
+ require('../chunk-PZVRZ6OX.cjs');
13
+ require('../chunk-OJGTJOWI.cjs');
14
+ require('../chunk-BL5SIBQA.cjs');
15
+ require('../chunk-5YGVGMMV.cjs');
16
16
  require('../chunk-UDCQTOVU.cjs');
17
17
  require('../chunk-OD65OZIW.cjs');
18
- require('../chunk-IXMT7X3E.cjs');
19
- require('../chunk-BJLQKJZX.cjs');
20
- require('../chunk-APZ6JFN6.cjs');
18
+ require('../chunk-M4UJBLVR.cjs');
19
+ require('../chunk-J2QIHZ3H.cjs');
20
+ require('../chunk-Y5H4NOM6.cjs');
21
21
  require('../chunk-EANGKAKG.cjs');
22
- require('../chunk-L7WY5YFQ.cjs');
22
+ require('../chunk-UKUHVCZX.cjs');
23
23
  require('../chunk-XOR4MPEN.cjs');
24
- require('../chunk-AHGB5HH6.cjs');
24
+ require('../chunk-NFGUJ52G.cjs');
25
25
 
26
26
 
27
27
 
28
28
  Object.defineProperty(exports, "ActivitySequence", {
29
29
  enumerable: true,
30
- get: function () { return chunkPWLJDP3X_cjs.ActivitySequence; }
30
+ get: function () { return chunkNP5YC4NV_cjs.ActivitySequence; }
31
31
  });
32
32
  //# sourceMappingURL=ActivitySequence.cjs.map
33
33
  //# sourceMappingURL=ActivitySequence.cjs.map
@@ -1,8 +1,8 @@
1
- import { InteractionKind, SequenceEntry, ActivityResult, LearnerResponse, InteractionEvent, SpeechAssessment, DeliveryPolicy, ItemOutcome, ThemeTokens } from '@intellectif/lk-core';
1
+ import { InteractionKind, SequenceEntry, ActivityResult, LearnerResponse, InteractionEvent, SpeechAssessment, DeliveryPolicy, ItemScoringPolicy, ItemOutcome, ThemeTokens } from '@intellectif/lk-core';
2
2
  import { ComponentType } from 'react';
3
3
  import { LearnerAi } from '../ai/LkAiProvider.cjs';
4
- import { A as ActivityProps, i as SequenceRecordingSlot, g as RenderableActivity, e as RenderMode, S as SequenceMediaBudget, h as SequenceRecordingBinding, a as LkStringsOverride, H as HtmlSanitizer } from '../types-B_PCcqO-.cjs';
5
- import { a as WrittenResponseSubmission } from '../WrittenResponse-obIDDYDH.cjs';
4
+ import { A as ActivityProps, i as SequenceRecordingSlot, g as RenderableActivity, e as RenderMode, S as SequenceMediaBudget, h as SequenceRecordingBinding, a as LkStringsOverride, H as HtmlSanitizer } from '../types-CO0XLEN6.cjs';
5
+ import { a as WrittenResponseSubmission } from '../WrittenResponse-D2K1VW_V.cjs';
6
6
  import '../machine-CuwKqWXC.cjs';
7
7
 
8
8
  /**
@@ -325,6 +325,24 @@ interface ActivitySequenceProps {
325
325
  * `planAttempt(entries, { delivery })`. See `DeliveryPolicy` in lk-core.
326
326
  */
327
327
  delivery?: DeliveryPolicy | null;
328
+ /**
329
+ * How every question in the paper is scored when a learner can try again or
330
+ * ask for hints: how many tries each gives, which one counts, and what tries
331
+ * and hints cost. Applies in `practice`, where the questions grade; absent,
332
+ * each question is one try and costs nothing, as before.
333
+ *
334
+ * It holds in every question: the paper's policy wins over one a question
335
+ * was handed. The set is not reported while the question on screen offers
336
+ * another try, nor while any question is being tried again — the next try
337
+ * may change its grade — and once the set is reported, every question's
338
+ * tries close. A later try replaces a question's
339
+ * outcome until then, so `onActivityComplete` can fire more than once for a
340
+ * slot: keep the last. Record the same policy with
341
+ * `planAttempt(entries, { scoring })`. See `ItemScoringPolicy` in lk-core.
342
+ *
343
+ * A policy `validateItemScoringPolicy` refuses throws at render.
344
+ */
345
+ scoring?: ItemScoringPolicy | null;
328
346
  /**
329
347
  * `entries` shuffles the top-level entries; a group moves as one block, and
330
348
  * the order INSIDE a group follows the group's own `shuffle` setting.
@@ -409,6 +427,6 @@ interface ActivitySequenceProps {
409
427
  locale?: string;
410
428
  disabled?: boolean;
411
429
  }
412
- declare function ActivitySequence({ activities, renderers, onActivityComplete, onComplete, onFinished, onSubmit, onInteraction, renderMode, shuffle, shuffleSeed, defaultIndex, onIndexChange, responses, submittedSlotIds, outcomes, sanitizeHtml, theme, locale, disabled, mediaBudget, recordingBinding, assessments, workletUrl, strings, ai, delivery, }: ActivitySequenceProps): React.JSX.Element;
430
+ declare function ActivitySequence({ activities, renderers, onActivityComplete, onComplete, onFinished, onSubmit, onInteraction, renderMode, shuffle, shuffleSeed, defaultIndex, onIndexChange, responses, submittedSlotIds, outcomes, sanitizeHtml, theme, locale, disabled, mediaBudget, recordingBinding, assessments, workletUrl, strings, ai, delivery, scoring, }: ActivitySequenceProps): React.JSX.Element;
413
431
 
414
432
  export { type ActivityRenderer, ActivitySequence, type ActivitySequenceProps, type SequenceItemOutcome, type SequenceQuestion };
@@ -1,8 +1,8 @@
1
- import { InteractionKind, SequenceEntry, ActivityResult, LearnerResponse, InteractionEvent, SpeechAssessment, DeliveryPolicy, ItemOutcome, ThemeTokens } from '@intellectif/lk-core';
1
+ import { InteractionKind, SequenceEntry, ActivityResult, LearnerResponse, InteractionEvent, SpeechAssessment, DeliveryPolicy, ItemScoringPolicy, ItemOutcome, ThemeTokens } from '@intellectif/lk-core';
2
2
  import { ComponentType } from 'react';
3
3
  import { LearnerAi } from '../ai/LkAiProvider.js';
4
- import { A as ActivityProps, i as SequenceRecordingSlot, g as RenderableActivity, e as RenderMode, S as SequenceMediaBudget, h as SequenceRecordingBinding, a as LkStringsOverride, H as HtmlSanitizer } from '../types-C-GMCJ0g.js';
5
- import { a as WrittenResponseSubmission } from '../WrittenResponse-D2YI8xOK.js';
4
+ import { A as ActivityProps, i as SequenceRecordingSlot, g as RenderableActivity, e as RenderMode, S as SequenceMediaBudget, h as SequenceRecordingBinding, a as LkStringsOverride, H as HtmlSanitizer } from '../types-CrtIcRcK.js';
5
+ import { a as WrittenResponseSubmission } from '../WrittenResponse-CgRrjM4S.js';
6
6
  import '../machine-CuwKqWXC.js';
7
7
 
8
8
  /**
@@ -325,6 +325,24 @@ interface ActivitySequenceProps {
325
325
  * `planAttempt(entries, { delivery })`. See `DeliveryPolicy` in lk-core.
326
326
  */
327
327
  delivery?: DeliveryPolicy | null;
328
+ /**
329
+ * How every question in the paper is scored when a learner can try again or
330
+ * ask for hints: how many tries each gives, which one counts, and what tries
331
+ * and hints cost. Applies in `practice`, where the questions grade; absent,
332
+ * each question is one try and costs nothing, as before.
333
+ *
334
+ * It holds in every question: the paper's policy wins over one a question
335
+ * was handed. The set is not reported while the question on screen offers
336
+ * another try, nor while any question is being tried again — the next try
337
+ * may change its grade — and once the set is reported, every question's
338
+ * tries close. A later try replaces a question's
339
+ * outcome until then, so `onActivityComplete` can fire more than once for a
340
+ * slot: keep the last. Record the same policy with
341
+ * `planAttempt(entries, { scoring })`. See `ItemScoringPolicy` in lk-core.
342
+ *
343
+ * A policy `validateItemScoringPolicy` refuses throws at render.
344
+ */
345
+ scoring?: ItemScoringPolicy | null;
328
346
  /**
329
347
  * `entries` shuffles the top-level entries; a group moves as one block, and
330
348
  * the order INSIDE a group follows the group's own `shuffle` setting.
@@ -409,6 +427,6 @@ interface ActivitySequenceProps {
409
427
  locale?: string;
410
428
  disabled?: boolean;
411
429
  }
412
- declare function ActivitySequence({ activities, renderers, onActivityComplete, onComplete, onFinished, onSubmit, onInteraction, renderMode, shuffle, shuffleSeed, defaultIndex, onIndexChange, responses, submittedSlotIds, outcomes, sanitizeHtml, theme, locale, disabled, mediaBudget, recordingBinding, assessments, workletUrl, strings, ai, delivery, }: ActivitySequenceProps): React.JSX.Element;
430
+ declare function ActivitySequence({ activities, renderers, onActivityComplete, onComplete, onFinished, onSubmit, onInteraction, renderMode, shuffle, shuffleSeed, defaultIndex, onIndexChange, responses, submittedSlotIds, outcomes, sanitizeHtml, theme, locale, disabled, mediaBudget, recordingBinding, assessments, workletUrl, strings, ai, delivery, scoring, }: ActivitySequenceProps): React.JSX.Element;
413
431
 
414
432
  export { type ActivityRenderer, ActivitySequence, type ActivitySequenceProps, type SequenceItemOutcome, type SequenceQuestion };
@@ -1,24 +1,24 @@
1
1
  'use client';
2
- export { ActivitySequence } from '../chunk-QKW2GGTV.js';
3
- import '../chunk-7K4B2EMU.js';
4
- import '../chunk-BGA2IVQY.js';
5
- import '../chunk-AG7MWZYZ.js';
6
- import '../chunk-3XP6VO4G.js';
7
- import '../chunk-IQ55QNBI.js';
8
- import '../chunk-5GI53C6T.js';
9
- import '../chunk-RUS42NMN.js';
10
- import '../chunk-AQIAQHJC.js';
11
- import '../chunk-YNDKAYW3.js';
12
- import '../chunk-NWNQ2PHT.js';
13
- import '../chunk-G7AGM2Y7.js';
2
+ export { ActivitySequence } from '../chunk-R4ZNFDTK.js';
3
+ import '../chunk-HZIT24BK.js';
4
+ import '../chunk-3GLYK37F.js';
5
+ import '../chunk-FPM2GQZY.js';
6
+ import '../chunk-62K4Q565.js';
7
+ import '../chunk-YIXO6C4Z.js';
8
+ import '../chunk-V2QZM2P2.js';
9
+ import '../chunk-7EEKZWTQ.js';
10
+ import '../chunk-TRXUZSOY.js';
11
+ import '../chunk-RX3A6KIY.js';
12
+ import '../chunk-HNZ3JMAN.js';
13
+ import '../chunk-LX4JI262.js';
14
14
  import '../chunk-MCO52PV5.js';
15
15
  import '../chunk-YORQQXGO.js';
16
- import '../chunk-ORBU3XKH.js';
17
- import '../chunk-WBLYD5QA.js';
18
- import '../chunk-FEOFX4QW.js';
16
+ import '../chunk-PJMXHDY5.js';
17
+ import '../chunk-U4KTOH7C.js';
18
+ import '../chunk-FB47DQPS.js';
19
19
  import '../chunk-PPFVTXGJ.js';
20
- import '../chunk-BY4UQH2Y.js';
20
+ import '../chunk-HYOUMTPW.js';
21
21
  import '../chunk-6N43WDVG.js';
22
- import '../chunk-YRNEOBXA.js';
22
+ import '../chunk-C4PSJ3ZC.js';
23
23
  //# sourceMappingURL=ActivitySequence.js.map
24
24
  //# sourceMappingURL=ActivitySequence.js.map
@@ -1,24 +1,24 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkHREA5SMB_cjs = require('../chunk-HREA5SMB.cjs');
5
- require('../chunk-NOC2M6LU.cjs');
6
- require('../chunk-TRMWBJWT.cjs');
7
- require('../chunk-ZDYNAWDZ.cjs');
4
+ var chunkUWFJGFB6_cjs = require('../chunk-UWFJGFB6.cjs');
5
+ require('../chunk-FKNEHCNT.cjs');
6
+ require('../chunk-PZVRZ6OX.cjs');
7
+ require('../chunk-OJGTJOWI.cjs');
8
8
  require('../chunk-OD65OZIW.cjs');
9
- require('../chunk-IXMT7X3E.cjs');
10
- require('../chunk-BJLQKJZX.cjs');
11
- require('../chunk-APZ6JFN6.cjs');
9
+ require('../chunk-M4UJBLVR.cjs');
10
+ require('../chunk-J2QIHZ3H.cjs');
11
+ require('../chunk-Y5H4NOM6.cjs');
12
12
  require('../chunk-EANGKAKG.cjs');
13
- require('../chunk-L7WY5YFQ.cjs');
13
+ require('../chunk-UKUHVCZX.cjs');
14
14
  require('../chunk-XOR4MPEN.cjs');
15
- require('../chunk-AHGB5HH6.cjs');
15
+ require('../chunk-NFGUJ52G.cjs');
16
16
 
17
17
 
18
18
 
19
19
  Object.defineProperty(exports, "Dictation", {
20
20
  enumerable: true,
21
- get: function () { return chunkHREA5SMB_cjs.Dictation; }
21
+ get: function () { return chunkUWFJGFB6_cjs.Dictation; }
22
22
  });
23
23
  //# sourceMappingURL=Dictation.cjs.map
24
24
  //# sourceMappingURL=Dictation.cjs.map
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { DictationData } from '@intellectif/lk-core';
3
- import { A as ActivityProps } from '../types-B_PCcqO-.cjs';
3
+ import { A as ActivityProps } from '../types-CO0XLEN6.cjs';
4
4
  import '../ai/LkAiProvider.cjs';
5
5
  import 'react';
6
6
  import '../machine-CuwKqWXC.cjs';
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { DictationData } from '@intellectif/lk-core';
3
- import { A as ActivityProps } from '../types-C-GMCJ0g.js';
3
+ import { A as ActivityProps } from '../types-CrtIcRcK.js';
4
4
  import '../ai/LkAiProvider.js';
5
5
  import 'react';
6
6
  import '../machine-CuwKqWXC.js';
@@ -1,15 +1,15 @@
1
1
  'use client';
2
- export { Dictation } from '../chunk-5GI53C6T.js';
3
- import '../chunk-RUS42NMN.js';
4
- import '../chunk-AQIAQHJC.js';
5
- import '../chunk-YNDKAYW3.js';
2
+ export { Dictation } from '../chunk-V2QZM2P2.js';
3
+ import '../chunk-7EEKZWTQ.js';
4
+ import '../chunk-TRXUZSOY.js';
5
+ import '../chunk-RX3A6KIY.js';
6
6
  import '../chunk-YORQQXGO.js';
7
- import '../chunk-ORBU3XKH.js';
8
- import '../chunk-WBLYD5QA.js';
9
- import '../chunk-FEOFX4QW.js';
7
+ import '../chunk-PJMXHDY5.js';
8
+ import '../chunk-U4KTOH7C.js';
9
+ import '../chunk-FB47DQPS.js';
10
10
  import '../chunk-PPFVTXGJ.js';
11
- import '../chunk-BY4UQH2Y.js';
11
+ import '../chunk-HYOUMTPW.js';
12
12
  import '../chunk-6N43WDVG.js';
13
- import '../chunk-YRNEOBXA.js';
13
+ import '../chunk-C4PSJ3ZC.js';
14
14
  //# sourceMappingURL=Dictation.js.map
15
15
  //# sourceMappingURL=Dictation.js.map
@@ -1,23 +1,23 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunk6S2CKZ4H_cjs = require('../chunk-6S2CKZ4H.cjs');
5
- require('../chunk-NOC2M6LU.cjs');
6
- require('../chunk-TRMWBJWT.cjs');
7
- require('../chunk-ZDYNAWDZ.cjs');
8
- require('../chunk-IXMT7X3E.cjs');
9
- require('../chunk-BJLQKJZX.cjs');
10
- require('../chunk-APZ6JFN6.cjs');
4
+ var chunkWFGDKBBP_cjs = require('../chunk-WFGDKBBP.cjs');
5
+ require('../chunk-FKNEHCNT.cjs');
6
+ require('../chunk-PZVRZ6OX.cjs');
7
+ require('../chunk-OJGTJOWI.cjs');
8
+ require('../chunk-M4UJBLVR.cjs');
9
+ require('../chunk-J2QIHZ3H.cjs');
10
+ require('../chunk-Y5H4NOM6.cjs');
11
11
  require('../chunk-EANGKAKG.cjs');
12
- require('../chunk-L7WY5YFQ.cjs');
12
+ require('../chunk-UKUHVCZX.cjs');
13
13
  require('../chunk-XOR4MPEN.cjs');
14
- require('../chunk-AHGB5HH6.cjs');
14
+ require('../chunk-NFGUJ52G.cjs');
15
15
 
16
16
 
17
17
 
18
18
  Object.defineProperty(exports, "FillInTheBlanks", {
19
19
  enumerable: true,
20
- get: function () { return chunk6S2CKZ4H_cjs.FillInTheBlanks; }
20
+ get: function () { return chunkWFGDKBBP_cjs.FillInTheBlanks; }
21
21
  });
22
22
  //# sourceMappingURL=FillInTheBlanks.cjs.map
23
23
  //# sourceMappingURL=FillInTheBlanks.cjs.map
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { FillInTheBlanksData } from '@intellectif/lk-core';
3
- import { A as ActivityProps } from '../types-B_PCcqO-.cjs';
3
+ import { A as ActivityProps } from '../types-CO0XLEN6.cjs';
4
4
  import '../ai/LkAiProvider.cjs';
5
5
  import 'react';
6
6
  import '../machine-CuwKqWXC.cjs';
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { FillInTheBlanksData } from '@intellectif/lk-core';
3
- import { A as ActivityProps } from '../types-C-GMCJ0g.js';
3
+ import { A as ActivityProps } from '../types-CrtIcRcK.js';
4
4
  import '../ai/LkAiProvider.js';
5
5
  import 'react';
6
6
  import '../machine-CuwKqWXC.js';
@@ -1,14 +1,14 @@
1
1
  'use client';
2
- export { FillInTheBlanks } from '../chunk-3XP6VO4G.js';
3
- import '../chunk-RUS42NMN.js';
4
- import '../chunk-AQIAQHJC.js';
5
- import '../chunk-YNDKAYW3.js';
6
- import '../chunk-ORBU3XKH.js';
7
- import '../chunk-WBLYD5QA.js';
8
- import '../chunk-FEOFX4QW.js';
2
+ export { FillInTheBlanks } from '../chunk-62K4Q565.js';
3
+ import '../chunk-7EEKZWTQ.js';
4
+ import '../chunk-TRXUZSOY.js';
5
+ import '../chunk-RX3A6KIY.js';
6
+ import '../chunk-PJMXHDY5.js';
7
+ import '../chunk-U4KTOH7C.js';
8
+ import '../chunk-FB47DQPS.js';
9
9
  import '../chunk-PPFVTXGJ.js';
10
- import '../chunk-BY4UQH2Y.js';
10
+ import '../chunk-HYOUMTPW.js';
11
11
  import '../chunk-6N43WDVG.js';
12
- import '../chunk-YRNEOBXA.js';
12
+ import '../chunk-C4PSJ3ZC.js';
13
13
  //# sourceMappingURL=FillInTheBlanks.js.map
14
14
  //# sourceMappingURL=FillInTheBlanks.js.map
@@ -1,23 +1,23 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkCEUEXISZ_cjs = require('../chunk-CEUEXISZ.cjs');
5
- require('../chunk-NOC2M6LU.cjs');
6
- require('../chunk-TRMWBJWT.cjs');
7
- require('../chunk-ZDYNAWDZ.cjs');
8
- require('../chunk-IXMT7X3E.cjs');
9
- require('../chunk-BJLQKJZX.cjs');
10
- require('../chunk-APZ6JFN6.cjs');
4
+ var chunk6QY7GC55_cjs = require('../chunk-6QY7GC55.cjs');
5
+ require('../chunk-FKNEHCNT.cjs');
6
+ require('../chunk-PZVRZ6OX.cjs');
7
+ require('../chunk-OJGTJOWI.cjs');
8
+ require('../chunk-M4UJBLVR.cjs');
9
+ require('../chunk-J2QIHZ3H.cjs');
10
+ require('../chunk-Y5H4NOM6.cjs');
11
11
  require('../chunk-EANGKAKG.cjs');
12
- require('../chunk-L7WY5YFQ.cjs');
12
+ require('../chunk-UKUHVCZX.cjs');
13
13
  require('../chunk-XOR4MPEN.cjs');
14
- require('../chunk-AHGB5HH6.cjs');
14
+ require('../chunk-NFGUJ52G.cjs');
15
15
 
16
16
 
17
17
 
18
18
  Object.defineProperty(exports, "GapSelect", {
19
19
  enumerable: true,
20
- get: function () { return chunkCEUEXISZ_cjs.GapSelect; }
20
+ get: function () { return chunk6QY7GC55_cjs.GapSelect; }
21
21
  });
22
22
  //# sourceMappingURL=GapSelect.cjs.map
23
23
  //# sourceMappingURL=GapSelect.cjs.map
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { GapSelectData } from '@intellectif/lk-core';
3
- import { A as ActivityProps } from '../types-B_PCcqO-.cjs';
3
+ import { A as ActivityProps } from '../types-CO0XLEN6.cjs';
4
4
  import '../ai/LkAiProvider.cjs';
5
5
  import 'react';
6
6
  import '../machine-CuwKqWXC.cjs';
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { GapSelectData } from '@intellectif/lk-core';
3
- import { A as ActivityProps } from '../types-C-GMCJ0g.js';
3
+ import { A as ActivityProps } from '../types-CrtIcRcK.js';
4
4
  import '../ai/LkAiProvider.js';
5
5
  import 'react';
6
6
  import '../machine-CuwKqWXC.js';
@@ -1,14 +1,14 @@
1
1
  'use client';
2
- export { GapSelect } from '../chunk-IQ55QNBI.js';
3
- import '../chunk-RUS42NMN.js';
4
- import '../chunk-AQIAQHJC.js';
5
- import '../chunk-YNDKAYW3.js';
6
- import '../chunk-ORBU3XKH.js';
7
- import '../chunk-WBLYD5QA.js';
8
- import '../chunk-FEOFX4QW.js';
2
+ export { GapSelect } from '../chunk-YIXO6C4Z.js';
3
+ import '../chunk-7EEKZWTQ.js';
4
+ import '../chunk-TRXUZSOY.js';
5
+ import '../chunk-RX3A6KIY.js';
6
+ import '../chunk-PJMXHDY5.js';
7
+ import '../chunk-U4KTOH7C.js';
8
+ import '../chunk-FB47DQPS.js';
9
9
  import '../chunk-PPFVTXGJ.js';
10
- import '../chunk-BY4UQH2Y.js';
10
+ import '../chunk-HYOUMTPW.js';
11
11
  import '../chunk-6N43WDVG.js';
12
- import '../chunk-YRNEOBXA.js';
12
+ import '../chunk-C4PSJ3ZC.js';
13
13
  //# sourceMappingURL=GapSelect.js.map
14
14
  //# sourceMappingURL=GapSelect.js.map
@@ -1,35 +1,35 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkDZVF3IGB_cjs = require('../chunk-DZVF3IGB.cjs');
5
- require('../chunk-JLDSCHY5.cjs');
6
- require('../chunk-6S2CKZ4H.cjs');
7
- require('../chunk-CEUEXISZ.cjs');
8
- require('../chunk-HREA5SMB.cjs');
9
- require('../chunk-NOC2M6LU.cjs');
10
- require('../chunk-TRMWBJWT.cjs');
11
- require('../chunk-ZDYNAWDZ.cjs');
12
- require('../chunk-RT2PP4SO.cjs');
13
- require('../chunk-LX2X4KC7.cjs');
4
+ var chunkJII7XSCT_cjs = require('../chunk-JII7XSCT.cjs');
5
+ require('../chunk-UXTYFEIC.cjs');
6
+ require('../chunk-WFGDKBBP.cjs');
7
+ require('../chunk-6QY7GC55.cjs');
8
+ require('../chunk-UWFJGFB6.cjs');
9
+ require('../chunk-FKNEHCNT.cjs');
10
+ require('../chunk-PZVRZ6OX.cjs');
11
+ require('../chunk-OJGTJOWI.cjs');
12
+ require('../chunk-BL5SIBQA.cjs');
13
+ require('../chunk-5YGVGMMV.cjs');
14
14
  require('../chunk-UDCQTOVU.cjs');
15
15
  require('../chunk-OD65OZIW.cjs');
16
- require('../chunk-IXMT7X3E.cjs');
17
- require('../chunk-BJLQKJZX.cjs');
18
- require('../chunk-APZ6JFN6.cjs');
16
+ require('../chunk-M4UJBLVR.cjs');
17
+ require('../chunk-J2QIHZ3H.cjs');
18
+ require('../chunk-Y5H4NOM6.cjs');
19
19
  require('../chunk-EANGKAKG.cjs');
20
- require('../chunk-L7WY5YFQ.cjs');
20
+ require('../chunk-UKUHVCZX.cjs');
21
21
  require('../chunk-XOR4MPEN.cjs');
22
- require('../chunk-AHGB5HH6.cjs');
22
+ require('../chunk-NFGUJ52G.cjs');
23
23
 
24
24
 
25
25
 
26
26
  Object.defineProperty(exports, "InteractiveVideo", {
27
27
  enumerable: true,
28
- get: function () { return chunkDZVF3IGB_cjs.InteractiveVideo; }
28
+ get: function () { return chunkJII7XSCT_cjs.InteractiveVideo; }
29
29
  });
30
30
  Object.defineProperty(exports, "resolveCaptionTracks", {
31
31
  enumerable: true,
32
- get: function () { return chunkDZVF3IGB_cjs.resolveCaptionTracks; }
32
+ get: function () { return chunkJII7XSCT_cjs.resolveCaptionTracks; }
33
33
  });
34
34
  //# sourceMappingURL=InteractiveVideo.cjs.map
35
35
  //# sourceMappingURL=InteractiveVideo.cjs.map
@@ -1,9 +1,9 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { ItemGroup, MediaProgress, LearnerResponse, ItemOutcome, ActivityResult, InteractionEvent, ResolvedDeliveryPolicy, InteractionKind, SpeechAssessment, MediaTrack, DeliveryPolicy, ThemeTokens } from '@intellectif/lk-core';
2
+ import { ItemGroup, MediaProgress, LearnerResponse, ItemOutcome, ActivityResult, InteractionEvent, ResolvedDeliveryPolicy, ResolvedItemScoringPolicy, InteractionKind, SpeechAssessment, MediaTrack, DeliveryPolicy, ItemScoringPolicy, ThemeTokens } from '@intellectif/lk-core';
3
3
  import { ReactNode } from 'react';
4
4
  import { LearnerAi } from '../ai/LkAiProvider.cjs';
5
- import { g as RenderableActivity, e as RenderMode, i as SequenceRecordingSlot, h as SequenceRecordingBinding, V as VideoPreferences, a as LkStringsOverride, H as HtmlSanitizer } from '../types-B_PCcqO-.cjs';
6
- export { C as CaptionSize } from '../types-B_PCcqO-.cjs';
5
+ import { g as RenderableActivity, e as RenderMode, i as SequenceRecordingSlot, h as SequenceRecordingBinding, V as VideoPreferences, a as LkStringsOverride, H as HtmlSanitizer } from '../types-CO0XLEN6.cjs';
6
+ export { C as CaptionSize } from '../types-CO0XLEN6.cjs';
7
7
  import '../machine-CuwKqWXC.cjs';
8
8
 
9
9
  /** An item group whose items may be `redact()` projections: the client's view of an interactive video. */
@@ -84,6 +84,13 @@ interface InteractiveVideoQuestion {
84
84
  * `feedback` or `solutions` is `false`, show no mark and no answer.
85
85
  */
86
86
  delivery: ResolvedDeliveryPolicy;
87
+ /**
88
+ * The video's scoring policy, every setting spelled out: how many tries a
89
+ * question gives, which counts, and what tries and hints cost. The SDK's own
90
+ * questions apply it; a question you draw scores by it with lk-core's
91
+ * `scoreTries`, or not at all.
92
+ */
93
+ scoring: ResolvedItemScoringPolicy;
87
94
  /**
88
95
  * The learner committed an answer: marks the question answered and forwards
89
96
  * to `onSubmit(response, slot)`. Latest wins: call it again for a new take or
@@ -234,6 +241,15 @@ interface InteractiveVideoProps {
234
241
  * only takes away. See `DeliveryPolicy` in lk-core.
235
242
  */
236
243
  delivery?: DeliveryPolicy | null;
244
+ /**
245
+ * How the video's questions are scored when a learner can try again or ask
246
+ * for hints — for every question in it. A later try replaces a question's
247
+ * grade, as any answer given again does, until the learner finishes: then
248
+ * every question's tries close. See `ItemScoringPolicy` in lk-core.
249
+ *
250
+ * A policy `validateItemScoringPolicy` refuses throws at render.
251
+ */
252
+ scoring?: ItemScoringPolicy | null;
237
253
  theme?: Partial<ThemeTokens>;
238
254
  sanitizeHtml?: HtmlSanitizer;
239
255
  }