@intellectif/lk-react 23.1.0 → 23.1.2

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 (360) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +9 -5
  3. package/dist/ActivityErrorBoundary-B379hvtL.cjs +39 -0
  4. package/dist/ActivityErrorBoundary-B379hvtL.cjs.map +1 -0
  5. package/dist/ActivityErrorBoundary-Dw6SbWv3.js +34 -0
  6. package/dist/ActivityErrorBoundary-Dw6SbWv3.js.map +1 -0
  7. package/dist/ActivityMedia-CQQTRNl7.cjs +641 -0
  8. package/dist/ActivityMedia-CQQTRNl7.cjs.map +1 -0
  9. package/dist/ActivityMedia-vDiP-Psa.js +636 -0
  10. package/dist/ActivityMedia-vDiP-Psa.js.map +1 -0
  11. package/dist/ActivityPreview-1hhTkYuj.js +240 -0
  12. package/dist/ActivityPreview-1hhTkYuj.js.map +1 -0
  13. package/dist/ActivityPreview-BKr34exz.cjs +245 -0
  14. package/dist/ActivityPreview-BKr34exz.cjs.map +1 -0
  15. package/dist/ActivitySequence-CkX87pfB.js +839 -0
  16. package/dist/ActivitySequence-CkX87pfB.js.map +1 -0
  17. package/dist/ActivitySequence-CmoSyDnp.cjs +844 -0
  18. package/dist/ActivitySequence-CmoSyDnp.cjs.map +1 -0
  19. package/dist/Dictation-BlxRp-3k.js +926 -0
  20. package/dist/Dictation-BlxRp-3k.js.map +1 -0
  21. package/dist/Dictation-jECzL88E.cjs +931 -0
  22. package/dist/Dictation-jECzL88E.cjs.map +1 -0
  23. package/dist/FeedbackRegion-BNNMtTY-.cjs +108 -0
  24. package/dist/FeedbackRegion-BNNMtTY-.cjs.map +1 -0
  25. package/dist/FeedbackRegion-CyPSp8bA.js +85 -0
  26. package/dist/FeedbackRegion-CyPSp8bA.js.map +1 -0
  27. package/dist/FillInTheBlanks-B6xzqYXx.js +474 -0
  28. package/dist/FillInTheBlanks-B6xzqYXx.js.map +1 -0
  29. package/dist/FillInTheBlanks-BpKhdHg2.cjs +479 -0
  30. package/dist/FillInTheBlanks-BpKhdHg2.cjs.map +1 -0
  31. package/dist/GapSelect-DUSiaEQH.js +441 -0
  32. package/dist/GapSelect-DUSiaEQH.js.map +1 -0
  33. package/dist/GapSelect-payTq_Zn.cjs +446 -0
  34. package/dist/GapSelect-payTq_Zn.cjs.map +1 -0
  35. package/dist/InteractiveVideo-BguGv-HA.cjs +2955 -0
  36. package/dist/InteractiveVideo-BguGv-HA.cjs.map +1 -0
  37. package/dist/InteractiveVideo-Cg2jbU3j.js +2944 -0
  38. package/dist/InteractiveVideo-Cg2jbU3j.js.map +1 -0
  39. package/dist/LkAiProvider-DAPpA3PQ.d.cts +84 -0
  40. package/dist/LkAiProvider-DAPpA3PQ.d.cts.map +1 -0
  41. package/dist/LkAiProvider-QdEcIhoo.d.ts +84 -0
  42. package/dist/LkAiProvider-QdEcIhoo.d.ts.map +1 -0
  43. package/dist/LkIntlProvider-D_FdYXjQ.js +375 -0
  44. package/dist/LkIntlProvider-D_FdYXjQ.js.map +1 -0
  45. package/dist/LkIntlProvider-oi57lYB0.cjs +410 -0
  46. package/dist/LkIntlProvider-oi57lYB0.cjs.map +1 -0
  47. package/dist/MultipleChoice-COn5MtKY.cjs +433 -0
  48. package/dist/MultipleChoice-COn5MtKY.cjs.map +1 -0
  49. package/dist/MultipleChoice-Dra0_KYD.js +428 -0
  50. package/dist/MultipleChoice-Dra0_KYD.js.map +1 -0
  51. package/dist/PronunciationFeedback-DlMPGjkR.cjs +831 -0
  52. package/dist/PronunciationFeedback-DlMPGjkR.cjs.map +1 -0
  53. package/dist/PronunciationFeedback-Dxd6XPkO.js +772 -0
  54. package/dist/PronunciationFeedback-Dxd6XPkO.js.map +1 -0
  55. package/dist/ReadAloud-C8RhaUqV.js +1092 -0
  56. package/dist/{chunk-DC4CQCK5.js.map → ReadAloud-C8RhaUqV.js.map} +1 -1
  57. package/dist/ReadAloud-akDehitT.cjs +1103 -0
  58. package/dist/ReadAloud-akDehitT.cjs.map +1 -0
  59. package/dist/StimulusPanel-BgzByfkb.js +74 -0
  60. package/dist/StimulusPanel-BgzByfkb.js.map +1 -0
  61. package/dist/StimulusPanel-b66gaN3i.cjs +79 -0
  62. package/dist/StimulusPanel-b66gaN3i.cjs.map +1 -0
  63. package/dist/ThemeProvider-B6DyGqzh.d.cts +62 -0
  64. package/dist/ThemeProvider-B6DyGqzh.d.cts.map +1 -0
  65. package/dist/ThemeProvider-BCrxBaY-.d.ts +62 -0
  66. package/dist/ThemeProvider-BCrxBaY-.d.ts.map +1 -0
  67. package/dist/ThemeProvider-BRN1tj4n.cjs +187 -0
  68. package/dist/ThemeProvider-BRN1tj4n.cjs.map +1 -0
  69. package/dist/ThemeProvider-C7K9iMLX.js +158 -0
  70. package/dist/ThemeProvider-C7K9iMLX.js.map +1 -0
  71. package/dist/WrittenResponse-Bj3eFmGl.cjs +491 -0
  72. package/dist/WrittenResponse-Bj3eFmGl.cjs.map +1 -0
  73. package/dist/WrittenResponse-Cl8G6nO_.js +486 -0
  74. package/dist/WrittenResponse-Cl8G6nO_.js.map +1 -0
  75. package/dist/ai/LkAiProvider.cjs +34 -14
  76. package/dist/ai/LkAiProvider.cjs.map +1 -1
  77. package/dist/ai/LkAiProvider.d.cts +2 -83
  78. package/dist/ai/LkAiProvider.d.ts +2 -83
  79. package/dist/ai/LkAiProvider.js +33 -2
  80. package/dist/ai/LkAiProvider.js.map +1 -1
  81. package/dist/ai/useAiHelp.cjs +7 -25
  82. package/dist/ai/useAiHelp.d.cts +175 -177
  83. package/dist/ai/useAiHelp.d.cts.map +1 -0
  84. package/dist/ai/useAiHelp.d.ts +175 -177
  85. package/dist/ai/useAiHelp.d.ts.map +1 -0
  86. package/dist/ai/useAiHelp.js +3 -4
  87. package/dist/components/ActivityPreview.cjs +3 -29
  88. package/dist/components/ActivityPreview.d.cts +2 -81
  89. package/dist/components/ActivityPreview.d.ts +2 -81
  90. package/dist/components/ActivityPreview.js +2 -20
  91. package/dist/components/ActivitySequence.cjs +3 -30
  92. package/dist/components/ActivitySequence.d.cts +2 -432
  93. package/dist/components/ActivitySequence.d.ts +2 -432
  94. package/dist/components/ActivitySequence.js +2 -21
  95. package/dist/components/Dictation.cjs +4 -21
  96. package/dist/components/Dictation.d.cts +2 -19
  97. package/dist/components/Dictation.d.ts +2 -19
  98. package/dist/components/Dictation.js +3 -12
  99. package/dist/components/FillInTheBlanks.cjs +4 -20
  100. package/dist/components/FillInTheBlanks.d.cts +2 -30
  101. package/dist/components/FillInTheBlanks.d.ts +2 -30
  102. package/dist/components/FillInTheBlanks.js +3 -11
  103. package/dist/components/GapSelect.cjs +4 -20
  104. package/dist/components/GapSelect.d.cts +2 -27
  105. package/dist/components/GapSelect.d.ts +2 -27
  106. package/dist/components/GapSelect.js +3 -11
  107. package/dist/components/InteractiveVideo.cjs +5 -32
  108. package/dist/components/InteractiveVideo.d.cts +3 -291
  109. package/dist/components/InteractiveVideo.d.ts +3 -291
  110. package/dist/components/InteractiveVideo.js +3 -19
  111. package/dist/components/MultipleChoice.cjs +4 -20
  112. package/dist/components/MultipleChoice.d.cts +2 -26
  113. package/dist/components/MultipleChoice.d.ts +2 -26
  114. package/dist/components/MultipleChoice.js +3 -11
  115. package/dist/components/PronunciationFeedback.cjs +4 -17
  116. package/dist/components/PronunciationFeedback.d.cts +2 -90
  117. package/dist/components/PronunciationFeedback.d.ts +2 -90
  118. package/dist/components/PronunciationFeedback.js +3 -8
  119. package/dist/components/ReadAloud.cjs +4 -22
  120. package/dist/components/ReadAloud.d.cts +7 -11
  121. package/dist/components/ReadAloud.d.cts.map +1 -0
  122. package/dist/components/ReadAloud.d.ts +7 -11
  123. package/dist/components/ReadAloud.d.ts.map +1 -0
  124. package/dist/components/ReadAloud.js +3 -13
  125. package/dist/components/StimulusPanel.cjs +3 -14
  126. package/dist/components/StimulusPanel.d.cts +2 -51
  127. package/dist/components/StimulusPanel.d.ts +2 -51
  128. package/dist/components/StimulusPanel.js +2 -5
  129. package/dist/components/WrittenResponse.cjs +4 -19
  130. package/dist/components/WrittenResponse.d.cts +3 -18
  131. package/dist/components/WrittenResponse.d.ts +3 -18
  132. package/dist/components/WrittenResponse.js +3 -10
  133. package/dist/direction-Dq0_HtA5.js +183 -0
  134. package/dist/direction-Dq0_HtA5.js.map +1 -0
  135. package/dist/direction-K1pj0HCA.cjs +200 -0
  136. package/dist/direction-K1pj0HCA.cjs.map +1 -0
  137. package/dist/hooks/useActivityState.cjs +28 -10
  138. package/dist/hooks/useActivityState.cjs.map +1 -1
  139. package/dist/hooks/useActivityState.d.cts +25 -24
  140. package/dist/hooks/useActivityState.d.cts.map +1 -0
  141. package/dist/hooks/useActivityState.d.ts +25 -24
  142. package/dist/hooks/useActivityState.d.ts.map +1 -0
  143. package/dist/hooks/useActivityState.js +28 -2
  144. package/dist/hooks/useActivityState.js.map +1 -1
  145. package/dist/hooks/useSpeechRecorder.cjs +5 -16
  146. package/dist/hooks/useSpeechRecorder.d.cts +2 -127
  147. package/dist/hooks/useSpeechRecorder.d.ts +2 -127
  148. package/dist/hooks/useSpeechRecorder.js +3 -3
  149. package/dist/hooks/useXAPI.cjs +126 -10
  150. package/dist/hooks/useXAPI.cjs.map +1 -1
  151. package/dist/hooks/useXAPI.d.cts +14 -14
  152. package/dist/hooks/useXAPI.d.cts.map +1 -0
  153. package/dist/hooks/useXAPI.d.ts +14 -14
  154. package/dist/hooks/useXAPI.d.ts.map +1 -0
  155. package/dist/hooks/useXAPI.js +126 -2
  156. package/dist/hooks/useXAPI.js.map +1 -1
  157. package/dist/i18n/LkIntlProvider.cjs +9 -32
  158. package/dist/i18n/LkIntlProvider.d.cts +34 -38
  159. package/dist/i18n/LkIntlProvider.d.cts.map +1 -0
  160. package/dist/i18n/LkIntlProvider.d.ts +34 -38
  161. package/dist/i18n/LkIntlProvider.d.ts.map +1 -0
  162. package/dist/i18n/LkIntlProvider.js +3 -3
  163. package/dist/index-6P4rJHrJ.d.cts +432 -0
  164. package/dist/index-6P4rJHrJ.d.cts.map +1 -0
  165. package/dist/index-90CX504k.d.ts +90 -0
  166. package/dist/index-90CX504k.d.ts.map +1 -0
  167. package/dist/index-B_SgnjsC.d.cts +291 -0
  168. package/dist/index-B_SgnjsC.d.cts.map +1 -0
  169. package/dist/index-BavVW5z5.d.cts +25 -0
  170. package/dist/index-BavVW5z5.d.cts.map +1 -0
  171. package/dist/index-BhHv6Fiu.d.cts +28 -0
  172. package/dist/index-BhHv6Fiu.d.cts.map +1 -0
  173. package/dist/index-Bsu8VciA.d.ts +432 -0
  174. package/dist/index-Bsu8VciA.d.ts.map +1 -0
  175. package/dist/index-C1KGpD1k.d.ts +49 -0
  176. package/dist/index-C1KGpD1k.d.ts.map +1 -0
  177. package/dist/index-CKTpYTCC.d.cts +49 -0
  178. package/dist/index-CKTpYTCC.d.cts.map +1 -0
  179. package/dist/index-CO_SRFJj.d.ts +16 -0
  180. package/dist/index-CO_SRFJj.d.ts.map +1 -0
  181. package/dist/index-CSsuUsP7.d.cts +124 -0
  182. package/dist/index-CSsuUsP7.d.cts.map +1 -0
  183. package/dist/index-CunUyeuN.d.cts +78 -0
  184. package/dist/index-CunUyeuN.d.cts.map +1 -0
  185. package/dist/index-CzfRzks6.d.cts +90 -0
  186. package/dist/index-CzfRzks6.d.cts.map +1 -0
  187. package/dist/index-D14xtpBS.d.cts +24 -0
  188. package/dist/index-D14xtpBS.d.cts.map +1 -0
  189. package/dist/index-DHRPAPZf.d.ts +291 -0
  190. package/dist/index-DHRPAPZf.d.ts.map +1 -0
  191. package/dist/index-DLV6cK26.d.cts +16 -0
  192. package/dist/index-DLV6cK26.d.cts.map +1 -0
  193. package/dist/index-DbCCQ9cP.d.ts +124 -0
  194. package/dist/index-DbCCQ9cP.d.ts.map +1 -0
  195. package/dist/index-DeV5B2m5.d.ts +24 -0
  196. package/dist/index-DeV5B2m5.d.ts.map +1 -0
  197. package/dist/index-TZCJVSge.d.ts +28 -0
  198. package/dist/index-TZCJVSge.d.ts.map +1 -0
  199. package/dist/index-ZVvLHsd3.d.ts +25 -0
  200. package/dist/index-ZVvLHsd3.d.ts.map +1 -0
  201. package/dist/index-eQwBgpSw.d.ts +78 -0
  202. package/dist/index-eQwBgpSw.d.ts.map +1 -0
  203. package/dist/index.cjs +118 -163
  204. package/dist/index.cjs.map +1 -1
  205. package/dist/index.d.cts +20 -24
  206. package/dist/index.d.ts +20 -24
  207. package/dist/index.js +84 -29
  208. package/dist/index.js.map +1 -1
  209. package/dist/theme/ThemeProvider.cjs +8 -28
  210. package/dist/theme/ThemeProvider.d.cts +2 -59
  211. package/dist/theme/ThemeProvider.d.ts +2 -59
  212. package/dist/theme/ThemeProvider.js +3 -3
  213. package/dist/tries-CbbtZkdG.cjs +363 -0
  214. package/dist/tries-CbbtZkdG.cjs.map +1 -0
  215. package/dist/tries-DTHSrLCm.js +310 -0
  216. package/dist/tries-DTHSrLCm.js.map +1 -0
  217. package/dist/types-BOQd93x3.d.cts +994 -0
  218. package/dist/types-BOQd93x3.d.cts.map +1 -0
  219. package/dist/types-HIrgF_mS.d.ts +994 -0
  220. package/dist/types-HIrgF_mS.d.ts.map +1 -0
  221. package/dist/useAiHelp-B-ccDL5Q.js +906 -0
  222. package/dist/useAiHelp-B-ccDL5Q.js.map +1 -0
  223. package/dist/useAiHelp-h9yOLFqt.cjs +995 -0
  224. package/dist/useAiHelp-h9yOLFqt.cjs.map +1 -0
  225. package/dist/useSpeechRecorder--O_f-xvt.cjs +720 -0
  226. package/dist/useSpeechRecorder--O_f-xvt.cjs.map +1 -0
  227. package/dist/useSpeechRecorder-DtAYvl02.d.cts +154 -0
  228. package/dist/useSpeechRecorder-DtAYvl02.d.cts.map +1 -0
  229. package/dist/useSpeechRecorder-DtAYvl02.d.ts +154 -0
  230. package/dist/useSpeechRecorder-DtAYvl02.d.ts.map +1 -0
  231. package/dist/useSpeechRecorder-zIi9Dlw8.js +709 -0
  232. package/dist/useSpeechRecorder-zIi9Dlw8.js.map +1 -0
  233. package/package.json +10 -11
  234. package/dist/WrittenResponse-B7A5gHMj.d.ts +0 -115
  235. package/dist/WrittenResponse-BpL9p2Hn.d.cts +0 -115
  236. package/dist/ai/useAiHelp.cjs.map +0 -1
  237. package/dist/ai/useAiHelp.js.map +0 -1
  238. package/dist/chunk-2PNSVBLQ.cjs +0 -54
  239. package/dist/chunk-2PNSVBLQ.cjs.map +0 -1
  240. package/dist/chunk-2TW6WLBC.js +0 -80
  241. package/dist/chunk-2TW6WLBC.js.map +0 -1
  242. package/dist/chunk-4ZZWZSWI.js +0 -61
  243. package/dist/chunk-4ZZWZSWI.js.map +0 -1
  244. package/dist/chunk-6N43WDVG.js +0 -29
  245. package/dist/chunk-6N43WDVG.js.map +0 -1
  246. package/dist/chunk-7ALBSPYR.cjs +0 -436
  247. package/dist/chunk-7ALBSPYR.cjs.map +0 -1
  248. package/dist/chunk-7NFY3M3W.js +0 -234
  249. package/dist/chunk-7NFY3M3W.js.map +0 -1
  250. package/dist/chunk-7SB2MJA4.js +0 -29
  251. package/dist/chunk-7SB2MJA4.js.map +0 -1
  252. package/dist/chunk-ABJJ3LII.js +0 -434
  253. package/dist/chunk-ABJJ3LII.js.map +0 -1
  254. package/dist/chunk-BIGGXHAW.cjs +0 -342
  255. package/dist/chunk-BIGGXHAW.cjs.map +0 -1
  256. package/dist/chunk-C7QZE5BI.js +0 -430
  257. package/dist/chunk-C7QZE5BI.js.map +0 -1
  258. package/dist/chunk-CWTUWNV3.cjs +0 -2937
  259. package/dist/chunk-CWTUWNV3.cjs.map +0 -1
  260. package/dist/chunk-DC4CQCK5.js +0 -915
  261. package/dist/chunk-DS6HN3YR.cjs +0 -496
  262. package/dist/chunk-DS6HN3YR.cjs.map +0 -1
  263. package/dist/chunk-FDQR4GAZ.js +0 -240
  264. package/dist/chunk-FDQR4GAZ.js.map +0 -1
  265. package/dist/chunk-FKGMSOJF.js +0 -394
  266. package/dist/chunk-FKGMSOJF.js.map +0 -1
  267. package/dist/chunk-G6PXJ2SA.js +0 -823
  268. package/dist/chunk-G6PXJ2SA.js.map +0 -1
  269. package/dist/chunk-HNLRVRQR.js +0 -335
  270. package/dist/chunk-HNLRVRQR.js.map +0 -1
  271. package/dist/chunk-J3C72RPK.cjs +0 -31
  272. package/dist/chunk-J3C72RPK.cjs.map +0 -1
  273. package/dist/chunk-K63VPFOV.cjs +0 -134
  274. package/dist/chunk-K63VPFOV.cjs.map +0 -1
  275. package/dist/chunk-KFLIDTDU.cjs +0 -825
  276. package/dist/chunk-KFLIDTDU.cjs.map +0 -1
  277. package/dist/chunk-KHKH5LCT.cjs +0 -250
  278. package/dist/chunk-KHKH5LCT.cjs.map +0 -1
  279. package/dist/chunk-LBEKRN6Y.cjs +0 -664
  280. package/dist/chunk-LBEKRN6Y.cjs.map +0 -1
  281. package/dist/chunk-LPUWXIPR.cjs +0 -578
  282. package/dist/chunk-LPUWXIPR.cjs.map +0 -1
  283. package/dist/chunk-MCO52PV5.js +0 -520
  284. package/dist/chunk-MCO52PV5.js.map +0 -1
  285. package/dist/chunk-MKXEM2C5.cjs +0 -396
  286. package/dist/chunk-MKXEM2C5.cjs.map +0 -1
  287. package/dist/chunk-MXNC5UNO.js +0 -563
  288. package/dist/chunk-MXNC5UNO.js.map +0 -1
  289. package/dist/chunk-NAK55BYU.cjs +0 -859
  290. package/dist/chunk-NAK55BYU.cjs.map +0 -1
  291. package/dist/chunk-NDBMKGQ5.cjs +0 -599
  292. package/dist/chunk-NDBMKGQ5.cjs.map +0 -1
  293. package/dist/chunk-OD65OZIW.cjs +0 -159
  294. package/dist/chunk-OD65OZIW.cjs.map +0 -1
  295. package/dist/chunk-ORT3KLGI.js +0 -50
  296. package/dist/chunk-ORT3KLGI.js.map +0 -1
  297. package/dist/chunk-PNNUPUH4.cjs +0 -82
  298. package/dist/chunk-PNNUPUH4.cjs.map +0 -1
  299. package/dist/chunk-PWHECW6N.js +0 -2934
  300. package/dist/chunk-PWHECW6N.js.map +0 -1
  301. package/dist/chunk-RBS5A2DF.js +0 -857
  302. package/dist/chunk-RBS5A2DF.js.map +0 -1
  303. package/dist/chunk-RPWUDXG5.cjs +0 -63
  304. package/dist/chunk-RPWUDXG5.cjs.map +0 -1
  305. package/dist/chunk-TCDJY3H6.js +0 -494
  306. package/dist/chunk-TCDJY3H6.js.map +0 -1
  307. package/dist/chunk-TP5UMRAU.cjs +0 -918
  308. package/dist/chunk-TP5UMRAU.cjs.map +0 -1
  309. package/dist/chunk-TS7J6DTY.js +0 -597
  310. package/dist/chunk-TS7J6DTY.js.map +0 -1
  311. package/dist/chunk-TUVENMXB.cjs +0 -20
  312. package/dist/chunk-TUVENMXB.cjs.map +0 -1
  313. package/dist/chunk-UDCQTOVU.cjs +0 -523
  314. package/dist/chunk-UDCQTOVU.cjs.map +0 -1
  315. package/dist/chunk-UHKZXOXD.js +0 -128
  316. package/dist/chunk-UHKZXOXD.js.map +0 -1
  317. package/dist/chunk-V6BA44DS.cjs +0 -236
  318. package/dist/chunk-V6BA44DS.cjs.map +0 -1
  319. package/dist/chunk-XO5R73Y4.js +0 -653
  320. package/dist/chunk-XO5R73Y4.js.map +0 -1
  321. package/dist/chunk-XOR4MPEN.cjs +0 -31
  322. package/dist/chunk-XOR4MPEN.cjs.map +0 -1
  323. package/dist/chunk-YORQQXGO.js +0 -155
  324. package/dist/chunk-YORQQXGO.js.map +0 -1
  325. package/dist/chunk-YY4PFR3Z.cjs +0 -432
  326. package/dist/chunk-YY4PFR3Z.cjs.map +0 -1
  327. package/dist/chunk-ZPI6Q42R.js +0 -17
  328. package/dist/chunk-ZPI6Q42R.js.map +0 -1
  329. package/dist/components/ActivityPreview.cjs.map +0 -1
  330. package/dist/components/ActivityPreview.js.map +0 -1
  331. package/dist/components/ActivitySequence.cjs.map +0 -1
  332. package/dist/components/ActivitySequence.js.map +0 -1
  333. package/dist/components/Dictation.cjs.map +0 -1
  334. package/dist/components/Dictation.js.map +0 -1
  335. package/dist/components/FillInTheBlanks.cjs.map +0 -1
  336. package/dist/components/FillInTheBlanks.js.map +0 -1
  337. package/dist/components/GapSelect.cjs.map +0 -1
  338. package/dist/components/GapSelect.js.map +0 -1
  339. package/dist/components/InteractiveVideo.cjs.map +0 -1
  340. package/dist/components/InteractiveVideo.js.map +0 -1
  341. package/dist/components/MultipleChoice.cjs.map +0 -1
  342. package/dist/components/MultipleChoice.js.map +0 -1
  343. package/dist/components/PronunciationFeedback.cjs.map +0 -1
  344. package/dist/components/PronunciationFeedback.js.map +0 -1
  345. package/dist/components/ReadAloud.cjs.map +0 -1
  346. package/dist/components/ReadAloud.js.map +0 -1
  347. package/dist/components/StimulusPanel.cjs.map +0 -1
  348. package/dist/components/StimulusPanel.js.map +0 -1
  349. package/dist/components/WrittenResponse.cjs.map +0 -1
  350. package/dist/components/WrittenResponse.js.map +0 -1
  351. package/dist/hooks/useSpeechRecorder.cjs.map +0 -1
  352. package/dist/hooks/useSpeechRecorder.js.map +0 -1
  353. package/dist/i18n/LkIntlProvider.cjs.map +0 -1
  354. package/dist/i18n/LkIntlProvider.js.map +0 -1
  355. package/dist/machine-CuwKqWXC.d.cts +0 -26
  356. package/dist/machine-CuwKqWXC.d.ts +0 -26
  357. package/dist/theme/ThemeProvider.cjs.map +0 -1
  358. package/dist/theme/ThemeProvider.js.map +0 -1
  359. package/dist/types-C4IsUQsK.d.ts +0 -989
  360. package/dist/types-CJgZWtl4.d.cts +0 -989
@@ -0,0 +1,187 @@
1
+ 'use client';
2
+ let react = require("react");
3
+ let react_jsx_runtime = require("react/jsx-runtime");
4
+ //#region src/theme/dark-theme.ts
5
+ /**
6
+ * Dark-mode colour overrides, merged over {@link defaultTheme} by
7
+ * `ThemeProvider`. Colours only — spacing/typography/shape/motion are
8
+ * theme-invariant. All pairs verified WCAG 2.2 AA against the dark surface.
9
+ */
10
+ const 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
+ //#endregion
24
+ //#region src/theme/tokens.ts
25
+ /**
26
+ * Canonical default theme token values. `defaults.css` mirrors these exactly.
27
+ * Palette is a neutral monochrome, deliberately unbranded, so the SDK carries
28
+ * nobody's look out of the box; consumers rebrand via `ThemeProvider`. All
29
+ * colour pairs are verified to meet WCAG 2.2 AA: 4.5:1 for normal text, 3:1 for
30
+ * UI / focus ring (see theme/__tests__/contrast.test.ts).
31
+ */
32
+ const defaultTheme = {
33
+ "--lk-color-primary": "#18181b",
34
+ "--lk-color-primary-hover": "#27272a",
35
+ "--lk-color-surface": "#ffffff",
36
+ "--lk-color-surface-raised": "#fafafa",
37
+ "--lk-color-border": "#e4e4e7",
38
+ "--lk-color-text": "#18181b",
39
+ "--lk-color-text-muted": "#52525b",
40
+ "--lk-color-success": "#15803d",
41
+ "--lk-color-error": "#b91c1c",
42
+ "--lk-color-warning": "#b45309",
43
+ "--lk-color-focus-ring": "#18181b",
44
+ "--lk-color-media-accent": "#ffffff",
45
+ "--lk-iv-caption-color": "#ffffff",
46
+ "--lk-iv-caption-secondary-color": "#ffe066",
47
+ "--lk-iv-caption-secondary-scale": "0.85",
48
+ "--lk-iv-caption-gap": "0.25em",
49
+ "--lk-spacing-xs": "4px",
50
+ "--lk-spacing-sm": "8px",
51
+ "--lk-spacing-md": "16px",
52
+ "--lk-spacing-lg": "24px",
53
+ "--lk-spacing-xl": "32px",
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
+ "--lk-radius-sm": "0.25rem",
62
+ "--lk-radius-base": "0.5rem",
63
+ "--lk-radius-lg": "0.75rem",
64
+ "--lk-transition-fast": "150ms ease",
65
+ "--lk-transition-base": "250ms ease"
66
+ };
67
+ //#endregion
68
+ //#region src/theme/tailwind.ts
69
+ /**
70
+ * Token-prefix → Tailwind bucket. `--lk-font-weight-*`, `--lk-line-height-*`
71
+ * and `--lk-transition-*` are intentionally absent: the first two have no
72
+ * matching `theme.extend` group here, and the transition tokens hold a
73
+ * `<duration> <easing>` shorthand that would emit invalid
74
+ * `transition-duration: 150ms ease` if mapped to Tailwind's `transitionDuration`.
75
+ */
76
+ const BUCKETS = [
77
+ ["--lk-color-", "colors"],
78
+ ["--lk-spacing-", "spacing"],
79
+ ["--lk-radius-", "borderRadius"],
80
+ ["--lk-font-family-", "fontFamily"],
81
+ ["--lk-font-size-", "fontSize"]
82
+ ];
83
+ /**
84
+ * Converts SDK theme tokens into a Tailwind `theme.extend` object so Tailwind
85
+ * projects consume the same `--lk-*` tokens as the components — one shared
86
+ * source of truth rather than a parallel, conflicting palette.
87
+ */
88
+ function createTailwindTheme(theme) {
89
+ const merged = {
90
+ ...defaultTheme,
91
+ ...theme
92
+ };
93
+ const extension = {
94
+ colors: {},
95
+ spacing: {},
96
+ borderRadius: {},
97
+ fontFamily: {},
98
+ fontSize: {}
99
+ };
100
+ for (const [tokenName, fallback] of Object.entries(merged)) for (const [prefix, bucket] of BUCKETS) if (tokenName.startsWith(prefix)) {
101
+ extension[bucket][`lk-${tokenName.slice(prefix.length)}`] = `var(${tokenName}, ${fallback})`;
102
+ break;
103
+ }
104
+ return extension;
105
+ }
106
+ //#endregion
107
+ //#region src/theme/ThemeProvider.tsx
108
+ const ThemeContext = (0, react.createContext)(defaultTheme);
109
+ const DARK_QUERY = "(prefers-color-scheme: dark)";
110
+ /** Subscribe to OS dark-mode changes; no-op when there is no `window`. */
111
+ function subscribePrefersDark(onChange) {
112
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return () => {};
113
+ const mql = window.matchMedia(DARK_QUERY);
114
+ mql.addEventListener("change", onChange);
115
+ return () => mql.removeEventListener("change", onChange);
116
+ }
117
+ /** Current OS dark-mode preference; `false` when there is no `window`. */
118
+ function getPrefersDark() {
119
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return false;
120
+ return window.matchMedia(DARK_QUERY).matches;
121
+ }
122
+ /**
123
+ * Provides theme tokens to descendant activity components as scoped inline CSS
124
+ * custom properties on a wrapper `<div>`, and via {@link useTheme}.
125
+ *
126
+ * Resolution: an explicit `theme` prop merges over {@link defaultTheme} (and
127
+ * suppresses dark auto-detect). With no `theme` prop, the OS
128
+ * `prefers-color-scheme: dark` preference auto-applies {@link darkTheme}.
129
+ * SSR-safe: the server snapshot is always light, so hydration never mismatches.
130
+ */
131
+ function ThemeProvider({ theme, children }) {
132
+ const prefersDark = (0, react.useSyncExternalStore)(subscribePrefersDark, getPrefersDark, () => false);
133
+ const activeTheme = (0, react.useMemo)(() => {
134
+ if (theme !== void 0) return {
135
+ ...defaultTheme,
136
+ ...theme
137
+ };
138
+ return prefersDark ? {
139
+ ...defaultTheme,
140
+ ...darkTheme
141
+ } : defaultTheme;
142
+ }, [theme, prefersDark]);
143
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ThemeContext.Provider, {
144
+ value: activeTheme,
145
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
146
+ style: activeTheme,
147
+ children
148
+ })
149
+ });
150
+ }
151
+ /** Returns the currently active theme tokens (defaults when no provider). */
152
+ function useTheme() {
153
+ return (0, react.useContext)(ThemeContext);
154
+ }
155
+ //#endregion
156
+ Object.defineProperty(exports, "ThemeProvider", {
157
+ enumerable: true,
158
+ get: function() {
159
+ return ThemeProvider;
160
+ }
161
+ });
162
+ Object.defineProperty(exports, "createTailwindTheme", {
163
+ enumerable: true,
164
+ get: function() {
165
+ return createTailwindTheme;
166
+ }
167
+ });
168
+ Object.defineProperty(exports, "darkTheme", {
169
+ enumerable: true,
170
+ get: function() {
171
+ return darkTheme;
172
+ }
173
+ });
174
+ Object.defineProperty(exports, "defaultTheme", {
175
+ enumerable: true,
176
+ get: function() {
177
+ return defaultTheme;
178
+ }
179
+ });
180
+ Object.defineProperty(exports, "useTheme", {
181
+ enumerable: true,
182
+ get: function() {
183
+ return useTheme;
184
+ }
185
+ });
186
+
187
+ //# sourceMappingURL=ThemeProvider-BRN1tj4n.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider-BRN1tj4n.cjs","names":["createContext","useSyncExternalStore","useMemo","useContext"],"sources":["../src/theme/dark-theme.ts","../src/theme/tokens.ts","../src/theme/tailwind.ts","../src/theme/ThemeProvider.tsx"],"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). 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): React.JSX.Element {\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"],"mappings":";;;;;;;;AAOA,MAAa,YAAkC;CAC7C,sBAAsB;CACtB,4BAA4B;CAC5B,sBAAsB;CACtB,6BAA6B;CAC7B,qBAAqB;CACrB,mBAAmB;CACnB,yBAAyB;CACzB,sBAAsB;CACtB,oBAAoB;CACpB,sBAAsB;CACtB,yBAAyB;AAC3B;;;;;;;;;;ACVA,MAAa,eAA4B;CAGvC,sBAAsB;CACtB,4BAA4B;CAC5B,sBAAsB;CACtB,6BAA6B;CAC7B,qBAAqB;CACrB,mBAAmB;CACnB,yBAAyB;CACzB,sBAAsB;CACtB,oBAAoB;CACpB,sBAAsB;CACtB,yBAAyB;CACzB,2BAA2B;CAI3B,yBAAyB;CACzB,mCAAmC;CACnC,mCAAmC;CACnC,uBAAuB;CAGvB,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CAGnB,yBACE;CACF,qBAAqB;CACrB,uBAAuB;CACvB,qBAAqB;CACrB,2BAA2B;CAC3B,yBAAyB;CACzB,yBAAyB;CAGzB,kBAAkB;CAClB,oBAAoB;CACpB,kBAAkB;CAGlB,wBAAwB;CACxB,wBAAwB;AAC1B;;;;;;;;;;ACjCA,MAAM,UAAU;CACd,CAAC,eAAe,QAAQ;CACxB,CAAC,iBAAiB,SAAS;CAC3B,CAAC,gBAAgB,cAAc;CAC/B,CAAC,qBAAqB,YAAY;CAClC,CAAC,mBAAmB,UAAU;AAChC;;;;;;AAOA,SAAgB,oBAAoB,OAAqD;CACvF,MAAM,SAAiC;EAAE,GAAG;EAAc,GAAG;CAAM;CACnE,MAAM,YAAoC;EACxC,QAAQ,CAAC;EACT,SAAS,CAAC;EACV,cAAc,CAAC;EACf,YAAY,CAAC;EACb,UAAU,CAAC;CACb;CAEA,KAAK,MAAM,CAAC,WAAW,aAAa,OAAO,QAAQ,MAAM,GACvD,KAAK,MAAM,CAAC,QAAQ,WAAW,SAC7B,IAAI,UAAU,WAAW,MAAM,GAAG;EAChC,UAAU,OAAO,CAAC,MAAM,UAAU,MAAM,OAAO,MAAM,OACnD,OAAO,UAAU,IAAI,SAAS;EAChC;CACF;CAIJ,OAAO;AACT;;;ACxCA,MAAM,gBAAA,GAAeA,MAAAA,cAAAA,CAA2B,YAAY;AAE5D,MAAM,aAAa;;AAGnB,SAAS,qBAAqB,UAAkC;CAC9D,IAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAChE,aAAa,CAAC;CAEhB,MAAM,MAAM,OAAO,WAAW,UAAU;CACxC,IAAI,iBAAiB,UAAU,QAAQ;CACvC,aAAa,IAAI,oBAAoB,UAAU,QAAQ;AACzD;;AAGA,SAAS,iBAA0B;CACjC,IAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAChE,OAAO;CAET,OAAO,OAAO,WAAW,UAAU,CAAC,CAAC;AACvC;;;;;;;;;;AAiBA,SAAgB,cAAc,EAAE,OAAO,YAAmD;CACxF,MAAM,eAAA,GAAcC,MAAAA,qBAAAA,CAAqB,sBAAsB,sBAAsB,KAAK;CAE1F,MAAM,eAAA,GAAcC,MAAAA,QAAAA,OAA2B;EAC7C,IAAI,UAAU,KAAA,GACZ,OAAO;GAAE,GAAG;GAAc,GAAG;EAAM;EAErC,OAAO,cAAc;GAAE,GAAG;GAAc,GAAG;EAAU,IAAI;CAC3D,GAAG,CAAC,OAAO,WAAW,CAAC;CAEvB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAa,UAAd;EAAuB,OAAO;EAC5B,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,OAAO;GAA+B;EAAc,CAAA;CACpC,CAAA;AAE3B;;AAGA,SAAgB,WAAwB;CACtC,QAAA,GAAOC,MAAAA,WAAAA,CAAW,YAAY;AAChC"}
@@ -0,0 +1,158 @@
1
+ 'use client';
2
+ import { createContext, useContext, useMemo, useSyncExternalStore } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/theme/dark-theme.ts
5
+ /**
6
+ * Dark-mode colour overrides, merged over {@link defaultTheme} by
7
+ * `ThemeProvider`. Colours only — spacing/typography/shape/motion are
8
+ * theme-invariant. All pairs verified WCAG 2.2 AA against the dark surface.
9
+ */
10
+ const 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
+ //#endregion
24
+ //#region src/theme/tokens.ts
25
+ /**
26
+ * Canonical default theme token values. `defaults.css` mirrors these exactly.
27
+ * Palette is a neutral monochrome, deliberately unbranded, so the SDK carries
28
+ * nobody's look out of the box; consumers rebrand via `ThemeProvider`. All
29
+ * colour pairs are verified to meet WCAG 2.2 AA: 4.5:1 for normal text, 3:1 for
30
+ * UI / focus ring (see theme/__tests__/contrast.test.ts).
31
+ */
32
+ const defaultTheme = {
33
+ "--lk-color-primary": "#18181b",
34
+ "--lk-color-primary-hover": "#27272a",
35
+ "--lk-color-surface": "#ffffff",
36
+ "--lk-color-surface-raised": "#fafafa",
37
+ "--lk-color-border": "#e4e4e7",
38
+ "--lk-color-text": "#18181b",
39
+ "--lk-color-text-muted": "#52525b",
40
+ "--lk-color-success": "#15803d",
41
+ "--lk-color-error": "#b91c1c",
42
+ "--lk-color-warning": "#b45309",
43
+ "--lk-color-focus-ring": "#18181b",
44
+ "--lk-color-media-accent": "#ffffff",
45
+ "--lk-iv-caption-color": "#ffffff",
46
+ "--lk-iv-caption-secondary-color": "#ffe066",
47
+ "--lk-iv-caption-secondary-scale": "0.85",
48
+ "--lk-iv-caption-gap": "0.25em",
49
+ "--lk-spacing-xs": "4px",
50
+ "--lk-spacing-sm": "8px",
51
+ "--lk-spacing-md": "16px",
52
+ "--lk-spacing-lg": "24px",
53
+ "--lk-spacing-xl": "32px",
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
+ "--lk-radius-sm": "0.25rem",
62
+ "--lk-radius-base": "0.5rem",
63
+ "--lk-radius-lg": "0.75rem",
64
+ "--lk-transition-fast": "150ms ease",
65
+ "--lk-transition-base": "250ms ease"
66
+ };
67
+ //#endregion
68
+ //#region src/theme/tailwind.ts
69
+ /**
70
+ * Token-prefix → Tailwind bucket. `--lk-font-weight-*`, `--lk-line-height-*`
71
+ * and `--lk-transition-*` are intentionally absent: the first two have no
72
+ * matching `theme.extend` group here, and the transition tokens hold a
73
+ * `<duration> <easing>` shorthand that would emit invalid
74
+ * `transition-duration: 150ms ease` if mapped to Tailwind's `transitionDuration`.
75
+ */
76
+ const BUCKETS = [
77
+ ["--lk-color-", "colors"],
78
+ ["--lk-spacing-", "spacing"],
79
+ ["--lk-radius-", "borderRadius"],
80
+ ["--lk-font-family-", "fontFamily"],
81
+ ["--lk-font-size-", "fontSize"]
82
+ ];
83
+ /**
84
+ * Converts SDK theme tokens into a Tailwind `theme.extend` object so Tailwind
85
+ * projects consume the same `--lk-*` tokens as the components — one shared
86
+ * source of truth rather than a parallel, conflicting palette.
87
+ */
88
+ function createTailwindTheme(theme) {
89
+ const merged = {
90
+ ...defaultTheme,
91
+ ...theme
92
+ };
93
+ const extension = {
94
+ colors: {},
95
+ spacing: {},
96
+ borderRadius: {},
97
+ fontFamily: {},
98
+ fontSize: {}
99
+ };
100
+ for (const [tokenName, fallback] of Object.entries(merged)) for (const [prefix, bucket] of BUCKETS) if (tokenName.startsWith(prefix)) {
101
+ extension[bucket][`lk-${tokenName.slice(prefix.length)}`] = `var(${tokenName}, ${fallback})`;
102
+ break;
103
+ }
104
+ return extension;
105
+ }
106
+ //#endregion
107
+ //#region src/theme/ThemeProvider.tsx
108
+ const ThemeContext = createContext(defaultTheme);
109
+ const DARK_QUERY = "(prefers-color-scheme: dark)";
110
+ /** Subscribe to OS dark-mode changes; no-op when there is no `window`. */
111
+ function subscribePrefersDark(onChange) {
112
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return () => {};
113
+ const mql = window.matchMedia(DARK_QUERY);
114
+ mql.addEventListener("change", onChange);
115
+ return () => mql.removeEventListener("change", onChange);
116
+ }
117
+ /** Current OS dark-mode preference; `false` when there is no `window`. */
118
+ function getPrefersDark() {
119
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return false;
120
+ return window.matchMedia(DARK_QUERY).matches;
121
+ }
122
+ /**
123
+ * Provides theme tokens to descendant activity components as scoped inline CSS
124
+ * custom properties on a wrapper `<div>`, and via {@link useTheme}.
125
+ *
126
+ * Resolution: an explicit `theme` prop merges over {@link defaultTheme} (and
127
+ * suppresses dark auto-detect). With no `theme` prop, the OS
128
+ * `prefers-color-scheme: dark` preference auto-applies {@link darkTheme}.
129
+ * SSR-safe: the server snapshot is always light, so hydration never mismatches.
130
+ */
131
+ function ThemeProvider({ theme, children }) {
132
+ const prefersDark = useSyncExternalStore(subscribePrefersDark, getPrefersDark, () => false);
133
+ const activeTheme = useMemo(() => {
134
+ if (theme !== void 0) return {
135
+ ...defaultTheme,
136
+ ...theme
137
+ };
138
+ return prefersDark ? {
139
+ ...defaultTheme,
140
+ ...darkTheme
141
+ } : defaultTheme;
142
+ }, [theme, prefersDark]);
143
+ return /* @__PURE__ */ jsx(ThemeContext.Provider, {
144
+ value: activeTheme,
145
+ children: /* @__PURE__ */ jsx("div", {
146
+ style: activeTheme,
147
+ children
148
+ })
149
+ });
150
+ }
151
+ /** Returns the currently active theme tokens (defaults when no provider). */
152
+ function useTheme() {
153
+ return useContext(ThemeContext);
154
+ }
155
+ //#endregion
156
+ export { darkTheme as a, defaultTheme as i, useTheme as n, createTailwindTheme as r, ThemeProvider as t };
157
+
158
+ //# sourceMappingURL=ThemeProvider-C7K9iMLX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider-C7K9iMLX.js","names":[],"sources":["../src/theme/dark-theme.ts","../src/theme/tokens.ts","../src/theme/tailwind.ts","../src/theme/ThemeProvider.tsx"],"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). 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): React.JSX.Element {\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"],"mappings":";;;;;;;;AAOA,MAAa,YAAkC;CAC7C,sBAAsB;CACtB,4BAA4B;CAC5B,sBAAsB;CACtB,6BAA6B;CAC7B,qBAAqB;CACrB,mBAAmB;CACnB,yBAAyB;CACzB,sBAAsB;CACtB,oBAAoB;CACpB,sBAAsB;CACtB,yBAAyB;AAC3B;;;;;;;;;;ACVA,MAAa,eAA4B;CAGvC,sBAAsB;CACtB,4BAA4B;CAC5B,sBAAsB;CACtB,6BAA6B;CAC7B,qBAAqB;CACrB,mBAAmB;CACnB,yBAAyB;CACzB,sBAAsB;CACtB,oBAAoB;CACpB,sBAAsB;CACtB,yBAAyB;CACzB,2BAA2B;CAI3B,yBAAyB;CACzB,mCAAmC;CACnC,mCAAmC;CACnC,uBAAuB;CAGvB,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CAGnB,yBACE;CACF,qBAAqB;CACrB,uBAAuB;CACvB,qBAAqB;CACrB,2BAA2B;CAC3B,yBAAyB;CACzB,yBAAyB;CAGzB,kBAAkB;CAClB,oBAAoB;CACpB,kBAAkB;CAGlB,wBAAwB;CACxB,wBAAwB;AAC1B;;;;;;;;;;ACjCA,MAAM,UAAU;CACd,CAAC,eAAe,QAAQ;CACxB,CAAC,iBAAiB,SAAS;CAC3B,CAAC,gBAAgB,cAAc;CAC/B,CAAC,qBAAqB,YAAY;CAClC,CAAC,mBAAmB,UAAU;AAChC;;;;;;AAOA,SAAgB,oBAAoB,OAAqD;CACvF,MAAM,SAAiC;EAAE,GAAG;EAAc,GAAG;CAAM;CACnE,MAAM,YAAoC;EACxC,QAAQ,CAAC;EACT,SAAS,CAAC;EACV,cAAc,CAAC;EACf,YAAY,CAAC;EACb,UAAU,CAAC;CACb;CAEA,KAAK,MAAM,CAAC,WAAW,aAAa,OAAO,QAAQ,MAAM,GACvD,KAAK,MAAM,CAAC,QAAQ,WAAW,SAC7B,IAAI,UAAU,WAAW,MAAM,GAAG;EAChC,UAAU,OAAO,CAAC,MAAM,UAAU,MAAM,OAAO,MAAM,OACnD,OAAO,UAAU,IAAI,SAAS;EAChC;CACF;CAIJ,OAAO;AACT;;;ACxCA,MAAM,eAAe,cAA2B,YAAY;AAE5D,MAAM,aAAa;;AAGnB,SAAS,qBAAqB,UAAkC;CAC9D,IAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAChE,aAAa,CAAC;CAEhB,MAAM,MAAM,OAAO,WAAW,UAAU;CACxC,IAAI,iBAAiB,UAAU,QAAQ;CACvC,aAAa,IAAI,oBAAoB,UAAU,QAAQ;AACzD;;AAGA,SAAS,iBAA0B;CACjC,IAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAChE,OAAO;CAET,OAAO,OAAO,WAAW,UAAU,CAAC,CAAC;AACvC;;;;;;;;;;AAiBA,SAAgB,cAAc,EAAE,OAAO,YAAmD;CACxF,MAAM,cAAc,qBAAqB,sBAAsB,sBAAsB,KAAK;CAE1F,MAAM,cAAc,cAA2B;EAC7C,IAAI,UAAU,KAAA,GACZ,OAAO;GAAE,GAAG;GAAc,GAAG;EAAM;EAErC,OAAO,cAAc;GAAE,GAAG;GAAc,GAAG;EAAU,IAAI;CAC3D,GAAG,CAAC,OAAO,WAAW,CAAC;CAEvB,OACE,oBAAC,aAAa,UAAd;EAAuB,OAAO;EAC5B,UAAA,oBAAC,OAAD;GAAK,OAAO;GAA+B;EAAc,CAAA;CACpC,CAAA;AAE3B;;AAGA,SAAgB,WAAwB;CACtC,OAAO,WAAW,YAAY;AAChC"}