@intellectif/lk-react 23.0.1 → 23.1.1
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 +27 -0
- package/README.md +13 -9
- package/dist/ActivityErrorBoundary-B379hvtL.cjs +39 -0
- package/dist/ActivityErrorBoundary-B379hvtL.cjs.map +1 -0
- package/dist/ActivityErrorBoundary-Dw6SbWv3.js +34 -0
- package/dist/ActivityErrorBoundary-Dw6SbWv3.js.map +1 -0
- package/dist/ActivityMedia-CQQTRNl7.cjs +641 -0
- package/dist/ActivityMedia-CQQTRNl7.cjs.map +1 -0
- package/dist/ActivityMedia-vDiP-Psa.js +636 -0
- package/dist/ActivityMedia-vDiP-Psa.js.map +1 -0
- package/dist/ActivityPreview-1hhTkYuj.js +240 -0
- package/dist/ActivityPreview-1hhTkYuj.js.map +1 -0
- package/dist/ActivityPreview-BKr34exz.cjs +245 -0
- package/dist/ActivityPreview-BKr34exz.cjs.map +1 -0
- package/dist/ActivitySequence-CkX87pfB.js +839 -0
- package/dist/ActivitySequence-CkX87pfB.js.map +1 -0
- package/dist/ActivitySequence-CmoSyDnp.cjs +844 -0
- package/dist/ActivitySequence-CmoSyDnp.cjs.map +1 -0
- package/dist/Dictation-BlxRp-3k.js +926 -0
- package/dist/Dictation-BlxRp-3k.js.map +1 -0
- package/dist/Dictation-jECzL88E.cjs +931 -0
- package/dist/Dictation-jECzL88E.cjs.map +1 -0
- package/dist/FeedbackRegion-BNNMtTY-.cjs +108 -0
- package/dist/FeedbackRegion-BNNMtTY-.cjs.map +1 -0
- package/dist/FeedbackRegion-CyPSp8bA.js +85 -0
- package/dist/FeedbackRegion-CyPSp8bA.js.map +1 -0
- package/dist/FillInTheBlanks-B6xzqYXx.js +474 -0
- package/dist/FillInTheBlanks-B6xzqYXx.js.map +1 -0
- package/dist/FillInTheBlanks-BpKhdHg2.cjs +479 -0
- package/dist/FillInTheBlanks-BpKhdHg2.cjs.map +1 -0
- package/dist/GapSelect-DUSiaEQH.js +441 -0
- package/dist/GapSelect-DUSiaEQH.js.map +1 -0
- package/dist/GapSelect-payTq_Zn.cjs +446 -0
- package/dist/GapSelect-payTq_Zn.cjs.map +1 -0
- package/dist/InteractiveVideo-BguGv-HA.cjs +2955 -0
- package/dist/InteractiveVideo-BguGv-HA.cjs.map +1 -0
- package/dist/InteractiveVideo-Cg2jbU3j.js +2944 -0
- package/dist/InteractiveVideo-Cg2jbU3j.js.map +1 -0
- package/dist/LkAiProvider-DAPpA3PQ.d.cts +84 -0
- package/dist/LkAiProvider-DAPpA3PQ.d.cts.map +1 -0
- package/dist/LkAiProvider-QdEcIhoo.d.ts +84 -0
- package/dist/LkAiProvider-QdEcIhoo.d.ts.map +1 -0
- package/dist/LkIntlProvider-D_FdYXjQ.js +375 -0
- package/dist/LkIntlProvider-D_FdYXjQ.js.map +1 -0
- package/dist/LkIntlProvider-oi57lYB0.cjs +410 -0
- package/dist/LkIntlProvider-oi57lYB0.cjs.map +1 -0
- package/dist/MultipleChoice-COn5MtKY.cjs +433 -0
- package/dist/MultipleChoice-COn5MtKY.cjs.map +1 -0
- package/dist/MultipleChoice-Dra0_KYD.js +428 -0
- package/dist/MultipleChoice-Dra0_KYD.js.map +1 -0
- package/dist/PronunciationFeedback-DlMPGjkR.cjs +831 -0
- package/dist/PronunciationFeedback-DlMPGjkR.cjs.map +1 -0
- package/dist/PronunciationFeedback-Dxd6XPkO.js +772 -0
- package/dist/PronunciationFeedback-Dxd6XPkO.js.map +1 -0
- package/dist/ReadAloud-C8RhaUqV.js +1092 -0
- package/dist/ReadAloud-C8RhaUqV.js.map +1 -0
- package/dist/ReadAloud-akDehitT.cjs +1103 -0
- package/dist/ReadAloud-akDehitT.cjs.map +1 -0
- package/dist/StimulusPanel-BgzByfkb.js +74 -0
- package/dist/StimulusPanel-BgzByfkb.js.map +1 -0
- package/dist/StimulusPanel-b66gaN3i.cjs +79 -0
- package/dist/StimulusPanel-b66gaN3i.cjs.map +1 -0
- package/dist/ThemeProvider-BRN1tj4n.cjs +187 -0
- package/dist/ThemeProvider-BRN1tj4n.cjs.map +1 -0
- package/dist/ThemeProvider-C7K9iMLX.js +158 -0
- package/dist/ThemeProvider-C7K9iMLX.js.map +1 -0
- package/dist/ThemeProvider-CocC8ODJ.d.ts +62 -0
- package/dist/ThemeProvider-CocC8ODJ.d.ts.map +1 -0
- package/dist/ThemeProvider-DS4KOL86.d.cts +62 -0
- package/dist/ThemeProvider-DS4KOL86.d.cts.map +1 -0
- package/dist/WrittenResponse-Bj3eFmGl.cjs +491 -0
- package/dist/WrittenResponse-Bj3eFmGl.cjs.map +1 -0
- package/dist/WrittenResponse-Cl8G6nO_.js +486 -0
- package/dist/WrittenResponse-Cl8G6nO_.js.map +1 -0
- package/dist/ai/LkAiProvider.cjs +34 -14
- package/dist/ai/LkAiProvider.cjs.map +1 -1
- package/dist/ai/LkAiProvider.d.cts +2 -73
- package/dist/ai/LkAiProvider.d.ts +2 -73
- package/dist/ai/LkAiProvider.js +33 -2
- package/dist/ai/LkAiProvider.js.map +1 -1
- package/dist/ai/useAiHelp.cjs +7 -23
- package/dist/ai/useAiHelp.d.cts +198 -121
- package/dist/ai/useAiHelp.d.cts.map +1 -0
- package/dist/ai/useAiHelp.d.ts +198 -121
- package/dist/ai/useAiHelp.d.ts.map +1 -0
- package/dist/ai/useAiHelp.js +3 -6
- package/dist/components/ActivityPreview.cjs +3 -31
- package/dist/components/ActivityPreview.d.cts +2 -81
- package/dist/components/ActivityPreview.d.ts +2 -81
- package/dist/components/ActivityPreview.js +2 -22
- package/dist/components/ActivitySequence.cjs +3 -32
- package/dist/components/ActivitySequence.d.cts +2 -432
- package/dist/components/ActivitySequence.d.ts +2 -432
- package/dist/components/ActivitySequence.js +2 -23
- package/dist/components/Dictation.cjs +4 -23
- package/dist/components/Dictation.d.cts +2 -19
- package/dist/components/Dictation.d.ts +2 -19
- package/dist/components/Dictation.js +3 -14
- package/dist/components/FillInTheBlanks.cjs +4 -22
- package/dist/components/FillInTheBlanks.d.cts +2 -30
- package/dist/components/FillInTheBlanks.d.ts +2 -30
- package/dist/components/FillInTheBlanks.js +3 -13
- package/dist/components/GapSelect.cjs +4 -22
- package/dist/components/GapSelect.d.cts +2 -27
- package/dist/components/GapSelect.d.ts +2 -27
- package/dist/components/GapSelect.js +3 -13
- package/dist/components/InteractiveVideo.cjs +5 -34
- package/dist/components/InteractiveVideo.d.cts +3 -291
- package/dist/components/InteractiveVideo.d.ts +3 -291
- package/dist/components/InteractiveVideo.js +3 -21
- package/dist/components/MultipleChoice.cjs +4 -22
- package/dist/components/MultipleChoice.d.cts +2 -26
- package/dist/components/MultipleChoice.d.ts +2 -26
- package/dist/components/MultipleChoice.js +3 -13
- package/dist/components/PronunciationFeedback.cjs +4 -16
- package/dist/components/PronunciationFeedback.d.cts +2 -69
- package/dist/components/PronunciationFeedback.d.ts +2 -69
- package/dist/components/PronunciationFeedback.js +3 -7
- package/dist/components/ReadAloud.cjs +4 -22
- package/dist/components/ReadAloud.d.cts +7 -11
- package/dist/components/ReadAloud.d.cts.map +1 -0
- package/dist/components/ReadAloud.d.ts +7 -11
- package/dist/components/ReadAloud.d.ts.map +1 -0
- package/dist/components/ReadAloud.js +3 -13
- package/dist/components/StimulusPanel.cjs +3 -14
- package/dist/components/StimulusPanel.d.cts +2 -51
- package/dist/components/StimulusPanel.d.ts +2 -51
- package/dist/components/StimulusPanel.js +2 -5
- package/dist/components/WrittenResponse.cjs +4 -21
- package/dist/components/WrittenResponse.d.cts +3 -18
- package/dist/components/WrittenResponse.d.ts +3 -18
- package/dist/components/WrittenResponse.js +3 -12
- package/dist/direction-Dq0_HtA5.js +183 -0
- package/dist/direction-Dq0_HtA5.js.map +1 -0
- package/dist/direction-K1pj0HCA.cjs +200 -0
- package/dist/direction-K1pj0HCA.cjs.map +1 -0
- package/dist/hooks/useActivityState.cjs +28 -10
- package/dist/hooks/useActivityState.cjs.map +1 -1
- package/dist/hooks/useActivityState.d.cts +25 -24
- package/dist/hooks/useActivityState.d.cts.map +1 -0
- package/dist/hooks/useActivityState.d.ts +25 -24
- package/dist/hooks/useActivityState.d.ts.map +1 -0
- package/dist/hooks/useActivityState.js +28 -2
- package/dist/hooks/useActivityState.js.map +1 -1
- package/dist/hooks/useSpeechRecorder.cjs +5 -16
- package/dist/hooks/useSpeechRecorder.d.cts +2 -127
- package/dist/hooks/useSpeechRecorder.d.ts +2 -127
- package/dist/hooks/useSpeechRecorder.js +3 -3
- package/dist/hooks/useXAPI.cjs +126 -10
- package/dist/hooks/useXAPI.cjs.map +1 -1
- package/dist/hooks/useXAPI.d.cts +14 -14
- package/dist/hooks/useXAPI.d.cts.map +1 -0
- package/dist/hooks/useXAPI.d.ts +14 -14
- package/dist/hooks/useXAPI.d.ts.map +1 -0
- package/dist/hooks/useXAPI.js +126 -2
- package/dist/hooks/useXAPI.js.map +1 -1
- package/dist/i18n/LkIntlProvider.cjs +9 -32
- package/dist/i18n/LkIntlProvider.d.cts +34 -38
- package/dist/i18n/LkIntlProvider.d.cts.map +1 -0
- package/dist/i18n/LkIntlProvider.d.ts +34 -38
- package/dist/i18n/LkIntlProvider.d.ts.map +1 -0
- package/dist/i18n/LkIntlProvider.js +3 -3
- package/dist/index-2iDJohip.d.cts +90 -0
- package/dist/index-2iDJohip.d.cts.map +1 -0
- package/dist/index-BAqT5tXN.d.ts +90 -0
- package/dist/index-BAqT5tXN.d.ts.map +1 -0
- package/dist/index-BRbEfXgE.d.ts +78 -0
- package/dist/index-BRbEfXgE.d.ts.map +1 -0
- package/dist/index-BW7aA5eN.d.cts +25 -0
- package/dist/index-BW7aA5eN.d.cts.map +1 -0
- package/dist/index-BeiVd-qe.d.ts +124 -0
- package/dist/index-BeiVd-qe.d.ts.map +1 -0
- package/dist/index-C1KGpD1k.d.ts +49 -0
- package/dist/index-C1KGpD1k.d.ts.map +1 -0
- package/dist/index-C7cCHEze.d.cts +24 -0
- package/dist/index-C7cCHEze.d.cts.map +1 -0
- package/dist/index-CKTpYTCC.d.cts +49 -0
- package/dist/index-CKTpYTCC.d.cts.map +1 -0
- package/dist/index-CN3_TwDL.d.ts +28 -0
- package/dist/index-CN3_TwDL.d.ts.map +1 -0
- package/dist/index-CNoAqj5I.d.ts +16 -0
- package/dist/index-CNoAqj5I.d.ts.map +1 -0
- package/dist/index-CTlht6OV.d.cts +432 -0
- package/dist/index-CTlht6OV.d.cts.map +1 -0
- package/dist/index-CmgSzapt.d.cts +124 -0
- package/dist/index-CmgSzapt.d.cts.map +1 -0
- package/dist/index-D4WYDN_p.d.cts +28 -0
- package/dist/index-D4WYDN_p.d.cts.map +1 -0
- package/dist/index-DAJ6KK49.d.ts +25 -0
- package/dist/index-DAJ6KK49.d.ts.map +1 -0
- package/dist/index-DIiacP_z.d.cts +78 -0
- package/dist/index-DIiacP_z.d.cts.map +1 -0
- package/dist/index-DR0SOJig.d.ts +291 -0
- package/dist/index-DR0SOJig.d.ts.map +1 -0
- package/dist/index-DRMauOVH.d.ts +432 -0
- package/dist/index-DRMauOVH.d.ts.map +1 -0
- package/dist/index-bmmRfGad.d.cts +16 -0
- package/dist/index-bmmRfGad.d.cts.map +1 -0
- package/dist/index-n9PKZm7W.d.cts +291 -0
- package/dist/index-n9PKZm7W.d.cts.map +1 -0
- package/dist/index-zu9H7owf.d.ts +24 -0
- package/dist/index-zu9H7owf.d.ts.map +1 -0
- package/dist/index.cjs +118 -161
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +20 -24
- package/dist/index.d.ts +20 -24
- package/dist/index.js +84 -31
- package/dist/index.js.map +1 -1
- package/dist/theme/ThemeProvider.cjs +8 -28
- package/dist/theme/ThemeProvider.d.cts +2 -59
- package/dist/theme/ThemeProvider.d.ts +2 -59
- package/dist/theme/ThemeProvider.js +3 -3
- package/dist/theme/skin.css +46 -1
- package/dist/tries-CbbtZkdG.cjs +363 -0
- package/dist/{chunk-W6UMY7PF.cjs.map → tries-CbbtZkdG.cjs.map} +1 -1
- package/dist/tries-DTHSrLCm.js +310 -0
- package/dist/tries-DTHSrLCm.js.map +1 -0
- package/dist/types-BOQd93x3.d.cts +994 -0
- package/dist/types-BOQd93x3.d.cts.map +1 -0
- package/dist/types-HIrgF_mS.d.ts +994 -0
- package/dist/types-HIrgF_mS.d.ts.map +1 -0
- package/dist/useAiHelp-B-ccDL5Q.js +906 -0
- package/dist/useAiHelp-B-ccDL5Q.js.map +1 -0
- package/dist/useAiHelp-h9yOLFqt.cjs +995 -0
- package/dist/useAiHelp-h9yOLFqt.cjs.map +1 -0
- package/dist/useSpeechRecorder--O_f-xvt.cjs +720 -0
- package/dist/useSpeechRecorder--O_f-xvt.cjs.map +1 -0
- package/dist/useSpeechRecorder-DtAYvl02.d.cts +154 -0
- package/dist/useSpeechRecorder-DtAYvl02.d.cts.map +1 -0
- package/dist/useSpeechRecorder-DtAYvl02.d.ts +154 -0
- package/dist/useSpeechRecorder-DtAYvl02.d.ts.map +1 -0
- package/dist/useSpeechRecorder-zIi9Dlw8.js +709 -0
- package/dist/useSpeechRecorder-zIi9Dlw8.js.map +1 -0
- package/package.json +10 -11
- package/dist/WrittenResponse-CgRrjM4S.d.ts +0 -115
- package/dist/WrittenResponse-D2K1VW_V.d.cts +0 -115
- package/dist/ai/useAiHelp.cjs.map +0 -1
- package/dist/ai/useAiHelp.js.map +0 -1
- package/dist/chunk-2OP5YHRR.js +0 -543
- package/dist/chunk-2OP5YHRR.js.map +0 -1
- package/dist/chunk-2TW6WLBC.js +0 -80
- package/dist/chunk-2TW6WLBC.js.map +0 -1
- package/dist/chunk-4MXECBZT.js +0 -888
- package/dist/chunk-4MXECBZT.js.map +0 -1
- package/dist/chunk-54DX6SLS.cjs +0 -42
- package/dist/chunk-54DX6SLS.cjs.map +0 -1
- package/dist/chunk-6GQLCCGN.js +0 -858
- package/dist/chunk-6GQLCCGN.js.map +0 -1
- package/dist/chunk-6N43WDVG.js +0 -29
- package/dist/chunk-6N43WDVG.js.map +0 -1
- package/dist/chunk-6RIM5EQP.cjs +0 -393
- package/dist/chunk-6RIM5EQP.cjs.map +0 -1
- package/dist/chunk-7F2YQWMW.cjs +0 -553
- package/dist/chunk-7F2YQWMW.cjs.map +0 -1
- package/dist/chunk-B4JRBV56.cjs +0 -63
- package/dist/chunk-B4JRBV56.cjs.map +0 -1
- package/dist/chunk-B7JU52YQ.cjs +0 -437
- package/dist/chunk-B7JU52YQ.cjs.map +0 -1
- package/dist/chunk-C4PSJ3ZC.js +0 -329
- package/dist/chunk-C4PSJ3ZC.js.map +0 -1
- package/dist/chunk-CXIP7ERK.js +0 -389
- package/dist/chunk-CXIP7ERK.js.map +0 -1
- package/dist/chunk-DPNCCWOV.js +0 -395
- package/dist/chunk-DPNCCWOV.js.map +0 -1
- package/dist/chunk-DXFCYNST.js +0 -35
- package/dist/chunk-DXFCYNST.js.map +0 -1
- package/dist/chunk-DZ7VLLDQ.cjs +0 -891
- package/dist/chunk-DZ7VLLDQ.cjs.map +0 -1
- package/dist/chunk-E4UF4XZM.js +0 -29
- package/dist/chunk-E4UF4XZM.js.map +0 -1
- package/dist/chunk-ERV666AR.js +0 -435
- package/dist/chunk-ERV666AR.js.map +0 -1
- package/dist/chunk-FISEZBLF.cjs +0 -31
- package/dist/chunk-FISEZBLF.cjs.map +0 -1
- package/dist/chunk-HYOUMTPW.js +0 -597
- package/dist/chunk-HYOUMTPW.js.map +0 -1
- package/dist/chunk-HZIT24BK.js +0 -61
- package/dist/chunk-HZIT24BK.js.map +0 -1
- package/dist/chunk-IYGF7PZY.cjs +0 -2938
- package/dist/chunk-IYGF7PZY.cjs.map +0 -1
- package/dist/chunk-J2QIHZ3H.cjs +0 -27
- package/dist/chunk-J2QIHZ3H.cjs.map +0 -1
- package/dist/chunk-JMEZYYCE.js +0 -2935
- package/dist/chunk-JMEZYYCE.js.map +0 -1
- package/dist/chunk-K63VPFOV.cjs +0 -134
- package/dist/chunk-K63VPFOV.cjs.map +0 -1
- package/dist/chunk-KI6DJ5ZF.js +0 -495
- package/dist/chunk-KI6DJ5ZF.js.map +0 -1
- package/dist/chunk-MCO52PV5.js +0 -520
- package/dist/chunk-MCO52PV5.js.map +0 -1
- package/dist/chunk-MXZHL4U5.cjs +0 -860
- package/dist/chunk-MXZHL4U5.cjs.map +0 -1
- package/dist/chunk-NFGUJ52G.cjs +0 -336
- package/dist/chunk-NFGUJ52G.cjs.map +0 -1
- package/dist/chunk-O7MINPKZ.js +0 -431
- package/dist/chunk-O7MINPKZ.js.map +0 -1
- package/dist/chunk-OD65OZIW.cjs +0 -159
- package/dist/chunk-OD65OZIW.cjs.map +0 -1
- package/dist/chunk-OJGTJOWI.cjs +0 -20
- package/dist/chunk-OJGTJOWI.cjs.map +0 -1
- package/dist/chunk-PGAPZ6UE.cjs +0 -497
- package/dist/chunk-PGAPZ6UE.cjs.map +0 -1
- package/dist/chunk-PNNUPUH4.cjs +0 -82
- package/dist/chunk-PNNUPUH4.cjs.map +0 -1
- package/dist/chunk-QAZO3ANW.cjs +0 -433
- package/dist/chunk-QAZO3ANW.cjs.map +0 -1
- package/dist/chunk-RX3A6KIY.js +0 -17
- package/dist/chunk-RX3A6KIY.js.map +0 -1
- package/dist/chunk-SHDSOOBF.cjs +0 -826
- package/dist/chunk-SHDSOOBF.cjs.map +0 -1
- package/dist/chunk-SPSKDNEE.js +0 -824
- package/dist/chunk-SPSKDNEE.js.map +0 -1
- package/dist/chunk-TGTP5DKF.js +0 -234
- package/dist/chunk-TGTP5DKF.js.map +0 -1
- package/dist/chunk-U4KTOH7C.js +0 -22
- package/dist/chunk-U4KTOH7C.js.map +0 -1
- package/dist/chunk-U5VFJVQ2.js +0 -241
- package/dist/chunk-U5VFJVQ2.js.map +0 -1
- package/dist/chunk-UDCQTOVU.cjs +0 -523
- package/dist/chunk-UDCQTOVU.cjs.map +0 -1
- package/dist/chunk-UHKZXOXD.js +0 -128
- package/dist/chunk-UHKZXOXD.js.map +0 -1
- package/dist/chunk-UKUHVCZX.cjs +0 -599
- package/dist/chunk-UKUHVCZX.cjs.map +0 -1
- package/dist/chunk-VPU6UY4O.cjs +0 -55
- package/dist/chunk-VPU6UY4O.cjs.map +0 -1
- package/dist/chunk-W6UMY7PF.cjs +0 -251
- package/dist/chunk-WZ2TBXVB.cjs +0 -236
- package/dist/chunk-WZ2TBXVB.cjs.map +0 -1
- package/dist/chunk-XOR4MPEN.cjs +0 -31
- package/dist/chunk-XOR4MPEN.cjs.map +0 -1
- package/dist/chunk-XS6OYYVR.cjs +0 -397
- package/dist/chunk-XS6OYYVR.cjs.map +0 -1
- package/dist/chunk-XYJBRKBZ.js +0 -51
- package/dist/chunk-XYJBRKBZ.js.map +0 -1
- package/dist/chunk-YORQQXGO.js +0 -155
- package/dist/chunk-YORQQXGO.js.map +0 -1
- package/dist/components/ActivityPreview.cjs.map +0 -1
- package/dist/components/ActivityPreview.js.map +0 -1
- package/dist/components/ActivitySequence.cjs.map +0 -1
- package/dist/components/ActivitySequence.js.map +0 -1
- package/dist/components/Dictation.cjs.map +0 -1
- package/dist/components/Dictation.js.map +0 -1
- package/dist/components/FillInTheBlanks.cjs.map +0 -1
- package/dist/components/FillInTheBlanks.js.map +0 -1
- package/dist/components/GapSelect.cjs.map +0 -1
- package/dist/components/GapSelect.js.map +0 -1
- package/dist/components/InteractiveVideo.cjs.map +0 -1
- package/dist/components/InteractiveVideo.js.map +0 -1
- package/dist/components/MultipleChoice.cjs.map +0 -1
- package/dist/components/MultipleChoice.js.map +0 -1
- package/dist/components/PronunciationFeedback.cjs.map +0 -1
- package/dist/components/PronunciationFeedback.js.map +0 -1
- package/dist/components/ReadAloud.cjs.map +0 -1
- package/dist/components/ReadAloud.js.map +0 -1
- package/dist/components/StimulusPanel.cjs.map +0 -1
- package/dist/components/StimulusPanel.js.map +0 -1
- package/dist/components/WrittenResponse.cjs.map +0 -1
- package/dist/components/WrittenResponse.js.map +0 -1
- package/dist/hooks/useSpeechRecorder.cjs.map +0 -1
- package/dist/hooks/useSpeechRecorder.js.map +0 -1
- package/dist/i18n/LkIntlProvider.cjs.map +0 -1
- package/dist/i18n/LkIntlProvider.js.map +0 -1
- package/dist/machine-CuwKqWXC.d.cts +0 -26
- package/dist/machine-CuwKqWXC.d.ts +0 -26
- package/dist/theme/ThemeProvider.cjs.map +0 -1
- package/dist/theme/ThemeProvider.js.map +0 -1
- package/dist/types-CO0XLEN6.d.cts +0 -973
- package/dist/types-CrtIcRcK.d.ts +0 -973
package/dist/chunk-K63VPFOV.cjs
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
var react = require('react');
|
|
5
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
-
|
|
7
|
-
// src/theme/ThemeProvider.tsx
|
|
8
|
-
|
|
9
|
-
// src/theme/dark-theme.ts
|
|
10
|
-
var darkTheme = {
|
|
11
|
-
"--lk-color-primary": "#fafafa",
|
|
12
|
-
"--lk-color-primary-hover": "#e4e4e7",
|
|
13
|
-
"--lk-color-surface": "#09090b",
|
|
14
|
-
"--lk-color-surface-raised": "#18181b",
|
|
15
|
-
"--lk-color-border": "#27272a",
|
|
16
|
-
"--lk-color-text": "#fafafa",
|
|
17
|
-
"--lk-color-text-muted": "#a1a1aa",
|
|
18
|
-
"--lk-color-success": "#4ade80",
|
|
19
|
-
"--lk-color-error": "#f87171",
|
|
20
|
-
"--lk-color-warning": "#fbbf24",
|
|
21
|
-
"--lk-color-focus-ring": "#fafafa"
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
// src/theme/tokens.ts
|
|
25
|
-
var defaultTheme = {
|
|
26
|
-
// ── Colours (light) — neutral monochrome; semantic success/error/warning
|
|
27
|
-
// retained for status legibility ────────────────────────────────────────
|
|
28
|
-
"--lk-color-primary": "#18181b",
|
|
29
|
-
"--lk-color-primary-hover": "#27272a",
|
|
30
|
-
"--lk-color-surface": "#ffffff",
|
|
31
|
-
"--lk-color-surface-raised": "#fafafa",
|
|
32
|
-
"--lk-color-border": "#e4e4e7",
|
|
33
|
-
"--lk-color-text": "#18181b",
|
|
34
|
-
"--lk-color-text-muted": "#52525b",
|
|
35
|
-
"--lk-color-success": "#15803d",
|
|
36
|
-
"--lk-color-error": "#b91c1c",
|
|
37
|
-
"--lk-color-warning": "#b45309",
|
|
38
|
-
"--lk-color-focus-ring": "#18181b",
|
|
39
|
-
"--lk-color-media-accent": "#ffffff",
|
|
40
|
-
// An interactive video's two caption lines. The second is warm yellow, the
|
|
41
|
-
// convention for a second subtitle line, and clears 4.5:1 on the caption box
|
|
42
|
-
// whatever the video shows through it (see contrast.test.ts).
|
|
43
|
-
"--lk-iv-caption-color": "#ffffff",
|
|
44
|
-
"--lk-iv-caption-secondary-color": "#ffe066",
|
|
45
|
-
"--lk-iv-caption-secondary-scale": "0.85",
|
|
46
|
-
"--lk-iv-caption-gap": "0.25em",
|
|
47
|
-
// ── Spacing ──────────────────────────────────────────────────────────────
|
|
48
|
-
"--lk-spacing-xs": "4px",
|
|
49
|
-
"--lk-spacing-sm": "8px",
|
|
50
|
-
"--lk-spacing-md": "16px",
|
|
51
|
-
"--lk-spacing-lg": "24px",
|
|
52
|
-
"--lk-spacing-xl": "32px",
|
|
53
|
-
// ── Typography ───────────────────────────────────────────────────────────
|
|
54
|
-
"--lk-font-family-base": 'system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',
|
|
55
|
-
"--lk-font-size-sm": "0.875rem",
|
|
56
|
-
"--lk-font-size-base": "1rem",
|
|
57
|
-
"--lk-font-size-lg": "1.125rem",
|
|
58
|
-
"--lk-font-weight-normal": "400",
|
|
59
|
-
"--lk-font-weight-bold": "700",
|
|
60
|
-
"--lk-line-height-base": "1.5",
|
|
61
|
-
// ── Shape ────────────────────────────────────────────────────────────────
|
|
62
|
-
"--lk-radius-sm": "0.25rem",
|
|
63
|
-
"--lk-radius-base": "0.5rem",
|
|
64
|
-
"--lk-radius-lg": "0.75rem",
|
|
65
|
-
// ── Motion ───────────────────────────────────────────────────────────────
|
|
66
|
-
"--lk-transition-fast": "150ms ease",
|
|
67
|
-
"--lk-transition-base": "250ms ease"
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
// src/theme/tailwind.ts
|
|
71
|
-
var BUCKETS = [
|
|
72
|
-
["--lk-color-", "colors"],
|
|
73
|
-
["--lk-spacing-", "spacing"],
|
|
74
|
-
["--lk-radius-", "borderRadius"],
|
|
75
|
-
["--lk-font-family-", "fontFamily"],
|
|
76
|
-
["--lk-font-size-", "fontSize"]
|
|
77
|
-
];
|
|
78
|
-
function createTailwindTheme(theme) {
|
|
79
|
-
const merged = { ...defaultTheme, ...theme };
|
|
80
|
-
const extension = {
|
|
81
|
-
colors: {},
|
|
82
|
-
spacing: {},
|
|
83
|
-
borderRadius: {},
|
|
84
|
-
fontFamily: {},
|
|
85
|
-
fontSize: {}
|
|
86
|
-
};
|
|
87
|
-
for (const [tokenName, fallback] of Object.entries(merged)) {
|
|
88
|
-
for (const [prefix, bucket] of BUCKETS) {
|
|
89
|
-
if (tokenName.startsWith(prefix)) {
|
|
90
|
-
extension[bucket][`lk-${tokenName.slice(prefix.length)}`] = `var(${tokenName}, ${fallback})`;
|
|
91
|
-
break;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return extension;
|
|
96
|
-
}
|
|
97
|
-
var ThemeContext = react.createContext(defaultTheme);
|
|
98
|
-
var DARK_QUERY = "(prefers-color-scheme: dark)";
|
|
99
|
-
function subscribePrefersDark(onChange) {
|
|
100
|
-
if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
|
|
101
|
-
return () => {
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
const mql = window.matchMedia(DARK_QUERY);
|
|
105
|
-
mql.addEventListener("change", onChange);
|
|
106
|
-
return () => mql.removeEventListener("change", onChange);
|
|
107
|
-
}
|
|
108
|
-
function getPrefersDark() {
|
|
109
|
-
if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
|
-
return window.matchMedia(DARK_QUERY).matches;
|
|
113
|
-
}
|
|
114
|
-
function ThemeProvider({ theme, children }) {
|
|
115
|
-
const prefersDark = react.useSyncExternalStore(subscribePrefersDark, getPrefersDark, () => false);
|
|
116
|
-
const activeTheme = react.useMemo(() => {
|
|
117
|
-
if (theme !== void 0) {
|
|
118
|
-
return { ...defaultTheme, ...theme };
|
|
119
|
-
}
|
|
120
|
-
return prefersDark ? { ...defaultTheme, ...darkTheme } : defaultTheme;
|
|
121
|
-
}, [theme, prefersDark]);
|
|
122
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ThemeContext.Provider, { value: activeTheme, children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: activeTheme, children }) });
|
|
123
|
-
}
|
|
124
|
-
function useTheme() {
|
|
125
|
-
return react.useContext(ThemeContext);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
exports.ThemeProvider = ThemeProvider;
|
|
129
|
-
exports.createTailwindTheme = createTailwindTheme;
|
|
130
|
-
exports.darkTheme = darkTheme;
|
|
131
|
-
exports.defaultTheme = defaultTheme;
|
|
132
|
-
exports.useTheme = useTheme;
|
|
133
|
-
//# sourceMappingURL=chunk-K63VPFOV.cjs.map
|
|
134
|
-
//# sourceMappingURL=chunk-K63VPFOV.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme/dark-theme.ts","../src/theme/tokens.ts","../src/theme/tailwind.ts","../src/theme/ThemeProvider.tsx"],"names":["createContext","useSyncExternalStore","useMemo","jsx","useContext"],"mappings":"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","file":"chunk-K63VPFOV.cjs","sourcesContent":["import type { ThemeTokens } from '@intellectif/lk-core';\n\n/**\n * Dark-mode colour overrides, merged over {@link defaultTheme} by\n * `ThemeProvider`. Colours only — spacing/typography/shape/motion are\n * theme-invariant. All pairs verified WCAG 2.2 AA against the dark surface.\n */\nexport const darkTheme: Partial<ThemeTokens> = {\n '--lk-color-primary': '#fafafa',\n '--lk-color-primary-hover': '#e4e4e7',\n '--lk-color-surface': '#09090b',\n '--lk-color-surface-raised': '#18181b',\n '--lk-color-border': '#27272a',\n '--lk-color-text': '#fafafa',\n '--lk-color-text-muted': '#a1a1aa',\n '--lk-color-success': '#4ade80',\n '--lk-color-error': '#f87171',\n '--lk-color-warning': '#fbbf24',\n '--lk-color-focus-ring': '#fafafa',\n};\n","import type { ThemeTokens } from '@intellectif/lk-core';\n\n/**\n * Canonical default theme token values. `defaults.css` mirrors these exactly.\n * Palette is a neutral monochrome, deliberately unbranded, so the SDK carries\n * nobody's look out of the box; consumers rebrand via `ThemeProvider`. All\n * colour pairs are verified to meet WCAG 2.2 AA: 4.5:1 for normal text, 3:1 for\n * UI / focus ring (see theme/__tests__/contrast.test.ts).\n */\nexport const defaultTheme: ThemeTokens = {\n // ── Colours (light) — neutral monochrome; semantic success/error/warning\n // retained for status legibility ────────────────────────────────────────\n '--lk-color-primary': '#18181b',\n '--lk-color-primary-hover': '#27272a',\n '--lk-color-surface': '#ffffff',\n '--lk-color-surface-raised': '#fafafa',\n '--lk-color-border': '#e4e4e7',\n '--lk-color-text': '#18181b',\n '--lk-color-text-muted': '#52525b',\n '--lk-color-success': '#15803d',\n '--lk-color-error': '#b91c1c',\n '--lk-color-warning': '#b45309',\n '--lk-color-focus-ring': '#18181b',\n '--lk-color-media-accent': '#ffffff',\n // An interactive video's two caption lines. The second is warm yellow, the\n // convention for a second subtitle line, and clears 4.5:1 on the caption box\n // whatever the video shows through it (see contrast.test.ts).\n '--lk-iv-caption-color': '#ffffff',\n '--lk-iv-caption-secondary-color': '#ffe066',\n '--lk-iv-caption-secondary-scale': '0.85',\n '--lk-iv-caption-gap': '0.25em',\n\n // ── Spacing ──────────────────────────────────────────────────────────────\n '--lk-spacing-xs': '4px',\n '--lk-spacing-sm': '8px',\n '--lk-spacing-md': '16px',\n '--lk-spacing-lg': '24px',\n '--lk-spacing-xl': '32px',\n\n // ── Typography ───────────────────────────────────────────────────────────\n '--lk-font-family-base':\n 'system-ui, -apple-system, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif',\n '--lk-font-size-sm': '0.875rem',\n '--lk-font-size-base': '1rem',\n '--lk-font-size-lg': '1.125rem',\n '--lk-font-weight-normal': '400',\n '--lk-font-weight-bold': '700',\n '--lk-line-height-base': '1.5',\n\n // ── Shape ────────────────────────────────────────────────────────────────\n '--lk-radius-sm': '0.25rem',\n '--lk-radius-base': '0.5rem',\n '--lk-radius-lg': '0.75rem',\n\n // ── Motion ───────────────────────────────────────────────────────────────\n '--lk-transition-fast': '150ms ease',\n '--lk-transition-base': '250ms ease',\n};\n","import type { ThemeTokens } from '@intellectif/lk-core';\nimport { defaultTheme } from './tokens.js';\n\n/**\n * Shape consumed by a Tailwind config's `theme.extend`. Every entry is a\n * `var(--lk-token, <fallback>)` reference: the var keeps utilities live\n * (ThemeProvider / dark-mode override at runtime); the fallback makes them\n * work with zero setup (no provider, no `defaults.css` import).\n */\nexport interface TailwindThemeExtension {\n colors: Record<string, string>;\n spacing: Record<string, string>;\n borderRadius: Record<string, string>;\n fontFamily: Record<string, string>;\n fontSize: Record<string, string>;\n}\n\n/**\n * Token-prefix → Tailwind bucket. `--lk-font-weight-*`, `--lk-line-height-*`\n * and `--lk-transition-*` are intentionally absent: the first two have no\n * matching `theme.extend` group here, and the transition tokens hold a\n * `<duration> <easing>` shorthand that would emit invalid\n * `transition-duration: 150ms ease` if mapped to Tailwind's `transitionDuration`.\n */\nconst BUCKETS = [\n ['--lk-color-', 'colors'],\n ['--lk-spacing-', 'spacing'],\n ['--lk-radius-', 'borderRadius'],\n ['--lk-font-family-', 'fontFamily'],\n ['--lk-font-size-', 'fontSize'],\n] as const;\n\n/**\n * Converts SDK theme tokens into a Tailwind `theme.extend` object so Tailwind\n * projects consume the same `--lk-*` tokens as the components — one shared\n * source of truth rather than a parallel, conflicting palette.\n */\nexport function createTailwindTheme(theme: Partial<ThemeTokens>): TailwindThemeExtension {\n const merged: Record<string, string> = { ...defaultTheme, ...theme };\n const extension: TailwindThemeExtension = {\n colors: {},\n spacing: {},\n borderRadius: {},\n fontFamily: {},\n fontSize: {},\n };\n\n for (const [tokenName, fallback] of Object.entries(merged)) {\n for (const [prefix, bucket] of BUCKETS) {\n if (tokenName.startsWith(prefix)) {\n extension[bucket][`lk-${tokenName.slice(prefix.length)}`] =\n `var(${tokenName}, ${fallback})`;\n break;\n }\n }\n }\n\n return extension;\n}\n","'use client';\n\nimport type { ThemeTokens } from '@intellectif/lk-core';\nimport {\n type CSSProperties,\n createContext,\n type ReactNode,\n useContext,\n useMemo,\n useSyncExternalStore,\n} from 'react';\nimport { darkTheme } from './dark-theme.js';\nimport { defaultTheme } from './tokens.js';\n\nexport { darkTheme } from './dark-theme.js';\nexport { createTailwindTheme, type TailwindThemeExtension } from './tailwind.js';\nexport { defaultTheme } from './tokens.js';\n\nconst ThemeContext = createContext<ThemeTokens>(defaultTheme);\n\nconst DARK_QUERY = '(prefers-color-scheme: dark)';\n\n/** Subscribe to OS dark-mode changes; no-op when there is no `window`. */\nfunction subscribePrefersDark(onChange: () => void): () => void {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return () => {};\n }\n const mql = window.matchMedia(DARK_QUERY);\n mql.addEventListener('change', onChange);\n return () => mql.removeEventListener('change', onChange);\n}\n\n/** Current OS dark-mode preference; `false` when there is no `window`. */\nfunction getPrefersDark(): boolean {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false;\n }\n return window.matchMedia(DARK_QUERY).matches;\n}\n\nexport interface ThemeProviderProps {\n /** Partial token overrides. When provided, dark auto-detection is disabled. */\n theme?: Partial<ThemeTokens>;\n children: ReactNode;\n}\n\n/**\n * Provides theme tokens to descendant activity components as scoped inline CSS\n * custom properties on a wrapper `<div>`, and via {@link useTheme}.\n *\n * Resolution: an explicit `theme` prop merges over {@link defaultTheme} (and\n * suppresses dark auto-detect, per Req 13.5). With no `theme` prop, the OS\n * `prefers-color-scheme: dark` preference auto-applies {@link darkTheme}.\n * SSR-safe: the server snapshot is always light, so hydration never mismatches.\n */\nexport function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const prefersDark = useSyncExternalStore(subscribePrefersDark, getPrefersDark, () => false);\n\n const activeTheme = useMemo<ThemeTokens>(() => {\n if (theme !== undefined) {\n return { ...defaultTheme, ...theme };\n }\n return prefersDark ? { ...defaultTheme, ...darkTheme } : defaultTheme;\n }, [theme, prefersDark]);\n\n return (\n <ThemeContext.Provider value={activeTheme}>\n <div style={activeTheme as CSSProperties}>{children}</div>\n </ThemeContext.Provider>\n );\n}\n\n/** Returns the currently active theme tokens (defaults when no provider). */\nexport function useTheme(): ThemeTokens {\n return useContext(ThemeContext);\n}\n"]}
|
package/dist/chunk-KI6DJ5ZF.js
DELETED
|
@@ -1,495 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { useItemScoringPolicy, useTries, hintsOf, useComponentAiHints, triesSummary, HintCost, AiHints, TryActions, AiExplanation } from './chunk-U5VFJVQ2.js';
|
|
3
|
-
import { useLearnerAi } from './chunk-RX3A6KIY.js';
|
|
4
|
-
import { useDeliveryPolicy, FeedbackRegion, outcomeShowsMarks } from './chunk-XYJBRKBZ.js';
|
|
5
|
-
import { stampTake, mintTake } from './chunk-U4KTOH7C.js';
|
|
6
|
-
import { ActivityErrorBoundary } from './chunk-E4UF4XZM.js';
|
|
7
|
-
import { isDevelopment, detailIsRight, ANONYMOUS_ACTOR, objectIdFor } from './chunk-DXFCYNST.js';
|
|
8
|
-
import { ActivityMedia } from './chunk-HYOUMTPW.js';
|
|
9
|
-
import { useActivityState } from './chunk-6N43WDVG.js';
|
|
10
|
-
import { useLkStrings } from './chunk-C4PSJ3ZC.js';
|
|
11
|
-
import { assertRedacted, validateActivity, ActivitySchemaError, score, computePassThreshold, xAPIBuilder, xapiDefinitionFor } from '@intellectif/lk-core';
|
|
12
|
-
import { useMemo, useState, useRef, useEffect } from 'react';
|
|
13
|
-
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
14
|
-
|
|
15
|
-
var PLACEHOLDER = /\{\{\s*([^{}]+?)\s*\}\}/g;
|
|
16
|
-
function parsePassage(passage) {
|
|
17
|
-
const segments = [];
|
|
18
|
-
const re = new RegExp(PLACEHOLDER);
|
|
19
|
-
let last = 0;
|
|
20
|
-
let ordinal = 0;
|
|
21
|
-
let match = re.exec(passage);
|
|
22
|
-
while (match !== null) {
|
|
23
|
-
if (match.index > last) {
|
|
24
|
-
segments.push({ kind: "text", value: passage.slice(last, match.index) });
|
|
25
|
-
}
|
|
26
|
-
ordinal += 1;
|
|
27
|
-
segments.push({ kind: "blank", id: match[1], ordinal });
|
|
28
|
-
last = match.index + match[0].length;
|
|
29
|
-
match = re.exec(passage);
|
|
30
|
-
}
|
|
31
|
-
if (last < passage.length) {
|
|
32
|
-
segments.push({ kind: "text", value: passage.slice(last) });
|
|
33
|
-
}
|
|
34
|
-
return segments;
|
|
35
|
-
}
|
|
36
|
-
var NO_ANSWERS = {};
|
|
37
|
-
function answersOf(response) {
|
|
38
|
-
return response !== void 0 && response.type === "fill-in-the-blanks" ? response.answers : NO_ANSWERS;
|
|
39
|
-
}
|
|
40
|
-
function correctnessByItem(details) {
|
|
41
|
-
const map = /* @__PURE__ */ new Map();
|
|
42
|
-
for (const detail of details) {
|
|
43
|
-
map.set(detail.itemId, detailIsRight(detail));
|
|
44
|
-
}
|
|
45
|
-
return map;
|
|
46
|
-
}
|
|
47
|
-
function FillInTheBlanks({
|
|
48
|
-
data,
|
|
49
|
-
onComplete,
|
|
50
|
-
onSubmit,
|
|
51
|
-
onChange,
|
|
52
|
-
onInteraction,
|
|
53
|
-
value,
|
|
54
|
-
defaultValue,
|
|
55
|
-
defaultSubmitted,
|
|
56
|
-
renderMode = "practice",
|
|
57
|
-
outcome,
|
|
58
|
-
sanitizeHtml,
|
|
59
|
-
mediaBudget,
|
|
60
|
-
mediaStrings,
|
|
61
|
-
strings,
|
|
62
|
-
theme,
|
|
63
|
-
locale,
|
|
64
|
-
disabled,
|
|
65
|
-
showCorrectAnswers,
|
|
66
|
-
ai: aiProp,
|
|
67
|
-
delivery,
|
|
68
|
-
scoring
|
|
69
|
-
}) {
|
|
70
|
-
const isExam = renderMode === "exam";
|
|
71
|
-
const isReview = renderMode === "review";
|
|
72
|
-
const s = useLkStrings(strings);
|
|
73
|
-
const ai = useLearnerAi(aiProp);
|
|
74
|
-
const policy = useDeliveryPolicy(delivery);
|
|
75
|
-
const scoringPolicy = useItemScoringPolicy(scoring);
|
|
76
|
-
const devError = useMemo(() => {
|
|
77
|
-
if (!isDevelopment()) {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
if (data.redacted === true) {
|
|
81
|
-
try {
|
|
82
|
-
assertRedacted(data);
|
|
83
|
-
return null;
|
|
84
|
-
} catch (error) {
|
|
85
|
-
return error instanceof Error ? error : new Error(String(error));
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
const result2 = validateActivity("fill-in-the-blanks", data);
|
|
89
|
-
return result2.success ? null : new ActivitySchemaError("fill-in-the-blanks", result2.errors);
|
|
90
|
-
}, [data]);
|
|
91
|
-
const { state, start, complete, getTimeSpent, reset } = useActivityState(
|
|
92
|
-
defaultSubmitted === true ? "completed" : "idle"
|
|
93
|
-
);
|
|
94
|
-
const tries = useTries({
|
|
95
|
-
policy: scoringPolicy,
|
|
96
|
-
graded: renderMode === "practice" && policy.feedback,
|
|
97
|
-
submitted: state === "completed",
|
|
98
|
-
disabled: disabled === true
|
|
99
|
-
});
|
|
100
|
-
const resetTries = tries.reset;
|
|
101
|
-
const isControlled = value !== void 0;
|
|
102
|
-
const [internalAnswers, setInternalAnswers] = useState(
|
|
103
|
-
() => answersOf(defaultValue)
|
|
104
|
-
);
|
|
105
|
-
const [revealed, setRevealed] = useState(() => /* @__PURE__ */ new Set());
|
|
106
|
-
const [seen, setSeen] = useState(() => /* @__PURE__ */ new Set());
|
|
107
|
-
const [result, setResult] = useState(null);
|
|
108
|
-
const [summary, setSummary] = useState(null);
|
|
109
|
-
const [overall, setOverall] = useState(null);
|
|
110
|
-
const [feedbackHidden, setFeedbackHidden] = useState(false);
|
|
111
|
-
const seedHintsRef = useRef(hintsOf(value ?? defaultValue));
|
|
112
|
-
const formRef = useRef(null);
|
|
113
|
-
const feedbackRef = useRef(null);
|
|
114
|
-
const focusAfterRef = useRef(null);
|
|
115
|
-
const answers = isControlled ? answersOf(value) : internalAnswers;
|
|
116
|
-
const defaultValueRef = useRef(defaultValue);
|
|
117
|
-
useEffect(() => {
|
|
118
|
-
defaultValueRef.current = defaultValue;
|
|
119
|
-
}, [defaultValue]);
|
|
120
|
-
const defaultSubmittedRef = useRef(defaultSubmitted);
|
|
121
|
-
useEffect(() => {
|
|
122
|
-
defaultSubmittedRef.current = defaultSubmitted;
|
|
123
|
-
}, [defaultSubmitted]);
|
|
124
|
-
const lastDataRef = useRef(data);
|
|
125
|
-
useEffect(() => {
|
|
126
|
-
if (lastDataRef.current === data) {
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
lastDataRef.current = data;
|
|
130
|
-
setInternalAnswers(answersOf(defaultValueRef.current));
|
|
131
|
-
setRevealed(/* @__PURE__ */ new Set());
|
|
132
|
-
setSeen(/* @__PURE__ */ new Set());
|
|
133
|
-
setResult(null);
|
|
134
|
-
setSummary(null);
|
|
135
|
-
setOverall(null);
|
|
136
|
-
setFeedbackHidden(false);
|
|
137
|
-
seedHintsRef.current = hintsOf(defaultValueRef.current);
|
|
138
|
-
resetTries();
|
|
139
|
-
reset(defaultSubmittedRef.current === true ? "completed" : "idle");
|
|
140
|
-
}, [data, reset, resetTries]);
|
|
141
|
-
useEffect(() => {
|
|
142
|
-
if (isDevelopment() && sanitizeHtml !== void 0 && data.passageHtml !== void 0) {
|
|
143
|
-
console.warn(
|
|
144
|
-
"[lk-react] FillInTheBlanks ignores `passageHtml`: the passage hosts the answer inputs, so rich HTML cannot be split at {{placeholders}} without voiding the sanitiser. Rendering the plain `passage` instead."
|
|
145
|
-
);
|
|
146
|
-
}
|
|
147
|
-
}, [sanitizeHtml, data.passageHtml]);
|
|
148
|
-
const segments = useMemo(() => parsePassage(data.passage), [data.passage]);
|
|
149
|
-
const blankById = useMemo(() => new Map(data.blanks.map((b) => [b.id, b])), [data.blanks]);
|
|
150
|
-
const answered = state === "completed";
|
|
151
|
-
const aiHints = useComponentAiHints({
|
|
152
|
-
ai,
|
|
153
|
-
data,
|
|
154
|
-
renderMode,
|
|
155
|
-
submitted: answered,
|
|
156
|
-
disabled: disabled === true,
|
|
157
|
-
response: { type: "fill-in-the-blanks", answers },
|
|
158
|
-
locale,
|
|
159
|
-
onInteraction,
|
|
160
|
-
strings: s,
|
|
161
|
-
delivery: policy
|
|
162
|
-
});
|
|
163
|
-
const hintsRevealed = renderMode === "practice" ? seedHintsRef.current + seen.size + aiHints.used : 0;
|
|
164
|
-
const responseOf = (next, hints = hintsRevealed) => ({
|
|
165
|
-
type: "fill-in-the-blanks",
|
|
166
|
-
answers: next,
|
|
167
|
-
...hints > 0 ? { hintsRevealed: hints } : {}
|
|
168
|
-
});
|
|
169
|
-
const aiSeenRef = useRef(aiHints.used);
|
|
170
|
-
useEffect(() => {
|
|
171
|
-
if (aiSeenRef.current === aiHints.used) {
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
aiSeenRef.current = aiHints.used;
|
|
175
|
-
if (aiHints.used > 0) {
|
|
176
|
-
onChange?.(responseOf(answers));
|
|
177
|
-
}
|
|
178
|
-
}, [aiHints.used]);
|
|
179
|
-
useEffect(() => {
|
|
180
|
-
const target = focusAfterRef.current;
|
|
181
|
-
if (target === null) {
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
focusAfterRef.current = null;
|
|
185
|
-
if (target === "answer") {
|
|
186
|
-
formRef.current?.querySelector("input:not(:disabled)")?.focus();
|
|
187
|
-
} else {
|
|
188
|
-
feedbackRef.current?.focus();
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
if (devError) {
|
|
192
|
-
throw devError;
|
|
193
|
-
}
|
|
194
|
-
if (data.redacted === true && renderMode === "practice") {
|
|
195
|
-
throw new Error(
|
|
196
|
-
`Fill-in-the-Blanks "${data.id}" received redacted activity data in renderMode "practice", which grades locally and has no answer key to grade against. Render redacted data with renderMode="exam" (server grades) or "review" (pass \`outcome\`).`
|
|
197
|
-
);
|
|
198
|
-
}
|
|
199
|
-
const submitted = state === "completed";
|
|
200
|
-
const inactive = disabled === true || submitted || isReview;
|
|
201
|
-
const revealing = isReview ? outcome?.status === "scored" : !isExam && submitted;
|
|
202
|
-
const marking = revealing && policy.feedback;
|
|
203
|
-
const showingAnswers = marking && policy.solutions && showCorrectAnswers === true && !tries.open;
|
|
204
|
-
const fireInteraction = (type, payload) => {
|
|
205
|
-
onInteraction?.({ type, activityId: data.id, timestamp: Date.now(), payload });
|
|
206
|
-
};
|
|
207
|
-
const handleChange = (blankId, text) => {
|
|
208
|
-
if (inactive) {
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
if (state === "idle") {
|
|
212
|
-
start();
|
|
213
|
-
}
|
|
214
|
-
const next = { ...answers, [blankId]: text };
|
|
215
|
-
if (!isControlled) {
|
|
216
|
-
setInternalAnswers(next);
|
|
217
|
-
}
|
|
218
|
-
onChange?.(responseOf(next));
|
|
219
|
-
fireInteraction("blank-filled", { blankId, value: text });
|
|
220
|
-
};
|
|
221
|
-
const toggleHint = (blankId) => {
|
|
222
|
-
if (inactive) {
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
if (state === "idle") {
|
|
226
|
-
start();
|
|
227
|
-
}
|
|
228
|
-
setRevealed((prev) => {
|
|
229
|
-
const next = new Set(prev);
|
|
230
|
-
if (next.has(blankId)) {
|
|
231
|
-
next.delete(blankId);
|
|
232
|
-
return next;
|
|
233
|
-
}
|
|
234
|
-
next.add(blankId);
|
|
235
|
-
return next;
|
|
236
|
-
});
|
|
237
|
-
if (!revealed.has(blankId)) {
|
|
238
|
-
fireInteraction("hint-requested", { blankId });
|
|
239
|
-
}
|
|
240
|
-
if (!seen.has(blankId)) {
|
|
241
|
-
setSeen((prev) => new Set(prev).add(blankId));
|
|
242
|
-
if (renderMode === "practice") {
|
|
243
|
-
onChange?.(responseOf(answers, hintsRevealed + 1));
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
const handleSubmit = (event) => {
|
|
248
|
-
event.preventDefault();
|
|
249
|
-
if (inactive) {
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
const response = responseOf(answers);
|
|
253
|
-
onSubmit?.(response);
|
|
254
|
-
if (isExam) {
|
|
255
|
-
complete();
|
|
256
|
-
setSummary(s.answerSubmitted);
|
|
257
|
-
fireInteraction("submitted", { answers });
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
260
|
-
const answer = score("fill-in-the-blanks", data, response);
|
|
261
|
-
complete();
|
|
262
|
-
const timeSpent = getTimeSpent();
|
|
263
|
-
const counted = tries.record({
|
|
264
|
-
score: answer.score,
|
|
265
|
-
maxScore: answer.maxScore,
|
|
266
|
-
hintsRevealed
|
|
267
|
-
});
|
|
268
|
-
const mine = counted.tries[counted.tries.length - 1];
|
|
269
|
-
const costed = mine === void 0 ? answer.score : mine.scored;
|
|
270
|
-
const scoringResult = costed === answer.score ? answer : {
|
|
271
|
-
...answer,
|
|
272
|
-
score: costed,
|
|
273
|
-
passed: computePassThreshold(data, costed)
|
|
274
|
-
};
|
|
275
|
-
const passed = counted.score === scoringResult.score ? scoringResult.passed : computePassThreshold(data, counted.score);
|
|
276
|
-
const xapiStatement = xAPIBuilder.buildAnsweredStatement({
|
|
277
|
-
actor: ANONYMOUS_ACTOR,
|
|
278
|
-
object: {
|
|
279
|
-
id: objectIdFor(data.id),
|
|
280
|
-
name: { [data.locale ?? "en-US"]: data.title },
|
|
281
|
-
...xapiDefinitionFor(data)
|
|
282
|
-
},
|
|
283
|
-
scoringResult,
|
|
284
|
-
timeSpentMs: timeSpent,
|
|
285
|
-
response: JSON.stringify(answers)
|
|
286
|
-
});
|
|
287
|
-
setResult(answer);
|
|
288
|
-
onComplete?.(
|
|
289
|
-
stampTake(
|
|
290
|
-
{ score: counted.score, maxScore: counted.maxScore, passed, timeSpent, xapiStatement },
|
|
291
|
-
mintTake()
|
|
292
|
-
)
|
|
293
|
-
);
|
|
294
|
-
setOverall(answer.feedback);
|
|
295
|
-
setSummary(
|
|
296
|
-
`${s.answerSubmitted} ${s.scoreAnnouncement(Math.round(counted.score * 100), passed)}`
|
|
297
|
-
);
|
|
298
|
-
fireInteraction("submitted", { answers, score: scoringResult.score });
|
|
299
|
-
};
|
|
300
|
-
const retry = () => {
|
|
301
|
-
reset("idle");
|
|
302
|
-
setSummary(null);
|
|
303
|
-
setOverall(null);
|
|
304
|
-
focusAfterRef.current = "answer";
|
|
305
|
-
};
|
|
306
|
-
const closeTries = () => {
|
|
307
|
-
tries.close();
|
|
308
|
-
focusAfterRef.current = "feedback";
|
|
309
|
-
};
|
|
310
|
-
const correctByBlank = useMemo(() => {
|
|
311
|
-
if (isExam) {
|
|
312
|
-
return /* @__PURE__ */ new Map();
|
|
313
|
-
}
|
|
314
|
-
if (isReview) {
|
|
315
|
-
return outcome?.status === "scored" ? correctnessByItem(outcome.details) : /* @__PURE__ */ new Map();
|
|
316
|
-
}
|
|
317
|
-
return correctnessByItem(result?.details ?? []);
|
|
318
|
-
}, [isExam, isReview, outcome, result]);
|
|
319
|
-
const reviewSummary = useMemo(() => {
|
|
320
|
-
if (!isReview || outcome === void 0) {
|
|
321
|
-
return null;
|
|
322
|
-
}
|
|
323
|
-
if (outcome.status === "scored") {
|
|
324
|
-
return `${s.scoreAnnouncement(Math.round(outcome.score * 100), outcome.passed)}${outcome.feedback ? ` ${outcome.feedback}` : ""}`;
|
|
325
|
-
}
|
|
326
|
-
if (outcome.status === "deferred") {
|
|
327
|
-
return s.notGradedYet;
|
|
328
|
-
}
|
|
329
|
-
if (outcome.status === "graded") {
|
|
330
|
-
const percent = outcome.maxScore > 0 ? Math.round(outcome.score / outcome.maxScore * 100) : Math.round(outcome.score * 100);
|
|
331
|
-
return `${s.scoreAnnouncement(percent, outcome.passed)}${outcome.feedback ? ` ${outcome.feedback}` : ""}`;
|
|
332
|
-
}
|
|
333
|
-
return s.noGradeAvailable;
|
|
334
|
-
}, [isReview, outcome, s]);
|
|
335
|
-
const extra = !isReview && policy.feedback && submitted && tries.counted !== null ? triesSummary(s, scoringPolicy, tries.counted, tries.open) : "";
|
|
336
|
-
const announced = summary === null ? null : `${summary}${extra ? ` ${extra}` : ""}${overall ? ` ${overall}` : ""}`;
|
|
337
|
-
const hintsOffered = renderMode === "practice" && !submitted && (aiHints.offered || policy.hints && data.blanks.some((blank) => blank.hint));
|
|
338
|
-
return /* @__PURE__ */ jsxs(
|
|
339
|
-
"form",
|
|
340
|
-
{
|
|
341
|
-
ref: formRef,
|
|
342
|
-
className: "lk-fib",
|
|
343
|
-
"aria-label": data.title,
|
|
344
|
-
lang: locale,
|
|
345
|
-
"data-render-mode": renderMode,
|
|
346
|
-
style: theme,
|
|
347
|
-
onSubmit: handleSubmit,
|
|
348
|
-
children: [
|
|
349
|
-
data.media ? /* @__PURE__ */ jsx(
|
|
350
|
-
ActivityMedia,
|
|
351
|
-
{
|
|
352
|
-
media: data.media,
|
|
353
|
-
renderMode,
|
|
354
|
-
...mediaBudget !== void 0 ? { mediaBudget } : {},
|
|
355
|
-
...mediaStrings !== void 0 ? { mediaStrings } : {},
|
|
356
|
-
...strings !== void 0 ? { strings } : {},
|
|
357
|
-
...onInteraction !== void 0 ? { onInteraction } : {},
|
|
358
|
-
...locale !== void 0 ? { locale } : {}
|
|
359
|
-
}
|
|
360
|
-
) : null,
|
|
361
|
-
/* @__PURE__ */ jsxs("fieldset", { disabled: inactive, children: [
|
|
362
|
-
/* @__PURE__ */ jsx("p", { className: "lk-fib-passage", children: segments.map((seg, i) => {
|
|
363
|
-
if (seg.kind === "text") {
|
|
364
|
-
return /* @__PURE__ */ jsx("span", { children: seg.value }, `t${i}`);
|
|
365
|
-
}
|
|
366
|
-
const blank = blankById.get(seg.id);
|
|
367
|
-
if (!blank) {
|
|
368
|
-
return null;
|
|
369
|
-
}
|
|
370
|
-
const acceptedAnswers = isExam ? void 0 : blank.acceptedAnswers;
|
|
371
|
-
const blankFeedback = isExam ? void 0 : blank.feedback;
|
|
372
|
-
const correctness = correctByBlank.get(seg.id);
|
|
373
|
-
const hintId = `${data.id}-hint-${seg.id}`;
|
|
374
|
-
const hint = policy.hints ? blank.hint : void 0;
|
|
375
|
-
const correctAnswer = acceptedAnswers?.[0];
|
|
376
|
-
if (showingAnswers && correctness === false && correctAnswer) {
|
|
377
|
-
return /* @__PURE__ */ jsx("span", { className: "lk-fib-answer", "data-correct": "false", children: correctAnswer }, seg.id);
|
|
378
|
-
}
|
|
379
|
-
return /* @__PURE__ */ jsxs("span", { className: "lk-fib-blank", children: [
|
|
380
|
-
/* @__PURE__ */ jsx(
|
|
381
|
-
"input",
|
|
382
|
-
{
|
|
383
|
-
type: "text",
|
|
384
|
-
"aria-label": s.blankLabel(seg.ordinal),
|
|
385
|
-
"aria-describedby": hint ? hintId : void 0,
|
|
386
|
-
value: answers[seg.id] ?? "",
|
|
387
|
-
disabled: inactive,
|
|
388
|
-
"aria-disabled": inactive || void 0,
|
|
389
|
-
"data-correct": marking && correctness !== void 0 ? String(correctness) : void 0,
|
|
390
|
-
onChange: (e) => handleChange(seg.id, e.target.value)
|
|
391
|
-
}
|
|
392
|
-
),
|
|
393
|
-
hint ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
394
|
-
/* @__PURE__ */ jsx(
|
|
395
|
-
"button",
|
|
396
|
-
{
|
|
397
|
-
type: "button",
|
|
398
|
-
className: "lk-fib-hint-btn",
|
|
399
|
-
"aria-controls": hintId,
|
|
400
|
-
"aria-expanded": revealed.has(seg.id),
|
|
401
|
-
"aria-label": revealed.has(seg.id) ? s.hideHint : s.showHint,
|
|
402
|
-
disabled: inactive,
|
|
403
|
-
onClick: () => toggleHint(seg.id),
|
|
404
|
-
children: /* @__PURE__ */ jsx(
|
|
405
|
-
"svg",
|
|
406
|
-
{
|
|
407
|
-
className: "lk-fib-hint-icon",
|
|
408
|
-
viewBox: "0 0 24 24",
|
|
409
|
-
width: "16",
|
|
410
|
-
height: "16",
|
|
411
|
-
"aria-hidden": "true",
|
|
412
|
-
focusable: "false",
|
|
413
|
-
children: /* @__PURE__ */ jsx(
|
|
414
|
-
"path",
|
|
415
|
-
{
|
|
416
|
-
fill: "currentColor",
|
|
417
|
-
d: "M9 21h6v-1H9v1Zm3-19a7 7 0 0 0-4 12.74V17h8v-2.26A7 7 0 0 0 12 2Z"
|
|
418
|
-
}
|
|
419
|
-
)
|
|
420
|
-
}
|
|
421
|
-
)
|
|
422
|
-
}
|
|
423
|
-
),
|
|
424
|
-
/* @__PURE__ */ jsx("span", { id: hintId, "aria-live": "polite", children: revealed.has(seg.id) ? hint : "" })
|
|
425
|
-
] }) : null,
|
|
426
|
-
marking && !feedbackHidden && blankFeedback ? /* @__PURE__ */ jsx(
|
|
427
|
-
"span",
|
|
428
|
-
{
|
|
429
|
-
className: "lk-fib-blank-feedback",
|
|
430
|
-
role: "note",
|
|
431
|
-
"data-correct": correctness !== void 0 ? String(correctness) : void 0,
|
|
432
|
-
children: blankFeedback
|
|
433
|
-
}
|
|
434
|
-
) : null
|
|
435
|
-
] }, seg.id);
|
|
436
|
-
}) }),
|
|
437
|
-
hintsOffered ? /* @__PURE__ */ jsx(HintCost, { policy: scoringPolicy, strings: s }) : null,
|
|
438
|
-
/* @__PURE__ */ jsx(AiHints, { help: aiHints, ai, strings: s }),
|
|
439
|
-
isReview ? null : /* @__PURE__ */ jsx("button", { type: "submit", disabled: inactive, children: isExam ? s.submitAnswers : s.checkAnswers })
|
|
440
|
-
] }),
|
|
441
|
-
marking && data.blanks.some((b) => b.feedback) ? /* @__PURE__ */ jsx(
|
|
442
|
-
"button",
|
|
443
|
-
{
|
|
444
|
-
type: "button",
|
|
445
|
-
className: "lk-fib-feedback-toggle",
|
|
446
|
-
"aria-expanded": !feedbackHidden,
|
|
447
|
-
onClick: () => setFeedbackHidden((h) => !h),
|
|
448
|
-
children: feedbackHidden ? s.showFeedback : s.hideFeedback
|
|
449
|
-
}
|
|
450
|
-
) : null,
|
|
451
|
-
/* @__PURE__ */ jsx(
|
|
452
|
-
FeedbackRegion,
|
|
453
|
-
{
|
|
454
|
-
id: `${data.id}-feedback`,
|
|
455
|
-
...scoringPolicy.retries > 0 ? { ref: feedbackRef } : {},
|
|
456
|
-
children: isReview ? policy.feedback || !outcomeShowsMarks(outcome) ? reviewSummary : null : policy.feedback || summary === null ? announced : s.answerSubmitted
|
|
457
|
-
}
|
|
458
|
-
),
|
|
459
|
-
/* @__PURE__ */ jsx(
|
|
460
|
-
TryActions,
|
|
461
|
-
{
|
|
462
|
-
tries,
|
|
463
|
-
solutions: policy.solutions && showCorrectAnswers === true,
|
|
464
|
-
strings: s,
|
|
465
|
-
onRetry: retry,
|
|
466
|
-
onClose: closeTries
|
|
467
|
-
}
|
|
468
|
-
),
|
|
469
|
-
/* @__PURE__ */ jsx(
|
|
470
|
-
AiExplanation,
|
|
471
|
-
{
|
|
472
|
-
ai,
|
|
473
|
-
data,
|
|
474
|
-
renderMode,
|
|
475
|
-
submitted,
|
|
476
|
-
response: { type: "fill-in-the-blanks", answers },
|
|
477
|
-
outcome,
|
|
478
|
-
locale,
|
|
479
|
-
onInteraction,
|
|
480
|
-
strings: s,
|
|
481
|
-
delivery: tries.open ? { ...policy, solutions: false } : policy
|
|
482
|
-
}
|
|
483
|
-
)
|
|
484
|
-
]
|
|
485
|
-
}
|
|
486
|
-
);
|
|
487
|
-
}
|
|
488
|
-
function FillInTheBlanks2(props) {
|
|
489
|
-
const strings = useLkStrings(props.strings);
|
|
490
|
-
return /* @__PURE__ */ jsx(ActivityErrorBoundary, { activityTitle: props.data?.title, strings, children: /* @__PURE__ */ jsx(FillInTheBlanks, { ...props }) });
|
|
491
|
-
}
|
|
492
|
-
|
|
493
|
-
export { FillInTheBlanks2 as FillInTheBlanks };
|
|
494
|
-
//# sourceMappingURL=chunk-KI6DJ5ZF.js.map
|
|
495
|
-
//# sourceMappingURL=chunk-KI6DJ5ZF.js.map
|