@intellectif/lk-react 17.0.0 → 18.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +3 -1
  3. package/dist/{WrittenResponse-B4kY-U0v.d.ts → WrittenResponse-CeHY5u3W.d.ts} +1 -1
  4. package/dist/{WrittenResponse-Dl3zah22.d.cts → WrittenResponse-DT_Yqbq1.d.cts} +1 -1
  5. package/dist/ai/useAiHelp.cjs +20 -0
  6. package/dist/ai/useAiHelp.cjs.map +1 -0
  7. package/dist/ai/useAiHelp.d.cts +146 -0
  8. package/dist/ai/useAiHelp.d.ts +146 -0
  9. package/dist/ai/useAiHelp.js +7 -0
  10. package/dist/ai/useAiHelp.js.map +1 -0
  11. package/dist/{chunk-Z5XY66PO.cjs → chunk-3SDCALS3.cjs} +16 -16
  12. package/dist/chunk-3SDCALS3.cjs.map +1 -0
  13. package/dist/{chunk-QA42VDTA.cjs → chunk-3SJ7TVL6.cjs} +12 -11
  14. package/dist/chunk-3SJ7TVL6.cjs.map +1 -0
  15. package/dist/{chunk-V5BTVGPA.js → chunk-4NERCBOW.js} +4 -3
  16. package/dist/chunk-4NERCBOW.js.map +1 -0
  17. package/dist/{chunk-UYQBEPNZ.js → chunk-6NY7OTOO.js} +15 -8
  18. package/dist/chunk-6NY7OTOO.js.map +1 -0
  19. package/dist/{chunk-RZ52SEYV.cjs → chunk-7GYAUA56.cjs} +10 -9
  20. package/dist/chunk-7GYAUA56.cjs.map +1 -0
  21. package/dist/{chunk-BAKLJKFZ.cjs → chunk-APZ6JFN6.cjs} +4 -29
  22. package/dist/chunk-APZ6JFN6.cjs.map +1 -0
  23. package/dist/chunk-BURYHHBM.js +114 -0
  24. package/dist/chunk-BURYHHBM.js.map +1 -0
  25. package/dist/{chunk-H63O5HPW.cjs → chunk-CQNKZ435.cjs} +8 -7
  26. package/dist/chunk-CQNKZ435.cjs.map +1 -0
  27. package/dist/chunk-EANGKAKG.cjs +32 -0
  28. package/dist/chunk-EANGKAKG.cjs.map +1 -0
  29. package/dist/{chunk-YTGRXD23.js → chunk-FEOFX4QW.js} +4 -25
  30. package/dist/chunk-FEOFX4QW.js.map +1 -0
  31. package/dist/{chunk-QJW3K6JN.js → chunk-G7AGM2Y7.js} +4 -3
  32. package/dist/chunk-G7AGM2Y7.js.map +1 -0
  33. package/dist/{chunk-HZMILQYO.js → chunk-GM4PXDZ2.js} +5 -4
  34. package/dist/chunk-GM4PXDZ2.js.map +1 -0
  35. package/dist/{chunk-QHK6PTUR.js → chunk-IKV2I7KT.js} +5 -4
  36. package/dist/chunk-IKV2I7KT.js.map +1 -0
  37. package/dist/{chunk-TI23GIFM.cjs → chunk-JH77MAON.cjs} +12 -11
  38. package/dist/chunk-JH77MAON.cjs.map +1 -0
  39. package/dist/{chunk-6DTW5T3Z.js → chunk-JSRKES2Z.js} +5 -4
  40. package/dist/chunk-JSRKES2Z.js.map +1 -0
  41. package/dist/chunk-JVWLXVYG.cjs +27 -0
  42. package/dist/chunk-JVWLXVYG.cjs.map +1 -0
  43. package/dist/{chunk-UQIRDE52.cjs → chunk-LX2X4KC7.cjs} +6 -5
  44. package/dist/chunk-LX2X4KC7.cjs.map +1 -0
  45. package/dist/{chunk-KWKB74KL.js → chunk-MKWBLNTD.js} +198 -44
  46. package/dist/chunk-MKWBLNTD.js.map +1 -0
  47. package/dist/chunk-NWGQ7JML.cjs +117 -0
  48. package/dist/chunk-NWGQ7JML.cjs.map +1 -0
  49. package/dist/{chunk-6RRFH7C4.cjs → chunk-NZM3M5IR.cjs} +39 -54
  50. package/dist/chunk-NZM3M5IR.cjs.map +1 -0
  51. package/dist/chunk-PPFVTXGJ.js +27 -0
  52. package/dist/chunk-PPFVTXGJ.js.map +1 -0
  53. package/dist/{chunk-3TJSFPO4.cjs → chunk-PROKRNL2.cjs} +26 -19
  54. package/dist/chunk-PROKRNL2.cjs.map +1 -0
  55. package/dist/chunk-TEAVPUMX.js +22 -0
  56. package/dist/chunk-TEAVPUMX.js.map +1 -0
  57. package/dist/{chunk-ALH6TUX2.js → chunk-THHFIP4N.js} +5 -4
  58. package/dist/chunk-THHFIP4N.js.map +1 -0
  59. package/dist/chunk-TL3GVPBO.cjs +234 -0
  60. package/dist/chunk-TL3GVPBO.cjs.map +1 -0
  61. package/dist/{chunk-XEGBGKHV.cjs → chunk-TXMP5AOW.cjs} +206 -52
  62. package/dist/chunk-TXMP5AOW.cjs.map +1 -0
  63. package/dist/{chunk-KP57YCYQ.js → chunk-UXV3V5NH.js} +23 -35
  64. package/dist/chunk-UXV3V5NH.js.map +1 -0
  65. package/dist/{chunk-H3IRVX7J.js → chunk-WSPVQR4O.js} +9 -9
  66. package/dist/chunk-WSPVQR4O.js.map +1 -0
  67. package/dist/{chunk-JKMBFHER.cjs → chunk-X4YU6BX7.cjs} +12 -11
  68. package/dist/chunk-X4YU6BX7.cjs.map +1 -0
  69. package/dist/chunk-YGJE7RSW.js +231 -0
  70. package/dist/chunk-YGJE7RSW.js.map +1 -0
  71. package/dist/components/ActivityPreview.cjs +14 -11
  72. package/dist/components/ActivityPreview.d.cts +7 -3
  73. package/dist/components/ActivityPreview.d.ts +7 -3
  74. package/dist/components/ActivityPreview.js +13 -10
  75. package/dist/components/ActivitySequence.cjs +14 -11
  76. package/dist/components/ActivitySequence.d.cts +75 -11
  77. package/dist/components/ActivitySequence.d.ts +75 -11
  78. package/dist/components/ActivitySequence.js +13 -10
  79. package/dist/components/Dictation.cjs +7 -4
  80. package/dist/components/Dictation.d.cts +1 -1
  81. package/dist/components/Dictation.d.ts +1 -1
  82. package/dist/components/Dictation.js +6 -3
  83. package/dist/components/FillInTheBlanks.cjs +7 -4
  84. package/dist/components/FillInTheBlanks.d.cts +1 -1
  85. package/dist/components/FillInTheBlanks.d.ts +1 -1
  86. package/dist/components/FillInTheBlanks.js +6 -3
  87. package/dist/components/GapSelect.cjs +7 -4
  88. package/dist/components/GapSelect.d.cts +1 -1
  89. package/dist/components/GapSelect.d.ts +1 -1
  90. package/dist/components/GapSelect.js +6 -3
  91. package/dist/components/InteractiveVideo.cjs +14 -11
  92. package/dist/components/InteractiveVideo.d.cts +2 -2
  93. package/dist/components/InteractiveVideo.d.ts +2 -2
  94. package/dist/components/InteractiveVideo.js +12 -9
  95. package/dist/components/MultipleChoice.cjs +7 -4
  96. package/dist/components/MultipleChoice.d.cts +1 -1
  97. package/dist/components/MultipleChoice.d.ts +1 -1
  98. package/dist/components/MultipleChoice.js +6 -3
  99. package/dist/components/PronunciationFeedback.cjs +4 -3
  100. package/dist/components/PronunciationFeedback.d.cts +1 -1
  101. package/dist/components/PronunciationFeedback.d.ts +1 -1
  102. package/dist/components/PronunciationFeedback.js +3 -2
  103. package/dist/components/ReadAloud.cjs +6 -4
  104. package/dist/components/ReadAloud.d.cts +2 -2
  105. package/dist/components/ReadAloud.d.ts +2 -2
  106. package/dist/components/ReadAloud.js +5 -3
  107. package/dist/components/StimulusPanel.d.cts +1 -1
  108. package/dist/components/StimulusPanel.d.ts +1 -1
  109. package/dist/components/WrittenResponse.cjs +4 -3
  110. package/dist/components/WrittenResponse.d.cts +3 -3
  111. package/dist/components/WrittenResponse.d.ts +3 -3
  112. package/dist/components/WrittenResponse.js +3 -2
  113. package/dist/i18n/LkIntlProvider.d.cts +2 -2
  114. package/dist/i18n/LkIntlProvider.d.ts +2 -2
  115. package/dist/index.cjs +34 -23
  116. package/dist/index.cjs.map +1 -1
  117. package/dist/index.d.cts +4 -3
  118. package/dist/index.d.ts +4 -3
  119. package/dist/index.js +15 -12
  120. package/dist/index.js.map +1 -1
  121. package/dist/{strings-PCYKWCwd.d.ts → types-BY-4S5Rd.d.ts} +761 -761
  122. package/dist/{strings-BOPKhnS-.d.cts → types-DtPYG1hh.d.cts} +761 -761
  123. package/package.json +13 -3
  124. package/dist/chunk-3TJSFPO4.cjs.map +0 -1
  125. package/dist/chunk-5F4Q6JT7.cjs +0 -289
  126. package/dist/chunk-5F4Q6JT7.cjs.map +0 -1
  127. package/dist/chunk-6DTW5T3Z.js.map +0 -1
  128. package/dist/chunk-6RRFH7C4.cjs.map +0 -1
  129. package/dist/chunk-ALH6TUX2.js.map +0 -1
  130. package/dist/chunk-BAKLJKFZ.cjs.map +0 -1
  131. package/dist/chunk-GR33G5QM.js +0 -286
  132. package/dist/chunk-GR33G5QM.js.map +0 -1
  133. package/dist/chunk-H3IRVX7J.js.map +0 -1
  134. package/dist/chunk-H63O5HPW.cjs.map +0 -1
  135. package/dist/chunk-HZMILQYO.js.map +0 -1
  136. package/dist/chunk-JKMBFHER.cjs.map +0 -1
  137. package/dist/chunk-KP57YCYQ.js.map +0 -1
  138. package/dist/chunk-KWKB74KL.js.map +0 -1
  139. package/dist/chunk-QA42VDTA.cjs.map +0 -1
  140. package/dist/chunk-QHK6PTUR.js.map +0 -1
  141. package/dist/chunk-QJW3K6JN.js.map +0 -1
  142. package/dist/chunk-RZ52SEYV.cjs.map +0 -1
  143. package/dist/chunk-TI23GIFM.cjs.map +0 -1
  144. package/dist/chunk-UQIRDE52.cjs.map +0 -1
  145. package/dist/chunk-UYQBEPNZ.js.map +0 -1
  146. package/dist/chunk-V5BTVGPA.js.map +0 -1
  147. package/dist/chunk-XEGBGKHV.cjs.map +0 -1
  148. package/dist/chunk-YTGRXD23.js.map +0 -1
  149. package/dist/chunk-Z5XY66PO.cjs.map +0 -1
@@ -0,0 +1,117 @@
1
+ 'use client';
2
+ 'use strict';
3
+
4
+ var chunkTL3GVPBO_cjs = require('./chunk-TL3GVPBO.cjs');
5
+ var react = require('react');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ function situation(input) {
9
+ const { data, response, submitted, renderMode, ai, locale, onInteraction } = input;
10
+ return {
11
+ data,
12
+ response,
13
+ submitted,
14
+ renderMode,
15
+ ...ai !== void 0 ? { ai } : {},
16
+ ...locale !== void 0 ? { locale } : {},
17
+ ...onInteraction !== void 0 ? { onInteraction } : {}
18
+ };
19
+ }
20
+ function AiExplanation({
21
+ outcome,
22
+ ...rest
23
+ }) {
24
+ const s = rest.strings;
25
+ const help = chunkTL3GVPBO_cjs.useAiExplanation({
26
+ ...situation(rest),
27
+ ...outcome !== void 0 ? { outcome } : {}
28
+ });
29
+ const buttonRef = react.useRef(null);
30
+ const panelRef = react.useRef(null);
31
+ const refocus = react.useRef(false);
32
+ react.useEffect(() => {
33
+ if (help.status === "shown" && refocus.current) {
34
+ refocus.current = false;
35
+ panelRef.current?.focus();
36
+ }
37
+ if (help.status === "unavailable") {
38
+ refocus.current = false;
39
+ }
40
+ }, [help.status]);
41
+ if (!help.offered) {
42
+ return null;
43
+ }
44
+ const ask = () => {
45
+ refocus.current = typeof document !== "undefined" && document.activeElement === buttonRef.current;
46
+ help.ask();
47
+ };
48
+ const loading = help.status === "loading";
49
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lk-ai", "data-state": help.status, children: [
50
+ help.explanation === null ? /* @__PURE__ */ jsxRuntime.jsx(
51
+ "button",
52
+ {
53
+ ref: buttonRef,
54
+ type: "button",
55
+ className: "lk-ai-button",
56
+ "aria-busy": loading || void 0,
57
+ "aria-disabled": loading || void 0,
58
+ onClick: ask,
59
+ children: loading ? s.aiExplaining : s.aiExplain
60
+ }
61
+ ) : null,
62
+ /* @__PURE__ */ jsxRuntime.jsx("div", { "aria-live": "polite", children: help.explanation !== null ? /* @__PURE__ */ jsxRuntime.jsxs(
63
+ "section",
64
+ {
65
+ ref: panelRef,
66
+ className: "lk-ai-panel",
67
+ tabIndex: -1,
68
+ "aria-label": s.aiExplanation,
69
+ children: [
70
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lk-ai-heading", children: s.aiExplanation }),
71
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lk-ai-text", children: help.explanation.text }),
72
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lk-ai-notice", children: s.aiNotice })
73
+ ]
74
+ }
75
+ ) : help.status === "unavailable" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lk-ai-unavailable", children: s.aiExplanationUnavailable }) : null })
76
+ ] });
77
+ }
78
+ function AiHints({ disabled, ...rest }) {
79
+ const s = rest.strings;
80
+ const help = chunkTL3GVPBO_cjs.useAiHints({ ...situation(rest), disabled });
81
+ const used = help.used;
82
+ if (rest.ai?.hint === void 0 || !help.offered && used === 0) {
83
+ return null;
84
+ }
85
+ const loading = help.status === "loading";
86
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lk-ai lk-ai-hint-area", "data-state": help.status, children: [
87
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { "aria-live": "polite", children: [
88
+ used > 0 ? /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "lk-ai-hints", "aria-label": s.aiHints, children: help.hints.map((hint, index) => (
89
+ // Hints are only ever appended, so a position is a stable key.
90
+ // biome-ignore lint/suspicious/noArrayIndexKey: an append-only list
91
+ /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "lk-ai-hint", children: [
92
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "lk-ai-hint-label", children: s.aiHintNumber(index + 1) }),
93
+ " ",
94
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "lk-ai-text", children: hint.text })
95
+ ] }, index)
96
+ )) }) : null,
97
+ help.status === "unavailable" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lk-ai-unavailable", children: s.aiHintUnavailable }) : null
98
+ ] }),
99
+ help.offered ? used < help.limit ? /* @__PURE__ */ jsxRuntime.jsx(
100
+ "button",
101
+ {
102
+ type: "button",
103
+ className: "lk-ai-button",
104
+ "aria-busy": loading || void 0,
105
+ "aria-disabled": loading || void 0,
106
+ onClick: help.ask,
107
+ children: loading ? s.aiHintLoading : s.aiHint
108
+ }
109
+ ) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lk-ai-note", children: s.aiNoMoreHints }) : null,
110
+ used > 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lk-ai-notice", children: s.aiNotice }) : null
111
+ ] });
112
+ }
113
+
114
+ exports.AiExplanation = AiExplanation;
115
+ exports.AiHints = AiHints;
116
+ //# sourceMappingURL=chunk-NWGQ7JML.cjs.map
117
+ //# sourceMappingURL=chunk-NWGQ7JML.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/shared/AiHelp.tsx"],"names":["useAiExplanation","useRef","useEffect","jsx","jsxs","useAiHints"],"mappings":"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","file":"chunk-NWGQ7JML.cjs","sourcesContent":["'use client';\n\nimport type { InteractionEvent, ItemOutcome, LearnerResponse } from '@intellectif/lk-core';\nimport { useEffect, useRef } from 'react';\nimport type { LearnerAi } from '../../ai/LkAiProvider.js';\nimport { useAiExplanation, useAiHints } from '../../ai/useAiHelp.js';\nimport type { LkStrings } from '../../i18n/strings.js';\nimport type { RenderableActivity, RenderMode } from '../types.js';\n\ninterface Situation {\n ai: LearnerAi | undefined;\n data: RenderableActivity;\n renderMode: RenderMode;\n submitted: boolean;\n /** The learner's answer as it stands: submitted, restored, or being written. */\n response: LearnerResponse;\n /** The component's `locale`, the default language for what is written. */\n locale: string | undefined;\n onInteraction: ((event: InteractionEvent) => void) | undefined;\n strings: LkStrings;\n}\n\n/** What the hooks take, from what a component holds: the optional half, without `undefined` values. */\nfunction situation(input: Situation): {\n data: RenderableActivity;\n response: LearnerResponse;\n submitted: boolean;\n renderMode: RenderMode;\n ai?: LearnerAi;\n locale?: string;\n onInteraction?: (event: InteractionEvent) => void;\n} {\n const { data, response, submitted, renderMode, ai, locale, onInteraction } = input;\n return {\n data,\n response,\n submitted,\n renderMode,\n ...(ai !== undefined ? { ai } : {}),\n ...(locale !== undefined ? { locale } : {}),\n ...(onInteraction !== undefined ? { onInteraction } : {}),\n };\n}\n\n/**\n * \"Explain my answer\": the SDK's own surface over {@link useAiExplanation} — a\n * button, the explanation with who wrote it, and \"not available\" when a call\n * fails or its answer is refused.\n *\n * Nothing renders without a port, or where the rules say no explanation.\n */\nexport function AiExplanation({\n outcome,\n ...rest\n}: Situation & { outcome: ItemOutcome | undefined }) {\n const s = rest.strings;\n const help = useAiExplanation({\n ...situation(rest),\n ...(outcome !== undefined ? { outcome } : {}),\n });\n const buttonRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLElement>(null);\n const refocus = useRef(false);\n\n // The button that asked goes away when the explanation arrives; focus moves\n // to what it asked for rather than falling to the page.\n useEffect(() => {\n if (help.status === 'shown' && refocus.current) {\n refocus.current = false;\n panelRef.current?.focus();\n }\n if (help.status === 'unavailable') {\n refocus.current = false;\n }\n }, [help.status]);\n\n if (!help.offered) {\n return null;\n }\n\n const ask = (): void => {\n refocus.current =\n typeof document !== 'undefined' && document.activeElement === buttonRef.current;\n help.ask();\n };\n\n const loading = help.status === 'loading';\n return (\n <div className=\"lk-ai\" data-state={help.status}>\n {help.explanation === null ? (\n <button\n ref={buttonRef}\n type=\"button\"\n className=\"lk-ai-button\"\n aria-busy={loading || undefined}\n aria-disabled={loading || undefined}\n onClick={ask}\n >\n {loading ? s.aiExplaining : s.aiExplain}\n </button>\n ) : null}\n <div aria-live=\"polite\">\n {help.explanation !== null ? (\n <section\n ref={panelRef}\n className=\"lk-ai-panel\"\n tabIndex={-1}\n aria-label={s.aiExplanation}\n >\n <p className=\"lk-ai-heading\">{s.aiExplanation}</p>\n <p className=\"lk-ai-text\">{help.explanation.text}</p>\n <p className=\"lk-ai-notice\">{s.aiNotice}</p>\n </section>\n ) : help.status === 'unavailable' ? (\n <p className=\"lk-ai-unavailable\">{s.aiExplanationUnavailable}</p>\n ) : null}\n </div>\n </div>\n );\n}\n\n/**\n * \"Get a hint\": the SDK's own surface over {@link useAiHints} — a button, the\n * hints given so far as a numbered list, and who wrote them.\n *\n * The hints stay listed after submit, so the learner can see what they were\n * given, but no more can be asked for. Another question starts with none.\n */\nexport function AiHints({ disabled, ...rest }: Situation & { disabled: boolean }) {\n const s = rest.strings;\n const help = useAiHints({ ...situation(rest), disabled });\n const used = help.used;\n\n if (rest.ai?.hint === undefined || (!help.offered && used === 0)) {\n return null;\n }\n\n const loading = help.status === 'loading';\n return (\n <div className=\"lk-ai lk-ai-hint-area\" data-state={help.status}>\n <div aria-live=\"polite\">\n {used > 0 ? (\n <ol className=\"lk-ai-hints\" aria-label={s.aiHints}>\n {help.hints.map((hint, index) => (\n // Hints are only ever appended, so a position is a stable key.\n // biome-ignore lint/suspicious/noArrayIndexKey: an append-only list\n <li key={index} className=\"lk-ai-hint\">\n <span className=\"lk-ai-hint-label\">{s.aiHintNumber(index + 1)}</span>{' '}\n <span className=\"lk-ai-text\">{hint.text}</span>\n </li>\n ))}\n </ol>\n ) : null}\n {help.status === 'unavailable' ? (\n <p className=\"lk-ai-unavailable\">{s.aiHintUnavailable}</p>\n ) : null}\n </div>\n {help.offered ? (\n used < help.limit ? (\n <button\n type=\"button\"\n className=\"lk-ai-button\"\n aria-busy={loading || undefined}\n aria-disabled={loading || undefined}\n onClick={help.ask}\n >\n {loading ? s.aiHintLoading : s.aiHint}\n </button>\n ) : (\n <p className=\"lk-ai-note\">{s.aiNoMoreHints}</p>\n )\n ) : null}\n {used > 0 ? <p className=\"lk-ai-notice\">{s.aiNotice}</p> : null}\n </div>\n );\n}\n"]}
@@ -1,11 +1,13 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkUQIRDE52_cjs = require('./chunk-UQIRDE52.cjs');
4
+ var chunkLX2X4KC7_cjs = require('./chunk-LX2X4KC7.cjs');
5
5
  var chunkUDCQTOVU_cjs = require('./chunk-UDCQTOVU.cjs');
6
6
  var chunkOD65OZIW_cjs = require('./chunk-OD65OZIW.cjs');
7
+ var chunkJVWLXVYG_cjs = require('./chunk-JVWLXVYG.cjs');
7
8
  var chunkBRPEB43C_cjs = require('./chunk-BRPEB43C.cjs');
8
- var chunkBAKLJKFZ_cjs = require('./chunk-BAKLJKFZ.cjs');
9
+ var chunkAPZ6JFN6_cjs = require('./chunk-APZ6JFN6.cjs');
10
+ var chunkEANGKAKG_cjs = require('./chunk-EANGKAKG.cjs');
9
11
  var chunkL7WY5YFQ_cjs = require('./chunk-L7WY5YFQ.cjs');
10
12
  var chunkXOR4MPEN_cjs = require('./chunk-XOR4MPEN.cjs');
11
13
  var chunkAHGB5HH6_cjs = require('./chunk-AHGB5HH6.cjs');
@@ -42,27 +44,13 @@ function stopCaptureGroup(group) {
42
44
  stop();
43
45
  }
44
46
  }
45
- var SequenceSlotContext = react.createContext(null);
46
- var lastTake = 0;
47
- function mintTake() {
48
- lastTake += 1;
49
- return lastTake;
50
- }
51
- var takes = /* @__PURE__ */ new WeakMap();
52
- function stampTake(value, take) {
53
- takes.set(value, take);
54
- return value;
55
- }
56
- function takeOf(value) {
57
- return typeof value === "object" && value !== null ? takes.get(value) : void 0;
58
- }
59
47
  var isNumber = (value) => typeof value === "number" && Number.isFinite(value);
60
48
  function readRecordingBounds(recording) {
61
49
  const bounds = typeof recording === "object" && recording !== null ? recording : {};
62
50
  const maxSeconds = isNumber(bounds.maxSeconds) && bounds.maxSeconds > 0 ? Math.min(bounds.maxSeconds, lkCore.READ_ALOUD_MAX_SECONDS) : lkCore.READ_ALOUD_MAX_SECONDS;
63
51
  const minSeconds = isNumber(bounds.minSeconds) && bounds.minSeconds >= 0 && bounds.minSeconds < maxSeconds ? bounds.minSeconds : void 0;
64
- const takes2 = bounds.maxTakes;
65
- const maxTakes = takes2 === void 0 || takes2 === null ? void 0 : isNumber(takes2) ? Math.min(Math.max(1, Math.floor(takes2)), lkCore.READ_ALOUD_MAX_TAKES) : lkCore.READ_ALOUD_MAX_TAKES;
52
+ const takes = bounds.maxTakes;
53
+ const maxTakes = takes === void 0 || takes === null ? void 0 : isNumber(takes) ? Math.min(Math.max(1, Math.floor(takes)), lkCore.READ_ALOUD_MAX_TAKES) : lkCore.READ_ALOUD_MAX_TAKES;
66
54
  return { maxSeconds, minSeconds, maxTakes };
67
55
  }
68
56
  function secondsWithin(milliseconds, maxSeconds, rounding) {
@@ -140,8 +128,8 @@ function marksFromDetails(details) {
140
128
  function recordingOf(response) {
141
129
  return response !== void 0 && response.type === "read-aloud" ? response.recording : null;
142
130
  }
143
- function responseOf(recording, takes2) {
144
- return { type: "read-aloud", recording, ...takes2 > 0 ? { takes: takes2 } : {} };
131
+ function responseOf(recording, takes) {
132
+ return { type: "read-aloud", recording, ...takes > 0 ? { takes } : {} };
145
133
  }
146
134
  function unscorableMessage(code, s) {
147
135
  return code === "no_speech" || code === "insufficient_voiced_time" ? s.readAloudNotHeard : s.readAloudNotAssessed;
@@ -172,7 +160,7 @@ function OutcomeSummary({
172
160
  "data-status": reading.status,
173
161
  "data-passed": String(reading.grade.passed),
174
162
  children: scoreShown ? null : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
175
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lk-ra-grade", children: s.scoreAnnouncement(chunkUQIRDE52_cjs.percentOfGrade(reading.grade), reading.grade.passed) }),
163
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lk-ra-grade", children: s.scoreAnnouncement(chunkLX2X4KC7_cjs.percentOfGrade(reading.grade), reading.grade.passed) }),
176
164
  reading.grade.feedback ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lk-ra-grade-feedback", dir: "auto", children: reading.grade.feedback }) : null
177
165
  ] })
178
166
  }
@@ -225,10 +213,10 @@ function ReadAloud({
225
213
  const isExam = renderMode === "exam";
226
214
  const isReview = renderMode === "review";
227
215
  const s = chunkAHGB5HH6_cjs.useLkStrings(strings);
228
- const slot = react.useContext(SequenceSlotContext);
216
+ const slot = react.useContext(chunkJVWLXVYG_cjs.SequenceSlotContext);
229
217
  const captureGroup = slot?.captureGroup;
230
218
  const devError = react.useMemo(() => {
231
- if (!chunkBAKLJKFZ_cjs.isDevelopment()) {
219
+ if (!chunkEANGKAKG_cjs.isDevelopment()) {
232
220
  return null;
233
221
  }
234
222
  if (data.redacted === true) {
@@ -419,7 +407,7 @@ function ReadAloud({
419
407
  [data, s.readAloudSlowRecording]
420
408
  );
421
409
  const takeAudio = isReview ? playbackUrl : takeUrl;
422
- const playback = chunkUQIRDE52_cjs.usePlaybackRefusal(takeAudio);
410
+ const playback = chunkLX2X4KC7_cjs.usePlaybackRefusal(takeAudio);
423
411
  const submitRef = react.useRef(null);
424
412
  if (devError) {
425
413
  throw devError;
@@ -444,14 +432,14 @@ function ReadAloud({
444
432
  const runAssess = async (ref, current, take2) => {
445
433
  const assess = bindingRef.current?.assess;
446
434
  const durationMs = current?.durationMs ?? 0;
447
- const takes2 = recorder.takesUsed;
435
+ const takes = recorder.takesUsed;
448
436
  const run = runRef.current;
449
437
  if (assess === void 0) {
450
438
  setPhase({ kind: "unassessed", take: take2 });
451
439
  return;
452
440
  }
453
441
  setPhase({ kind: "assessing", take: take2 });
454
- fire("assessment-requested", { takes: takes2, durationMs });
442
+ fire("assessment-requested", { takes, durationMs });
455
443
  let answer;
456
444
  try {
457
445
  answer = await assess(ref);
@@ -460,22 +448,22 @@ function ReadAloud({
460
448
  return;
461
449
  }
462
450
  raise({ kind: "assess-failed", take: take2, retryable: true });
463
- fire("assessment-failed", { takes: takes2, durationMs, retryable: true });
451
+ fire("assessment-failed", { takes, durationMs, retryable: true });
464
452
  return;
465
453
  }
466
454
  if (run !== runRef.current) {
467
455
  return;
468
456
  }
469
- const result = chunkUQIRDE52_cjs.readAssessResult(answer);
457
+ const result = chunkLX2X4KC7_cjs.readAssessResult(answer);
470
458
  if (result.status === "failed") {
471
459
  raise({ kind: "assess-failed", take: take2, retryable: result.retryable });
472
- fire("assessment-failed", { takes: takes2, durationMs, retryable: result.retryable });
460
+ fire("assessment-failed", { takes, durationMs, retryable: result.retryable });
473
461
  return;
474
462
  }
475
463
  if (result.status === "unscorable") {
476
464
  setPhase({ kind: "unscorable", take: take2, code: result.code });
477
465
  fire("assessment-failed", {
478
- takes: takes2,
466
+ takes,
479
467
  durationMs,
480
468
  retryable: true,
481
469
  ...result.code !== void 0 ? { code: result.code } : {}
@@ -486,20 +474,20 @@ function ReadAloud({
486
474
  setPhase({ kind: "graded", take: take2, assessment: result.assessment, grade: result.grade });
487
475
  const grade = result.grade;
488
476
  if (grade === null) {
489
- fire("assessment-failed", { takes: takes2, durationMs, retryable: true });
477
+ fire("assessment-failed", { takes, durationMs, retryable: true });
490
478
  return;
491
479
  }
492
480
  onComplete?.(
493
- stampTake(
481
+ chunkJVWLXVYG_cjs.stampTake(
494
482
  {
495
483
  score: grade.score,
496
484
  maxScore: grade.maxScore,
497
485
  passed: grade.passed,
498
486
  timeSpent,
499
487
  xapiStatement: lkCore.xAPIBuilder.buildAnsweredStatement({
500
- actor: chunkBAKLJKFZ_cjs.ANONYMOUS_ACTOR,
488
+ actor: chunkEANGKAKG_cjs.ANONYMOUS_ACTOR,
501
489
  object: {
502
- id: chunkBAKLJKFZ_cjs.objectIdFor(data.id),
490
+ id: chunkEANGKAKG_cjs.objectIdFor(data.id),
503
491
  name: { [data.locale ?? "en-US"]: data.title },
504
492
  ...lkCore.xapiDefinitionFor(data)
505
493
  },
@@ -509,7 +497,7 @@ function ReadAloud({
509
497
  // optional, and an empty list is the honest reading of "no per-word
510
498
  // marks were stored" — never a mark of its own.
511
499
  scoringResult: {
512
- score: chunkUQIRDE52_cjs.fractionOfGrade(grade),
500
+ score: chunkLX2X4KC7_cjs.fractionOfGrade(grade),
513
501
  maxScore: 1,
514
502
  passed: grade.passed,
515
503
  feedback: grade.feedback,
@@ -527,9 +515,9 @@ function ReadAloud({
527
515
  return;
528
516
  }
529
517
  submittingRef.current = true;
530
- const takes2 = recorder.takesUsed;
518
+ const takes = recorder.takesUsed;
531
519
  const run = runRef.current;
532
- const take2 = mintTake();
520
+ const take2 = chunkJVWLXVYG_cjs.mintTake();
533
521
  beginTakeReport(take2);
534
522
  try {
535
523
  let ref = null;
@@ -543,7 +531,7 @@ function ReadAloud({
543
531
  }
544
532
  raise({ kind: "upload-failed", take: take2 });
545
533
  fire("recording-upload-failed", {
546
- takes: takes2,
534
+ takes,
547
535
  durationMs: current.durationMs,
548
536
  retryable: true
549
537
  });
@@ -553,10 +541,10 @@ function ReadAloud({
553
541
  return;
554
542
  }
555
543
  setUploaded(ref);
556
- fire("recording-uploaded", { takes: takes2, durationMs: current.durationMs });
544
+ fire("recording-uploaded", { takes, durationMs: current.durationMs });
557
545
  }
558
- onSubmit?.(stampTake(responseOf(ref, takes2), take2));
559
- fire("submitted", { takes: takes2, durationMs: current?.durationMs ?? 0 });
546
+ onSubmit?.(chunkJVWLXVYG_cjs.stampTake(responseOf(ref, takes), take2));
547
+ fire("submitted", { takes, durationMs: current?.durationMs ?? 0 });
560
548
  if (isExam || ref === null) {
561
549
  complete();
562
550
  setPhase({ kind: "submitted", take: take2 });
@@ -603,8 +591,8 @@ function ReadAloud({
603
591
  };
604
592
  const contentLang = typeof data.locale === "string" ? data.locale : void 0;
605
593
  const contentDir = chunkOD65OZIW_cjs.localeDirectionOf(data.locale);
606
- const outcomeReading = react.useMemo(() => chunkUQIRDE52_cjs.readOutcome(outcome), [outcome]);
607
- const keptEvidence = react.useMemo(() => chunkUQIRDE52_cjs.readEvidence(assessment), [assessment]);
594
+ const outcomeReading = react.useMemo(() => chunkLX2X4KC7_cjs.readOutcome(outcome), [outcome]);
595
+ const keptEvidence = react.useMemo(() => chunkLX2X4KC7_cjs.readEvidence(assessment), [assessment]);
608
596
  const storedGrade = outcomeReading?.kind === "graded" && outcomeReading.status === "graded" ? outcomeReading.grade : null;
609
597
  const storedMarks = react.useMemo(
610
598
  () => isReview && keptEvidence === null && storedGrade?.details !== void 0 ? marksFromDetails(storedGrade.details) : null,
@@ -646,7 +634,7 @@ function ReadAloud({
646
634
  case "graded": {
647
635
  const grade = phase.grade;
648
636
  return grade === null ? { text: `${s.answerSubmitted} ${s.couldNotBeGraded}`, feedback: null } : {
649
- text: `${s.answerSubmitted} ${s.scoreAnnouncement(chunkUQIRDE52_cjs.percentOfGrade(grade), grade.passed)}`,
637
+ text: `${s.answerSubmitted} ${s.scoreAnnouncement(chunkLX2X4KC7_cjs.percentOfGrade(grade), grade.passed)}`,
650
638
  feedback: grade.feedback
651
639
  };
652
640
  }
@@ -829,7 +817,7 @@ function ReadAloud({
829
817
  busy ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lk-ra-pending", role: "status", "aria-busy": "true", children: phase.kind === "uploading" ? s.readAloudUploading : s.readAloudAssessing }) : null,
830
818
  alertText !== null ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lk-ra-alert", role: "alert", children: alertText }, errorNonce) : null,
831
819
  feedbackAssessment !== null ? /* @__PURE__ */ jsxRuntime.jsx(
832
- chunkUQIRDE52_cjs.PronunciationFeedback,
820
+ chunkLX2X4KC7_cjs.PronunciationFeedback,
833
821
  {
834
822
  data: { referenceText: data.referenceText, locale: data.locale },
835
823
  assessment: feedbackAssessment,
@@ -843,14 +831,14 @@ function ReadAloud({
843
831
  ) : null,
844
832
  storedMarks !== null ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lk-ra-marks", children: [
845
833
  /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "lk-ra-words", "aria-label": s.pronunciationWordsLabel, dir: contentDir, children: storedMarks.map((entry, index) => {
846
- const sentence = chunkUQIRDE52_cjs.markSentence(entry, s);
834
+ const sentence = chunkLX2X4KC7_cjs.markSentence(entry, s);
847
835
  return /* @__PURE__ */ jsxRuntime.jsxs(
848
836
  "li",
849
837
  {
850
838
  className: "lk-ra-word",
851
839
  "data-state": entry.state,
852
840
  children: [
853
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "lk-visually-hidden", style: chunkUQIRDE52_cjs.VISUALLY_HIDDEN, children: sentence }),
841
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "lk-visually-hidden", style: chunkLX2X4KC7_cjs.VISUALLY_HIDDEN, children: sentence }),
854
842
  /* @__PURE__ */ jsxRuntime.jsx(
855
843
  "span",
856
844
  {
@@ -874,7 +862,7 @@ function ReadAloud({
874
862
  // but a live region is the only thing that TELLS a screen-reader
875
863
  // learner a grade arrived, since nothing takes focus. Clipped rather
876
864
  // than `display: none`, which would stop it being announced at all.
877
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "lk-visually-hidden", style: chunkUQIRDE52_cjs.VISUALLY_HIDDEN, children: /* @__PURE__ */ jsxRuntime.jsx(AnnouncementText, { announcement }) })
865
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "lk-visually-hidden", style: chunkLX2X4KC7_cjs.VISUALLY_HIDDEN, children: /* @__PURE__ */ jsxRuntime.jsx(AnnouncementText, { announcement }) })
878
866
  ) : /* @__PURE__ */ jsxRuntime.jsx(AnnouncementText, { announcement }) })
879
867
  ]
880
868
  }
@@ -882,13 +870,10 @@ function ReadAloud({
882
870
  }
883
871
  function ReadAloud2(props) {
884
872
  const strings = chunkAHGB5HH6_cjs.useLkStrings(props.strings);
885
- return /* @__PURE__ */ jsxRuntime.jsx(chunkBAKLJKFZ_cjs.ActivityErrorBoundary, { activityTitle: props.data?.title, strings, children: /* @__PURE__ */ jsxRuntime.jsx(ReadAloud, { ...props }) });
873
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkAPZ6JFN6_cjs.ActivityErrorBoundary, { activityTitle: props.data?.title, strings, children: /* @__PURE__ */ jsxRuntime.jsx(ReadAloud, { ...props }) });
886
874
  }
887
875
 
888
876
  exports.ReadAloud = ReadAloud2;
889
- exports.SequenceSlotContext = SequenceSlotContext;
890
- exports.mintTake = mintTake;
891
877
  exports.stopCaptureGroup = stopCaptureGroup;
892
- exports.takeOf = takeOf;
893
- //# sourceMappingURL=chunk-6RRFH7C4.cjs.map
894
- //# sourceMappingURL=chunk-6RRFH7C4.cjs.map
878
+ //# sourceMappingURL=chunk-NZM3M5IR.cjs.map
879
+ //# sourceMappingURL=chunk-NZM3M5IR.cjs.map