@vue-skuilder/platform-ui 0.2.36 → 0.2.37

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 (146) hide show
  1. package/dist/assets/{About-74htcNLT.js → About-BkMENQtD.js} +2 -2
  2. package/dist/assets/{About-74htcNLT.js.map → About-BkMENQtD.js.map} +1 -1
  3. package/dist/assets/{AdminDashboard-B00qno2M.js → AdminDashboard-5R-xgY-M.js} +2 -2
  4. package/dist/assets/{AdminDashboard-B00qno2M.js.map → AdminDashboard-5R-xgY-M.js.map} +1 -1
  5. package/dist/assets/{AdminLearner-SJNtSyJ_.js → AdminLearner-Br10DFSt.js} +2 -2
  6. package/dist/assets/{AdminLearner-SJNtSyJ_.js.map → AdminLearner-Br10DFSt.js.map} +1 -1
  7. package/dist/assets/BaseUserDB-BRgNfdWx.js +1 -0
  8. package/dist/assets/{ClassroomCtrlPanel-BSAG3h8B.js → ClassroomCtrlPanel-DQJQ0B7M.js} +2 -2
  9. package/dist/assets/{ClassroomCtrlPanel-BSAG3h8B.js.map → ClassroomCtrlPanel-DQJQ0B7M.js.map} +1 -1
  10. package/dist/assets/{Classrooms-DXNEbtsM.js → Classrooms-B5tQPFEE.js} +2 -2
  11. package/dist/assets/{Classrooms-DXNEbtsM.js.map → Classrooms-B5tQPFEE.js.map} +1 -1
  12. package/dist/assets/CouchDBSyncStrategy-0EgX8AAz.js +1 -0
  13. package/dist/assets/{CourseRouter-CsVa_92r.js → CourseRouter-W6S7DpZN.js} +2 -2
  14. package/dist/assets/{CourseRouter-CsVa_92r.js.map → CourseRouter-W6S7DpZN.js.map} +1 -1
  15. package/dist/assets/CourseSyncService-CrHp0wsl.js +1 -0
  16. package/dist/assets/{CourseWare-BTFRjgBR-DBp_fIwH.js → CourseWare-BTFRjgBR-lpqcYpAW.js} +3 -3
  17. package/dist/assets/{CourseWare-BTFRjgBR-DBp_fIwH.js.map → CourseWare-BTFRjgBR-lpqcYpAW.js.map} +1 -1
  18. package/dist/assets/{Courses-CB6GGtdm.js → Courses-TzwgFdwn.js} +2 -2
  19. package/dist/assets/{Courses-CB6GGtdm.js.map → Courses-TzwgFdwn.js.map} +1 -1
  20. package/dist/assets/{EloModeration-DUBgs-Vh.js → EloModeration-BCz7VKla.js} +2 -2
  21. package/dist/assets/{EloModeration-DUBgs-Vh.js.map → EloModeration-BCz7VKla.js.map} +1 -1
  22. package/dist/assets/{JoinCode-BBvYapCA.js → JoinCode-CEeZkFOp.js} +2 -2
  23. package/dist/assets/{JoinCode-BBvYapCA.js.map → JoinCode-CEeZkFOp.js.map} +1 -1
  24. package/dist/assets/{NewCourseDialog-DBgFVnt3.js → NewCourseDialog-DNzvvz_H.js} +2 -2
  25. package/dist/assets/{NewCourseDialog-DBgFVnt3.js.map → NewCourseDialog-DNzvvz_H.js.map} +1 -1
  26. package/dist/assets/{PipelineDebugger-BHaqzqZw.js → PipelineDebugger-DhnKlMgD.js} +3 -3
  27. package/dist/assets/{PipelineDebugger-BHaqzqZw.js.map → PipelineDebugger-DhnKlMgD.js.map} +1 -1
  28. package/dist/assets/PouchDataLayerProvider-CAuhZYIc.js +2 -0
  29. package/dist/assets/PouchDataLayerProvider-CAuhZYIc.js.map +1 -0
  30. package/dist/assets/{ReleaseNotes-Dg6mLL1C.js → ReleaseNotes-Bvw24QDI.js} +2 -2
  31. package/dist/assets/{ReleaseNotes-Dg6mLL1C.js.map → ReleaseNotes-Bvw24QDI.js.map} +1 -1
  32. package/dist/assets/{RequestPasswordReset-CcFMTnTc.js → RequestPasswordReset-YOq1JJ_o.js} +2 -2
  33. package/dist/assets/{RequestPasswordReset-CcFMTnTc.js.map → RequestPasswordReset-YOq1JJ_o.js.map} +1 -1
  34. package/dist/assets/{ResetPassword-Dw_cBJU2.js → ResetPassword-CQCb3B_Z.js} +2 -2
  35. package/dist/assets/{ResetPassword-Dw_cBJU2.js.map → ResetPassword-CQCb3B_Z.js.map} +1 -1
  36. package/dist/assets/{StaticDataLayerProvider-CtgU3VBh.js → StaticDataLayerProvider-DbGLKpb1.js} +2 -2
  37. package/dist/assets/{StaticDataLayerProvider-CtgU3VBh.js.map → StaticDataLayerProvider-DbGLKpb1.js.map} +1 -1
  38. package/dist/assets/{Study-DDsGQCTJ.js → Study-D2mXR27s.js} +2 -2
  39. package/dist/assets/{Study-DDsGQCTJ.js.map → Study-D2mXR27s.js.map} +1 -1
  40. package/dist/assets/{TagInformation-DBLoXA2a.js → TagInformation-DHw5jRNt.js} +2 -2
  41. package/dist/assets/{TagInformation-DBLoXA2a.js.map → TagInformation-DHw5jRNt.js.map} +1 -1
  42. package/dist/assets/{User-DfXUXjFb.js → User-C0xEcKaU.js} +2 -2
  43. package/dist/assets/{User-DfXUXjFb.js.map → User-C0xEcKaU.js.map} +1 -1
  44. package/dist/assets/{UserDBDebugger-DPqlc4O_.js → UserDBDebugger-BXLoT28w.js} +2 -2
  45. package/dist/assets/{UserDBDebugger-DPqlc4O_.js.map → UserDBDebugger-BXLoT28w.js.map} +1 -1
  46. package/dist/assets/UserDBDebugger-DHONc_-t.js +1 -0
  47. package/dist/assets/{UserStats-C04YVYv7.js → UserStats-Blm_daoT.js} +2 -2
  48. package/dist/assets/{UserStats-C04YVYv7.js.map → UserStats-Blm_daoT.js.map} +1 -1
  49. package/dist/assets/{VerifyEmail-Y05BSR57.js → VerifyEmail-DTwA6sFY.js} +2 -2
  50. package/dist/assets/{VerifyEmail-Y05BSR57.js.map → VerifyEmail-DTwA6sFY.js.map} +1 -1
  51. package/dist/assets/{admin-DcFjvYJw.js → admin-hzNSXp0o.js} +2 -2
  52. package/dist/assets/{admin-DcFjvYJw.js.map → admin-hzNSXp0o.js.map} +1 -1
  53. package/dist/assets/{chess-E2uOAyQS-BZi0vihz.js → chess-E2uOAyQS-DDTgqZMJ.js} +2 -2
  54. package/dist/assets/{chess-E2uOAyQS-BZi0vihz.js.map → chess-E2uOAyQS-DDTgqZMJ.js.map} +1 -1
  55. package/dist/assets/chess-Lfm7Fsvs-RaFhFnIh.js +1 -0
  56. package/dist/assets/{contentSource-DwznMSMs.js → contentSource-FGhM_ge8.js} +8 -8
  57. package/dist/assets/contentSource-FGhM_ge8.js.map +1 -0
  58. package/dist/assets/dist-5Z6GjIpR.js +1 -0
  59. package/dist/assets/{dist-CAHkbl3M.js → dist-BJLhyG8r.js} +3 -3
  60. package/dist/assets/{dist-CAHkbl3M.js.map → dist-BJLhyG8r.js.map} +1 -1
  61. package/dist/assets/dist-C5-_1l75.js +1 -0
  62. package/dist/assets/{dist-BsRvt0gH.js → dist-C8EQUxWW.js} +3 -3
  63. package/dist/assets/{dist-BsRvt0gH.js.map → dist-C8EQUxWW.js.map} +1 -1
  64. package/dist/assets/{dist-Dp6eBE2S.js → dist-DGbpjpKB.js} +2 -2
  65. package/dist/assets/{dist-Dp6eBE2S.js.map → dist-DGbpjpKB.js.map} +1 -1
  66. package/dist/assets/dist-M4o-5YLq.js +1 -0
  67. package/dist/assets/edit-ui.es-BT7ftsox.js +1 -0
  68. package/dist/assets/{edit-ui.es-UaQFL_My.js → edit-ui.es-DJgikaS7.js} +2 -2
  69. package/dist/assets/{edit-ui.es-UaQFL_My.js.map → edit-ui.es-DJgikaS7.js.map} +1 -1
  70. package/dist/assets/elo-5Z2qkwtw.js +1 -0
  71. package/dist/assets/{elo-COgu6Hu5.js → elo-C4ZdbMIJ.js} +2 -2
  72. package/dist/assets/{elo-COgu6Hu5.js.map → elo-C4ZdbMIJ.js.map} +1 -1
  73. package/dist/assets/{eloDistance-BV7vfiK5.js → eloDistance-CRxxdYPJ.js} +2 -2
  74. package/dist/assets/{eloDistance-BV7vfiK5.js.map → eloDistance-CRxxdYPJ.js.map} +1 -1
  75. package/dist/assets/eloDistance-DF4pmPOI.js +1 -0
  76. package/dist/assets/{french-Dk7YG8Td-CD7Hms2j.js → french-Dk7YG8Td-C2awfrzV.js} +2 -2
  77. package/dist/assets/{french-Dk7YG8Td-CD7Hms2j.js.map → french-Dk7YG8Td-C2awfrzV.js.map} +1 -1
  78. package/dist/assets/french-evUMlbbq-4izQyIk4.js +1 -0
  79. package/dist/assets/{hierarchyDefinition-DLC5DjaA.js → hierarchyDefinition-BbqnGEfR.js} +2 -2
  80. package/dist/assets/{hierarchyDefinition-DLC5DjaA.js.map → hierarchyDefinition-BbqnGEfR.js.map} +1 -1
  81. package/dist/assets/{index-CK-rfSIx.js → index-BRaeVAZb.js} +4 -4
  82. package/dist/assets/{index-CK-rfSIx.js.map → index-BRaeVAZb.js.map} +1 -1
  83. package/dist/assets/{interferenceMitigator-D78KgOxz.js → interferenceMitigator-BtAQm-0d.js} +2 -2
  84. package/dist/assets/{interferenceMitigator-D78KgOxz.js.map → interferenceMitigator-BtAQm-0d.js.map} +1 -1
  85. package/dist/assets/math-DR3fXDcX-Bj6dcLDF.js +1 -0
  86. package/dist/assets/{math-D_8HiEQR-E4QDLrWp.js → math-D_8HiEQR-CQynsoTm.js} +2 -2
  87. package/dist/assets/{math-D_8HiEQR-E4QDLrWp.js.map → math-D_8HiEQR-CQynsoTm.js.map} +1 -1
  88. package/dist/assets/piano-BN5Btq91-onBUnVgA.js +1 -0
  89. package/dist/assets/{piano-DF1g6yaX-Ck3BH5EK.js → piano-DF1g6yaX-vXbP1jX_.js} +2 -2
  90. package/dist/assets/{piano-DF1g6yaX-Ck3BH5EK.js.map → piano-DF1g6yaX-vXbP1jX_.js.map} +1 -1
  91. package/dist/assets/{pitch-CgGJFkZ1-Dd0LzmEe.js → pitch-CgGJFkZ1-DVzOpIVa.js} +2 -2
  92. package/dist/assets/{pitch-CgGJFkZ1-Dd0LzmEe.js.map → pitch-CgGJFkZ1-DVzOpIVa.js.map} +1 -1
  93. package/dist/assets/pitch-Dn0iNqiS-L2k4d66s.js +1 -0
  94. package/dist/assets/prescribed-Cjutx2ct.js +2 -0
  95. package/dist/assets/prescribed-Cjutx2ct.js.map +1 -0
  96. package/dist/assets/{relativePriority-DwPMECAp.js → relativePriority-fx6BMJm9.js} +2 -2
  97. package/dist/assets/{relativePriority-DwPMECAp.js.map → relativePriority-fx6BMJm9.js.map} +1 -1
  98. package/dist/assets/{server-CqR7xtQy.js → server-CUqWbXPL.js} +2 -2
  99. package/dist/assets/{server-CqR7xtQy.js.map → server-CUqWbXPL.js.map} +1 -1
  100. package/dist/assets/{sightsing-BFQ7HRig-DV69ELZf.js → sightsing-BFQ7HRig-CYuNcd8z.js} +2 -2
  101. package/dist/assets/{sightsing-BFQ7HRig-DV69ELZf.js.map → sightsing-BFQ7HRig-CYuNcd8z.js.map} +1 -1
  102. package/dist/assets/sightsing-CJX3k0Fd-C4-zGBSZ.js +1 -0
  103. package/dist/assets/{srs-DOsG9Y-i.js → srs-B3R2C3TU.js} +2 -2
  104. package/dist/assets/{srs-DOsG9Y-i.js.map → srs-B3R2C3TU.js.map} +1 -1
  105. package/dist/assets/srs-BD4FD2rw.js +1 -0
  106. package/dist/assets/{typing-BevtfWlp-CvStu5BY.js → typing-BevtfWlp-C0NbuTKI.js} +2 -2
  107. package/dist/assets/{typing-BevtfWlp-CvStu5BY.js.map → typing-BevtfWlp-C0NbuTKI.js.map} +1 -1
  108. package/dist/assets/typing-k-ojjO7G-gZjZ4YQx.js +1 -0
  109. package/dist/assets/{userDBKeys-DYLGKnVC.js → userDBKeys-3SQjNVdK.js} +4 -4
  110. package/dist/assets/{userDBKeys-DYLGKnVC.js.map → userDBKeys-3SQjNVdK.js.map} +1 -1
  111. package/dist/assets/{userTagPreference-cZCPqadC.js → userTagPreference-B23ZX5J4.js} +2 -2
  112. package/dist/assets/{userTagPreference-cZCPqadC.js.map → userTagPreference-B23ZX5J4.js.map} +1 -1
  113. package/dist/assets/validators-CnxSFY0I.js +2 -0
  114. package/dist/assets/{validators-lpYAHmRR.js.map → validators-CnxSFY0I.js.map} +1 -1
  115. package/dist/assets/{word-work-BOnRlZgd-CCGZdwyf.js → word-work-BOnRlZgd-CsMkeNdI.js} +2 -2
  116. package/dist/assets/{word-work-BOnRlZgd-CCGZdwyf.js.map → word-work-BOnRlZgd-CsMkeNdI.js.map} +1 -1
  117. package/dist/assets/word-work-Dd6tIKrt-WI45cKxO.js +1 -0
  118. package/dist/index.html +9 -9
  119. package/dist/sw.js +1 -1
  120. package/dist/sw.js.map +1 -1
  121. package/package.json +7 -7
  122. package/dist/assets/BaseUserDB-CV2ZPZOR.js +0 -1
  123. package/dist/assets/CouchDBSyncStrategy-BjM7ROXC.js +0 -1
  124. package/dist/assets/CourseSyncService-CPU_Ll1h.js +0 -1
  125. package/dist/assets/PouchDataLayerProvider-DxsnSIKd.js +0 -2
  126. package/dist/assets/PouchDataLayerProvider-DxsnSIKd.js.map +0 -1
  127. package/dist/assets/UserDBDebugger-xmycWjck.js +0 -1
  128. package/dist/assets/chess-Lfm7Fsvs-DgN08Qx9.js +0 -1
  129. package/dist/assets/contentSource-DwznMSMs.js.map +0 -1
  130. package/dist/assets/dist-BcwaOf54.js +0 -1
  131. package/dist/assets/dist-CgW7D_Gh.js +0 -1
  132. package/dist/assets/dist-Dnehy0sn.js +0 -1
  133. package/dist/assets/edit-ui.es-BWqvElsJ.js +0 -1
  134. package/dist/assets/elo-Cwa8a3Yo.js +0 -1
  135. package/dist/assets/eloDistance-MReQeAuj.js +0 -1
  136. package/dist/assets/french-evUMlbbq-nGCjilG6.js +0 -1
  137. package/dist/assets/math-DR3fXDcX-C9KfHLHP.js +0 -1
  138. package/dist/assets/piano-BN5Btq91-CnKhyLGE.js +0 -1
  139. package/dist/assets/pitch-Dn0iNqiS-BxAdpDDb.js +0 -1
  140. package/dist/assets/prescribed-BWO17Gan.js +0 -2
  141. package/dist/assets/prescribed-BWO17Gan.js.map +0 -1
  142. package/dist/assets/sightsing-CJX3k0Fd-CG94OiDr.js +0 -1
  143. package/dist/assets/srs-DGscV6W4.js +0 -1
  144. package/dist/assets/typing-k-ojjO7G-AF8vU_q7.js +0 -1
  145. package/dist/assets/validators-lpYAHmRR.js +0 -2
  146. package/dist/assets/word-work-Dd6tIKrt-BNTSCq5F.js +0 -1
@@ -0,0 +1 @@
1
+ import"./moment-DbT30ZpG.js";import{z as e}from"./contentSource-FGhM_ge8.js";import"./dist-DGbpjpKB.js";import"./PipelineDebugger-DhnKlMgD.js";import"./userDBKeys-3SQjNVdK.js";import"./srs-B3R2C3TU.js";import"./eloDistance-CRxxdYPJ.js";import"./UserDBDebugger-BXLoT28w.js";export{e as CourseLookup};
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chess-Lfm7Fsvs-DgN08Qx9.js","assets/PipelineDebugger-BHaqzqZw.js","assets/defineProperty-y9rbOPYz.js","assets/chunk-D6hFPZc3.js","assets/MarkdownRenderer-borh39Lq.js","assets/vue.runtime.esm-bundler--Fxmd6l9.js","assets/moment-DbT30ZpG.js","assets/logshim-YQI0WloD.js","assets/contentSource-DwznMSMs.js","assets/elo-B5qCwvSC.js","assets/tagRoles-jR-PJAgj.js","assets/eloDistance-BV7vfiK5.js","assets/elo-COgu6Hu5.js","assets/srs-DOsG9Y-i.js","assets/userDBKeys-DYLGKnVC.js","assets/dist-BsRvt0gH.js","assets/vue-router-HoUBO3s7.js","assets/dist-Dp6eBE2S.js","assets/dist-BY2Ut5jf.css","assets/CourseWare-BTFRjgBR-DBp_fIwH.js","assets/CourseWare-BTFRjgBR-D750E7i0.css","assets/chess-E2uOAyQS-BZi0vihz.js","assets/chess-E2uOAyQS-DB7z_kWx.css","assets/french-evUMlbbq-nGCjilG6.js","assets/french-Dk7YG8Td-CD7Hms2j.js","assets/validators-lpYAHmRR.js","assets/math-DR3fXDcX-C9KfHLHP.js","assets/math-D_8HiEQR-E4QDLrWp.js","assets/math-D_8HiEQR-CZyvKZtp.css","assets/piano-BN5Btq91-CnKhyLGE.js","assets/piano-DF1g6yaX-Ck3BH5EK.js","assets/piano-DF1g6yaX-BLvDAgl1.css","assets/pitch-Dn0iNqiS-BxAdpDDb.js","assets/pitch-CgGJFkZ1-Dd0LzmEe.js","assets/sightsing-CJX3k0Fd-CG94OiDr.js","assets/sightsing-BFQ7HRig-DV69ELZf.js","assets/sightsing-BFQ7HRig-DkUGf5Yf.css","assets/typing-k-ojjO7G-AF8vU_q7.js","assets/typing-BevtfWlp-CvStu5BY.js","assets/typing-BevtfWlp-B7ZMUAQJ.css","assets/word-work-Dd6tIKrt-BNTSCq5F.js","assets/word-work-BOnRlZgd-CCGZdwyf.js"])))=>i.map(i=>d[i]);
2
- import"./chunk-D6hFPZc3.js";import{$ as e,C as t,H as n,Ht as r,K as i,S as a,T as o,W as s,Z as c,_ as l,b as u,f as d,g as f,ot as p,ut as m,v as h,y as g,z as _}from"./vue.runtime.esm-bundler--Fxmd6l9.js";import{z as v}from"./dist-BsRvt0gH.js";import{K as y,W as b}from"./contentSource-DwznMSMs.js";import{t as x}from"./defineProperty-y9rbOPYz.js";import{n as S,r as C,t as w,u as T}from"./CourseWare-BTFRjgBR-DBp_fIwH.js";import{j as E}from"./PipelineDebugger-BHaqzqZw.js";import{d as D}from"./userDBKeys-DYLGKnVC.js";import{r as O}from"./piano-DF1g6yaX-Ck3BH5EK.js";var k=new S(`default`,[C]),A=o({name:`PianoRangeVisualizer`,props:{lowestNote:{type:Number,required:!0},highestNote:{type:Number,required:!0},maxWidth:{type:Number,default:1e3}},setup(e){let t=m(null),n=m(800),r=f(()=>{let e=0;for(let t=21;t<=108;t++)isWhiteKey(t)&&e++;return e}),i=f(()=>Math.min(22,n.value/Math.max(25,r.value))),a=f(()=>i.value*.6),o=f(()=>Math.min(e.maxWidth,i.value*r.value+10)),isWhiteKey=e=>{let t=e%12;return[0,2,4,5,7,9,11].includes(t)},getKeyPosition=e=>{let t=0;for(let n=21;n<e;n++)isWhiteKey(n)&&t++;return isWhiteKey(e)?t*i.value:t*i.value-a.value/2},getNoteLabel=e=>{let t=[`C`,`C#`,`D`,`D#`,`E`,`F`,`F#`,`G`,`G#`,`A`,`A#`,`B`],n=e%12,r=Math.floor(e/12)-1;return`${t[n]}${r}`};return _(()=>{t.value&&(n.value=t.value.clientWidth,new ResizeObserver(e=>{for(let t of e)n.value=t.contentRect.width}).observe(t.value))}),{pianoWrapper:t,keyHeight:100,blackKeyHeight:60,whiteKeyWidth:i,blackKeyWidth:a,svgWidth:o,isWhiteKey,getKeyPosition,getNoteLabel}}}),j={class:`piano-range-container`},M={class:`piano-wrapper`,ref:`pianoWrapper`},N=[`width`,`height`],P={class:`background-keys`,opacity:`0.15`},F=[`x`,`width`,`height`],I=[`x`,`width`,`height`],L={class:`selected-range`},R=[`x`,`width`,`height`],z=[`x`,`width`,`height`],B={class:`range-markers`},V=[`x`,`height`],H=[`x`,`height`],U=[`x`,`y`],W=[`x`,`y`];function _sfc_render$1(e,t,i,a,o,c){return n(),u(`div`,j,[l(`div`,M,[(n(),u(`svg`,{width:e.svgWidth,height:e.keyHeight+20,class:`piano-svg`},[l(`g`,P,[(n(),u(d,null,s(88,t=>(n(),u(d,{key:`bg-${t}`},[e.isWhiteKey(t+20)?(n(),u(`rect`,{key:0,x:e.getKeyPosition(t+20),y:`0`,width:e.whiteKeyWidth,height:e.keyHeight,class:`white-key`,stroke:`#999`,"stroke-width":`1`},null,8,F)):g(``,!0)],64))),64)),(n(),u(d,null,s(88,t=>(n(),u(d,{key:`bg-black-${t}`},[e.isWhiteKey(t+20)?g(``,!0):(n(),u(`rect`,{key:0,x:e.getKeyPosition(t+20),y:`0`,width:e.blackKeyWidth,height:e.blackKeyHeight,class:`black-key`},null,8,I))],64))),64))]),l(`g`,L,[(n(),u(d,null,s(128,t=>(n(),u(d,{key:`white-${t}`},[e.isWhiteKey(t)&&t>=e.lowestNote&&t<=e.highestNote?(n(),u(`rect`,{key:0,x:e.getKeyPosition(t),y:`0`,width:e.whiteKeyWidth,height:e.keyHeight,class:`white-key active`,stroke:`#666`,"stroke-width":`1`},null,8,R)):g(``,!0)],64))),64)),(n(),u(d,null,s(128,t=>(n(),u(d,{key:`black-${t}`},[!e.isWhiteKey(t)&&t>=e.lowestNote&&t<=e.highestNote?(n(),u(`rect`,{key:0,x:e.getKeyPosition(t),y:`0`,width:e.blackKeyWidth,height:e.blackKeyHeight,class:`black-key active`},null,8,z)):g(``,!0)],64))),64))]),l(`g`,B,[l(`rect`,{x:e.getKeyPosition(e.lowestNote)-2,y:`0`,width:4,height:e.keyHeight+5,class:`range-marker start`},null,8,V),l(`rect`,{x:e.getKeyPosition(e.highestNote)+e.whiteKeyWidth-2,y:`0`,width:4,height:e.keyHeight+5,class:`range-marker end`},null,8,H)]),l(`text`,{x:e.getKeyPosition(e.lowestNote)+3,y:e.keyHeight+12,class:`note-label`},r(e.getNoteLabel(e.lowestNote)),9,U),l(`text`,{x:e.getKeyPosition(e.highestNote)+e.whiteKeyWidth-3,y:e.keyHeight+12,"text-anchor":`end`,class:`note-label`},r(e.getNoteLabel(e.highestNote)),9,W)],8,N))],512)])}T(_sfc_render$1,`_sfc_render`);var G=o({name:`MidiConfig`,components:{PianoRangeVisualizer:w(A,[[`render`,_sfc_render$1],[`__scopeId`,`data-v-4b232a8b`]])},props:{_id:{type:String,required:!0},user:{type:Object,required:!0}},setup(e){let t=m(),n=m(!0),r=m([]),i=m([]),a=m(``),o=m(``),s=m(!1),l=m(``),u=m(``),d=m(!1),f=m(`full-88`),p=m(21),h=m(108),g=m(``),b=m(0),x=m(0),S=m([]),initNoteOptions=()=>{let e=[`C`,`C#`,`D`,`D#`,`E`,`F`,`F#`,`G`,`G#`,`A`,`A#`,`B`],t=[];for(let n=0;n<=127;n++){let r=Math.floor(n/12)-1,i=e[n%12];t.push({title:`${i}${r} (${n})`,value:n})}S.value=t},C=m([{title:`Full 88-key Piano (A0-C8)`,value:`full-88`},{title:`76-key Keyboard (E1-G7)`,value:`76-key`},{title:`61-key Keyboard (C2-C7)`,value:`61-key`},{title:`49-key Keyboard (C3-C7)`,value:`49-key`},{title:`37-key Keyboard (C3-C6)`,value:`37-key`},{title:`25-key Keyboard (C4-C6)`,value:`25-key`},{title:`Custom Range`,value:`custom`}]),checkConfigChanged=()=>{d.value=a.value!==l.value||o.value!==u.value||f.value!==g.value||f.value===`custom`&&(p.value!==b.value||h.value!==x.value)},updateCustomRangeFromPreset=()=>{switch(f.value){case`full-88`:p.value=21,h.value=108;break;case`76-key`:p.value=28,h.value=103;break;case`61-key`:p.value=36,h.value=96;break;case`49-key`:p.value=48,h.value=96;break;case`37-key`:p.value=48,h.value=84;break;case`25-key`:p.value=60,h.value=84;break}checkConfigChanged()},updateRangeAndCheckChanges=()=>{p.value>=h.value&&(h.value=p.value+12),checkConfigChanged()},playSound=()=>{t.value?.play([{note:{number:64,name:`E`,octave:4},type:`noteon`,velocity:.4251968503937008,timestamp:0},{note:{number:64,name:`E`,octave:4},velocity:.3779527559055118,type:`noteoff`,timestamp:511.90500000002794},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5275590551181102,timestamp:535.8800000001211},{note:{number:60,name:`C`,octave:4},velocity:.33858267716535434,type:`noteoff`,timestamp:674.9899999999907},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5590551181102362,timestamp:1070.8800000000047},{note:{number:60,name:`C`,octave:4},velocity:.3464566929133858,type:`noteoff`,timestamp:1214.8999999999069},{note:{number:64,name:`E`,octave:4},type:`noteon`,velocity:.5118110236220472,timestamp:1424.9400000000605},{note:{number:64,name:`E`,octave:4},velocity:.2755905511811024,type:`noteoff`,timestamp:1576.9150000000373},{note:{number:62,name:`D`,octave:4},type:`noteon`,velocity:.3937007874015748,timestamp:1756.9149999999208},{note:{number:62,name:`D`,octave:4},velocity:.36220472440944884,type:`noteoff`,timestamp:1926.9899999998743},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5196850393700787,timestamp:1970.9600000000792},{note:{number:60,name:`C`,octave:4},velocity:.36220472440944884,type:`noteoff`,timestamp:2126.009999999893},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5984251968503937,timestamp:2502.0050000000047},{note:{number:60,name:`C`,octave:4},velocity:.3858267716535433,type:`noteoff`,timestamp:2853.920000000042},{note:{number:67,name:`G`,octave:4},type:`noteon`,velocity:.6850393700787402,timestamp:2875.8649999999907},{note:{number:67,name:`G`,octave:4},velocity:.6377952755905512,type:`noteoff`,timestamp:4497.004999999888}])},indicateHeardNotes=e=>{v({text:`I hear a ${e.note.name}!`,status:y.ok})};c(a,()=>{t.value?.selectInput(a.value),checkConfigChanged()}),c(o,()=>{t.value?.selectOutput(o.value),checkConfigChanged()});let retrieveSettings=async()=>{let t=await(await e.user.getCourseInterface(e._id)).getCourseSettings();if(t?.midiinput){let e=t.midiinput.toString();r.value.some(t=>t.value===e)&&(a.value=e,l.value=e)}if(t?.midioutput){let e=t.midioutput.toString();i.value.some(t=>t.value===e)&&(o.value=e,u.value=e)}t?.keyboardRange&&(g.value=t.keyboardRange.toString(),f.value=g.value),t?.lowestNote&&(b.value=parseInt(t.lowestNote.toString()),p.value=b.value),t?.highestNote&&(x.value=parseInt(t.highestNote.toString()),h.value=x.value),t?.lowestNote&&t?.highestNote&&!t?.keyboardRange&&(f.value=`custom`),d.value=!1},saveSettings=async()=>{s.value=!0,(await D().getUserDB().getCourseInterface(e._id)).updateCourseSettings([{key:`midiinput`,value:a.value},{key:`midioutput`,value:o.value},{key:`keyboardRange`,value:f.value},{key:`lowestNote`,value:p.value},{key:`highestNote`,value:h.value}]),l.value=a.value,u.value=o.value,g.value=f.value,b.value=p.value,x.value=h.value,d.value=!1,s.value=!1,v({text:`Settings updated.`,status:y.ok})};return _(async()=>{initNoteOptions();try{t.value=await O.instance(),n.value=t.value.state===`ready`||t.value.state===`nodevice`}catch(e){console.log(`Error on midi Init: ${e}`),n.value=!1}n.value&&(t.value?.addNoteonListenter(indicateHeardNotes),t.value?(r.value=t.value.inputs.filter(e=>e.state===`connected`).map(e=>({title:`${e.manufacturer}: ${e.name}`,value:e.id})),i.value=t.value?.outputs.filter(e=>e.state===`connected`).map(e=>({title:`${e.manufacturer}: ${e.name}`,value:e.id}))):(r.value=[{title:`No inputs available`,value:``}],i.value=[{title:`No outputs available`,value:``}]),await retrieveSettings(),!a.value&&r.value.length>0&&(a.value=r.value[0].value),!o.value&&i.value.length>0&&(o.value=i.value[0].value))}),{midiSupported:n,inputs:r,outputs:i,selectedInput:a,selectedOutput:o,updatePending:s,playSound,saveSettings,configChanged:d,lowestNote:p,highestNote:h,keyboardRangeOptions:C,selectedKeyboardRange:f,noteOptions:S,updateCustomRangeFromPreset,updateRangeAndCheckChanges}}}),K={key:0,class:`custom-range-inputs d-flex gap-4`},q={class:`d-flex justify-space-between mt-3`},J={key:1};function _sfc_render(r,o,s,c,d,f){let p=i(`v-toolbar-title`),m=i(`v-toolbar`),_=i(`v-select`),v=i(`v-divider`),y=i(`piano-range-visualizer`),b=i(`v-btn`),x=i(`v-form`),S=i(`v-card-text`),C=i(`v-card`);return n(),h(C,null,{default:e(()=>[t(m,{dense:``},{default:e(()=>[t(p,null,{default:e(()=>o[5]||(o[5]=[a(`Configure Midi Device`)])),_:1})]),_:1}),t(S,null,{default:e(()=>[r.midiSupported?(n(),h(x,{key:0,onsubmit:`return false;`},{default:e(()=>[t(_,{modelValue:r.selectedInput,"onUpdate:modelValue":o[0]||(o[0]=e=>r.selectedInput=e),items:r.inputs,label:`Select Input`,hint:`Play some notes on your input device to test the connection`},null,8,[`modelValue`,`items`]),t(_,{modelValue:r.selectedOutput,"onUpdate:modelValue":o[1]||(o[1]=e=>r.selectedOutput=e),items:r.outputs,label:`Select Output`},null,8,[`modelValue`,`items`]),t(v,{class:`my-4`}),o[8]||(o[8]=l(`h3`,{class:`text-subtitle-1 mb-2`},`Keyboard Range`,-1)),t(_,{modelValue:r.selectedKeyboardRange,"onUpdate:modelValue":[o[2]||(o[2]=e=>r.selectedKeyboardRange=e),r.updateCustomRangeFromPreset],items:r.keyboardRangeOptions,label:`Select Keyboard Range`},null,8,[`modelValue`,`items`,`onUpdate:modelValue`]),r.selectedKeyboardRange===`custom`?(n(),u(`div`,K,[t(_,{modelValue:r.lowestNote,"onUpdate:modelValue":[o[3]||(o[3]=e=>r.lowestNote=e),r.updateRangeAndCheckChanges],items:r.noteOptions,label:`Lowest Note`},null,8,[`modelValue`,`items`,`onUpdate:modelValue`]),t(_,{modelValue:r.highestNote,"onUpdate:modelValue":[o[4]||(o[4]=e=>r.highestNote=e),r.updateRangeAndCheckChanges],items:r.noteOptions,label:`Highest Note`},null,8,[`modelValue`,`items`,`onUpdate:modelValue`])])):g(``,!0),t(y,{"lowest-note":r.lowestNote,"highest-note":r.highestNote},null,8,[`lowest-note`,`highest-note`]),l(`div`,q,[t(b,{color:`primary`,onClick:r.playSound},{default:e(()=>o[6]||(o[6]=[a(`Test midi output`)])),_:1},8,[`onClick`]),t(b,{loading:r.updatePending,disabled:!r.configChanged&&!r.updatePending,color:`info`,class:`save-button`,onClick:r.saveSettings},{default:e(()=>o[7]||(o[7]=[a(` Save these settings `)])),_:1},8,[`loading`,`disabled`,`onClick`])])]),_:1})):(n(),u(`div`,J,o[9]||(o[9]=[l(`p`,null,`This quilt requires a midi input device, which is not supported by this browser.`,-1),l(`div`,null,[l(`p`,null,`Try one of the following browsers:`),l(`ul`,null,[l(`li`,null,[l(`a`,{href:`https://www.google.com/chrome/`},`Google Chrome`)]),l(`li`,null,[l(`a`,{href:`https://www.microsoft.com/edge`},`Microsoft Edge`)]),l(`li`,null,[l(`a`,{href:`https://brave.com/`},`Brave`)])])],-1)])))]),_:1})]),_:1})}var Y=w(G,[[`render`,_sfc_render],[`__scopeId`,`data-v-6ee9020f`]]);async function loadSubcourse(e){let t;switch(e){case`chess`:t=await E(()=>import(`./chess-Lfm7Fsvs-DgN08Qx9.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]));break;case`french`:t=await E(()=>import(`./french-evUMlbbq-nGCjilG6.js`),__vite__mapDeps([23,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,24,25]));break;case`math`:t=await E(()=>import(`./math-DR3fXDcX-C9KfHLHP.js`),__vite__mapDeps([26,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,27,28]));break;case`piano`:t=await E(()=>import(`./piano-BN5Btq91-CnKhyLGE.js`),__vite__mapDeps([29,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,31]));break;case`pitch`:t=await E(()=>import(`./pitch-Dn0iNqiS-BxAdpDDb.js`),__vite__mapDeps([32,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,33]));break;case`sightSing`:t=await E(()=>import(`./sightsing-CJX3k0Fd-CG94OiDr.js`),__vite__mapDeps([34,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,35,36]));break;case`typing`:t=await E(()=>import(`./typing-k-ojjO7G-AF8vU_q7.js`),__vite__mapDeps([37,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,38,39]));break;case`wordWork`:t=await E(()=>import(`./word-work-Dd6tIKrt-BNTSCq5F.js`),__vite__mapDeps([40,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,41,25]));break}let n=t.default;return X.courses.find(e=>e.name===n.name)||X.courses.push(n),n}async function loadAllSubcourses(){await Promise.all([`chess`,`french`,`math`,`piano`,`pitch`,`sightSing`,`typing`,`wordWork`].map(e=>loadSubcourse(e)))}var AllCourseWare=class{get courses(){return this.courseWareList}constructor(e){x(this,`courseWareList`,void 0),x(this,`cachedRawViews`,null),this.courseWareList=e}getCourseWare(e){return this.courseWareList.find(t=>t.name===e)}allViewsRaw(){if(!this.cachedRawViews){let e=this.allViews();this.cachedRawViews=Object.fromEntries(Object.entries(e).map(([e,t])=>[e,p(t)]))}return this.cachedRawViews}allViews(){let e={};return this.courseWareList.forEach(t=>{Object.assign(e,t.allViewsMap)}),e}getView(e){let t;t=typeof e==`string`?b.getViewDescriptor(e):e;let n=this.getCourseWare(t.course);if(n){let e=n.getQuestion(t.questionType);if(e){let r=e.views.find(e=>e.name===t.view);if(r)return r;throw console.error(`QuestionView ${t.view} not found in course ${t.course}
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chess-Lfm7Fsvs-RaFhFnIh.js","assets/PipelineDebugger-DhnKlMgD.js","assets/defineProperty-y9rbOPYz.js","assets/chunk-D6hFPZc3.js","assets/MarkdownRenderer-borh39Lq.js","assets/vue.runtime.esm-bundler--Fxmd6l9.js","assets/moment-DbT30ZpG.js","assets/logshim-YQI0WloD.js","assets/contentSource-FGhM_ge8.js","assets/elo-B5qCwvSC.js","assets/tagRoles-jR-PJAgj.js","assets/eloDistance-CRxxdYPJ.js","assets/elo-C4ZdbMIJ.js","assets/srs-B3R2C3TU.js","assets/userDBKeys-3SQjNVdK.js","assets/dist-C8EQUxWW.js","assets/vue-router-HoUBO3s7.js","assets/dist-DGbpjpKB.js","assets/dist-BY2Ut5jf.css","assets/CourseWare-BTFRjgBR-lpqcYpAW.js","assets/CourseWare-BTFRjgBR-D750E7i0.css","assets/chess-E2uOAyQS-DDTgqZMJ.js","assets/chess-E2uOAyQS-DB7z_kWx.css","assets/french-evUMlbbq-4izQyIk4.js","assets/french-Dk7YG8Td-C2awfrzV.js","assets/validators-CnxSFY0I.js","assets/math-DR3fXDcX-Bj6dcLDF.js","assets/math-D_8HiEQR-CQynsoTm.js","assets/math-D_8HiEQR-CZyvKZtp.css","assets/piano-BN5Btq91-onBUnVgA.js","assets/piano-DF1g6yaX-vXbP1jX_.js","assets/piano-DF1g6yaX-BLvDAgl1.css","assets/pitch-Dn0iNqiS-L2k4d66s.js","assets/pitch-CgGJFkZ1-DVzOpIVa.js","assets/sightsing-CJX3k0Fd-C4-zGBSZ.js","assets/sightsing-BFQ7HRig-CYuNcd8z.js","assets/sightsing-BFQ7HRig-DkUGf5Yf.css","assets/typing-k-ojjO7G-gZjZ4YQx.js","assets/typing-BevtfWlp-C0NbuTKI.js","assets/typing-BevtfWlp-B7ZMUAQJ.css","assets/word-work-Dd6tIKrt-WI45cKxO.js","assets/word-work-BOnRlZgd-CsMkeNdI.js"])))=>i.map(i=>d[i]);
2
+ import"./chunk-D6hFPZc3.js";import{$ as e,C as t,H as n,Ht as r,K as i,S as a,T as o,W as s,Z as c,_ as l,b as u,f as d,g as f,ot as p,ut as m,v as h,y as g,z as _}from"./vue.runtime.esm-bundler--Fxmd6l9.js";import{z as v}from"./dist-C8EQUxWW.js";import{K as y,W as b}from"./contentSource-FGhM_ge8.js";import{t as x}from"./defineProperty-y9rbOPYz.js";import{n as S,r as C,t as w,u as T}from"./CourseWare-BTFRjgBR-lpqcYpAW.js";import{j as E}from"./PipelineDebugger-DhnKlMgD.js";import{d as D}from"./userDBKeys-3SQjNVdK.js";import{r as O}from"./piano-DF1g6yaX-vXbP1jX_.js";var k=new S(`default`,[C]),A=o({name:`PianoRangeVisualizer`,props:{lowestNote:{type:Number,required:!0},highestNote:{type:Number,required:!0},maxWidth:{type:Number,default:1e3}},setup(e){let t=m(null),n=m(800),r=f(()=>{let e=0;for(let t=21;t<=108;t++)isWhiteKey(t)&&e++;return e}),i=f(()=>Math.min(22,n.value/Math.max(25,r.value))),a=f(()=>i.value*.6),o=f(()=>Math.min(e.maxWidth,i.value*r.value+10)),isWhiteKey=e=>{let t=e%12;return[0,2,4,5,7,9,11].includes(t)},getKeyPosition=e=>{let t=0;for(let n=21;n<e;n++)isWhiteKey(n)&&t++;return isWhiteKey(e)?t*i.value:t*i.value-a.value/2},getNoteLabel=e=>{let t=[`C`,`C#`,`D`,`D#`,`E`,`F`,`F#`,`G`,`G#`,`A`,`A#`,`B`],n=e%12,r=Math.floor(e/12)-1;return`${t[n]}${r}`};return _(()=>{t.value&&(n.value=t.value.clientWidth,new ResizeObserver(e=>{for(let t of e)n.value=t.contentRect.width}).observe(t.value))}),{pianoWrapper:t,keyHeight:100,blackKeyHeight:60,whiteKeyWidth:i,blackKeyWidth:a,svgWidth:o,isWhiteKey,getKeyPosition,getNoteLabel}}}),j={class:`piano-range-container`},M={class:`piano-wrapper`,ref:`pianoWrapper`},N=[`width`,`height`],P={class:`background-keys`,opacity:`0.15`},F=[`x`,`width`,`height`],I=[`x`,`width`,`height`],L={class:`selected-range`},R=[`x`,`width`,`height`],z=[`x`,`width`,`height`],B={class:`range-markers`},V=[`x`,`height`],H=[`x`,`height`],U=[`x`,`y`],W=[`x`,`y`];function _sfc_render$1(e,t,i,a,o,c){return n(),u(`div`,j,[l(`div`,M,[(n(),u(`svg`,{width:e.svgWidth,height:e.keyHeight+20,class:`piano-svg`},[l(`g`,P,[(n(),u(d,null,s(88,t=>(n(),u(d,{key:`bg-${t}`},[e.isWhiteKey(t+20)?(n(),u(`rect`,{key:0,x:e.getKeyPosition(t+20),y:`0`,width:e.whiteKeyWidth,height:e.keyHeight,class:`white-key`,stroke:`#999`,"stroke-width":`1`},null,8,F)):g(``,!0)],64))),64)),(n(),u(d,null,s(88,t=>(n(),u(d,{key:`bg-black-${t}`},[e.isWhiteKey(t+20)?g(``,!0):(n(),u(`rect`,{key:0,x:e.getKeyPosition(t+20),y:`0`,width:e.blackKeyWidth,height:e.blackKeyHeight,class:`black-key`},null,8,I))],64))),64))]),l(`g`,L,[(n(),u(d,null,s(128,t=>(n(),u(d,{key:`white-${t}`},[e.isWhiteKey(t)&&t>=e.lowestNote&&t<=e.highestNote?(n(),u(`rect`,{key:0,x:e.getKeyPosition(t),y:`0`,width:e.whiteKeyWidth,height:e.keyHeight,class:`white-key active`,stroke:`#666`,"stroke-width":`1`},null,8,R)):g(``,!0)],64))),64)),(n(),u(d,null,s(128,t=>(n(),u(d,{key:`black-${t}`},[!e.isWhiteKey(t)&&t>=e.lowestNote&&t<=e.highestNote?(n(),u(`rect`,{key:0,x:e.getKeyPosition(t),y:`0`,width:e.blackKeyWidth,height:e.blackKeyHeight,class:`black-key active`},null,8,z)):g(``,!0)],64))),64))]),l(`g`,B,[l(`rect`,{x:e.getKeyPosition(e.lowestNote)-2,y:`0`,width:4,height:e.keyHeight+5,class:`range-marker start`},null,8,V),l(`rect`,{x:e.getKeyPosition(e.highestNote)+e.whiteKeyWidth-2,y:`0`,width:4,height:e.keyHeight+5,class:`range-marker end`},null,8,H)]),l(`text`,{x:e.getKeyPosition(e.lowestNote)+3,y:e.keyHeight+12,class:`note-label`},r(e.getNoteLabel(e.lowestNote)),9,U),l(`text`,{x:e.getKeyPosition(e.highestNote)+e.whiteKeyWidth-3,y:e.keyHeight+12,"text-anchor":`end`,class:`note-label`},r(e.getNoteLabel(e.highestNote)),9,W)],8,N))],512)])}T(_sfc_render$1,`_sfc_render`);var G=o({name:`MidiConfig`,components:{PianoRangeVisualizer:w(A,[[`render`,_sfc_render$1],[`__scopeId`,`data-v-4b232a8b`]])},props:{_id:{type:String,required:!0},user:{type:Object,required:!0}},setup(e){let t=m(),n=m(!0),r=m([]),i=m([]),a=m(``),o=m(``),s=m(!1),l=m(``),u=m(``),d=m(!1),f=m(`full-88`),p=m(21),h=m(108),g=m(``),b=m(0),x=m(0),S=m([]),initNoteOptions=()=>{let e=[`C`,`C#`,`D`,`D#`,`E`,`F`,`F#`,`G`,`G#`,`A`,`A#`,`B`],t=[];for(let n=0;n<=127;n++){let r=Math.floor(n/12)-1,i=e[n%12];t.push({title:`${i}${r} (${n})`,value:n})}S.value=t},C=m([{title:`Full 88-key Piano (A0-C8)`,value:`full-88`},{title:`76-key Keyboard (E1-G7)`,value:`76-key`},{title:`61-key Keyboard (C2-C7)`,value:`61-key`},{title:`49-key Keyboard (C3-C7)`,value:`49-key`},{title:`37-key Keyboard (C3-C6)`,value:`37-key`},{title:`25-key Keyboard (C4-C6)`,value:`25-key`},{title:`Custom Range`,value:`custom`}]),checkConfigChanged=()=>{d.value=a.value!==l.value||o.value!==u.value||f.value!==g.value||f.value===`custom`&&(p.value!==b.value||h.value!==x.value)},updateCustomRangeFromPreset=()=>{switch(f.value){case`full-88`:p.value=21,h.value=108;break;case`76-key`:p.value=28,h.value=103;break;case`61-key`:p.value=36,h.value=96;break;case`49-key`:p.value=48,h.value=96;break;case`37-key`:p.value=48,h.value=84;break;case`25-key`:p.value=60,h.value=84;break}checkConfigChanged()},updateRangeAndCheckChanges=()=>{p.value>=h.value&&(h.value=p.value+12),checkConfigChanged()},playSound=()=>{t.value?.play([{note:{number:64,name:`E`,octave:4},type:`noteon`,velocity:.4251968503937008,timestamp:0},{note:{number:64,name:`E`,octave:4},velocity:.3779527559055118,type:`noteoff`,timestamp:511.90500000002794},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5275590551181102,timestamp:535.8800000001211},{note:{number:60,name:`C`,octave:4},velocity:.33858267716535434,type:`noteoff`,timestamp:674.9899999999907},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5590551181102362,timestamp:1070.8800000000047},{note:{number:60,name:`C`,octave:4},velocity:.3464566929133858,type:`noteoff`,timestamp:1214.8999999999069},{note:{number:64,name:`E`,octave:4},type:`noteon`,velocity:.5118110236220472,timestamp:1424.9400000000605},{note:{number:64,name:`E`,octave:4},velocity:.2755905511811024,type:`noteoff`,timestamp:1576.9150000000373},{note:{number:62,name:`D`,octave:4},type:`noteon`,velocity:.3937007874015748,timestamp:1756.9149999999208},{note:{number:62,name:`D`,octave:4},velocity:.36220472440944884,type:`noteoff`,timestamp:1926.9899999998743},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5196850393700787,timestamp:1970.9600000000792},{note:{number:60,name:`C`,octave:4},velocity:.36220472440944884,type:`noteoff`,timestamp:2126.009999999893},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5984251968503937,timestamp:2502.0050000000047},{note:{number:60,name:`C`,octave:4},velocity:.3858267716535433,type:`noteoff`,timestamp:2853.920000000042},{note:{number:67,name:`G`,octave:4},type:`noteon`,velocity:.6850393700787402,timestamp:2875.8649999999907},{note:{number:67,name:`G`,octave:4},velocity:.6377952755905512,type:`noteoff`,timestamp:4497.004999999888}])},indicateHeardNotes=e=>{v({text:`I hear a ${e.note.name}!`,status:y.ok})};c(a,()=>{t.value?.selectInput(a.value),checkConfigChanged()}),c(o,()=>{t.value?.selectOutput(o.value),checkConfigChanged()});let retrieveSettings=async()=>{let t=await(await e.user.getCourseInterface(e._id)).getCourseSettings();if(t?.midiinput){let e=t.midiinput.toString();r.value.some(t=>t.value===e)&&(a.value=e,l.value=e)}if(t?.midioutput){let e=t.midioutput.toString();i.value.some(t=>t.value===e)&&(o.value=e,u.value=e)}t?.keyboardRange&&(g.value=t.keyboardRange.toString(),f.value=g.value),t?.lowestNote&&(b.value=parseInt(t.lowestNote.toString()),p.value=b.value),t?.highestNote&&(x.value=parseInt(t.highestNote.toString()),h.value=x.value),t?.lowestNote&&t?.highestNote&&!t?.keyboardRange&&(f.value=`custom`),d.value=!1},saveSettings=async()=>{s.value=!0,(await D().getUserDB().getCourseInterface(e._id)).updateCourseSettings([{key:`midiinput`,value:a.value},{key:`midioutput`,value:o.value},{key:`keyboardRange`,value:f.value},{key:`lowestNote`,value:p.value},{key:`highestNote`,value:h.value}]),l.value=a.value,u.value=o.value,g.value=f.value,b.value=p.value,x.value=h.value,d.value=!1,s.value=!1,v({text:`Settings updated.`,status:y.ok})};return _(async()=>{initNoteOptions();try{t.value=await O.instance(),n.value=t.value.state===`ready`||t.value.state===`nodevice`}catch(e){console.log(`Error on midi Init: ${e}`),n.value=!1}n.value&&(t.value?.addNoteonListenter(indicateHeardNotes),t.value?(r.value=t.value.inputs.filter(e=>e.state===`connected`).map(e=>({title:`${e.manufacturer}: ${e.name}`,value:e.id})),i.value=t.value?.outputs.filter(e=>e.state===`connected`).map(e=>({title:`${e.manufacturer}: ${e.name}`,value:e.id}))):(r.value=[{title:`No inputs available`,value:``}],i.value=[{title:`No outputs available`,value:``}]),await retrieveSettings(),!a.value&&r.value.length>0&&(a.value=r.value[0].value),!o.value&&i.value.length>0&&(o.value=i.value[0].value))}),{midiSupported:n,inputs:r,outputs:i,selectedInput:a,selectedOutput:o,updatePending:s,playSound,saveSettings,configChanged:d,lowestNote:p,highestNote:h,keyboardRangeOptions:C,selectedKeyboardRange:f,noteOptions:S,updateCustomRangeFromPreset,updateRangeAndCheckChanges}}}),K={key:0,class:`custom-range-inputs d-flex gap-4`},q={class:`d-flex justify-space-between mt-3`},J={key:1};function _sfc_render(r,o,s,c,d,f){let p=i(`v-toolbar-title`),m=i(`v-toolbar`),_=i(`v-select`),v=i(`v-divider`),y=i(`piano-range-visualizer`),b=i(`v-btn`),x=i(`v-form`),S=i(`v-card-text`),C=i(`v-card`);return n(),h(C,null,{default:e(()=>[t(m,{dense:``},{default:e(()=>[t(p,null,{default:e(()=>o[5]||(o[5]=[a(`Configure Midi Device`)])),_:1})]),_:1}),t(S,null,{default:e(()=>[r.midiSupported?(n(),h(x,{key:0,onsubmit:`return false;`},{default:e(()=>[t(_,{modelValue:r.selectedInput,"onUpdate:modelValue":o[0]||(o[0]=e=>r.selectedInput=e),items:r.inputs,label:`Select Input`,hint:`Play some notes on your input device to test the connection`},null,8,[`modelValue`,`items`]),t(_,{modelValue:r.selectedOutput,"onUpdate:modelValue":o[1]||(o[1]=e=>r.selectedOutput=e),items:r.outputs,label:`Select Output`},null,8,[`modelValue`,`items`]),t(v,{class:`my-4`}),o[8]||(o[8]=l(`h3`,{class:`text-subtitle-1 mb-2`},`Keyboard Range`,-1)),t(_,{modelValue:r.selectedKeyboardRange,"onUpdate:modelValue":[o[2]||(o[2]=e=>r.selectedKeyboardRange=e),r.updateCustomRangeFromPreset],items:r.keyboardRangeOptions,label:`Select Keyboard Range`},null,8,[`modelValue`,`items`,`onUpdate:modelValue`]),r.selectedKeyboardRange===`custom`?(n(),u(`div`,K,[t(_,{modelValue:r.lowestNote,"onUpdate:modelValue":[o[3]||(o[3]=e=>r.lowestNote=e),r.updateRangeAndCheckChanges],items:r.noteOptions,label:`Lowest Note`},null,8,[`modelValue`,`items`,`onUpdate:modelValue`]),t(_,{modelValue:r.highestNote,"onUpdate:modelValue":[o[4]||(o[4]=e=>r.highestNote=e),r.updateRangeAndCheckChanges],items:r.noteOptions,label:`Highest Note`},null,8,[`modelValue`,`items`,`onUpdate:modelValue`])])):g(``,!0),t(y,{"lowest-note":r.lowestNote,"highest-note":r.highestNote},null,8,[`lowest-note`,`highest-note`]),l(`div`,q,[t(b,{color:`primary`,onClick:r.playSound},{default:e(()=>o[6]||(o[6]=[a(`Test midi output`)])),_:1},8,[`onClick`]),t(b,{loading:r.updatePending,disabled:!r.configChanged&&!r.updatePending,color:`info`,class:`save-button`,onClick:r.saveSettings},{default:e(()=>o[7]||(o[7]=[a(` Save these settings `)])),_:1},8,[`loading`,`disabled`,`onClick`])])]),_:1})):(n(),u(`div`,J,o[9]||(o[9]=[l(`p`,null,`This quilt requires a midi input device, which is not supported by this browser.`,-1),l(`div`,null,[l(`p`,null,`Try one of the following browsers:`),l(`ul`,null,[l(`li`,null,[l(`a`,{href:`https://www.google.com/chrome/`},`Google Chrome`)]),l(`li`,null,[l(`a`,{href:`https://www.microsoft.com/edge`},`Microsoft Edge`)]),l(`li`,null,[l(`a`,{href:`https://brave.com/`},`Brave`)])])],-1)])))]),_:1})]),_:1})}var Y=w(G,[[`render`,_sfc_render],[`__scopeId`,`data-v-6ee9020f`]]);async function loadSubcourse(e){let t;switch(e){case`chess`:t=await E(()=>import(`./chess-Lfm7Fsvs-RaFhFnIh.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]));break;case`french`:t=await E(()=>import(`./french-evUMlbbq-4izQyIk4.js`),__vite__mapDeps([23,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,24,25]));break;case`math`:t=await E(()=>import(`./math-DR3fXDcX-Bj6dcLDF.js`),__vite__mapDeps([26,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,27,28]));break;case`piano`:t=await E(()=>import(`./piano-BN5Btq91-onBUnVgA.js`),__vite__mapDeps([29,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,31]));break;case`pitch`:t=await E(()=>import(`./pitch-Dn0iNqiS-L2k4d66s.js`),__vite__mapDeps([32,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,33]));break;case`sightSing`:t=await E(()=>import(`./sightsing-CJX3k0Fd-C4-zGBSZ.js`),__vite__mapDeps([34,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,35,36]));break;case`typing`:t=await E(()=>import(`./typing-k-ojjO7G-gZjZ4YQx.js`),__vite__mapDeps([37,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,38,39]));break;case`wordWork`:t=await E(()=>import(`./word-work-Dd6tIKrt-WI45cKxO.js`),__vite__mapDeps([40,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,41,25]));break}let n=t.default;return X.courses.find(e=>e.name===n.name)||X.courses.push(n),n}async function loadAllSubcourses(){await Promise.all([`chess`,`french`,`math`,`piano`,`pitch`,`sightSing`,`typing`,`wordWork`].map(e=>loadSubcourse(e)))}var AllCourseWare=class{get courses(){return this.courseWareList}constructor(e){x(this,`courseWareList`,void 0),x(this,`cachedRawViews`,null),this.courseWareList=e}getCourseWare(e){return this.courseWareList.find(t=>t.name===e)}allViewsRaw(){if(!this.cachedRawViews){let e=this.allViews();this.cachedRawViews=Object.fromEntries(Object.entries(e).map(([e,t])=>[e,p(t)]))}return this.cachedRawViews}allViews(){let e={};return this.courseWareList.forEach(t=>{Object.assign(e,t.allViewsMap)}),e}getView(e){let t;t=typeof e==`string`?b.getViewDescriptor(e):e;let n=this.getCourseWare(t.course);if(n){let e=n.getQuestion(t.questionType);if(e){let r=e.views.find(e=>e.name===t.view);if(r)return r;throw console.error(`QuestionView ${t.view} not found in course ${t.course}
3
3
 
4
4
  descriptor: ${JSON.stringify(t)}
5
5
 
@@ -15,4 +15,4 @@ import"./chunk-D6hFPZc3.js";import{$ as e,C as t,H as n,Ht as r,K as i,S as a,T
15
15
  `),Error(`question ${t.questionType} does not exist.`)}else throw console.error(`Course ${t.course} not found.
16
16
 
17
17
  descriptor: ${JSON.stringify(t)}`),Error(`course ${t.course} does not exist.`)}toString(){let e=``;return this.courses.forEach(t=>{e+=`Course: ${t.name}\n`,t.questions.forEach(t=>{e+=` Question: ${t.name}\n`,t.views.forEach(t=>{e+=` View: ${t.name}\n`})})}),e}allDataShapesRaw(){let e=[];return this.courseWareList.forEach(t=>{t.questions.forEach(t=>{t.dataShapes.forEach(t=>{e.includes(t)||e.push(t)})})}),e}allDataShapes(){let e=[];return this.courseWareList.forEach(t=>{t.questions.forEach(n=>{n.dataShapes.forEach(r=>{e.findIndex(e=>e.course===t.name&&e.dataShape===r.name)===-1&&e.push({course:t.name,dataShape:r.name,displayable:n})})})}),e}getDataShape(e){let t;if(this.getCourseWare(e.course).questions.forEach(n=>{n.dataShapes.forEach(n=>{n.name===e.dataShape&&(t=n)})}),t)return t;throw Error(`DataShape ${b.getDataShapeString(e)} not found`)}},X=new AllCourseWare([]);export{loadAllSubcourses as a,Y as i,AllCourseWare as n,loadSubcourse as o,k as r,X as t};
18
- //# sourceMappingURL=dist-CAHkbl3M.js.map
18
+ //# sourceMappingURL=dist-BJLhyG8r.js.map
@@ -1 +1 @@
1
- {"version":3,"mappings":"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","names":["a","r","D","j","b","k","A","C","w","y","M","S","P","e","i","n","V","F","H","z","p","N","x","I","E","T","O","B"],"ignoreList":[],"sources":["../../../courseware/dist/index.mjs"],"sourcesContent":["import { r as e, t } from \"./shapes-BQUVJdp5.js\";\nimport { i as n, n as r, r as i, t as a } from \"./CourseWare-BTFRjgBR.js\";\nimport { t as o } from \"./chess-E2uOAyQS.js\";\nimport { t as s } from \"./french-Dk7YG8Td.js\";\nimport { t as c } from \"./math-D_8HiEQR.js\";\nimport { a as l, i as u, n as d, o as f, r as p, t as m } from \"./piano-DF1g6yaX.js\";\nimport { t as h } from \"./pitch-CgGJFkZ1.js\";\nimport { t as g } from \"./sightsing-BFQ7HRig.js\";\nimport { t as _ } from \"./typing-BevtfWlp.js\";\nimport { t as v } from \"./word-work-BOnRlZgd.js\";\nimport { Fragment as y, computed as b, createBlock as x, createCommentVNode as S, createElementBlock as C, createElementVNode as w, createTextVNode as T, createVNode as E, defineComponent as D, markRaw as O, onMounted as k, openBlock as A, ref as j, renderList as M, resolveComponent as N, toDisplayString as P, watch as F, withCtx as I } from \"vue\";\nimport { Displayable as L, Question as R, alertUser as z, useQuestionView as ee, useViewable as te } from \"@vue-skuilder/common-ui\";\nimport { NameSpacer as B, Status as V } from \"@vue-skuilder/common\";\nimport { getDataLayer as H } from \"@vue-skuilder/db\";\nimport './assets/index.css';//#region src/default/index.ts\nvar U = new a(\"default\", [r]), W = D({\n\tname: \"PianoRangeVisualizer\",\n\tprops: {\n\t\tlowestNote: {\n\t\t\ttype: Number,\n\t\t\trequired: !0\n\t\t},\n\t\thighestNote: {\n\t\t\ttype: Number,\n\t\t\trequired: !0\n\t\t},\n\t\tmaxWidth: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1e3\n\t\t}\n\t},\n\tsetup(e) {\n\t\tlet t = j(null), n = j(800), r = b(() => {\n\t\t\tlet e = 0;\n\t\t\tfor (let t = 21; t <= 108; t++) isWhiteKey(t) && e++;\n\t\t\treturn e;\n\t\t}), i = b(() => Math.min(22, n.value / Math.max(25, r.value))), a = b(() => i.value * .6), o = b(() => Math.min(e.maxWidth, i.value * r.value + 10)), isWhiteKey = (e) => {\n\t\t\tlet t = e % 12;\n\t\t\treturn [\n\t\t\t\t0,\n\t\t\t\t2,\n\t\t\t\t4,\n\t\t\t\t5,\n\t\t\t\t7,\n\t\t\t\t9,\n\t\t\t\t11\n\t\t\t].includes(t);\n\t\t}, getKeyPosition = (e) => {\n\t\t\tlet t = 0;\n\t\t\tfor (let n = 21; n < e; n++) isWhiteKey(n) && t++;\n\t\t\treturn isWhiteKey(e) ? t * i.value : t * i.value - a.value / 2;\n\t\t}, getNoteLabel = (e) => {\n\t\t\tlet t = [\n\t\t\t\t\"C\",\n\t\t\t\t\"C#\",\n\t\t\t\t\"D\",\n\t\t\t\t\"D#\",\n\t\t\t\t\"E\",\n\t\t\t\t\"F\",\n\t\t\t\t\"F#\",\n\t\t\t\t\"G\",\n\t\t\t\t\"G#\",\n\t\t\t\t\"A\",\n\t\t\t\t\"A#\",\n\t\t\t\t\"B\"\n\t\t\t], n = e % 12, r = Math.floor(e / 12) - 1;\n\t\t\treturn `${t[n]}${r}`;\n\t\t};\n\t\treturn k(() => {\n\t\t\tt.value && (n.value = t.value.clientWidth, new ResizeObserver((e) => {\n\t\t\t\tfor (let t of e) n.value = t.contentRect.width;\n\t\t\t}).observe(t.value));\n\t\t}), {\n\t\t\tpianoWrapper: t,\n\t\t\tkeyHeight: 100,\n\t\t\tblackKeyHeight: 60,\n\t\t\twhiteKeyWidth: i,\n\t\t\tblackKeyWidth: a,\n\t\t\tsvgWidth: o,\n\t\t\tisWhiteKey,\n\t\t\tgetKeyPosition,\n\t\t\tgetNoteLabel\n\t\t};\n\t}\n}), G = { class: \"piano-range-container\" }, K = {\n\tclass: \"piano-wrapper\",\n\tref: \"pianoWrapper\"\n}, q = [\"width\", \"height\"], J = {\n\tclass: \"background-keys\",\n\topacity: \"0.15\"\n}, Y = [\n\t\"x\",\n\t\"width\",\n\t\"height\"\n], X = [\n\t\"x\",\n\t\"width\",\n\t\"height\"\n], Z = { class: \"selected-range\" }, ne = [\n\t\"x\",\n\t\"width\",\n\t\"height\"\n], re = [\n\t\"x\",\n\t\"width\",\n\t\"height\"\n], ie = { class: \"range-markers\" }, ae = [\"x\", \"height\"], oe = [\"x\", \"height\"], se = [\"x\", \"y\"], ce = [\"x\", \"y\"];\nfunction _sfc_render$1(e, t, n, r, i, a) {\n\treturn A(), C(\"div\", G, [w(\"div\", K, [(A(), C(\"svg\", {\n\t\twidth: e.svgWidth,\n\t\theight: e.keyHeight + 20,\n\t\tclass: \"piano-svg\"\n\t}, [\n\t\tw(\"g\", J, [(A(), C(y, null, M(88, (t) => (A(), C(y, { key: `bg-${t}` }, [e.isWhiteKey(t + 20) ? (A(), C(\"rect\", {\n\t\t\tkey: 0,\n\t\t\tx: e.getKeyPosition(t + 20),\n\t\t\ty: \"0\",\n\t\t\twidth: e.whiteKeyWidth,\n\t\t\theight: e.keyHeight,\n\t\t\tclass: \"white-key\",\n\t\t\tstroke: \"#999\",\n\t\t\t\"stroke-width\": \"1\"\n\t\t}, null, 8, Y)) : S(\"\", !0)], 64))), 64)), (A(), C(y, null, M(88, (t) => (A(), C(y, { key: `bg-black-${t}` }, [e.isWhiteKey(t + 20) ? S(\"\", !0) : (A(), C(\"rect\", {\n\t\t\tkey: 0,\n\t\t\tx: e.getKeyPosition(t + 20),\n\t\t\ty: \"0\",\n\t\t\twidth: e.blackKeyWidth,\n\t\t\theight: e.blackKeyHeight,\n\t\t\tclass: \"black-key\"\n\t\t}, null, 8, X))], 64))), 64))]),\n\t\tw(\"g\", Z, [(A(), C(y, null, M(128, (t) => (A(), C(y, { key: `white-${t}` }, [e.isWhiteKey(t) && t >= e.lowestNote && t <= e.highestNote ? (A(), C(\"rect\", {\n\t\t\tkey: 0,\n\t\t\tx: e.getKeyPosition(t),\n\t\t\ty: \"0\",\n\t\t\twidth: e.whiteKeyWidth,\n\t\t\theight: e.keyHeight,\n\t\t\tclass: \"white-key active\",\n\t\t\tstroke: \"#666\",\n\t\t\t\"stroke-width\": \"1\"\n\t\t}, null, 8, ne)) : S(\"\", !0)], 64))), 64)), (A(), C(y, null, M(128, (t) => (A(), C(y, { key: `black-${t}` }, [!e.isWhiteKey(t) && t >= e.lowestNote && t <= e.highestNote ? (A(), C(\"rect\", {\n\t\t\tkey: 0,\n\t\t\tx: e.getKeyPosition(t),\n\t\t\ty: \"0\",\n\t\t\twidth: e.blackKeyWidth,\n\t\t\theight: e.blackKeyHeight,\n\t\t\tclass: \"black-key active\"\n\t\t}, null, 8, re)) : S(\"\", !0)], 64))), 64))]),\n\t\tw(\"g\", ie, [w(\"rect\", {\n\t\t\tx: e.getKeyPosition(e.lowestNote) - 2,\n\t\t\ty: \"0\",\n\t\t\twidth: 4,\n\t\t\theight: e.keyHeight + 5,\n\t\t\tclass: \"range-marker start\"\n\t\t}, null, 8, ae), w(\"rect\", {\n\t\t\tx: e.getKeyPosition(e.highestNote) + e.whiteKeyWidth - 2,\n\t\t\ty: \"0\",\n\t\t\twidth: 4,\n\t\t\theight: e.keyHeight + 5,\n\t\t\tclass: \"range-marker end\"\n\t\t}, null, 8, oe)]),\n\t\tw(\"text\", {\n\t\t\tx: e.getKeyPosition(e.lowestNote) + 3,\n\t\t\ty: e.keyHeight + 12,\n\t\t\tclass: \"note-label\"\n\t\t}, P(e.getNoteLabel(e.lowestNote)), 9, se),\n\t\tw(\"text\", {\n\t\t\tx: e.getKeyPosition(e.highestNote) + e.whiteKeyWidth - 3,\n\t\t\ty: e.keyHeight + 12,\n\t\t\t\"text-anchor\": \"end\",\n\t\t\tclass: \"note-label\"\n\t\t}, P(e.getNoteLabel(e.highestNote)), 9, ce)\n\t], 8, q))], 512)]);\n}\ne(_sfc_render$1, \"_sfc_render\");\n//#endregion\n//#region src/piano/utility/MidiConfig.vue?vue&type=script&lang.ts\nvar le = D({\n\tname: \"MidiConfig\",\n\tcomponents: { PianoRangeVisualizer: /* @__PURE__ */ i(W, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-4b232a8b\"]]) },\n\tprops: {\n\t\t_id: {\n\t\t\ttype: String,\n\t\t\trequired: !0\n\t\t},\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: !0\n\t\t}\n\t},\n\tsetup(e) {\n\t\tlet t = j(), n = j(!0), r = j([]), i = j([]), a = j(\"\"), o = j(\"\"), s = j(!1), c = j(\"\"), l = j(\"\"), u = j(!1), d = j(\"full-88\"), f = j(21), m = j(108), h = j(\"\"), g = j(0), _ = j(0), v = j([]), initNoteOptions = () => {\n\t\t\tlet e = [\n\t\t\t\t\"C\",\n\t\t\t\t\"C#\",\n\t\t\t\t\"D\",\n\t\t\t\t\"D#\",\n\t\t\t\t\"E\",\n\t\t\t\t\"F\",\n\t\t\t\t\"F#\",\n\t\t\t\t\"G\",\n\t\t\t\t\"G#\",\n\t\t\t\t\"A\",\n\t\t\t\t\"A#\",\n\t\t\t\t\"B\"\n\t\t\t], t = [];\n\t\t\tfor (let n = 0; n <= 127; n++) {\n\t\t\t\tlet r = Math.floor(n / 12) - 1, i = e[n % 12];\n\t\t\t\tt.push({\n\t\t\t\t\ttitle: `${i}${r} (${n})`,\n\t\t\t\t\tvalue: n\n\t\t\t\t});\n\t\t\t}\n\t\t\tv.value = t;\n\t\t}, y = j([\n\t\t\t{\n\t\t\t\ttitle: \"Full 88-key Piano (A0-C8)\",\n\t\t\t\tvalue: \"full-88\"\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"76-key Keyboard (E1-G7)\",\n\t\t\t\tvalue: \"76-key\"\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"61-key Keyboard (C2-C7)\",\n\t\t\t\tvalue: \"61-key\"\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"49-key Keyboard (C3-C7)\",\n\t\t\t\tvalue: \"49-key\"\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"37-key Keyboard (C3-C6)\",\n\t\t\t\tvalue: \"37-key\"\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"25-key Keyboard (C4-C6)\",\n\t\t\t\tvalue: \"25-key\"\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Custom Range\",\n\t\t\t\tvalue: \"custom\"\n\t\t\t}\n\t\t]), checkConfigChanged = () => {\n\t\t\tu.value = a.value !== c.value || o.value !== l.value || d.value !== h.value || d.value === \"custom\" && (f.value !== g.value || m.value !== _.value);\n\t\t}, updateCustomRangeFromPreset = () => {\n\t\t\tswitch (d.value) {\n\t\t\t\tcase \"full-88\":\n\t\t\t\t\tf.value = 21, m.value = 108;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"76-key\":\n\t\t\t\t\tf.value = 28, m.value = 103;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"61-key\":\n\t\t\t\t\tf.value = 36, m.value = 96;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"49-key\":\n\t\t\t\t\tf.value = 48, m.value = 96;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"37-key\":\n\t\t\t\t\tf.value = 48, m.value = 84;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"25-key\":\n\t\t\t\t\tf.value = 60, m.value = 84;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcheckConfigChanged();\n\t\t}, updateRangeAndCheckChanges = () => {\n\t\t\tf.value >= m.value && (m.value = f.value + 12), checkConfigChanged();\n\t\t}, playSound = () => {\n\t\t\tt.value?.play([\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 64,\n\t\t\t\t\t\tname: \"E\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .4251968503937008,\n\t\t\t\t\ttimestamp: 0\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 64,\n\t\t\t\t\t\tname: \"E\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .3779527559055118,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 511.90500000002794\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .5275590551181102,\n\t\t\t\t\ttimestamp: 535.8800000001211\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .33858267716535434,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 674.9899999999907\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .5590551181102362,\n\t\t\t\t\ttimestamp: 1070.8800000000047\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .3464566929133858,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 1214.8999999999069\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 64,\n\t\t\t\t\t\tname: \"E\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .5118110236220472,\n\t\t\t\t\ttimestamp: 1424.9400000000605\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 64,\n\t\t\t\t\t\tname: \"E\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .2755905511811024,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 1576.9150000000373\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 62,\n\t\t\t\t\t\tname: \"D\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .3937007874015748,\n\t\t\t\t\ttimestamp: 1756.9149999999208\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 62,\n\t\t\t\t\t\tname: \"D\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .36220472440944884,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 1926.9899999998743\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .5196850393700787,\n\t\t\t\t\ttimestamp: 1970.9600000000792\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .36220472440944884,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 2126.009999999893\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .5984251968503937,\n\t\t\t\t\ttimestamp: 2502.0050000000047\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .3858267716535433,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 2853.920000000042\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 67,\n\t\t\t\t\t\tname: \"G\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .6850393700787402,\n\t\t\t\t\ttimestamp: 2875.8649999999907\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 67,\n\t\t\t\t\t\tname: \"G\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .6377952755905512,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 4497.004999999888\n\t\t\t\t}\n\t\t\t]);\n\t\t}, indicateHeardNotes = (e) => {\n\t\t\tz({\n\t\t\t\ttext: `I hear a ${e.note.name}!`,\n\t\t\t\tstatus: V.ok\n\t\t\t});\n\t\t};\n\t\tF(a, () => {\n\t\t\tt.value?.selectInput(a.value), checkConfigChanged();\n\t\t}), F(o, () => {\n\t\t\tt.value?.selectOutput(o.value), checkConfigChanged();\n\t\t});\n\t\tlet retrieveSettings = async () => {\n\t\t\tlet t = await (await e.user.getCourseInterface(e._id)).getCourseSettings();\n\t\t\tif (t?.midiinput) {\n\t\t\t\tlet e = t.midiinput.toString();\n\t\t\t\tr.value.some((t) => t.value === e) && (a.value = e, c.value = e);\n\t\t\t}\n\t\t\tif (t?.midioutput) {\n\t\t\t\tlet e = t.midioutput.toString();\n\t\t\t\ti.value.some((t) => t.value === e) && (o.value = e, l.value = e);\n\t\t\t}\n\t\t\tt?.keyboardRange && (h.value = t.keyboardRange.toString(), d.value = h.value), t?.lowestNote && (g.value = parseInt(t.lowestNote.toString()), f.value = g.value), t?.highestNote && (_.value = parseInt(t.highestNote.toString()), m.value = _.value), t?.lowestNote && t?.highestNote && !t?.keyboardRange && (d.value = \"custom\"), u.value = !1;\n\t\t}, saveSettings = async () => {\n\t\t\ts.value = !0, (await H().getUserDB().getCourseInterface(e._id)).updateCourseSettings([\n\t\t\t\t{\n\t\t\t\t\tkey: \"midiinput\",\n\t\t\t\t\tvalue: a.value\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkey: \"midioutput\",\n\t\t\t\t\tvalue: o.value\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkey: \"keyboardRange\",\n\t\t\t\t\tvalue: d.value\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkey: \"lowestNote\",\n\t\t\t\t\tvalue: f.value\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkey: \"highestNote\",\n\t\t\t\t\tvalue: m.value\n\t\t\t\t}\n\t\t\t]), c.value = a.value, l.value = o.value, h.value = d.value, g.value = f.value, _.value = m.value, u.value = !1, s.value = !1, z({\n\t\t\t\ttext: \"Settings updated.\",\n\t\t\t\tstatus: V.ok\n\t\t\t});\n\t\t};\n\t\treturn k(async () => {\n\t\t\tinitNoteOptions();\n\t\t\ttry {\n\t\t\t\tt.value = await p.instance(), n.value = t.value.state === \"ready\" || t.value.state === \"nodevice\";\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(`Error on midi Init: ${e}`), n.value = !1;\n\t\t\t}\n\t\t\tn.value && (t.value?.addNoteonListenter(indicateHeardNotes), t.value ? (r.value = t.value.inputs.filter((e) => e.state === \"connected\").map((e) => ({\n\t\t\t\ttitle: `${e.manufacturer}: ${e.name}`,\n\t\t\t\tvalue: e.id\n\t\t\t})), i.value = t.value?.outputs.filter((e) => e.state === \"connected\").map((e) => ({\n\t\t\t\ttitle: `${e.manufacturer}: ${e.name}`,\n\t\t\t\tvalue: e.id\n\t\t\t}))) : (r.value = [{\n\t\t\t\ttitle: \"No inputs available\",\n\t\t\t\tvalue: \"\"\n\t\t\t}], i.value = [{\n\t\t\t\ttitle: \"No outputs available\",\n\t\t\t\tvalue: \"\"\n\t\t\t}]), await retrieveSettings(), !a.value && r.value.length > 0 && (a.value = r.value[0].value), !o.value && i.value.length > 0 && (o.value = i.value[0].value));\n\t\t}), {\n\t\t\tmidiSupported: n,\n\t\t\tinputs: r,\n\t\t\toutputs: i,\n\t\t\tselectedInput: a,\n\t\t\tselectedOutput: o,\n\t\t\tupdatePending: s,\n\t\t\tplaySound,\n\t\t\tsaveSettings,\n\t\t\tconfigChanged: u,\n\t\t\tlowestNote: f,\n\t\t\thighestNote: m,\n\t\t\tkeyboardRangeOptions: y,\n\t\t\tselectedKeyboardRange: d,\n\t\t\tnoteOptions: v,\n\t\t\tupdateCustomRangeFromPreset,\n\t\t\tupdateRangeAndCheckChanges\n\t\t};\n\t}\n}), Q = {\n\tkey: 0,\n\tclass: \"custom-range-inputs d-flex gap-4\"\n}, ue = { class: \"d-flex justify-space-between mt-3\" }, de = { key: 1 };\nfunction _sfc_render(e, t, n, r, i, a) {\n\tlet o = N(\"v-toolbar-title\"), s = N(\"v-toolbar\"), c = N(\"v-select\"), l = N(\"v-divider\"), u = N(\"piano-range-visualizer\"), d = N(\"v-btn\"), f = N(\"v-form\"), p = N(\"v-card-text\"), m = N(\"v-card\");\n\treturn A(), x(m, null, {\n\t\tdefault: I(() => [E(s, { dense: \"\" }, {\n\t\t\tdefault: I(() => [E(o, null, {\n\t\t\t\tdefault: I(() => t[5] ||= [T(\"Configure Midi Device\")]),\n\t\t\t\t_: 1\n\t\t\t})]),\n\t\t\t_: 1\n\t\t}), E(p, null, {\n\t\t\tdefault: I(() => [e.midiSupported ? (A(), x(f, {\n\t\t\t\tkey: 0,\n\t\t\t\tonsubmit: \"return false;\"\n\t\t\t}, {\n\t\t\t\tdefault: I(() => [\n\t\t\t\t\tE(c, {\n\t\t\t\t\t\tmodelValue: e.selectedInput,\n\t\t\t\t\t\t\"onUpdate:modelValue\": t[0] ||= (t) => e.selectedInput = t,\n\t\t\t\t\t\titems: e.inputs,\n\t\t\t\t\t\tlabel: \"Select Input\",\n\t\t\t\t\t\thint: \"Play some notes on your input device to test the connection\"\n\t\t\t\t\t}, null, 8, [\"modelValue\", \"items\"]),\n\t\t\t\t\tE(c, {\n\t\t\t\t\t\tmodelValue: e.selectedOutput,\n\t\t\t\t\t\t\"onUpdate:modelValue\": t[1] ||= (t) => e.selectedOutput = t,\n\t\t\t\t\t\titems: e.outputs,\n\t\t\t\t\t\tlabel: \"Select Output\"\n\t\t\t\t\t}, null, 8, [\"modelValue\", \"items\"]),\n\t\t\t\t\tE(l, { class: \"my-4\" }),\n\t\t\t\t\tt[8] ||= w(\"h3\", { class: \"text-subtitle-1 mb-2\" }, \"Keyboard Range\", -1),\n\t\t\t\t\tE(c, {\n\t\t\t\t\t\tmodelValue: e.selectedKeyboardRange,\n\t\t\t\t\t\t\"onUpdate:modelValue\": [t[2] ||= (t) => e.selectedKeyboardRange = t, e.updateCustomRangeFromPreset],\n\t\t\t\t\t\titems: e.keyboardRangeOptions,\n\t\t\t\t\t\tlabel: \"Select Keyboard Range\"\n\t\t\t\t\t}, null, 8, [\n\t\t\t\t\t\t\"modelValue\",\n\t\t\t\t\t\t\"items\",\n\t\t\t\t\t\t\"onUpdate:modelValue\"\n\t\t\t\t\t]),\n\t\t\t\t\te.selectedKeyboardRange === \"custom\" ? (A(), C(\"div\", Q, [E(c, {\n\t\t\t\t\t\tmodelValue: e.lowestNote,\n\t\t\t\t\t\t\"onUpdate:modelValue\": [t[3] ||= (t) => e.lowestNote = t, e.updateRangeAndCheckChanges],\n\t\t\t\t\t\titems: e.noteOptions,\n\t\t\t\t\t\tlabel: \"Lowest Note\"\n\t\t\t\t\t}, null, 8, [\n\t\t\t\t\t\t\"modelValue\",\n\t\t\t\t\t\t\"items\",\n\t\t\t\t\t\t\"onUpdate:modelValue\"\n\t\t\t\t\t]), E(c, {\n\t\t\t\t\t\tmodelValue: e.highestNote,\n\t\t\t\t\t\t\"onUpdate:modelValue\": [t[4] ||= (t) => e.highestNote = t, e.updateRangeAndCheckChanges],\n\t\t\t\t\t\titems: e.noteOptions,\n\t\t\t\t\t\tlabel: \"Highest Note\"\n\t\t\t\t\t}, null, 8, [\n\t\t\t\t\t\t\"modelValue\",\n\t\t\t\t\t\t\"items\",\n\t\t\t\t\t\t\"onUpdate:modelValue\"\n\t\t\t\t\t])])) : S(\"\", !0),\n\t\t\t\t\tE(u, {\n\t\t\t\t\t\t\"lowest-note\": e.lowestNote,\n\t\t\t\t\t\t\"highest-note\": e.highestNote\n\t\t\t\t\t}, null, 8, [\"lowest-note\", \"highest-note\"]),\n\t\t\t\t\tw(\"div\", ue, [E(d, {\n\t\t\t\t\t\tcolor: \"primary\",\n\t\t\t\t\t\tonClick: e.playSound\n\t\t\t\t\t}, {\n\t\t\t\t\t\tdefault: I(() => t[6] ||= [T(\"Test midi output\")]),\n\t\t\t\t\t\t_: 1\n\t\t\t\t\t}, 8, [\"onClick\"]), E(d, {\n\t\t\t\t\t\tloading: e.updatePending,\n\t\t\t\t\t\tdisabled: !e.configChanged && !e.updatePending,\n\t\t\t\t\t\tcolor: \"info\",\n\t\t\t\t\t\tclass: \"save-button\",\n\t\t\t\t\t\tonClick: e.saveSettings\n\t\t\t\t\t}, {\n\t\t\t\t\t\tdefault: I(() => t[7] ||= [T(\" Save these settings \")]),\n\t\t\t\t\t\t_: 1\n\t\t\t\t\t}, 8, [\n\t\t\t\t\t\t\"loading\",\n\t\t\t\t\t\t\"disabled\",\n\t\t\t\t\t\t\"onClick\"\n\t\t\t\t\t])])\n\t\t\t\t]),\n\t\t\t\t_: 1\n\t\t\t})) : (A(), C(\"div\", de, t[9] ||= [w(\"p\", null, \"This quilt requires a midi input device, which is not supported by this browser.\", -1), w(\"div\", null, [w(\"p\", null, \"Try one of the following browsers:\"), w(\"ul\", null, [\n\t\t\t\tw(\"li\", null, [w(\"a\", { href: \"https://www.google.com/chrome/\" }, \"Google Chrome\")]),\n\t\t\t\tw(\"li\", null, [w(\"a\", { href: \"https://www.microsoft.com/edge\" }, \"Microsoft Edge\")]),\n\t\t\t\tw(\"li\", null, [w(\"a\", { href: \"https://brave.com/\" }, \"Brave\")])\n\t\t\t])], -1)]))]),\n\t\t\t_: 1\n\t\t})]),\n\t\t_: 1\n\t});\n}\nvar fe = /* @__PURE__ */ i(le, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-6ee9020f\"]]), pe = ee;\nasync function loadSubcourse(e) {\n\tlet t;\n\tswitch (e) {\n\t\tcase \"chess\":\n\t\t\tt = await import(\"./chess-Lfm7Fsvs.js\");\n\t\t\tbreak;\n\t\tcase \"french\":\n\t\t\tt = await import(\"./french-evUMlbbq.js\");\n\t\t\tbreak;\n\t\tcase \"math\":\n\t\t\tt = await import(\"./math-DR3fXDcX.js\");\n\t\t\tbreak;\n\t\tcase \"piano\":\n\t\t\tt = await import(\"./piano-BN5Btq91.js\");\n\t\t\tbreak;\n\t\tcase \"pitch\":\n\t\t\tt = await import(\"./pitch-Dn0iNqiS.js\");\n\t\t\tbreak;\n\t\tcase \"sightSing\":\n\t\t\tt = await import(\"./sightsing-CJX3k0Fd.js\");\n\t\t\tbreak;\n\t\tcase \"typing\":\n\t\t\tt = await import(\"./typing-k-ojjO7G.js\");\n\t\t\tbreak;\n\t\tcase \"wordWork\":\n\t\t\tt = await import(\"./word-work-Dd6tIKrt.js\");\n\t\t\tbreak;\n\t}\n\tlet n = t.default;\n\treturn $.courses.find((e) => e.name === n.name) || $.courses.push(n), n;\n}\nasync function loadAllSubcourses() {\n\tawait Promise.all([\n\t\t\"chess\",\n\t\t\"french\",\n\t\t\"math\",\n\t\t\"piano\",\n\t\t\"pitch\",\n\t\t\"sightSing\",\n\t\t\"typing\",\n\t\t\"wordWork\"\n\t].map((e) => loadSubcourse(e)));\n}\nvar AllCourseWare = class {\n\tcourseWareList;\n\tget courses() {\n\t\treturn this.courseWareList;\n\t}\n\tconstructor(e) {\n\t\tthis.courseWareList = e;\n\t}\n\tgetCourseWare(e) {\n\t\treturn this.courseWareList.find((t) => t.name === e);\n\t}\n\tcachedRawViews = null;\n\tallViewsRaw() {\n\t\tif (!this.cachedRawViews) {\n\t\t\tlet e = this.allViews();\n\t\t\tthis.cachedRawViews = Object.fromEntries(Object.entries(e).map(([e, t]) => [e, O(t)]));\n\t\t}\n\t\treturn this.cachedRawViews;\n\t}\n\tallViews() {\n\t\tlet e = {};\n\t\treturn this.courseWareList.forEach((t) => {\n\t\t\tObject.assign(e, t.allViewsMap);\n\t\t}), e;\n\t}\n\tgetView(e) {\n\t\tlet t;\n\t\tt = typeof e == \"string\" ? B.getViewDescriptor(e) : e;\n\t\tlet n = this.getCourseWare(t.course);\n\t\tif (n) {\n\t\t\tlet e = n.getQuestion(t.questionType);\n\t\t\tif (e) {\n\t\t\t\tlet r = e.views.find((e) => e.name === t.view);\n\t\t\t\tif (r) return r;\n\t\t\t\tthrow console.error(`QuestionView ${t.view} not found in course ${t.course}\n\n descriptor: ${JSON.stringify(t)}\n\n course: ${n.name}\n question: ${e.name}\n views: ${e.views.map((e) => e.name).join(\", \")}\n `), Error(`view ${t.view} does not exist.`);\n\t\t\t} else throw console.error(`Question ${t.questionType} not found in course ${t.course}\n\n descriptor: ${JSON.stringify(t)}\n\n course: ${n.name}\n questions: ${n.questions.map((e) => e.name).join(\", \")}\n `), Error(`question ${t.questionType} does not exist.`);\n\t\t} else throw console.error(`Course ${t.course} not found.\n\n descriptor: ${JSON.stringify(t)}`), Error(`course ${t.course} does not exist.`);\n\t}\n\ttoString() {\n\t\tlet e = \"\";\n\t\treturn this.courses.forEach((t) => {\n\t\t\te += `Course: ${t.name}\\n`, t.questions.forEach((t) => {\n\t\t\t\te += ` Question: ${t.name}\\n`, t.views.forEach((t) => {\n\t\t\t\t\te += ` View: ${t.name}\\n`;\n\t\t\t\t});\n\t\t\t});\n\t\t}), e;\n\t}\n\tallDataShapesRaw() {\n\t\tlet e = [];\n\t\treturn this.courseWareList.forEach((t) => {\n\t\t\tt.questions.forEach((t) => {\n\t\t\t\tt.dataShapes.forEach((t) => {\n\t\t\t\t\te.includes(t) || e.push(t);\n\t\t\t\t});\n\t\t\t});\n\t\t}), e;\n\t}\n\tallDataShapes() {\n\t\tlet e = [];\n\t\treturn this.courseWareList.forEach((t) => {\n\t\t\tt.questions.forEach((n) => {\n\t\t\t\tn.dataShapes.forEach((r) => {\n\t\t\t\t\te.findIndex((e) => e.course === t.name && e.dataShape === r.name) === -1 && e.push({\n\t\t\t\t\t\tcourse: t.name,\n\t\t\t\t\t\tdataShape: r.name,\n\t\t\t\t\t\tdisplayable: n\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t}), e;\n\t}\n\tgetDataShape(e) {\n\t\tlet t;\n\t\tif (this.getCourseWare(e.course).questions.forEach((n) => {\n\t\t\tn.dataShapes.forEach((n) => {\n\t\t\t\tn.name === e.dataShape && (t = n);\n\t\t\t});\n\t\t}), t) return t;\n\t\tthrow Error(`DataShape ${B.getDataShapeString(e)} not found`);\n\t}\n}, $ = new AllCourseWare([]);\n//#endregion\nexport { AllCourseWare, r as BlanksCard, t as BlanksCardDataShapes, a as CourseWare, L as Displayable, fe as MidiConfig, R as Question, p as SkMidi, d as SyllableSeqVis, u as SyllableSequence, $ as allCourseWare, o as chess, U as defaultCourse, l as eventsToSyllableSequence, s as french, n as gradeSpellingAttempt, loadAllSubcourses, loadSubcourse, c as math, m as piano, h as pitch, g as sightSing, f as transposeSyllableSeq, _ as typing, pe as useQuestionView, te as useViewable, v as wordWork };\n\n//# sourceMappingURL=index.mjs.map"],"file":"dist-CAHkbl3M.js"}
1
+ {"version":3,"mappings":"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","names":["a","r","D","j","b","k","A","C","w","y","M","S","P","e","i","n","V","F","H","z","p","N","x","I","E","T","O","B"],"ignoreList":[],"sources":["../../../courseware/dist/index.mjs"],"sourcesContent":["import { r as e, t } from \"./shapes-BQUVJdp5.js\";\nimport { i as n, n as r, r as i, t as a } from \"./CourseWare-BTFRjgBR.js\";\nimport { t as o } from \"./chess-E2uOAyQS.js\";\nimport { t as s } from \"./french-Dk7YG8Td.js\";\nimport { t as c } from \"./math-D_8HiEQR.js\";\nimport { a as l, i as u, n as d, o as f, r as p, t as m } from \"./piano-DF1g6yaX.js\";\nimport { t as h } from \"./pitch-CgGJFkZ1.js\";\nimport { t as g } from \"./sightsing-BFQ7HRig.js\";\nimport { t as _ } from \"./typing-BevtfWlp.js\";\nimport { t as v } from \"./word-work-BOnRlZgd.js\";\nimport { Fragment as y, computed as b, createBlock as x, createCommentVNode as S, createElementBlock as C, createElementVNode as w, createTextVNode as T, createVNode as E, defineComponent as D, markRaw as O, onMounted as k, openBlock as A, ref as j, renderList as M, resolveComponent as N, toDisplayString as P, watch as F, withCtx as I } from \"vue\";\nimport { Displayable as L, Question as R, alertUser as z, useQuestionView as ee, useViewable as te } from \"@vue-skuilder/common-ui\";\nimport { NameSpacer as B, Status as V } from \"@vue-skuilder/common\";\nimport { getDataLayer as H } from \"@vue-skuilder/db\";\nimport './assets/index.css';//#region src/default/index.ts\nvar U = new a(\"default\", [r]), W = D({\n\tname: \"PianoRangeVisualizer\",\n\tprops: {\n\t\tlowestNote: {\n\t\t\ttype: Number,\n\t\t\trequired: !0\n\t\t},\n\t\thighestNote: {\n\t\t\ttype: Number,\n\t\t\trequired: !0\n\t\t},\n\t\tmaxWidth: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1e3\n\t\t}\n\t},\n\tsetup(e) {\n\t\tlet t = j(null), n = j(800), r = b(() => {\n\t\t\tlet e = 0;\n\t\t\tfor (let t = 21; t <= 108; t++) isWhiteKey(t) && e++;\n\t\t\treturn e;\n\t\t}), i = b(() => Math.min(22, n.value / Math.max(25, r.value))), a = b(() => i.value * .6), o = b(() => Math.min(e.maxWidth, i.value * r.value + 10)), isWhiteKey = (e) => {\n\t\t\tlet t = e % 12;\n\t\t\treturn [\n\t\t\t\t0,\n\t\t\t\t2,\n\t\t\t\t4,\n\t\t\t\t5,\n\t\t\t\t7,\n\t\t\t\t9,\n\t\t\t\t11\n\t\t\t].includes(t);\n\t\t}, getKeyPosition = (e) => {\n\t\t\tlet t = 0;\n\t\t\tfor (let n = 21; n < e; n++) isWhiteKey(n) && t++;\n\t\t\treturn isWhiteKey(e) ? t * i.value : t * i.value - a.value / 2;\n\t\t}, getNoteLabel = (e) => {\n\t\t\tlet t = [\n\t\t\t\t\"C\",\n\t\t\t\t\"C#\",\n\t\t\t\t\"D\",\n\t\t\t\t\"D#\",\n\t\t\t\t\"E\",\n\t\t\t\t\"F\",\n\t\t\t\t\"F#\",\n\t\t\t\t\"G\",\n\t\t\t\t\"G#\",\n\t\t\t\t\"A\",\n\t\t\t\t\"A#\",\n\t\t\t\t\"B\"\n\t\t\t], n = e % 12, r = Math.floor(e / 12) - 1;\n\t\t\treturn `${t[n]}${r}`;\n\t\t};\n\t\treturn k(() => {\n\t\t\tt.value && (n.value = t.value.clientWidth, new ResizeObserver((e) => {\n\t\t\t\tfor (let t of e) n.value = t.contentRect.width;\n\t\t\t}).observe(t.value));\n\t\t}), {\n\t\t\tpianoWrapper: t,\n\t\t\tkeyHeight: 100,\n\t\t\tblackKeyHeight: 60,\n\t\t\twhiteKeyWidth: i,\n\t\t\tblackKeyWidth: a,\n\t\t\tsvgWidth: o,\n\t\t\tisWhiteKey,\n\t\t\tgetKeyPosition,\n\t\t\tgetNoteLabel\n\t\t};\n\t}\n}), G = { class: \"piano-range-container\" }, K = {\n\tclass: \"piano-wrapper\",\n\tref: \"pianoWrapper\"\n}, q = [\"width\", \"height\"], J = {\n\tclass: \"background-keys\",\n\topacity: \"0.15\"\n}, Y = [\n\t\"x\",\n\t\"width\",\n\t\"height\"\n], X = [\n\t\"x\",\n\t\"width\",\n\t\"height\"\n], Z = { class: \"selected-range\" }, ne = [\n\t\"x\",\n\t\"width\",\n\t\"height\"\n], re = [\n\t\"x\",\n\t\"width\",\n\t\"height\"\n], ie = { class: \"range-markers\" }, ae = [\"x\", \"height\"], oe = [\"x\", \"height\"], se = [\"x\", \"y\"], ce = [\"x\", \"y\"];\nfunction _sfc_render$1(e, t, n, r, i, a) {\n\treturn A(), C(\"div\", G, [w(\"div\", K, [(A(), C(\"svg\", {\n\t\twidth: e.svgWidth,\n\t\theight: e.keyHeight + 20,\n\t\tclass: \"piano-svg\"\n\t}, [\n\t\tw(\"g\", J, [(A(), C(y, null, M(88, (t) => (A(), C(y, { key: `bg-${t}` }, [e.isWhiteKey(t + 20) ? (A(), C(\"rect\", {\n\t\t\tkey: 0,\n\t\t\tx: e.getKeyPosition(t + 20),\n\t\t\ty: \"0\",\n\t\t\twidth: e.whiteKeyWidth,\n\t\t\theight: e.keyHeight,\n\t\t\tclass: \"white-key\",\n\t\t\tstroke: \"#999\",\n\t\t\t\"stroke-width\": \"1\"\n\t\t}, null, 8, Y)) : S(\"\", !0)], 64))), 64)), (A(), C(y, null, M(88, (t) => (A(), C(y, { key: `bg-black-${t}` }, [e.isWhiteKey(t + 20) ? S(\"\", !0) : (A(), C(\"rect\", {\n\t\t\tkey: 0,\n\t\t\tx: e.getKeyPosition(t + 20),\n\t\t\ty: \"0\",\n\t\t\twidth: e.blackKeyWidth,\n\t\t\theight: e.blackKeyHeight,\n\t\t\tclass: \"black-key\"\n\t\t}, null, 8, X))], 64))), 64))]),\n\t\tw(\"g\", Z, [(A(), C(y, null, M(128, (t) => (A(), C(y, { key: `white-${t}` }, [e.isWhiteKey(t) && t >= e.lowestNote && t <= e.highestNote ? (A(), C(\"rect\", {\n\t\t\tkey: 0,\n\t\t\tx: e.getKeyPosition(t),\n\t\t\ty: \"0\",\n\t\t\twidth: e.whiteKeyWidth,\n\t\t\theight: e.keyHeight,\n\t\t\tclass: \"white-key active\",\n\t\t\tstroke: \"#666\",\n\t\t\t\"stroke-width\": \"1\"\n\t\t}, null, 8, ne)) : S(\"\", !0)], 64))), 64)), (A(), C(y, null, M(128, (t) => (A(), C(y, { key: `black-${t}` }, [!e.isWhiteKey(t) && t >= e.lowestNote && t <= e.highestNote ? (A(), C(\"rect\", {\n\t\t\tkey: 0,\n\t\t\tx: e.getKeyPosition(t),\n\t\t\ty: \"0\",\n\t\t\twidth: e.blackKeyWidth,\n\t\t\theight: e.blackKeyHeight,\n\t\t\tclass: \"black-key active\"\n\t\t}, null, 8, re)) : S(\"\", !0)], 64))), 64))]),\n\t\tw(\"g\", ie, [w(\"rect\", {\n\t\t\tx: e.getKeyPosition(e.lowestNote) - 2,\n\t\t\ty: \"0\",\n\t\t\twidth: 4,\n\t\t\theight: e.keyHeight + 5,\n\t\t\tclass: \"range-marker start\"\n\t\t}, null, 8, ae), w(\"rect\", {\n\t\t\tx: e.getKeyPosition(e.highestNote) + e.whiteKeyWidth - 2,\n\t\t\ty: \"0\",\n\t\t\twidth: 4,\n\t\t\theight: e.keyHeight + 5,\n\t\t\tclass: \"range-marker end\"\n\t\t}, null, 8, oe)]),\n\t\tw(\"text\", {\n\t\t\tx: e.getKeyPosition(e.lowestNote) + 3,\n\t\t\ty: e.keyHeight + 12,\n\t\t\tclass: \"note-label\"\n\t\t}, P(e.getNoteLabel(e.lowestNote)), 9, se),\n\t\tw(\"text\", {\n\t\t\tx: e.getKeyPosition(e.highestNote) + e.whiteKeyWidth - 3,\n\t\t\ty: e.keyHeight + 12,\n\t\t\t\"text-anchor\": \"end\",\n\t\t\tclass: \"note-label\"\n\t\t}, P(e.getNoteLabel(e.highestNote)), 9, ce)\n\t], 8, q))], 512)]);\n}\ne(_sfc_render$1, \"_sfc_render\");\n//#endregion\n//#region src/piano/utility/MidiConfig.vue?vue&type=script&lang.ts\nvar le = D({\n\tname: \"MidiConfig\",\n\tcomponents: { PianoRangeVisualizer: /* @__PURE__ */ i(W, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-4b232a8b\"]]) },\n\tprops: {\n\t\t_id: {\n\t\t\ttype: String,\n\t\t\trequired: !0\n\t\t},\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: !0\n\t\t}\n\t},\n\tsetup(e) {\n\t\tlet t = j(), n = j(!0), r = j([]), i = j([]), a = j(\"\"), o = j(\"\"), s = j(!1), c = j(\"\"), l = j(\"\"), u = j(!1), d = j(\"full-88\"), f = j(21), m = j(108), h = j(\"\"), g = j(0), _ = j(0), v = j([]), initNoteOptions = () => {\n\t\t\tlet e = [\n\t\t\t\t\"C\",\n\t\t\t\t\"C#\",\n\t\t\t\t\"D\",\n\t\t\t\t\"D#\",\n\t\t\t\t\"E\",\n\t\t\t\t\"F\",\n\t\t\t\t\"F#\",\n\t\t\t\t\"G\",\n\t\t\t\t\"G#\",\n\t\t\t\t\"A\",\n\t\t\t\t\"A#\",\n\t\t\t\t\"B\"\n\t\t\t], t = [];\n\t\t\tfor (let n = 0; n <= 127; n++) {\n\t\t\t\tlet r = Math.floor(n / 12) - 1, i = e[n % 12];\n\t\t\t\tt.push({\n\t\t\t\t\ttitle: `${i}${r} (${n})`,\n\t\t\t\t\tvalue: n\n\t\t\t\t});\n\t\t\t}\n\t\t\tv.value = t;\n\t\t}, y = j([\n\t\t\t{\n\t\t\t\ttitle: \"Full 88-key Piano (A0-C8)\",\n\t\t\t\tvalue: \"full-88\"\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"76-key Keyboard (E1-G7)\",\n\t\t\t\tvalue: \"76-key\"\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"61-key Keyboard (C2-C7)\",\n\t\t\t\tvalue: \"61-key\"\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"49-key Keyboard (C3-C7)\",\n\t\t\t\tvalue: \"49-key\"\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"37-key Keyboard (C3-C6)\",\n\t\t\t\tvalue: \"37-key\"\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"25-key Keyboard (C4-C6)\",\n\t\t\t\tvalue: \"25-key\"\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Custom Range\",\n\t\t\t\tvalue: \"custom\"\n\t\t\t}\n\t\t]), checkConfigChanged = () => {\n\t\t\tu.value = a.value !== c.value || o.value !== l.value || d.value !== h.value || d.value === \"custom\" && (f.value !== g.value || m.value !== _.value);\n\t\t}, updateCustomRangeFromPreset = () => {\n\t\t\tswitch (d.value) {\n\t\t\t\tcase \"full-88\":\n\t\t\t\t\tf.value = 21, m.value = 108;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"76-key\":\n\t\t\t\t\tf.value = 28, m.value = 103;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"61-key\":\n\t\t\t\t\tf.value = 36, m.value = 96;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"49-key\":\n\t\t\t\t\tf.value = 48, m.value = 96;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"37-key\":\n\t\t\t\t\tf.value = 48, m.value = 84;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"25-key\":\n\t\t\t\t\tf.value = 60, m.value = 84;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcheckConfigChanged();\n\t\t}, updateRangeAndCheckChanges = () => {\n\t\t\tf.value >= m.value && (m.value = f.value + 12), checkConfigChanged();\n\t\t}, playSound = () => {\n\t\t\tt.value?.play([\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 64,\n\t\t\t\t\t\tname: \"E\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .4251968503937008,\n\t\t\t\t\ttimestamp: 0\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 64,\n\t\t\t\t\t\tname: \"E\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .3779527559055118,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 511.90500000002794\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .5275590551181102,\n\t\t\t\t\ttimestamp: 535.8800000001211\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .33858267716535434,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 674.9899999999907\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .5590551181102362,\n\t\t\t\t\ttimestamp: 1070.8800000000047\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .3464566929133858,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 1214.8999999999069\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 64,\n\t\t\t\t\t\tname: \"E\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .5118110236220472,\n\t\t\t\t\ttimestamp: 1424.9400000000605\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 64,\n\t\t\t\t\t\tname: \"E\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .2755905511811024,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 1576.9150000000373\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 62,\n\t\t\t\t\t\tname: \"D\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .3937007874015748,\n\t\t\t\t\ttimestamp: 1756.9149999999208\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 62,\n\t\t\t\t\t\tname: \"D\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .36220472440944884,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 1926.9899999998743\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .5196850393700787,\n\t\t\t\t\ttimestamp: 1970.9600000000792\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .36220472440944884,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 2126.009999999893\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .5984251968503937,\n\t\t\t\t\ttimestamp: 2502.0050000000047\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 60,\n\t\t\t\t\t\tname: \"C\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .3858267716535433,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 2853.920000000042\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 67,\n\t\t\t\t\t\tname: \"G\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"noteon\",\n\t\t\t\t\tvelocity: .6850393700787402,\n\t\t\t\t\ttimestamp: 2875.8649999999907\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnote: {\n\t\t\t\t\t\tnumber: 67,\n\t\t\t\t\t\tname: \"G\",\n\t\t\t\t\t\toctave: 4\n\t\t\t\t\t},\n\t\t\t\t\tvelocity: .6377952755905512,\n\t\t\t\t\ttype: \"noteoff\",\n\t\t\t\t\ttimestamp: 4497.004999999888\n\t\t\t\t}\n\t\t\t]);\n\t\t}, indicateHeardNotes = (e) => {\n\t\t\tz({\n\t\t\t\ttext: `I hear a ${e.note.name}!`,\n\t\t\t\tstatus: V.ok\n\t\t\t});\n\t\t};\n\t\tF(a, () => {\n\t\t\tt.value?.selectInput(a.value), checkConfigChanged();\n\t\t}), F(o, () => {\n\t\t\tt.value?.selectOutput(o.value), checkConfigChanged();\n\t\t});\n\t\tlet retrieveSettings = async () => {\n\t\t\tlet t = await (await e.user.getCourseInterface(e._id)).getCourseSettings();\n\t\t\tif (t?.midiinput) {\n\t\t\t\tlet e = t.midiinput.toString();\n\t\t\t\tr.value.some((t) => t.value === e) && (a.value = e, c.value = e);\n\t\t\t}\n\t\t\tif (t?.midioutput) {\n\t\t\t\tlet e = t.midioutput.toString();\n\t\t\t\ti.value.some((t) => t.value === e) && (o.value = e, l.value = e);\n\t\t\t}\n\t\t\tt?.keyboardRange && (h.value = t.keyboardRange.toString(), d.value = h.value), t?.lowestNote && (g.value = parseInt(t.lowestNote.toString()), f.value = g.value), t?.highestNote && (_.value = parseInt(t.highestNote.toString()), m.value = _.value), t?.lowestNote && t?.highestNote && !t?.keyboardRange && (d.value = \"custom\"), u.value = !1;\n\t\t}, saveSettings = async () => {\n\t\t\ts.value = !0, (await H().getUserDB().getCourseInterface(e._id)).updateCourseSettings([\n\t\t\t\t{\n\t\t\t\t\tkey: \"midiinput\",\n\t\t\t\t\tvalue: a.value\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkey: \"midioutput\",\n\t\t\t\t\tvalue: o.value\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkey: \"keyboardRange\",\n\t\t\t\t\tvalue: d.value\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkey: \"lowestNote\",\n\t\t\t\t\tvalue: f.value\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkey: \"highestNote\",\n\t\t\t\t\tvalue: m.value\n\t\t\t\t}\n\t\t\t]), c.value = a.value, l.value = o.value, h.value = d.value, g.value = f.value, _.value = m.value, u.value = !1, s.value = !1, z({\n\t\t\t\ttext: \"Settings updated.\",\n\t\t\t\tstatus: V.ok\n\t\t\t});\n\t\t};\n\t\treturn k(async () => {\n\t\t\tinitNoteOptions();\n\t\t\ttry {\n\t\t\t\tt.value = await p.instance(), n.value = t.value.state === \"ready\" || t.value.state === \"nodevice\";\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(`Error on midi Init: ${e}`), n.value = !1;\n\t\t\t}\n\t\t\tn.value && (t.value?.addNoteonListenter(indicateHeardNotes), t.value ? (r.value = t.value.inputs.filter((e) => e.state === \"connected\").map((e) => ({\n\t\t\t\ttitle: `${e.manufacturer}: ${e.name}`,\n\t\t\t\tvalue: e.id\n\t\t\t})), i.value = t.value?.outputs.filter((e) => e.state === \"connected\").map((e) => ({\n\t\t\t\ttitle: `${e.manufacturer}: ${e.name}`,\n\t\t\t\tvalue: e.id\n\t\t\t}))) : (r.value = [{\n\t\t\t\ttitle: \"No inputs available\",\n\t\t\t\tvalue: \"\"\n\t\t\t}], i.value = [{\n\t\t\t\ttitle: \"No outputs available\",\n\t\t\t\tvalue: \"\"\n\t\t\t}]), await retrieveSettings(), !a.value && r.value.length > 0 && (a.value = r.value[0].value), !o.value && i.value.length > 0 && (o.value = i.value[0].value));\n\t\t}), {\n\t\t\tmidiSupported: n,\n\t\t\tinputs: r,\n\t\t\toutputs: i,\n\t\t\tselectedInput: a,\n\t\t\tselectedOutput: o,\n\t\t\tupdatePending: s,\n\t\t\tplaySound,\n\t\t\tsaveSettings,\n\t\t\tconfigChanged: u,\n\t\t\tlowestNote: f,\n\t\t\thighestNote: m,\n\t\t\tkeyboardRangeOptions: y,\n\t\t\tselectedKeyboardRange: d,\n\t\t\tnoteOptions: v,\n\t\t\tupdateCustomRangeFromPreset,\n\t\t\tupdateRangeAndCheckChanges\n\t\t};\n\t}\n}), Q = {\n\tkey: 0,\n\tclass: \"custom-range-inputs d-flex gap-4\"\n}, ue = { class: \"d-flex justify-space-between mt-3\" }, de = { key: 1 };\nfunction _sfc_render(e, t, n, r, i, a) {\n\tlet o = N(\"v-toolbar-title\"), s = N(\"v-toolbar\"), c = N(\"v-select\"), l = N(\"v-divider\"), u = N(\"piano-range-visualizer\"), d = N(\"v-btn\"), f = N(\"v-form\"), p = N(\"v-card-text\"), m = N(\"v-card\");\n\treturn A(), x(m, null, {\n\t\tdefault: I(() => [E(s, { dense: \"\" }, {\n\t\t\tdefault: I(() => [E(o, null, {\n\t\t\t\tdefault: I(() => t[5] ||= [T(\"Configure Midi Device\")]),\n\t\t\t\t_: 1\n\t\t\t})]),\n\t\t\t_: 1\n\t\t}), E(p, null, {\n\t\t\tdefault: I(() => [e.midiSupported ? (A(), x(f, {\n\t\t\t\tkey: 0,\n\t\t\t\tonsubmit: \"return false;\"\n\t\t\t}, {\n\t\t\t\tdefault: I(() => [\n\t\t\t\t\tE(c, {\n\t\t\t\t\t\tmodelValue: e.selectedInput,\n\t\t\t\t\t\t\"onUpdate:modelValue\": t[0] ||= (t) => e.selectedInput = t,\n\t\t\t\t\t\titems: e.inputs,\n\t\t\t\t\t\tlabel: \"Select Input\",\n\t\t\t\t\t\thint: \"Play some notes on your input device to test the connection\"\n\t\t\t\t\t}, null, 8, [\"modelValue\", \"items\"]),\n\t\t\t\t\tE(c, {\n\t\t\t\t\t\tmodelValue: e.selectedOutput,\n\t\t\t\t\t\t\"onUpdate:modelValue\": t[1] ||= (t) => e.selectedOutput = t,\n\t\t\t\t\t\titems: e.outputs,\n\t\t\t\t\t\tlabel: \"Select Output\"\n\t\t\t\t\t}, null, 8, [\"modelValue\", \"items\"]),\n\t\t\t\t\tE(l, { class: \"my-4\" }),\n\t\t\t\t\tt[8] ||= w(\"h3\", { class: \"text-subtitle-1 mb-2\" }, \"Keyboard Range\", -1),\n\t\t\t\t\tE(c, {\n\t\t\t\t\t\tmodelValue: e.selectedKeyboardRange,\n\t\t\t\t\t\t\"onUpdate:modelValue\": [t[2] ||= (t) => e.selectedKeyboardRange = t, e.updateCustomRangeFromPreset],\n\t\t\t\t\t\titems: e.keyboardRangeOptions,\n\t\t\t\t\t\tlabel: \"Select Keyboard Range\"\n\t\t\t\t\t}, null, 8, [\n\t\t\t\t\t\t\"modelValue\",\n\t\t\t\t\t\t\"items\",\n\t\t\t\t\t\t\"onUpdate:modelValue\"\n\t\t\t\t\t]),\n\t\t\t\t\te.selectedKeyboardRange === \"custom\" ? (A(), C(\"div\", Q, [E(c, {\n\t\t\t\t\t\tmodelValue: e.lowestNote,\n\t\t\t\t\t\t\"onUpdate:modelValue\": [t[3] ||= (t) => e.lowestNote = t, e.updateRangeAndCheckChanges],\n\t\t\t\t\t\titems: e.noteOptions,\n\t\t\t\t\t\tlabel: \"Lowest Note\"\n\t\t\t\t\t}, null, 8, [\n\t\t\t\t\t\t\"modelValue\",\n\t\t\t\t\t\t\"items\",\n\t\t\t\t\t\t\"onUpdate:modelValue\"\n\t\t\t\t\t]), E(c, {\n\t\t\t\t\t\tmodelValue: e.highestNote,\n\t\t\t\t\t\t\"onUpdate:modelValue\": [t[4] ||= (t) => e.highestNote = t, e.updateRangeAndCheckChanges],\n\t\t\t\t\t\titems: e.noteOptions,\n\t\t\t\t\t\tlabel: \"Highest Note\"\n\t\t\t\t\t}, null, 8, [\n\t\t\t\t\t\t\"modelValue\",\n\t\t\t\t\t\t\"items\",\n\t\t\t\t\t\t\"onUpdate:modelValue\"\n\t\t\t\t\t])])) : S(\"\", !0),\n\t\t\t\t\tE(u, {\n\t\t\t\t\t\t\"lowest-note\": e.lowestNote,\n\t\t\t\t\t\t\"highest-note\": e.highestNote\n\t\t\t\t\t}, null, 8, [\"lowest-note\", \"highest-note\"]),\n\t\t\t\t\tw(\"div\", ue, [E(d, {\n\t\t\t\t\t\tcolor: \"primary\",\n\t\t\t\t\t\tonClick: e.playSound\n\t\t\t\t\t}, {\n\t\t\t\t\t\tdefault: I(() => t[6] ||= [T(\"Test midi output\")]),\n\t\t\t\t\t\t_: 1\n\t\t\t\t\t}, 8, [\"onClick\"]), E(d, {\n\t\t\t\t\t\tloading: e.updatePending,\n\t\t\t\t\t\tdisabled: !e.configChanged && !e.updatePending,\n\t\t\t\t\t\tcolor: \"info\",\n\t\t\t\t\t\tclass: \"save-button\",\n\t\t\t\t\t\tonClick: e.saveSettings\n\t\t\t\t\t}, {\n\t\t\t\t\t\tdefault: I(() => t[7] ||= [T(\" Save these settings \")]),\n\t\t\t\t\t\t_: 1\n\t\t\t\t\t}, 8, [\n\t\t\t\t\t\t\"loading\",\n\t\t\t\t\t\t\"disabled\",\n\t\t\t\t\t\t\"onClick\"\n\t\t\t\t\t])])\n\t\t\t\t]),\n\t\t\t\t_: 1\n\t\t\t})) : (A(), C(\"div\", de, t[9] ||= [w(\"p\", null, \"This quilt requires a midi input device, which is not supported by this browser.\", -1), w(\"div\", null, [w(\"p\", null, \"Try one of the following browsers:\"), w(\"ul\", null, [\n\t\t\t\tw(\"li\", null, [w(\"a\", { href: \"https://www.google.com/chrome/\" }, \"Google Chrome\")]),\n\t\t\t\tw(\"li\", null, [w(\"a\", { href: \"https://www.microsoft.com/edge\" }, \"Microsoft Edge\")]),\n\t\t\t\tw(\"li\", null, [w(\"a\", { href: \"https://brave.com/\" }, \"Brave\")])\n\t\t\t])], -1)]))]),\n\t\t\t_: 1\n\t\t})]),\n\t\t_: 1\n\t});\n}\nvar fe = /* @__PURE__ */ i(le, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-6ee9020f\"]]), pe = ee;\nasync function loadSubcourse(e) {\n\tlet t;\n\tswitch (e) {\n\t\tcase \"chess\":\n\t\t\tt = await import(\"./chess-Lfm7Fsvs.js\");\n\t\t\tbreak;\n\t\tcase \"french\":\n\t\t\tt = await import(\"./french-evUMlbbq.js\");\n\t\t\tbreak;\n\t\tcase \"math\":\n\t\t\tt = await import(\"./math-DR3fXDcX.js\");\n\t\t\tbreak;\n\t\tcase \"piano\":\n\t\t\tt = await import(\"./piano-BN5Btq91.js\");\n\t\t\tbreak;\n\t\tcase \"pitch\":\n\t\t\tt = await import(\"./pitch-Dn0iNqiS.js\");\n\t\t\tbreak;\n\t\tcase \"sightSing\":\n\t\t\tt = await import(\"./sightsing-CJX3k0Fd.js\");\n\t\t\tbreak;\n\t\tcase \"typing\":\n\t\t\tt = await import(\"./typing-k-ojjO7G.js\");\n\t\t\tbreak;\n\t\tcase \"wordWork\":\n\t\t\tt = await import(\"./word-work-Dd6tIKrt.js\");\n\t\t\tbreak;\n\t}\n\tlet n = t.default;\n\treturn $.courses.find((e) => e.name === n.name) || $.courses.push(n), n;\n}\nasync function loadAllSubcourses() {\n\tawait Promise.all([\n\t\t\"chess\",\n\t\t\"french\",\n\t\t\"math\",\n\t\t\"piano\",\n\t\t\"pitch\",\n\t\t\"sightSing\",\n\t\t\"typing\",\n\t\t\"wordWork\"\n\t].map((e) => loadSubcourse(e)));\n}\nvar AllCourseWare = class {\n\tcourseWareList;\n\tget courses() {\n\t\treturn this.courseWareList;\n\t}\n\tconstructor(e) {\n\t\tthis.courseWareList = e;\n\t}\n\tgetCourseWare(e) {\n\t\treturn this.courseWareList.find((t) => t.name === e);\n\t}\n\tcachedRawViews = null;\n\tallViewsRaw() {\n\t\tif (!this.cachedRawViews) {\n\t\t\tlet e = this.allViews();\n\t\t\tthis.cachedRawViews = Object.fromEntries(Object.entries(e).map(([e, t]) => [e, O(t)]));\n\t\t}\n\t\treturn this.cachedRawViews;\n\t}\n\tallViews() {\n\t\tlet e = {};\n\t\treturn this.courseWareList.forEach((t) => {\n\t\t\tObject.assign(e, t.allViewsMap);\n\t\t}), e;\n\t}\n\tgetView(e) {\n\t\tlet t;\n\t\tt = typeof e == \"string\" ? B.getViewDescriptor(e) : e;\n\t\tlet n = this.getCourseWare(t.course);\n\t\tif (n) {\n\t\t\tlet e = n.getQuestion(t.questionType);\n\t\t\tif (e) {\n\t\t\t\tlet r = e.views.find((e) => e.name === t.view);\n\t\t\t\tif (r) return r;\n\t\t\t\tthrow console.error(`QuestionView ${t.view} not found in course ${t.course}\n\n descriptor: ${JSON.stringify(t)}\n\n course: ${n.name}\n question: ${e.name}\n views: ${e.views.map((e) => e.name).join(\", \")}\n `), Error(`view ${t.view} does not exist.`);\n\t\t\t} else throw console.error(`Question ${t.questionType} not found in course ${t.course}\n\n descriptor: ${JSON.stringify(t)}\n\n course: ${n.name}\n questions: ${n.questions.map((e) => e.name).join(\", \")}\n `), Error(`question ${t.questionType} does not exist.`);\n\t\t} else throw console.error(`Course ${t.course} not found.\n\n descriptor: ${JSON.stringify(t)}`), Error(`course ${t.course} does not exist.`);\n\t}\n\ttoString() {\n\t\tlet e = \"\";\n\t\treturn this.courses.forEach((t) => {\n\t\t\te += `Course: ${t.name}\\n`, t.questions.forEach((t) => {\n\t\t\t\te += ` Question: ${t.name}\\n`, t.views.forEach((t) => {\n\t\t\t\t\te += ` View: ${t.name}\\n`;\n\t\t\t\t});\n\t\t\t});\n\t\t}), e;\n\t}\n\tallDataShapesRaw() {\n\t\tlet e = [];\n\t\treturn this.courseWareList.forEach((t) => {\n\t\t\tt.questions.forEach((t) => {\n\t\t\t\tt.dataShapes.forEach((t) => {\n\t\t\t\t\te.includes(t) || e.push(t);\n\t\t\t\t});\n\t\t\t});\n\t\t}), e;\n\t}\n\tallDataShapes() {\n\t\tlet e = [];\n\t\treturn this.courseWareList.forEach((t) => {\n\t\t\tt.questions.forEach((n) => {\n\t\t\t\tn.dataShapes.forEach((r) => {\n\t\t\t\t\te.findIndex((e) => e.course === t.name && e.dataShape === r.name) === -1 && e.push({\n\t\t\t\t\t\tcourse: t.name,\n\t\t\t\t\t\tdataShape: r.name,\n\t\t\t\t\t\tdisplayable: n\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t}), e;\n\t}\n\tgetDataShape(e) {\n\t\tlet t;\n\t\tif (this.getCourseWare(e.course).questions.forEach((n) => {\n\t\t\tn.dataShapes.forEach((n) => {\n\t\t\t\tn.name === e.dataShape && (t = n);\n\t\t\t});\n\t\t}), t) return t;\n\t\tthrow Error(`DataShape ${B.getDataShapeString(e)} not found`);\n\t}\n}, $ = new AllCourseWare([]);\n//#endregion\nexport { AllCourseWare, r as BlanksCard, t as BlanksCardDataShapes, a as CourseWare, L as Displayable, fe as MidiConfig, R as Question, p as SkMidi, d as SyllableSeqVis, u as SyllableSequence, $ as allCourseWare, o as chess, U as defaultCourse, l as eventsToSyllableSequence, s as french, n as gradeSpellingAttempt, loadAllSubcourses, loadSubcourse, c as math, m as piano, h as pitch, g as sightSing, f as transposeSyllableSeq, _ as typing, pe as useQuestionView, te as useViewable, v as wordWork };\n\n//# sourceMappingURL=index.mjs.map"],"file":"dist-BJLhyG8r.js"}
@@ -0,0 +1 @@
1
+ import"./vue.runtime.esm-bundler--Fxmd6l9.js";import"./MarkdownRenderer-borh39Lq.js";import"./moment-DbT30ZpG.js";import"./dist-C8EQUxWW.js";import"./contentSource-FGhM_ge8.js";import"./dist-DGbpjpKB.js";import"./CourseWare-BTFRjgBR-lpqcYpAW.js";import"./PipelineDebugger-DhnKlMgD.js";import"./eloDistance-CRxxdYPJ.js";import"./chess-E2uOAyQS-DDTgqZMJ.js";import"./french-Dk7YG8Td-C2awfrzV.js";import"./math-D_8HiEQR-CQynsoTm.js";import"./piano-DF1g6yaX-vXbP1jX_.js";import"./pitch-CgGJFkZ1-DVzOpIVa.js";import"./sightsing-BFQ7HRig-CYuNcd8z.js";import"./typing-BevtfWlp-C0NbuTKI.js";import"./word-work-BOnRlZgd-CsMkeNdI.js";import{a as e,r as t,t as n}from"./dist-BJLhyG8r.js";export{n as allCourseWare,t as defaultCourse,e as loadAllSubcourses};
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dist-Dnehy0sn.js","assets/PipelineDebugger-BHaqzqZw.js","assets/defineProperty-y9rbOPYz.js","assets/chunk-D6hFPZc3.js","assets/contentSource-DwznMSMs.js","assets/moment-DbT30ZpG.js","assets/elo-B5qCwvSC.js","assets/tagRoles-jR-PJAgj.js","assets/eloDistance-BV7vfiK5.js","assets/elo-COgu6Hu5.js","assets/srs-DOsG9Y-i.js","assets/userDBKeys-DYLGKnVC.js","assets/dist-Dp6eBE2S.js","assets/UserDBDebugger-DPqlc4O_.js","assets/MarkdownRenderer-WG9YrHpe.js","assets/MarkdownRenderer-borh39Lq.js","assets/vue.runtime.esm-bundler--Fxmd6l9.js","assets/logshim-YQI0WloD.js"])))=>i.map(i=>d[i]);
2
- import{i as t,n,o as r,r as i,s as a,t as o}from"./chunk-D6hFPZc3.js";import{$ as s,At as c,B as l,Bt as u,C as d,Ct as f,D as p,Dt as m,Et as h,Ft as g,G as _,H as v,Ht as y,I as b,It as x,J as S,K as C,Lt as w,M as T,Mt as E,Nt as D,Ot as ee,Pt as O,Rt as te,S as k,St as ne,T as A,Tt as re,Ut as ie,Vt as ae,W as oe,Z as se,_ as j,_t as ce,b as N,bt as le,c as ue,et as de,f as fe,g as P,i as pe,jt as me,kt as he,l as ge,o as _e,ot as ve,s as ye,t as be,u as xe,ut as I,v as R,vt as Se,w as Ce,wt as we,x as Te,xt as Ee,y as z,yt as De,z as Oe,zt as Ae}from"./vue.runtime.esm-bundler--Fxmd6l9.js";import{i as je,r as Me}from"./vue-router-HoUBO3s7.js";import{D as H,E as Ne,_ as Pe,h as Fe,m as Ie,v as Le,w as Re,x as ze,y as Be}from"./MarkdownRenderer-borh39Lq.js";import{t as Ve}from"./moment-DbT30ZpG.js";import{B as He,K as Ue,U as We,V as Ge,t as Ke}from"./contentSource-DwznMSMs.js";import{s as qe}from"./elo-B5qCwvSC.js";import{t as U}from"./logshim-YQI0WloD.js";import{b as Je,r as Ye}from"./dist-Dp6eBE2S.js";import{j as Xe}from"./PipelineDebugger-BHaqzqZw.js";import{c as Ze,d as Qe}from"./userDBKeys-DYLGKnVC.js";var $e=A({name:`HeatMap`,props:{activityRecords:{type:Array,default:()=>[]},activityRecordsGetter:{type:Function,default:null},inactiveColor:{type:Object,default:()=>({h:0,s:0,l:.9})},activeColor:{type:Object,default:()=>({h:155,s:1,l:.5})},cellSize:{type:Number,default:12},cellMargin:{type:Number,default:3},enableSeasonalColors:{type:Boolean,default:!0}},data(){return{isLoading:!1,localActivityRecords:[],heatmapData:{},weeks:[],tooltipData:null,tooltipStyle:{},maxInRange:0}},computed:{width(){return 53*(this.cellSize+this.cellMargin)},height(){return 7*(this.cellSize+this.cellMargin)},effectiveActivityRecords(){let t=Array.isArray(this.localActivityRecords)&&this.localActivityRecords.length>0,n=t?this.localActivityRecords:this.activityRecords||[];return console.log(`Using effectiveActivityRecords, count:`,n.length,`source:`,t?`local`:`prop`),n}},watch:{activityRecords:{handler(){this.processRecords(),this.createWeeksData()},immediate:!0}},async created(){if(this.activityRecordsGetter)try{this.isLoading=!0,console.log(`Fetching activity records using getter...`);let t=await this.activityRecordsGetter();Array.isArray(t)?(this.localActivityRecords=t.filter(t=>{if(!t||!t.timeStamp)return!1;try{let n=Ve(t.timeStamp);return n.isValid()&&n.year()>2e3&&n.year()<2100}catch{return!1}}),console.log(`Received ${t.length} records, ${this.localActivityRecords.length} valid after filtering`),this.processRecords(),this.createWeeksData()):(console.error(`Activity records getter did not return an array:`,t),this.localActivityRecords=[])}catch(t){console.error(`Error fetching activity records:`,t),this.localActivityRecords=[]}finally{this.isLoading=!1}else console.log(`No activityRecordsGetter provided, using direct activityRecords prop`)},methods:{toDateString(t){let n=Ve(t);return Ve.months()[n.month()]+` `+n.date()},processRecords(){let t=this.effectiveActivityRecords||[];console.log(`Processing ${t.length} records`);let n={};if(t.length===0){console.log(`No records to process`),this.heatmapData=n;return}let r=new Set,i={},a=0,o=0;for(let s=0;s<t.length;s++){let c=t[s];if(!c||typeof c!=`object`||!c.timeStamp){o++;continue}try{let t;if(typeof c.timeStamp==`string`)t=Ve(c.timeStamp).format(`YYYY-MM-DD`);else if(typeof c.timeStamp==`number`)t=Ve(new Date(c.timeStamp)).format(`YYYY-MM-DD`);else if(typeof c.timeStamp==`object`)t=typeof c.timeStamp.format==`function`?c.timeStamp.format(`YYYY-MM-DD`):c.timeStamp instanceof Date?Ve(c.timeStamp).format(`YYYY-MM-DD`):Ve(String(c.timeStamp)).format(`YYYY-MM-DD`);else{o++;continue}if(Ve(t,`YYYY-MM-DD`,!0).isValid()){n[t]=(n[t]||0)+1,r.add(t);let o=t.substring(0,7);i[o]=(i[o]||0)+1,a++}else o++}catch{o++}}console.log(`Processed ${a} valid dates, ${o} invalid dates`),console.log(`Found ${r.size} unique dates`),console.log(`Date distribution by month:`,i),this.heatmapData=n},createWeeksData(){this.weeks=[],this.maxInRange=0;let t=Ve(),n=t.clone().subtract(52,`weeks`),r=n.clone().startOf(`week`);console.log(`Creating weeks data from`,n.format(`YYYY-MM-DD`),`to`,t.format(`YYYY-MM-DD`)),Object.keys(this.heatmapData).length===0&&console.log(`No heatmap data available to display`);let i=Object.keys(this.heatmapData).slice(0,5);for(console.log(`Sample dates in heatmap data:`,i);r.isSameOrBefore(t);){let t=[];for(let n=0;n<7;n++){let n=r.format(`YYYY-MM-DD`),i={date:n,count:this.heatmapData[n]||0};t.push(i),i.count>this.maxInRange&&(this.maxInRange=i.count),r.add(1,`day`)}this.weeks.push(t)}console.log(`Weeks data created, maxInRange:`,this.maxInRange);let a=0,o=0;Object.values(this.heatmapData).forEach(t=>{a++,o+=t}),console.log(`Activity summary: ${o} activities across ${a} days`)},getColor(t){if(this.maxInRange===0)return this.hslToString(this.inactiveColor);let n=t===0?0:Math.min(2*t/this.maxInRange,1),r=this.activeColor;if(this.enableSeasonalColors){let t=Ve();t.month()===11&&t.date()>=5?r=Math.random()>.5?{h:350,s:.8,l:.5}:{h:135,s:.8,l:.4}:t.month()===9&&t.date()>=25&&(r=Math.random()>.5?{h:0,s:0,l:0}:Math.random()>.5?{h:30,s:1,l:.5}:{h:270,s:1,l:.5})}let i=r.h,a=this.interpolate(this.inactiveColor.s,r.s,n),o=this.interpolate(this.inactiveColor.l,r.l,n);return this.hslToString({h:i,s:a,l:o})},interpolate(t,n,r){return t+(n-t)*r},hslToString(t){return`hsl(${t.h}, ${t.s*100}%, ${t.l*100}%)`},showTooltip(t,n){this.tooltipData=t,this.tooltipStyle={position:`absolute`,left:`${n.pageX+10}px`,top:`${n.pageY+10}px`}},hideTooltip(){this.tooltipData=null}}}),et=[`width`,`height`],tt=[`transform`],nt=[`y`,`width`,`height`,`fill`,`onMouseover`];function _sfc_render$25(t,n,r,i,a,o){return v(),N(`div`,null,[(v(),N(`svg`,{width:t.width,height:t.height},[(v(!0),N(fe,null,oe(t.weeks,(r,i)=>(v(),N(`g`,{key:i,transform:`translate(${i*(t.cellSize+t.cellMargin)}, 0)`},[(v(!0),N(fe,null,oe(r,(r,i)=>(v(),N(`rect`,{key:r.date,x:0,y:i*(t.cellSize+t.cellMargin),width:t.cellSize,height:t.cellSize,fill:t.getColor(r.count),onMouseover:n=>t.showTooltip(r,n),onMouseout:n[0]||(n[0]=(...n)=>t.hideTooltip&&t.hideTooltip(...n))},null,40,nt))),128))],8,tt))),128))],8,et)),t.tooltipData?(v(),N(`div`,{key:0,class:`tooltip`,style:Ae(t.tooltipStyle)},y(t.tooltipData.count)+` review`+y(t.tooltipData.count===1?``:`s`)+` on `+y(t.toDateString(t.tooltipData.date)),5)):z(``,!0)])}t(_sfc_render$25,`_sfc_render`);var rt=H($e,[[`render`,_sfc_render$25],[`__scopeId`,`data-v-ca46239a`]]),it=A({name:`SkMouseTrap`,props:{refreshInterval:{type:Number,default:500}},data(){return{commands:[],display:!1,intervalId:null}},created(){this.intervalId=window.setInterval(this.refreshState,this.refreshInterval)},beforeUnmount(){this.intervalId!==null&&clearInterval(this.intervalId)},methods:{refreshState(){this.commands=Re.commands,this.display=this.commands.length>0}}}),at={class:`text-caption ml-2`};function _sfc_render$24(t,n,r,i,a,o){let c=C(`v-icon`),l=C(`v-btn`),u=C(`v-toolbar-title`),f=C(`v-toolbar`),p=C(`v-spacer`),m=C(`v-list-item`),h=C(`v-list`),g=C(`v-card`),_=C(`v-dialog`);return t.display?(v(),R(_,{key:0,"max-width":`500px`,transition:`dialog-transition`},{activator:s(({props:t})=>[d(l,T({icon:``,color:`primary`},t),{default:s(()=>[d(c,null,{default:s(()=>n[0]||(n[0]=[k(`mdi-keyboard`)])),_:1})]),_:2},1040)]),default:s(()=>[d(g,null,{default:s(()=>[d(f,{color:`secondary`,dark:``,dense:``},{default:s(()=>[d(u,{class:`text-subtitle-1`},{default:s(()=>n[1]||(n[1]=[k(`Shortcut keys:`)])),_:1})]),_:1}),d(h,{dense:``},{default:s(()=>[(v(!0),N(fe,null,oe(t.commands,t=>(v(),R(m,{key:Array.isArray(t.hotkey)?t.hotkey.join(`,`):t.hotkey,class:`py-1`},{default:s(()=>[d(l,{variant:`outlined`,color:`primary`,class:`text-white`,size:`small`},{default:s(()=>[k(y(Array.isArray(t.hotkey)?t.hotkey[0]:t.hotkey),1)]),_:2},1024),d(p),j(`span`,at,y(t.command),1)]),_:2},1024))),128))]),_:1})]),_:1})]),_:1})):z(``,!0)}t(_sfc_render$24,`_sfc_render`);var ot=H(it,[[`render`,_sfc_render$24]]),st=A({name:`SkMouseTrapToolTip`,props:{hotkey:{type:[String,Array],required:!0},command:{type:String,required:!0},disabled:{type:Boolean,default:!1},position:{type:String,default:`top`},showTooltip:{type:Boolean,default:!0},highlightEffect:{type:String,default:`glow`}},emits:[`hotkey-triggered`],setup(t,{emit:n}){let r=I(null),i=I(!1);I(`hotkey-${Math.random().toString(36).substring(2,15)}`);let a=P(()=>{let n=Array.isArray(t.hotkey)?t.hotkey[0]:t.hotkey;return n.includes(` `)?n.toLowerCase().split(` `).map(t=>t.charAt(0)+t.slice(1)).join(`, `):n.toLowerCase().split(`+`).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(` + `)});se(()=>i.value,n=>{if(!r.value||t.disabled)return;let i=r.value.querySelector(`button, a, input[type="button"], [role="button"]`);i&&(i.style.transition=`all 250ms ease`,n&&t.highlightEffect!==`none`?i.style.filter=`brightness(1.1)`:i.style.filter=``)});let handleKeyDown=t=>{t.key===`Control`&&(i.value=!0)},handleKeyUp=t=>{t.key===`Control`&&(i.value=!1)},handleHotkeyPress=()=>{if(t.disabled||!r.value)return;let i=r.value.querySelector(`button, a, input[type="button"], [role="button"]`);if(i||(i=r.value.querySelector(`v-list-item, .v-list-item, router-link, .router-link, a, [to]`)),!i&&(r.value.hasAttribute(`to`)||r.value.tagName===`A`||r.value.classList.contains(`v-list-item`))&&(i=r.value),!i){let t=r.value.closest(`v-list-item, .v-list-item, a, [to]`);t&&(i=t)}if(i)if(i.hasAttribute(`to`)){let r=i.getAttribute(`to`);if(r&&window.location.pathname!==r){let t=window.$nuxt?.$router||window.$router;t&&typeof t.push==`function`?t.push(r):window.location.pathname=r}n(`hotkey-triggered`,t.hotkey)}else i.click(),n(`hotkey-triggered`,t.hotkey);else console.log(`No clickable element found for hotkey`,t.hotkey),n(`hotkey-triggered`,t.hotkey)},registerHotkey=()=>{t.disabled||Re.addBinding({hotkey:t.hotkey,command:t.command,callback:handleHotkeyPress})},unregisterHotkey=()=>{t.disabled||Re.removeBinding(t.hotkey)};return se(()=>t.disabled,t=>{t?unregisterHotkey():registerHotkey()}),Oe(()=>{document.addEventListener(`keydown`,handleKeyDown),document.addEventListener(`keyup`,handleKeyUp),registerHotkey()}),b(()=>{document.removeEventListener(`keydown`,handleKeyDown),document.removeEventListener(`keyup`,handleKeyUp),unregisterHotkey()}),{wrapperElement:r,isControlKeyPressed:i,formattedHotkey:a}}});function _sfc_render$23(t,n,r,i,a,o){return v(),N(`div`,{class:w([`sk-mousetrap-tooltip-wrapper`,[t.isControlKeyPressed&&!t.disabled&&t.highlightEffect!==`none`?`sk-mousetrap-highlight-${t.highlightEffect}`:``]]),ref:`wrapperElement`},[_(t.$slots,`default`,{},void 0,!0),d(be,{name:`fade`},{default:s(()=>[t.showTooltip&&t.isControlKeyPressed&&!t.disabled?(v(),N(`div`,{key:0,class:w([`sk-mousetrap-tooltip`,{"sk-mt-tooltip-top":t.position===`top`,"sk-mt-tooltip-bottom":t.position===`bottom`,"sk-mt-tooltip-left":t.position===`left`,"sk-mt-tooltip-right":t.position===`right`}])},y(t.formattedHotkey),3)):z(``,!0)]),_:1})],2)}t(_sfc_render$23,`_sfc_render`);var ct=H(st,[[`render`,_sfc_render$23],[`__scopeId`,`data-v-5d6fb09c`]]),{setInstance:lt,getInstance:ut,alertUser:dt}=(()=>{let t=null;return{setInstance(n){t=n},getInstance(){return t},alertUser(n){let r=t;if(r){r.addSnack(n);return}console.error(`SnackbarService not found`)}}})(),ft=A({name:`SnackbarService`,data(){return{snacks:[],show:[]}},mounted(){lt(this)},methods:{addSnack(t){this.snacks.push(t),this.show.push(!0)},close(){this.show.pop(),this.show.push(!1)},getColor(t){if(t.status===Ue.ok)return`success`;if(t.status===Ue.error)return`error`;if(t.status===Ue.warning)return`yellow`}}}),pt={class:`d-flex align-center justify-space-between w-100`};function _sfc_render$22(t,n,r,i,a,o){let c=C(`v-icon`),l=C(`v-btn`),u=C(`v-snackbar`);return v(),N(`div`,null,[(v(!0),N(fe,null,oe(t.snacks,r=>(v(),R(u,{key:t.snacks.indexOf(r),modelValue:t.show[t.snacks.indexOf(r)],"onUpdate:modelValue":n=>t.show[t.snacks.indexOf(r)]=n,timeout:r.timeout,location:`bottom right`,color:t.getColor(r)},{default:s(()=>[j(`div`,pt,[j(`span`,null,y(r.text),1),d(l,{icon:``,variant:`text`,onClick:n[0]||(n[0]=n=>t.close())},{default:s(()=>[d(c,null,{default:s(()=>n[1]||(n[1]=[k(`mdi-close`)])),_:1})]),_:1})])]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`timeout`,`color`]))),128))])}t(_sfc_render$22,`_sfc_render`);var mt=H(ft,[[`render`,_sfc_render$22]]),ht=A({name:`PaginatingToolbar`,props:{pages:{type:Array,required:!0},page:{type:Number,required:!0},title:{type:String,required:!1,default:``},subtitle:{type:String,required:!1,default:``}},emits:[`first`,`prev`,`next`,`last`,`set-page`]}),gt={key:0,class:`ms-2 text-subtitle-2`,"data-cy":`paginating-toolbar-subtitle`};function _sfc_render$21(t,n,r,i,a,o){let c=C(`v-toolbar-title`),l=C(`v-spacer`),u=C(`v-icon`),f=C(`v-btn`),p=C(`v-select`),m=C(`v-toolbar`);return v(),R(m,{density:`compact`},{default:s(()=>[d(c,null,{default:s(()=>[j(`span`,null,y(t.title),1),t.subtitle?(v(),N(`span`,gt,y(t.subtitle),1)):z(``,!0)]),_:1}),d(l),d(f,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==1,onClick:n[0]||(n[0]=n=>t.$emit(`first`))},{default:s(()=>[d(u,null,{default:s(()=>n[5]||(n[5]=[k(`mdi-page-first`)])),_:1})]),_:1},8,[`disabled`]),d(f,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==1,onClick:n[1]||(n[1]=n=>t.$emit(`prev`))},{default:s(()=>[d(u,null,{default:s(()=>n[6]||(n[6]=[k(`mdi-chevron-left`)])),_:1})]),_:1},8,[`disabled`]),d(p,{"model-value":t.page,items:t.pages,class:`pageSelect`,density:`compact`,"hide-details":``,"return-object":!1,variant:`outlined`,"onUpdate:modelValue":n[2]||(n[2]=n=>t.$emit(`set-page`,n))},{selection:s(({item:t})=>[k(y(t.value),1)]),_:1},8,[`model-value`,`items`]),d(f,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==t.pages.length,onClick:n[3]||(n[3]=n=>t.$emit(`next`))},{default:s(()=>[d(u,null,{default:s(()=>n[7]||(n[7]=[k(`mdi-chevron-right`)])),_:1})]),_:1},8,[`disabled`]),d(f,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==t.pages.length,onClick:n[4]||(n[4]=n=>t.$emit(`last`))},{default:s(()=>[d(u,null,{default:s(()=>n[8]||(n[8]=[k(`mdi-page-last`)])),_:1})]),_:1},8,[`disabled`])]),_:1})}t(_sfc_render$21,`_sfc_render`);var _t=H(ht,[[`render`,_sfc_render$21],[`__scopeId`,`data-v-a75fea7e`]]),vt=A({name:`CardSearch`,emits:{search:t=>typeof t==`string`},data(){return{query:``}},methods:{search(){this.$emit(`search`,this.query)}}}),yt={class:`card-search`};function _sfc_render$20(t,n,r,i,a,o){let s=C(`v-text-field`);return v(),N(`div`,yt,[d(s,{modelValue:t.query,"onUpdate:modelValue":n[0]||(n[0]=n=>t.query=n),label:`Search for cards...`,"append-icon":`mdi-magnify`,"onClick:append":t.search,onKeydown:ge(t.search,[`enter`])},null,8,[`modelValue`,`onClick:append`,`onKeydown`])])}t(_sfc_render$20,`_sfc_render`);var bt=H(vt,[[`render`,_sfc_render$20]]),xt=A({name:`CardSearchResults`,emits:{"card-selected":t=>typeof t.cardId==`string`&&typeof t.courseId==`string`},props:{query:{type:String,required:!0},dataLayer:{type:Object,required:!0},courseFilter:{type:String,default:null}},data(){return{cards:[],loading:!1,error:null,selectedCardId:null}},watch:{query:{immediate:!0,handler(t){t&&this.fetchResults(t)}}},methods:{async fetchResults(t){this.loading=!0,this.error=null;try{let n=[];if(this.courseFilter)n=[this.courseFilter],console.log(`Filtering search to course: ${this.courseFilter}`);else{let{CourseLookup:t}=await Xe(async()=>{let{CourseLookup:t}=await import(`./dist-Dnehy0sn.js`);return{CourseLookup:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13]));n=(await t.allCourseWare()).map(t=>t._id).filter(Boolean),console.log(`Searching across all ${n.length} courses`)}let r=[];for(let i of n){let n=await this.dataLayer.getCourseDB(i).searchCards(t);for(let t of n)r.push({...t,courseId:i})}this.cards=r,console.log(`Search completed: found ${r.length} cards across ${n.length} courses`)}catch(t){this.error=`Error fetching search results.`,console.error(`Search error:`,t)}finally{this.loading=!1}},selectCard(t){this.selectedCardId=t._id,this.$emit(`card-selected`,{cardId:t._id,courseId:t.courseId})}}}),St={class:`card-search-results`},Ct={key:0},wt={key:1},Tt={key:2};function _sfc_render$19(t,n,r,i,a,o){let c=C(`v-list-item-title`),l=C(`v-list-item-subtitle`),u=C(`v-list-item`),f=C(`v-list`);return v(),N(`div`,St,[t.loading?(v(),N(`div`,Ct,`Loading...`)):t.error?(v(),N(`div`,wt,y(t.error),1)):(v(),N(`div`,Tt,[d(f,null,{default:s(()=>[(v(!0),N(fe,null,oe(t.cards,n=>(v(),R(u,{key:n._id,onClick:r=>t.selectCard(n),class:w([{"selected-card":n._id===t.selectedCardId},`cursor-pointer`])},{default:s(()=>[d(c,null,{default:s(()=>[k(y(n._id),1)]),_:2},1024),d(l,null,{default:s(()=>[k(`Course: `+y(n.courseId),1)]),_:2},1024)]),_:2},1032,[`onClick`,`class`]))),128))]),_:1})]))])}t(_sfc_render$19,`_sfc_render`);var Et=H(xt,[[`render`,_sfc_render$19],[`__scopeId`,`data-v-285e13bd`]]),Displayable=class{constructor(t){if(t.length===0)throw Error(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dist-5Z6GjIpR.js","assets/PipelineDebugger-DhnKlMgD.js","assets/defineProperty-y9rbOPYz.js","assets/chunk-D6hFPZc3.js","assets/contentSource-FGhM_ge8.js","assets/moment-DbT30ZpG.js","assets/elo-B5qCwvSC.js","assets/tagRoles-jR-PJAgj.js","assets/eloDistance-CRxxdYPJ.js","assets/elo-C4ZdbMIJ.js","assets/srs-B3R2C3TU.js","assets/userDBKeys-3SQjNVdK.js","assets/dist-DGbpjpKB.js","assets/UserDBDebugger-BXLoT28w.js","assets/MarkdownRenderer-WG9YrHpe.js","assets/MarkdownRenderer-borh39Lq.js","assets/vue.runtime.esm-bundler--Fxmd6l9.js","assets/logshim-YQI0WloD.js"])))=>i.map(i=>d[i]);
2
+ import{i as t,n,o as r,r as i,s as a,t as o}from"./chunk-D6hFPZc3.js";import{$ as s,At as c,B as l,Bt as u,C as d,Ct as f,D as p,Dt as m,Et as h,Ft as g,G as _,H as v,Ht as y,I as b,It as x,J as S,K as C,Lt as w,M as T,Mt as E,Nt as D,Ot as ee,Pt as O,Rt as te,S as k,St as ne,T as A,Tt as re,Ut as ie,Vt as ae,W as oe,Z as se,_ as j,_t as ce,b as N,bt as le,c as ue,et as de,f as fe,g as P,i as pe,jt as me,kt as he,l as ge,o as _e,ot as ve,s as ye,t as be,u as xe,ut as I,v as R,vt as Se,w as Ce,wt as we,x as Te,xt as Ee,y as z,yt as De,z as Oe,zt as Ae}from"./vue.runtime.esm-bundler--Fxmd6l9.js";import{i as je,r as Me}from"./vue-router-HoUBO3s7.js";import{D as H,E as Ne,_ as Pe,h as Fe,m as Ie,v as Le,w as Re,x as ze,y as Be}from"./MarkdownRenderer-borh39Lq.js";import{t as Ve}from"./moment-DbT30ZpG.js";import{B as He,K as Ue,U as We,V as Ge,t as Ke}from"./contentSource-FGhM_ge8.js";import{s as qe}from"./elo-B5qCwvSC.js";import{t as U}from"./logshim-YQI0WloD.js";import{b as Je,r as Ye}from"./dist-DGbpjpKB.js";import{j as Xe}from"./PipelineDebugger-DhnKlMgD.js";import{c as Ze,d as Qe}from"./userDBKeys-3SQjNVdK.js";var $e=A({name:`HeatMap`,props:{activityRecords:{type:Array,default:()=>[]},activityRecordsGetter:{type:Function,default:null},inactiveColor:{type:Object,default:()=>({h:0,s:0,l:.9})},activeColor:{type:Object,default:()=>({h:155,s:1,l:.5})},cellSize:{type:Number,default:12},cellMargin:{type:Number,default:3},enableSeasonalColors:{type:Boolean,default:!0}},data(){return{isLoading:!1,localActivityRecords:[],heatmapData:{},weeks:[],tooltipData:null,tooltipStyle:{},maxInRange:0}},computed:{width(){return 53*(this.cellSize+this.cellMargin)},height(){return 7*(this.cellSize+this.cellMargin)},effectiveActivityRecords(){let t=Array.isArray(this.localActivityRecords)&&this.localActivityRecords.length>0,n=t?this.localActivityRecords:this.activityRecords||[];return console.log(`Using effectiveActivityRecords, count:`,n.length,`source:`,t?`local`:`prop`),n}},watch:{activityRecords:{handler(){this.processRecords(),this.createWeeksData()},immediate:!0}},async created(){if(this.activityRecordsGetter)try{this.isLoading=!0,console.log(`Fetching activity records using getter...`);let t=await this.activityRecordsGetter();Array.isArray(t)?(this.localActivityRecords=t.filter(t=>{if(!t||!t.timeStamp)return!1;try{let n=Ve(t.timeStamp);return n.isValid()&&n.year()>2e3&&n.year()<2100}catch{return!1}}),console.log(`Received ${t.length} records, ${this.localActivityRecords.length} valid after filtering`),this.processRecords(),this.createWeeksData()):(console.error(`Activity records getter did not return an array:`,t),this.localActivityRecords=[])}catch(t){console.error(`Error fetching activity records:`,t),this.localActivityRecords=[]}finally{this.isLoading=!1}else console.log(`No activityRecordsGetter provided, using direct activityRecords prop`)},methods:{toDateString(t){let n=Ve(t);return Ve.months()[n.month()]+` `+n.date()},processRecords(){let t=this.effectiveActivityRecords||[];console.log(`Processing ${t.length} records`);let n={};if(t.length===0){console.log(`No records to process`),this.heatmapData=n;return}let r=new Set,i={},a=0,o=0;for(let s=0;s<t.length;s++){let c=t[s];if(!c||typeof c!=`object`||!c.timeStamp){o++;continue}try{let t;if(typeof c.timeStamp==`string`)t=Ve(c.timeStamp).format(`YYYY-MM-DD`);else if(typeof c.timeStamp==`number`)t=Ve(new Date(c.timeStamp)).format(`YYYY-MM-DD`);else if(typeof c.timeStamp==`object`)t=typeof c.timeStamp.format==`function`?c.timeStamp.format(`YYYY-MM-DD`):c.timeStamp instanceof Date?Ve(c.timeStamp).format(`YYYY-MM-DD`):Ve(String(c.timeStamp)).format(`YYYY-MM-DD`);else{o++;continue}if(Ve(t,`YYYY-MM-DD`,!0).isValid()){n[t]=(n[t]||0)+1,r.add(t);let o=t.substring(0,7);i[o]=(i[o]||0)+1,a++}else o++}catch{o++}}console.log(`Processed ${a} valid dates, ${o} invalid dates`),console.log(`Found ${r.size} unique dates`),console.log(`Date distribution by month:`,i),this.heatmapData=n},createWeeksData(){this.weeks=[],this.maxInRange=0;let t=Ve(),n=t.clone().subtract(52,`weeks`),r=n.clone().startOf(`week`);console.log(`Creating weeks data from`,n.format(`YYYY-MM-DD`),`to`,t.format(`YYYY-MM-DD`)),Object.keys(this.heatmapData).length===0&&console.log(`No heatmap data available to display`);let i=Object.keys(this.heatmapData).slice(0,5);for(console.log(`Sample dates in heatmap data:`,i);r.isSameOrBefore(t);){let t=[];for(let n=0;n<7;n++){let n=r.format(`YYYY-MM-DD`),i={date:n,count:this.heatmapData[n]||0};t.push(i),i.count>this.maxInRange&&(this.maxInRange=i.count),r.add(1,`day`)}this.weeks.push(t)}console.log(`Weeks data created, maxInRange:`,this.maxInRange);let a=0,o=0;Object.values(this.heatmapData).forEach(t=>{a++,o+=t}),console.log(`Activity summary: ${o} activities across ${a} days`)},getColor(t){if(this.maxInRange===0)return this.hslToString(this.inactiveColor);let n=t===0?0:Math.min(2*t/this.maxInRange,1),r=this.activeColor;if(this.enableSeasonalColors){let t=Ve();t.month()===11&&t.date()>=5?r=Math.random()>.5?{h:350,s:.8,l:.5}:{h:135,s:.8,l:.4}:t.month()===9&&t.date()>=25&&(r=Math.random()>.5?{h:0,s:0,l:0}:Math.random()>.5?{h:30,s:1,l:.5}:{h:270,s:1,l:.5})}let i=r.h,a=this.interpolate(this.inactiveColor.s,r.s,n),o=this.interpolate(this.inactiveColor.l,r.l,n);return this.hslToString({h:i,s:a,l:o})},interpolate(t,n,r){return t+(n-t)*r},hslToString(t){return`hsl(${t.h}, ${t.s*100}%, ${t.l*100}%)`},showTooltip(t,n){this.tooltipData=t,this.tooltipStyle={position:`absolute`,left:`${n.pageX+10}px`,top:`${n.pageY+10}px`}},hideTooltip(){this.tooltipData=null}}}),et=[`width`,`height`],tt=[`transform`],nt=[`y`,`width`,`height`,`fill`,`onMouseover`];function _sfc_render$25(t,n,r,i,a,o){return v(),N(`div`,null,[(v(),N(`svg`,{width:t.width,height:t.height},[(v(!0),N(fe,null,oe(t.weeks,(r,i)=>(v(),N(`g`,{key:i,transform:`translate(${i*(t.cellSize+t.cellMargin)}, 0)`},[(v(!0),N(fe,null,oe(r,(r,i)=>(v(),N(`rect`,{key:r.date,x:0,y:i*(t.cellSize+t.cellMargin),width:t.cellSize,height:t.cellSize,fill:t.getColor(r.count),onMouseover:n=>t.showTooltip(r,n),onMouseout:n[0]||(n[0]=(...n)=>t.hideTooltip&&t.hideTooltip(...n))},null,40,nt))),128))],8,tt))),128))],8,et)),t.tooltipData?(v(),N(`div`,{key:0,class:`tooltip`,style:Ae(t.tooltipStyle)},y(t.tooltipData.count)+` review`+y(t.tooltipData.count===1?``:`s`)+` on `+y(t.toDateString(t.tooltipData.date)),5)):z(``,!0)])}t(_sfc_render$25,`_sfc_render`);var rt=H($e,[[`render`,_sfc_render$25],[`__scopeId`,`data-v-ca46239a`]]),it=A({name:`SkMouseTrap`,props:{refreshInterval:{type:Number,default:500}},data(){return{commands:[],display:!1,intervalId:null}},created(){this.intervalId=window.setInterval(this.refreshState,this.refreshInterval)},beforeUnmount(){this.intervalId!==null&&clearInterval(this.intervalId)},methods:{refreshState(){this.commands=Re.commands,this.display=this.commands.length>0}}}),at={class:`text-caption ml-2`};function _sfc_render$24(t,n,r,i,a,o){let c=C(`v-icon`),l=C(`v-btn`),u=C(`v-toolbar-title`),f=C(`v-toolbar`),p=C(`v-spacer`),m=C(`v-list-item`),h=C(`v-list`),g=C(`v-card`),_=C(`v-dialog`);return t.display?(v(),R(_,{key:0,"max-width":`500px`,transition:`dialog-transition`},{activator:s(({props:t})=>[d(l,T({icon:``,color:`primary`},t),{default:s(()=>[d(c,null,{default:s(()=>n[0]||(n[0]=[k(`mdi-keyboard`)])),_:1})]),_:2},1040)]),default:s(()=>[d(g,null,{default:s(()=>[d(f,{color:`secondary`,dark:``,dense:``},{default:s(()=>[d(u,{class:`text-subtitle-1`},{default:s(()=>n[1]||(n[1]=[k(`Shortcut keys:`)])),_:1})]),_:1}),d(h,{dense:``},{default:s(()=>[(v(!0),N(fe,null,oe(t.commands,t=>(v(),R(m,{key:Array.isArray(t.hotkey)?t.hotkey.join(`,`):t.hotkey,class:`py-1`},{default:s(()=>[d(l,{variant:`outlined`,color:`primary`,class:`text-white`,size:`small`},{default:s(()=>[k(y(Array.isArray(t.hotkey)?t.hotkey[0]:t.hotkey),1)]),_:2},1024),d(p),j(`span`,at,y(t.command),1)]),_:2},1024))),128))]),_:1})]),_:1})]),_:1})):z(``,!0)}t(_sfc_render$24,`_sfc_render`);var ot=H(it,[[`render`,_sfc_render$24]]),st=A({name:`SkMouseTrapToolTip`,props:{hotkey:{type:[String,Array],required:!0},command:{type:String,required:!0},disabled:{type:Boolean,default:!1},position:{type:String,default:`top`},showTooltip:{type:Boolean,default:!0},highlightEffect:{type:String,default:`glow`}},emits:[`hotkey-triggered`],setup(t,{emit:n}){let r=I(null),i=I(!1);I(`hotkey-${Math.random().toString(36).substring(2,15)}`);let a=P(()=>{let n=Array.isArray(t.hotkey)?t.hotkey[0]:t.hotkey;return n.includes(` `)?n.toLowerCase().split(` `).map(t=>t.charAt(0)+t.slice(1)).join(`, `):n.toLowerCase().split(`+`).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(` + `)});se(()=>i.value,n=>{if(!r.value||t.disabled)return;let i=r.value.querySelector(`button, a, input[type="button"], [role="button"]`);i&&(i.style.transition=`all 250ms ease`,n&&t.highlightEffect!==`none`?i.style.filter=`brightness(1.1)`:i.style.filter=``)});let handleKeyDown=t=>{t.key===`Control`&&(i.value=!0)},handleKeyUp=t=>{t.key===`Control`&&(i.value=!1)},handleHotkeyPress=()=>{if(t.disabled||!r.value)return;let i=r.value.querySelector(`button, a, input[type="button"], [role="button"]`);if(i||(i=r.value.querySelector(`v-list-item, .v-list-item, router-link, .router-link, a, [to]`)),!i&&(r.value.hasAttribute(`to`)||r.value.tagName===`A`||r.value.classList.contains(`v-list-item`))&&(i=r.value),!i){let t=r.value.closest(`v-list-item, .v-list-item, a, [to]`);t&&(i=t)}if(i)if(i.hasAttribute(`to`)){let r=i.getAttribute(`to`);if(r&&window.location.pathname!==r){let t=window.$nuxt?.$router||window.$router;t&&typeof t.push==`function`?t.push(r):window.location.pathname=r}n(`hotkey-triggered`,t.hotkey)}else i.click(),n(`hotkey-triggered`,t.hotkey);else console.log(`No clickable element found for hotkey`,t.hotkey),n(`hotkey-triggered`,t.hotkey)},registerHotkey=()=>{t.disabled||Re.addBinding({hotkey:t.hotkey,command:t.command,callback:handleHotkeyPress})},unregisterHotkey=()=>{t.disabled||Re.removeBinding(t.hotkey)};return se(()=>t.disabled,t=>{t?unregisterHotkey():registerHotkey()}),Oe(()=>{document.addEventListener(`keydown`,handleKeyDown),document.addEventListener(`keyup`,handleKeyUp),registerHotkey()}),b(()=>{document.removeEventListener(`keydown`,handleKeyDown),document.removeEventListener(`keyup`,handleKeyUp),unregisterHotkey()}),{wrapperElement:r,isControlKeyPressed:i,formattedHotkey:a}}});function _sfc_render$23(t,n,r,i,a,o){return v(),N(`div`,{class:w([`sk-mousetrap-tooltip-wrapper`,[t.isControlKeyPressed&&!t.disabled&&t.highlightEffect!==`none`?`sk-mousetrap-highlight-${t.highlightEffect}`:``]]),ref:`wrapperElement`},[_(t.$slots,`default`,{},void 0,!0),d(be,{name:`fade`},{default:s(()=>[t.showTooltip&&t.isControlKeyPressed&&!t.disabled?(v(),N(`div`,{key:0,class:w([`sk-mousetrap-tooltip`,{"sk-mt-tooltip-top":t.position===`top`,"sk-mt-tooltip-bottom":t.position===`bottom`,"sk-mt-tooltip-left":t.position===`left`,"sk-mt-tooltip-right":t.position===`right`}])},y(t.formattedHotkey),3)):z(``,!0)]),_:1})],2)}t(_sfc_render$23,`_sfc_render`);var ct=H(st,[[`render`,_sfc_render$23],[`__scopeId`,`data-v-5d6fb09c`]]),{setInstance:lt,getInstance:ut,alertUser:dt}=(()=>{let t=null;return{setInstance(n){t=n},getInstance(){return t},alertUser(n){let r=t;if(r){r.addSnack(n);return}console.error(`SnackbarService not found`)}}})(),ft=A({name:`SnackbarService`,data(){return{snacks:[],show:[]}},mounted(){lt(this)},methods:{addSnack(t){this.snacks.push(t),this.show.push(!0)},close(){this.show.pop(),this.show.push(!1)},getColor(t){if(t.status===Ue.ok)return`success`;if(t.status===Ue.error)return`error`;if(t.status===Ue.warning)return`yellow`}}}),pt={class:`d-flex align-center justify-space-between w-100`};function _sfc_render$22(t,n,r,i,a,o){let c=C(`v-icon`),l=C(`v-btn`),u=C(`v-snackbar`);return v(),N(`div`,null,[(v(!0),N(fe,null,oe(t.snacks,r=>(v(),R(u,{key:t.snacks.indexOf(r),modelValue:t.show[t.snacks.indexOf(r)],"onUpdate:modelValue":n=>t.show[t.snacks.indexOf(r)]=n,timeout:r.timeout,location:`bottom right`,color:t.getColor(r)},{default:s(()=>[j(`div`,pt,[j(`span`,null,y(r.text),1),d(l,{icon:``,variant:`text`,onClick:n[0]||(n[0]=n=>t.close())},{default:s(()=>[d(c,null,{default:s(()=>n[1]||(n[1]=[k(`mdi-close`)])),_:1})]),_:1})])]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`timeout`,`color`]))),128))])}t(_sfc_render$22,`_sfc_render`);var mt=H(ft,[[`render`,_sfc_render$22]]),ht=A({name:`PaginatingToolbar`,props:{pages:{type:Array,required:!0},page:{type:Number,required:!0},title:{type:String,required:!1,default:``},subtitle:{type:String,required:!1,default:``}},emits:[`first`,`prev`,`next`,`last`,`set-page`]}),gt={key:0,class:`ms-2 text-subtitle-2`,"data-cy":`paginating-toolbar-subtitle`};function _sfc_render$21(t,n,r,i,a,o){let c=C(`v-toolbar-title`),l=C(`v-spacer`),u=C(`v-icon`),f=C(`v-btn`),p=C(`v-select`),m=C(`v-toolbar`);return v(),R(m,{density:`compact`},{default:s(()=>[d(c,null,{default:s(()=>[j(`span`,null,y(t.title),1),t.subtitle?(v(),N(`span`,gt,y(t.subtitle),1)):z(``,!0)]),_:1}),d(l),d(f,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==1,onClick:n[0]||(n[0]=n=>t.$emit(`first`))},{default:s(()=>[d(u,null,{default:s(()=>n[5]||(n[5]=[k(`mdi-page-first`)])),_:1})]),_:1},8,[`disabled`]),d(f,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==1,onClick:n[1]||(n[1]=n=>t.$emit(`prev`))},{default:s(()=>[d(u,null,{default:s(()=>n[6]||(n[6]=[k(`mdi-chevron-left`)])),_:1})]),_:1},8,[`disabled`]),d(p,{"model-value":t.page,items:t.pages,class:`pageSelect`,density:`compact`,"hide-details":``,"return-object":!1,variant:`outlined`,"onUpdate:modelValue":n[2]||(n[2]=n=>t.$emit(`set-page`,n))},{selection:s(({item:t})=>[k(y(t.value),1)]),_:1},8,[`model-value`,`items`]),d(f,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==t.pages.length,onClick:n[3]||(n[3]=n=>t.$emit(`next`))},{default:s(()=>[d(u,null,{default:s(()=>n[7]||(n[7]=[k(`mdi-chevron-right`)])),_:1})]),_:1},8,[`disabled`]),d(f,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==t.pages.length,onClick:n[4]||(n[4]=n=>t.$emit(`last`))},{default:s(()=>[d(u,null,{default:s(()=>n[8]||(n[8]=[k(`mdi-page-last`)])),_:1})]),_:1},8,[`disabled`])]),_:1})}t(_sfc_render$21,`_sfc_render`);var _t=H(ht,[[`render`,_sfc_render$21],[`__scopeId`,`data-v-a75fea7e`]]),vt=A({name:`CardSearch`,emits:{search:t=>typeof t==`string`},data(){return{query:``}},methods:{search(){this.$emit(`search`,this.query)}}}),yt={class:`card-search`};function _sfc_render$20(t,n,r,i,a,o){let s=C(`v-text-field`);return v(),N(`div`,yt,[d(s,{modelValue:t.query,"onUpdate:modelValue":n[0]||(n[0]=n=>t.query=n),label:`Search for cards...`,"append-icon":`mdi-magnify`,"onClick:append":t.search,onKeydown:ge(t.search,[`enter`])},null,8,[`modelValue`,`onClick:append`,`onKeydown`])])}t(_sfc_render$20,`_sfc_render`);var bt=H(vt,[[`render`,_sfc_render$20]]),xt=A({name:`CardSearchResults`,emits:{"card-selected":t=>typeof t.cardId==`string`&&typeof t.courseId==`string`},props:{query:{type:String,required:!0},dataLayer:{type:Object,required:!0},courseFilter:{type:String,default:null}},data(){return{cards:[],loading:!1,error:null,selectedCardId:null}},watch:{query:{immediate:!0,handler(t){t&&this.fetchResults(t)}}},methods:{async fetchResults(t){this.loading=!0,this.error=null;try{let n=[];if(this.courseFilter)n=[this.courseFilter],console.log(`Filtering search to course: ${this.courseFilter}`);else{let{CourseLookup:t}=await Xe(async()=>{let{CourseLookup:t}=await import(`./dist-5Z6GjIpR.js`);return{CourseLookup:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13]));n=(await t.allCourseWare()).map(t=>t._id).filter(Boolean),console.log(`Searching across all ${n.length} courses`)}let r=[];for(let i of n){let n=await this.dataLayer.getCourseDB(i).searchCards(t);for(let t of n)r.push({...t,courseId:i})}this.cards=r,console.log(`Search completed: found ${r.length} cards across ${n.length} courses`)}catch(t){this.error=`Error fetching search results.`,console.error(`Search error:`,t)}finally{this.loading=!1}},selectCard(t){this.selectedCardId=t._id,this.$emit(`card-selected`,{cardId:t._id,courseId:t.courseId})}}}),St={class:`card-search-results`},Ct={key:0},wt={key:1},Tt={key:2};function _sfc_render$19(t,n,r,i,a,o){let c=C(`v-list-item-title`),l=C(`v-list-item-subtitle`),u=C(`v-list-item`),f=C(`v-list`);return v(),N(`div`,St,[t.loading?(v(),N(`div`,Ct,`Loading...`)):t.error?(v(),N(`div`,wt,y(t.error),1)):(v(),N(`div`,Tt,[d(f,null,{default:s(()=>[(v(!0),N(fe,null,oe(t.cards,n=>(v(),R(u,{key:n._id,onClick:r=>t.selectCard(n),class:w([{"selected-card":n._id===t.selectedCardId},`cursor-pointer`])},{default:s(()=>[d(c,null,{default:s(()=>[k(y(n._id),1)]),_:2},1024),d(l,null,{default:s(()=>[k(`Course: `+y(n.courseId),1)]),_:2},1024)]),_:2},1032,[`onClick`,`class`]))),128))]),_:1})]))])}t(_sfc_render$19,`_sfc_render`);var Et=H(xt,[[`render`,_sfc_render$19],[`__scopeId`,`data-v-285e13bd`]]),Displayable=class{constructor(t){if(t.length===0)throw Error(`
3
3
  Displayable Constructor was called with no view Data.
4
4
  `);validateData(this.dataShapes(),t)}};Ne(Displayable,`dataShapes`,void 0),Ne(Displayable,`views`,void 0),Ne(Displayable,`seedData`,void 0),Ne(Displayable,`acceptsUserData`,!0),Ne(Displayable,`seedMeta`,void 0);function validateData(t,n){for(let r=0;r<t.length;r++)t[r].fields.forEach((t,i)=>{console.log(`[Displayable] shape[${r}].field[${i}]:\n ${JSON.stringify(t)}`),n[r][t.name]===void 0&&t.type!==We.MEDIA_UPLOADS&&console.warn(`[Displayable] missing data`)})}var Question=class extends Displayable{displayedSkill(t,n){console.warn(`Question is running the reference implementation of displayedSkill.
5
5
  Consider overriding!`);let r=5e3,i=Math.min(n,10*r),a=i/r,o=i>r?.8**a:1,s=this.isCorrect(t)?1:0;return s*=o,Math.min(s,1)}evaluate(t,n){return{isCorrect:this.isCorrect(t),performance:this.displayedSkill(t,n)}}},getApiBase=()=>{let t=`fallback (empty string)`,n=``;if(!n&&typeof window<`u`&&window.__SKUILDER_CONFIG__?.apiBase){let r=window.__SKUILDER_CONFIG__.apiBase.replace(/\/$/,``);n=r.startsWith(`/`)?r:`/${r}`,t=`window.__SKUILDER_CONFIG__.apiBase`}return console.log(`[authAPI] getApiBase() called`),console.log(`[authAPI] source:`,t),console.log(`[authAPI] result:`,n),n};async function sendVerificationEmail(t,n,r){try{let i={username:t,email:n};r&&(i.origin=r);let a=await fetch(`${getApiBase()}/auth/send-verification`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify(i)});if(!a.ok){let t=await a.text();return console.error(`Send verification email error:`,t),{ok:!1,error:`HTTP ${a.status}: ${a.statusText}`}}return await a.json()}catch(t){return console.error(`Send verification email fetch error:`,t),{ok:!1,error:t instanceof Error?t.message:`Network error`}}}async function verifyEmail(t){try{let n=await fetch(`${getApiBase()}/auth/verify`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify({token:t})});if(!n.ok){let t;try{t=(await n.json())?.error}catch{}return{ok:!1,error:t||`HTTP ${n.status}: ${n.statusText}`}}return await n.json()}catch(t){return{ok:!1,error:t instanceof Error?t.message:`Network error`}}}async function resolveLoginIdentifier(t,n){try{let r=await fetch(`${getApiBase()}/auth/resolve-login`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify({identifier:t,password:n})});if(!r.ok){let t;try{t=(await r.json())?.error}catch{}return{ok:!1,status:r.status,error:t||`HTTP ${r.status}: ${r.statusText}`}}return await r.json()}catch(t){return{ok:!1,error:t instanceof Error?t.message:`Network error`}}}async function requestPasswordReset(t,n){try{let r={email:t};n&&(r.origin=n);let i=await fetch(`${getApiBase()}/auth/request-reset`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify(r)});return i.ok?await i.json():{ok:!1,error:`HTTP ${i.status}: ${i.statusText}`}}catch(t){return{ok:!1,error:t instanceof Error?t.message:`Network error`}}}async function resetPassword(t,n){try{let r=await fetch(`${getApiBase()}/auth/reset-password`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify({token:t,newPassword:n})});return r.ok?await r.json():{ok:!1,error:`HTTP ${r.status}: ${r.statusText}`}}catch(t){return{ok:!1,error:t instanceof Error?t.message:`Network error`}}}var Dt=A({name:`StudySessionTimer`,props:{timeRemaining:{type:Number,required:!0},sessionTimeLimit:{type:Number,required:!0,default:5},allowAddTime:{type:Boolean,default:!0}},emits:[`add-time`],setup(t,{emit:n}){let r=I(!1),i=P(()=>{let n=``,r=t.timeRemaining;r>60&&(n=Math.floor(r/60).toString()+`:`);let i=r%60;return n+=i>=10?i:`0`+i,r<=60&&(n+=` seconds`),n+=` left!`,n}),a=P(()=>t.timeRemaining>60?100*(t.timeRemaining/(60*t.sessionTimeLimit)):100*(t.timeRemaining/60)),o=P(()=>t.timeRemaining>60?`primary`:`orange darken-3`),addSessionTime=()=>{n(`add-time`)};return{hovered:r,formattedTimeRemaining:i,percentageRemaining:a,timerColor:o,addSessionTime}}});function _sfc_render$18(t,n,r,i,a,o){let c=C(`v-icon`),l=C(`v-btn`),u=C(`v-progress-circular`),f=C(`v-tooltip`);return v(),R(f,{location:`right`,"open-delay":0,"close-delay":200,color:`secondary`,class:`text-subtitle-1`},{activator:s(({props:r})=>[j(`div`,T({class:`timer-container`},r,{onMouseenter:n[0]||(n[0]=n=>t.hovered=!0),onMouseleave:n[1]||(n[1]=n=>t.hovered=!1)}),[d(u,{alt:`Time remaining in study session`,size:`64`,width:`8`,rotate:`0`,color:t.timerColor,"model-value":t.percentageRemaining},{default:s(()=>[t.allowAddTime&&t.timeRemaining>0&&t.hovered?(v(),R(l,{key:0,icon:``,color:`transparent`,location:`bottom left`,onClick:t.addSessionTime},{default:s(()=>[d(c,{size:`large`},{default:s(()=>n[2]||(n[2]=[k(`mdi-plus`)])),_:1})]),_:1},8,[`onClick`])):z(``,!0)]),_:1},8,[`color`,`model-value`])],16)]),default:s(()=>[k(` `+y(t.formattedTimeRemaining),1)]),_:1})}t(_sfc_render$18,`_sfc_render`);var Ot=H(Dt,[[`render`,_sfc_render$18],[`__scopeId`,`data-v-5e104ccc`]]),kt=A({name:`CardViewer`,ref:{},props:{sessionOrder:{type:Number,required:!1,default:0},card_id:{type:String,required:!0,default:``},course_id:{type:String,required:!0,default:``},view:{type:[Function,Object],required:!0},data:{type:Array,required:!0},user_elo:{type:Object,default:()=>({global:{score:1e3,count:0},tags:{},misc:{}})},card_elo:{type:Number,default:1e3},frameless:{type:Boolean,default:!1}},emits:[`emitResponse`,`requestReplan`,`readyToAdvance`],methods:{processResponse(t){console.log(`
@@ -35,4 +35,4 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
35
35
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _slicedToArray(t,n){return _arrayWithHoles(t)||_iterableToArrayLimit(t,n)||_unsupportedIterableToArray(t,n)||_nonIterableRest()}function _arrayWithoutHoles(t){if(Array.isArray(t))return _arrayLikeToArray(t)}function _iterableToArray(t){if(typeof Symbol<`u`&&Symbol.iterator in Object(t))return Array.from(t)}function _nonIterableSpread(){throw TypeError(`Invalid attempt to spread non-iterable instance.
36
36
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _toConsumableArray(t){return _arrayWithoutHoles(t)||_iterableToArray(t)||_unsupportedIterableToArray(t)||_nonIterableSpread()}var s=r(`a352`),c=r.n(s);function removeNode(t){t.parentElement!==null&&t.parentElement.removeChild(t)}function insertNodeAt(t,n,r){var i=r===0?t.children[0]:t.children[r-1].nextSibling;t.insertBefore(n,i)}var l=r(`dbf1`);r(`13d5`),r(`4fad`),r(`ac1f`),r(`5319`);function cached(t){var n=Object.create(null);return function cachedFn(r){return n[r]||(n[r]=t(r))}}var u=/-(\w)/g,d=cached(function(t){return t.replace(u,function(t,n){return n.toUpperCase()})});r(`5db7`),r(`73d9`);var f=[`Start`,`Add`,`Remove`,`Update`,`End`],p=[`Choose`,`Unchoose`,`Sort`,`Filter`,`Clone`],m=[`Move`],h=[m,f,p].flatMap(function(t){return t}).map(function(t){return`on${t}`}),g={manage:m,manageAndEmit:f,emit:p};function isReadOnly(t){return h.indexOf(t)!==-1}r(`caad`),r(`2ca0`);var _=`a.abbr.address.area.article.aside.audio.b.base.bdi.bdo.blockquote.body.br.button.canvas.caption.cite.code.col.colgroup.data.datalist.dd.del.details.dfn.dialog.div.dl.dt.em.embed.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.head.header.hgroup.hr.html.i.iframe.img.input.ins.kbd.label.legend.li.link.main.map.mark.math.menu.menuitem.meta.meter.nav.noscript.object.ol.optgroup.option.output.p.param.picture.pre.progress.q.rb.rp.rt.rtc.ruby.s.samp.script.section.select.slot.small.source.span.strong.style.sub.summary.sup.svg.table.tbody.td.template.textarea.tfoot.th.thead.time.title.tr.track.u.ul.var.video.wbr`.split(`.`);function isHtmlTag(t){return _.includes(t)}function isTransition(t){return[`transition-group`,`TransitionGroup`].includes(t)}function isHtmlAttribute(t){return[`id`,`class`,`role`,`style`].includes(t)||t.startsWith(`data-`)||t.startsWith(`aria-`)||t.startsWith(`on`)}function project(t){return t.reduce(function(t,n){var r=_slicedToArray(n,2),i=r[0];return t[i]=r[1],t},{})}function getComponentAttributes(t){var n=t.$attrs,r=t.componentData,i=r===void 0?{}:r;return _objectSpread2(_objectSpread2({},project(Object.entries(n).filter(function(t){var n=_slicedToArray(t,2),r=n[0];return n[1],isHtmlAttribute(r)}))),i)}function createSortableOption(t){var n=t.$attrs,r=t.callBackBuilder,i=project(getValidSortableEntries(n));Object.entries(r).forEach(function(t){var n=_slicedToArray(t,2),r=n[0],a=n[1];g[r].forEach(function(t){i[`on${t}`]=a(t)})});var a=`[data-draggable]${i.draggable||``}`;return _objectSpread2(_objectSpread2({},i),{},{draggable:a})}function getValidSortableEntries(t){return Object.entries(t).filter(function(t){var n=_slicedToArray(t,2),r=n[0];return n[1],!isHtmlAttribute(r)}).map(function(t){var n=_slicedToArray(t,2),r=n[0],i=n[1];return[d(r),i]}).filter(function(t){var n=_slicedToArray(t,2),r=n[0];return n[1],!isReadOnly(r)})}r(`c740`);function _classCallCheck(t,n){if(!(t instanceof n))throw TypeError(`Cannot call a class as a function`)}function _defineProperties(t,n){for(var r=0;r<n.length;r++){var i=n[r];i.enumerable=i.enumerable||!1,i.configurable=!0,`value`in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function _createClass(t,n,r){return n&&_defineProperties(t.prototype,n),r&&_defineProperties(t,r),t}var v=function getHtmlElementFromNode(t){return t.el},y=function addContext(t,n){return t.__draggable_context=n},b=function getContext(t){return t.__draggable_context},x=function(){function ComponentStructure(t){var n=t.nodes,r=n.header,i=n.default,a=n.footer,o=t.root,s=t.realList;_classCallCheck(this,ComponentStructure),this.defaultNodes=i,this.children=[].concat(_toConsumableArray(r),_toConsumableArray(i),_toConsumableArray(a)),this.externalComponent=o.externalComponent,this.rootTransition=o.transition,this.tag=o.tag,this.realList=s}return _createClass(ComponentStructure,[{key:`render`,value:function render(t,n){var r=this.tag,i=this.children;return t(r,n,this._isRootComponent?{default:function _default(){return i}}:i)}},{key:`updated`,value:function updated(){var t=this.defaultNodes,n=this.realList;t.forEach(function(t,r){y(v(t),{element:n[r],index:r})})}},{key:`getUnderlyingVm`,value:function getUnderlyingVm(t){return b(t)}},{key:`getVmIndexFromDomIndex`,value:function getVmIndexFromDomIndex(t,n){var r=this.defaultNodes,i=r.length,a=n.children,o=a.item(t);if(o===null)return i;var s=b(o);if(s)return s.index;if(i===0)return 0;var c=v(r[0]);return t<_toConsumableArray(a).findIndex(function(t){return t===c})?0:i}},{key:`_isRootComponent`,get:function get(){return this.externalComponent||this.rootTransition}}]),ComponentStructure}(),S=r(`8bbf`);function getSlot(t,n){var r=t[n];return r?r():[]}function computeNodes(t){var n=t.$slots,r=t.realList,i=t.getKey,a=r||[],o=_slicedToArray([`header`,`footer`].map(function(t){return getSlot(n,t)}),2),s=o[0],c=o[1],l=n.item;if(!l)throw Error(`draggable element must have an item slot`);var u=a.flatMap(function(t,n){return l({element:t,index:n}).map(function(n){return n.key=i(t),n.props=_objectSpread2(_objectSpread2({},n.props||{}),{},{"data-draggable":!0}),n})});if(u.length!==a.length)throw Error(`Item slot must have only one child`);return{header:s,footer:c,default:u}}function getRootInformation(t){var n=isTransition(t),r=!isHtmlTag(t)&&!n;return{transition:n,externalComponent:r,tag:r?(0,S.resolveComponent)(t):n?S.TransitionGroup:t}}function computeComponentStructure(t){var n=t.$slots,r=t.tag,i=t.realList,a=t.getKey;return new x({nodes:computeNodes({$slots:n,realList:i,getKey:a}),root:getRootInformation(r),realList:i})}function _emit(t,n){var r=this;(0,S.nextTick)(function(){return r.$emit(t.toLowerCase(),n)})}function _manage(t){var n=this;return function(r,i){if(n.realList!==null)return n[`onDrag${t}`](r,i)}}function _manageAndEmit(t){var n=this,r=_manage.call(this,t);return function(i,a){r.call(n,i,a),_emit.call(n,t,i)}}var C=null,w={list:{type:Array,required:!1,default:null},modelValue:{type:Array,required:!1,default:null},itemKey:{type:[String,Function],required:!0},clone:{type:Function,default:function _default(t){return t}},tag:{type:String,default:`div`},move:{type:Function,default:null},componentData:{type:Object,required:!1,default:null}},T=[`update:modelValue`,`change`].concat(_toConsumableArray([].concat(_toConsumableArray(g.manageAndEmit),_toConsumableArray(g.emit)).map(function(t){return t.toLowerCase()})));n.default=(0,S.defineComponent)({name:`draggable`,inheritAttrs:!1,props:w,emits:T,data:function data(){return{error:!1}},render:function render(){try{this.error=!1;var t=this.$slots,n=this.$attrs,r=this.tag,i=this.componentData,a=this.realList,o=this.getKey,s=computeComponentStructure({$slots:t,tag:r,realList:a,getKey:o});this.componentStructure=s;var c=getComponentAttributes({$attrs:n,componentData:i});return s.render(S.h,c)}catch(t){return this.error=!0,(0,S.h)(`pre`,{style:{color:`red`}},t.stack)}},created:function created(){this.list!==null&&this.modelValue!==null&&l.a.error(`modelValue and list props are mutually exclusive! Please set one or another.`)},mounted:function mounted(){var t=this;if(!this.error){var n=this.$attrs,r=this.$el;this.componentStructure.updated();var i=createSortableOption({$attrs:n,callBackBuilder:{manageAndEmit:function manageAndEmit(n){return _manageAndEmit.call(t,n)},emit:function emit(n){return _emit.bind(t,n)},manage:function manage(n){return _manage.call(t,n)}}}),a=r.nodeType===1?r:r.parentElement;this._sortable=new c.a(a,i),this.targetDomElement=a,a.__draggable_component__=this}},updated:function updated(){this.componentStructure.updated()},beforeUnmount:function beforeUnmount(){this._sortable!==void 0&&this._sortable.destroy()},computed:{realList:function realList(){return this.list||this.modelValue},getKey:function getKey(){var t=this.itemKey;return typeof t==`function`?t:function(n){return n[t]}}},watch:{$attrs:{handler:function handler(t){var n=this._sortable;n&&getValidSortableEntries(t).forEach(function(t){var r=_slicedToArray(t,2),i=r[0],a=r[1];n.option(i,a)})},deep:!0}},methods:{getUnderlyingVm:function getUnderlyingVm(t){return this.componentStructure.getUnderlyingVm(t)||null},getUnderlyingPotencialDraggableComponent:function getUnderlyingPotencialDraggableComponent(t){return t.__draggable_component__},emitChanges:function emitChanges(t){var n=this;(0,S.nextTick)(function(){return n.$emit(`change`,t)})},alterList:function alterList(t){if(this.list){t(this.list);return}var n=_toConsumableArray(this.modelValue);t(n),this.$emit(`update:modelValue`,n)},spliceList:function spliceList(){var t=arguments;this.alterList(function spliceList(n){return n.splice.apply(n,_toConsumableArray(t))})},updatePosition:function updatePosition(t,n){this.alterList(function updatePosition(r){return r.splice(n,0,r.splice(t,1)[0])})},getRelatedContextFromMoveEvent:function getRelatedContextFromMoveEvent(t){var n=t.to,r=t.related,i=this.getUnderlyingPotencialDraggableComponent(n);if(!i)return{component:i};var a=i.realList,o={list:a,component:i};return n!==r&&a?_objectSpread2(_objectSpread2({},i.getUnderlyingVm(r)||{}),o):o},getVmIndexFromDomIndex:function getVmIndexFromDomIndex(t){return this.componentStructure.getVmIndexFromDomIndex(t,this.targetDomElement)},onDragStart:function onDragStart(t){this.context=this.getUnderlyingVm(t.item),t.item._underlying_vm_=this.clone(this.context.element),C=t.item},onDragAdd:function onDragAdd(t){var n=t.item._underlying_vm_;if(n!==void 0){removeNode(t.item);var r=this.getVmIndexFromDomIndex(t.newIndex);this.spliceList(r,0,n);var i={element:n,newIndex:r};this.emitChanges({added:i})}},onDragRemove:function onDragRemove(t){if(insertNodeAt(this.$el,t.item,t.oldIndex),t.pullMode===`clone`){removeNode(t.clone);return}var n=this.context,r=n.index,i=n.element;this.spliceList(r,1);var a={element:i,oldIndex:r};this.emitChanges({removed:a})},onDragUpdate:function onDragUpdate(t){removeNode(t.item),insertNodeAt(t.from,t.item,t.oldIndex);var n=this.context.index,r=this.getVmIndexFromDomIndex(t.newIndex);this.updatePosition(n,r);var i={element:this.context.element,oldIndex:n,newIndex:r};this.emitChanges({moved:i})},computeFutureIndex:function computeFutureIndex(t,n){if(!t.element)return 0;var r=_toConsumableArray(n.to.children).filter(function(t){return t.style.display!==`none`}),i=r.indexOf(n.related),a=t.component.getVmIndexFromDomIndex(i);return r.indexOf(C)!==-1||!n.willInsertAfter?a:a+1},onDragMove:function onDragMove(t,n){var r=this.move,i=this.realList;if(!r||!i)return!0;var a=this.getRelatedContextFromMoveEvent(t),o=this.computeFutureIndex(a,t),s=_objectSpread2(_objectSpread2({},this.context),{},{futureIndex:o});return r(_objectSpread2(_objectSpread2({},t),{},{relatedContext:a,draggedContext:s}),n)},onDragEnd:function onDragEnd(){C=null}}})}),fb6a:(function(t,n,r){var i=r(`23e7`),a=r(`861d`),o=r(`e8b5`),s=r(`23cb`),c=r(`50c4`),l=r(`fc6a`),u=r(`8418`),d=r(`b622`),f=r(`1dde`),p=r(`ae40`),m=f(`slice`),h=p(`slice`,{ACCESSORS:!0,0:0,1:2}),g=d(`species`),_=[].slice,v=Math.max;i({target:`Array`,proto:!0,forced:!m||!h},{slice:function slice(t,n){var r=l(this),i=c(r.length),d=s(t,i),f=s(n===void 0?i:n,i),p,m,h;if(o(r)&&(p=r.constructor,typeof p==`function`&&(p===Array||o(p.prototype))?p=void 0:a(p)&&(p=p[g],p===null&&(p=void 0)),p===Array||p===void 0))return _.call(r,d,f);for(m=new(p===void 0?Array:p)(v(f-d,0)),h=0;d<f;d++,h++)d in r&&u(m,h,r[d]);return m.length=h,m}})}),fc6a:(function(t,n,r){var i=r(`44ad`),a=r(`1d80`);t.exports=function(t){return i(a(t))}}),fdbc:(function(t,n){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}}),fdbf:(function(t,n,r){t.exports=r(`4930`)&&!Symbol.sham&&typeof Symbol.iterator==`symbol`})}).default})}))(),1),B=(t,n)=>{let r=t.__vccOpts||t;for(let[t,i]of n)r[t]=i;return r},Uo={name:`TagInput`,props:{scope:{type:Object,required:!0}}},Wo=[`maxlength`];function K(t,n,r,i,a,o){return r.scope.edit?de((v(),N(`input`,{key:0,"onUpdate:modelValue":n[0]||(n[0]=t=>r.scope.element.text=t),maxlength:r.scope.maxlength,type:`text`,class:`ti-tag-input`,size:`1`,onInput:n[1]||(n[1]=t=>r.scope.validateTag(r.scope.index,t)),onBlur:n[2]||(n[2]=t=>r.scope.performCancelEdit(r.scope.index)),onKeydown:n[3]||(n[3]=t=>r.scope.performSaveEdit(r.scope.index,t))},null,40,Wo)),[[ye,r.scope.element.text]]):z(``,!0)}var Go=B(Uo,[[`render`,K],[`__scopeId`,`data-v-a3408643`]]),M=t=>!t.some(t=>{let n=!t.text;n&&console.warn(`Missing property "text"`,t);let r=!1;return t.classes&&(r=typeof t.classes!=`string`),r&&console.warn(`Property "classes" must be type of string`,t),n||r}),F=t=>!t.some(t=>{if(typeof t==`number`){let n=isFinite(t)&&Math.floor(t)===t;return n||console.warn(`Only numerics are allowed for this prop. Found:`,t),!n}else if(typeof t==`string`){let n=/\W|[a-z]|!\d/i.test(t);return n||console.warn(`Only alpha strings are allowed for this prop. Found:`,t),!n}else return console.warn(`Only numeric and string values are allowed. Found:`,t),!1}),Ko={modelValue:{type:String,default:``,required:!0},tags:{type:Array,default:()=>[],validator:M},autocompleteItems:{type:Array,default:()=>[],validator:M},allowEditTags:{type:Boolean,default:!1},autocompleteFilterDuplicates:{default:!0,type:Boolean},addOnlyFromAutocomplete:{type:Boolean,default:!1},autocompleteMinLength:{type:Number,default:1},autocompleteAlwaysOpen:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},placeholder:{type:String,default:`Add Tag`},addOnKey:{type:Array,default:()=>[13],validator:F},saveOnKey:{type:Array,default:()=>[13],validator:F},maxTags:{type:Number},maxlength:{type:Number},validation:{type:Array,default:()=>[],validator(t){return!t.some(t=>{let n=!t.rule;n&&console.warn(`Property "rule" is missing`,t);let r=t.rule&&(typeof t.rule==`string`||t.rule instanceof RegExp||{}.toString.call(t.rule)===`[object Function]`);r||console.warn(`A rule must be type of string, RegExp or function. Found:`,JSON.stringify(t.rule));let i=!t.classes;i&&console.warn(`Property "classes" is missing`,t);let a=t.type&&typeof t.type!=`string`;return a&&console.warn(`Property "type" must be type of string. Found:`,t),!r||n||i||a})}},separators:{type:Array,default:()=>[`;`],validator(t){return!t.some(t=>{let n=typeof t!=`string`;return n&&console.warn(`Separators must be type of string. Found:`,t),n})}},avoidAddingDuplicates:{type:Boolean,default:!0},addOnBlur:{type:Boolean,default:!0},isDuplicate:{type:Function,default:null},addFromPaste:{type:Boolean,default:!0},deleteOnBackspace:{default:!0,type:Boolean},isDraggable:{type:Boolean,default:!1},draggableHandle:{type:Boolean,default:!1},onBeforeAddingTag:Function,onBeforeDeletingTag:Function,onBeforeEditingTag:Function,onBeforeSavingTag:Function};function L(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,`default`)?t.default:t}var qo=L(function e(t,n){if(t===n)return!0;if(t&&n&&typeof t==`object`&&typeof n==`object`){if(t.constructor!==n.constructor)return!1;var r,i,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!e(t[i],n[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;for(i=r;i--!==0;){var o=a[i];if(!e(t[o],n[o]))return!1}return!0}return t!==t&&n!==n}),J=(t,n)=>n.filter(n=>{let{text:r}=t;return typeof n.rule==`string`?!new RegExp(n.rule).test(r):n.rule instanceof RegExp?!n.rule.test(r):{}.toString.call(n.rule)===`[object Function]`?n.rule(t):!1}).map(t=>t.classes),Jo=t(t=>JSON.parse(JSON.stringify(t)),`y`),W=(t,n)=>{let r=0;for(;r<t.length;){if(n(t[r],r,t))return r;r++}return-1},V=(t,n,r=[],i)=>{t.text===void 0&&(t={text:t});let a=J(t,r),o=W(n,n=>n===t),s=Jo(n),c=o===-1?Jo(t):s.splice(o,1)[0];return(i?i(s,c):s.map(t=>t.text).indexOf(c.text)!==-1)&&a.push(`ti-duplicate`),a.length===0?a.push(`ti-valid`):a.push(`ti-invalid`),a},Yo=t((t,...n)=>{t.text===void 0&&(t={text:t});let r=Jo(t);return r.tiClasses=V(t,...n),r},`v`),G=(t,...n)=>t.map(r=>Yo(r,t,...n)),Xo={name:`VueTagsInput`,components:{TagInput:Go,draggable:Ho.default},props:Ko,emits:[`adding-duplicate`,`before-adding-tag`,`before-deleting-tag`,`before-editing-tag`,`before-saving-tag`,`max-tags-reached`,`saving-duplicate`,`tags-changed`,`tag-clicked`,`update:modelValue`,`update:tags`,`tag-order-changed`,`click`],inheritAttrs:!1,data(){return{tagCenter:[],newTag:null,tagsCopy:[],tagsEditStatus:null,deletionMark:null,deletionMarkTime:null,selectedItem:null,focused:null}},computed:{autocompleteOpen(){return this.autocompleteAlwaysOpen?!0:this.newTag!==null&&this.newTag.length>=this.autocompleteMinLength&&this.filteredAutocompleteItems.length>0&&this.focused},filteredAutocompleteItems(){let t=this.autocompleteItems.map(t=>Yo(t,this.tags,this.validation,this.isDuplicate));return this.autocompleteFilterDuplicates?t.filter(this.duplicateFilter):t}},methods:{createClasses:V,getSelectedIndex(t){let n=this.filteredAutocompleteItems,r=this.selectedItem,i=n.length-1;if(n.length!==0)return r===null?0:t===`before`&&r===0?i:t===`after`&&r===i?0:t===`after`?r+1:r-1},selectDefaultItem(){this.addOnlyFromAutocomplete&&this.filteredAutocompleteItems.length>0?this.selectedItem=0:this.selectedItem=null},selectItem(t,n){t.preventDefault(),this.selectedItem=this.getSelectedIndex(n)},isSelected(t){return this.selectedItem===t},isMarked(t){return this.deletionMark===t},setTagCenter(t){t&&this.tagCenter.push(t)},invokeDelete(){if(!this.deleteOnBackspace||this.newTag.length>0)return;let t=this.tagsCopy.length-1;this.deletionMark===null?(this.deletionMarkTime=setTimeout(()=>{this.deletionMark=null},1e3),this.deletionMark=t):this.performDeleteTag(t)},addTagsFromPaste(){this.addFromPaste&&setTimeout(()=>this.performAddTags(this.newTag),10)},performEditTag(t){this.allowEditTags&&(this.onBeforeAddingTag||this.editTag(t),this.$emit(`before-editing-tag`,{index:t,tag:this.tagsCopy[t],editTag:()=>this.editTag(t)}))},editTag(t){this.allowEditTags&&(this.toggleEditMode(t),this.focus(t))},toggleEditMode(t){!this.allowEditTags||this.disabled||(this.tagsEditStatus[t]=!this.tagsEditStatus[t])},createChangedTag(t,n){let r=this.tagsCopy[t];r.text=n?n.target.value:this.tagsCopy[t].text,this.tagsCopy[t]=Yo(r,this.tagsCopy,this.validation,this.isDuplicate)},focus(t){this.$nextTick(()=>{let n=this.tagCenter[t].querySelector(`input.ti-tag-input`);n&&n.focus()})},quote(t){return t.replace(/([()[{*+.$^\\|?])/g,`\\$1`)},cancelEdit(t){this.tags[t]&&(this.tagsCopy[t]=Jo(Yo(this.tags[t],this.tags,this.validation,this.isDuplicate)),this.tagsEditStatus[t]=!1)},hasForbiddingAddRule(t){return t.some(t=>{let n=this.validation.find(n=>t===n.classes);return n?n.disableAdd:!1})},createTagTexts(t){let n=new RegExp(this.separators.map(t=>this.quote(t)).join(`|`));return t.split(n).map(t=>({text:t}))},performDeleteTag(t){this.onBeforeDeletingTag||this.deleteTag(t),this.$emit(`before-deleting-tag`,{index:t,tag:this.tagsCopy[t],deleteTag:()=>this.deleteTag(t)})},deleteTag(t){this.disabled||(this.deletionMark=null,clearTimeout(this.deletionMarkTime),this.tagsCopy.splice(t,1),this.$emit(`update:tags`,this.tagsCopy),this.$emit(`tags-changed`,this.tagsCopy))},noTriggerKey(t,n){let r=this[n].indexOf(t.keyCode)!==-1||this[n].indexOf(t.key)!==-1;return r&&t.preventDefault(),!r},performAddTags(t,n,r){if(this.disabled||n&&this.noTriggerKey(n,`addOnKey`))return;let i=[];typeof t==`object`&&(i=[t]),typeof t==`string`&&(i=this.createTagTexts(t)),i=i.filter(t=>t.text.trim().length>0),i.forEach(t=>{t=Yo(t,this.tags,this.validation,this.isDuplicate),this.onBeforeAddingTag||this.addTag(t,r),this.$emit(`before-adding-tag`,{tag:t,addTag:()=>this.addTag(t,r)})})},duplicateFilter(t){return this.isDuplicate?!this.isDuplicate(this.tagsCopy,t):!this.tagsCopy.find(n=>n.text===t.text)},addTag(t,n=`new-tag-input`){let r=this.filteredAutocompleteItems.map(t=>t.text);this.addOnlyFromAutocomplete&&r.indexOf(t.text)===-1||this.$nextTick(()=>{if(this.maxTags&&this.maxTags<=this.tagsCopy.length)return this.$emit(`max-tags-reached`,t);if(this.avoidAddingDuplicates&&!this.duplicateFilter(t))return this.$emit(`adding-duplicate`,t);this.hasForbiddingAddRule(t.tiClasses)||(this.newTag=``,this.tagsCopy.push(t),this.$emit(`update:tags`,this.tagsCopy),n===`autocomplete`&&this.$refs.newTagInput.focus(),this.$emit(`tags-changed`,this.tagsCopy))})},performSaveTag(t,n){let r=this.tagsCopy[t];this.disabled||n&&this.noTriggerKey(n,`addOnKey`)||r.text.trim().length!==0&&(this[`on-before-saving-tag`]||this.saveTag(t,r),this.$emit(`before-saving-tag`,{index:t,tag:r,saveTag:()=>this.saveTag(t,r)}))},saveTag(t,n){if(this.avoidAddingDuplicates){let r=Jo(this.tagsCopy),i=r.splice(t,1)[0];if(this.isDuplicate?this.isDuplicate(r,i):r.map(t=>t.text).indexOf(i.text)!==-1)return this.$emit(`saving-duplicate`,n)}this.hasForbiddingAddRule(n.tiClasses)||(this.tagsCopy[t]=n,this.toggleEditMode(t),this.$emit(`update:tags`,this.tagsCopy),this.$emit(`tags-changed`,this.tagsCopy))},tagsEqual(){return!this.tagsCopy.some((t,n)=>!qo(t,this.tags[n]))},updateNewTag(t){let n=t.target.value;this.newTag=n,this.$emit(`update:modelValue`,n)},initTags(){this.tagsCopy=G(this.tags,this.validation,this.isDuplicate),this.tagsEditStatus=Jo(this.tags).map(()=>!1),this.tagsEqual()||this.$emit(`update:tags`,this.tagsCopy)},blurredOnClick(t){this.$el.contains(t.target)||this.$el.contains(document.activeElement)||this.performBlur(t)},performBlur(){this.addOnBlur&&this.focused&&this.performAddTags(this.newTag),this.focused=!1},tagOrderChanged(){this.$emit(`tag-order-changed`,this.tagsCopy)},performClick(t){if(this.addOnlyFromAutocomplete)return this.$emit(`click`,t),!1;this.selectedItem=null,this.$emit(`click`,t)},getTagIndex(t){return this.tagsCopy.findIndex(n=>n.text===t.text)}},watch:{modelValue(t){this.addOnlyFromAutocomplete||(this.selectedItem=null),this.newTag=t},tags:{handler(){this.initTags()},deep:!0},autocompleteOpen:`selectDefaultItem`},created(){this.newTag=this.modelValue,this.initTags()},mounted(){this.selectDefaultItem(),document.addEventListener(`click`,this.blurredOnClick)},beforeUpdate(){this.tagCenter=[]},unmounted(){document.removeEventListener(`click`,this.blurredOnClick)}},Zo={class:`ti-input`},Qo=[`onClick`],$o={class:`ti-content`},es={key:0,class:`handle`},ts={key:1,class:`ti-tag-left`},ns=[`onClick`],rs={key:2,class:`ti-tag-right`},as={class:`ti-actions`},os=[`onClick`],ss=[`onClick`],cs={class:`ti-new-tag-input-wrapper`},ls=[`placeholder`,`value`,`maxlength`,`disabled`],us={key:1,class:`ti-tags`},ds=[`onClick`],fs={class:`ti-content`},ps={key:0,class:`ti-tag-left`},ms=[`onClick`],hs={key:1,class:`ti-tag-right`},gs={class:`ti-actions`},_s=[`onClick`],vs=[`onClick`],ys={class:`ti-new-tag-input-wrapper`},bs=[`placeholder`,`value`,`maxlength`,`disabled`],xs=[`onMouseover`],Ss=[`onClick`];function ke(t,n,r,i,a,o){let c=C(`tag-input`),l=C(`draggable`);return v(),N(`div`,{class:w([`vue-tags-input`,[{"ti-disabled":t.disabled},{"ti-focus":t.focused},t.$attrs.class]]),style:Ae(t.$attrs.style)},[j(`div`,Zo,[t.isDraggable?(v(),R(l,{key:0,modelValue:t.tagsCopy,"onUpdate:modelValue":n[9]||(n[9]=n=>t.tagsCopy=n),group:`tags`,class:`ti-tags`,tag:`ul`,draggable:`.item`,handle:t.draggableHandle?`.handle`:``,"ghost-class":`ghost-tag`,"drag-class":`drag-tag`,"item-key":t.getTagIndex,onStart:n[10]||(n[10]=n=>t.drag=!0),onEnd:n[11]||(n[11]=n=>{t.drag=!1,t.tagOrderChanged()})},{item:s(({element:n,index:r})=>[(v(),N(`li`,{key:r,style:Ae(n.style),class:w([[{"ti-editing":t.tagsEditStatus[r]},n.tiClasses,n.classes,{"ti-deletion-mark":t.isMarked(r)}],`ti-tag item`]),tabindex:`0`,onClick:i=>t.$emit(`tag-clicked`,{element:n,index:r})},[j(`div`,$o,[t.draggableHandle?(v(),N(`span`,es,`::`)):z(``,!0),t.$slots[`tag-left`]?(v(),N(`div`,ts,[_(t.$slots,`tag-left`,{tag:n,index:r,edit:t.tagsEditStatus[r],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(r)},void 0,!0)])):z(``,!0),j(`div`,{ref:t.setTagCenter,class:`ti-tag-center`},[t.$slots[`tag-center`]?z(``,!0):(v(),N(`span`,{key:0,class:w({"ti-hidden":t.tagsEditStatus[r]}),onClick:n=>t.performEditTag(r)},y(n.text),11,ns)),t.$slots[`tag-center`]?z(``,!0):(v(),R(c,{key:1,scope:{edit:t.tagsEditStatus[r],maxlength:t.maxlength,element:n,index:r,validateTag:t.createChangedTag,performCancelEdit:t.cancelEdit,performSaveEdit:t.performSaveTag}},null,8,[`scope`])),_(t.$slots,`tag-center`,{tag:n,index:r,maxlength:t.maxlength,edit:t.tagsEditStatus[r],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,validateTag:t.createChangedTag,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(r)},void 0,!0)],512),t.$slots[`tag-right`]?(v(),N(`div`,rs,[_(t.$slots,`tag-right`,{tag:n,index:r,edit:t.tagsEditStatus[r],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(r)},void 0,!0)])):z(``,!0)]),j(`div`,as,[t.$slots[`tag-actions`]?z(``,!0):de((v(),N(`i`,{key:0,class:`ti-icon-undo`,onClick:n=>t.cancelEdit(r)},null,8,os)),[[ue,t.tagsEditStatus[r]]]),t.$slots[`tag-actions`]?z(``,!0):de((v(),N(`i`,{key:1,class:`ti-icon-close`,onClick:n=>t.performDeleteTag(r)},null,8,ss)),[[ue,!t.tagsEditStatus[r]]]),t.$slots[`tag-actions`]?_(t.$slots,`tag-actions`,{key:2,tag:n,index:r,edit:t.tagsEditStatus[r],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(r)},void 0,!0):z(``,!0)])],14,Qo))]),footer:s(()=>[j(`li`,cs,[j(`input`,T({ref:`newTagInput`},t.$attrs,{class:[[t.createClasses(t.newTag,t.tags,t.validation,t.isDuplicate)],`ti-new-tag-input`],placeholder:t.placeholder,value:t.newTag,maxlength:t.maxlength,disabled:t.disabled,type:`text`,size:`1`,onKeydown:[n[0]||(n[0]=n=>t.performAddTags(t.filteredAutocompleteItems[t.selectedItem]||t.newTag,n)),n[2]||(n[2]=ge((...n)=>t.invokeDelete&&t.invokeDelete(...n),[`delete`])),n[3]||(n[3]=ge((...n)=>t.performBlur&&t.performBlur(...n),[`tab`])),n[4]||(n[4]=ge(n=>t.selectItem(n,`before`),[`up`])),n[5]||(n[5]=ge(n=>t.selectItem(n,`after`),[`down`]))],onPaste:n[1]||(n[1]=(...n)=>t.addTagsFromPaste&&t.addTagsFromPaste(...n)),onInput:n[6]||(n[6]=(...n)=>t.updateNewTag&&t.updateNewTag(...n)),onFocus:n[7]||(n[7]=n=>t.focused=!0),onClick:n[8]||(n[8]=n=>t.performClick(n))}),null,16,ls)])]),_:3},8,[`modelValue`,`handle`,`item-key`])):(v(),N(`ul`,us,[(v(!0),N(fe,null,oe(t.tagsCopy,(n,r)=>(v(),N(`li`,{key:r,style:Ae(n.style),class:w([[{"ti-editing":t.tagsEditStatus[r]},n.tiClasses,n.classes,{"ti-deletion-mark":t.isMarked(r)}],`ti-tag item`]),tabindex:`0`,onClick:i=>t.$emit(`tag-clicked`,{element:n,index:r})},[j(`div`,fs,[t.$slots[`tag-left`]?(v(),N(`div`,ps,[_(t.$slots,`tag-left`,{tag:n,index:r,edit:t.tagsEditStatus[r],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(r)},void 0,!0)])):z(``,!0),j(`div`,{ref_for:!0,ref:t.setTagCenter,class:`ti-tag-center`},[t.$slots[`tag-center`]?z(``,!0):(v(),N(`span`,{key:0,class:w({"ti-hidden":t.tagsEditStatus[r]}),onClick:n=>t.performEditTag(r)},y(n.text),11,ms)),t.$slots[`tag-center`]?z(``,!0):(v(),R(c,{key:1,scope:{edit:t.tagsEditStatus[r],maxlength:t.maxlength,element:n,index:r,validateTag:t.createChangedTag,performCancelEdit:t.cancelEdit,performSaveEdit:t.performSaveTag}},null,8,[`scope`])),_(t.$slots,`tag-center`,{tag:n,index:r,maxlength:t.maxlength,edit:t.tagsEditStatus[r],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,validateTag:t.createChangedTag,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(r)},void 0,!0)],512),t.$slots[`tag-right`]?(v(),N(`div`,hs,[_(t.$slots,`tag-right`,{tag:n,index:r,edit:t.tagsEditStatus[r],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(r)},void 0,!0)])):z(``,!0)]),j(`div`,gs,[t.$slots[`tag-actions`]?z(``,!0):de((v(),N(`i`,{key:0,class:`ti-icon-undo`,onClick:n=>t.cancelEdit(r)},null,8,_s)),[[ue,t.tagsEditStatus[r]]]),t.$slots[`tag-actions`]?z(``,!0):de((v(),N(`i`,{key:1,class:`ti-icon-close`,onClick:n=>t.performDeleteTag(r)},null,8,vs)),[[ue,!t.tagsEditStatus[r]]]),t.$slots[`tag-actions`]?_(t.$slots,`tag-actions`,{key:2,tag:n,index:r,edit:t.tagsEditStatus[r],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(r)},void 0,!0):z(``,!0)])],14,ds))),128)),j(`li`,ys,[j(`input`,T({ref:`newTagInput`},t.$attrs,{class:[[t.createClasses(t.newTag,t.tags,t.validation,t.isDuplicate)],`ti-new-tag-input`],placeholder:t.placeholder,value:t.newTag,maxlength:t.maxlength,disabled:t.disabled,type:`text`,size:`1`,onKeydown:[n[12]||(n[12]=n=>t.performAddTags(t.filteredAutocompleteItems[t.selectedItem]||t.newTag,n)),n[14]||(n[14]=ge((...n)=>t.invokeDelete&&t.invokeDelete(...n),[`delete`])),n[15]||(n[15]=ge((...n)=>t.performBlur&&t.performBlur(...n),[`tab`])),n[16]||(n[16]=ge(n=>t.selectItem(n,`before`),[`up`])),n[17]||(n[17]=ge(n=>t.selectItem(n,`after`),[`down`]))],onPaste:n[13]||(n[13]=(...n)=>t.addTagsFromPaste&&t.addTagsFromPaste(...n)),onInput:n[18]||(n[18]=(...n)=>t.updateNewTag&&t.updateNewTag(...n)),onFocus:n[19]||(n[19]=n=>t.focused=!0),onClick:n[20]||(n[20]=n=>t.performClick(n))}),null,16,bs)])]))]),_(t.$slots,`between-elements`,{},void 0,!0),t.autocompleteOpen?(v(),N(`div`,{key:0,class:`ti-autocomplete`,onMouseout:n[21]||(n[21]=n=>t.selectedItem=null)},[_(t.$slots,`autocomplete-header`,{},void 0,!0),j(`ul`,null,[(v(!0),N(fe,null,oe(t.filteredAutocompleteItems,(n,r)=>(v(),N(`li`,{key:r,style:Ae(n.style),class:w([[n.tiClasses,n.classes,{"ti-selected-item":t.isSelected(r)}],`ti-item`]),onMouseover:n=>t.disabled?!1:t.selectedItem=r},[t.$slots[`autocomplete-item`]?_(t.$slots,`autocomplete-item`,{key:1,item:n,index:r,performAdd:n=>t.performAddTags(n,void 0,`autocomplete`),selected:t.isSelected(r)},void 0,!0):(v(),N(`div`,{key:0,onClick:r=>t.performAddTags(n,void 0,`autocomplete`)},y(n.text),9,Ss))],46,xs))),128))]),_(t.$slots,`autocomplete-footer`,{},void 0,!0)],32)):z(``,!0)],6)}var Cs=B(Xo,[[`render`,ke],[`__scopeId`,`data-v-63864685`]]);Cs.install=t=>t.component(Cs.name,Cs),typeof window<`u`&&window.Vue&&window.Vue.use(Cs);var ws=A({name:`SkTagsInput`,components:{VueTagsInput:Cs},props:{courseID:{type:String,required:!0,default:``},cardID:{type:String,required:!1,default:``},hideSubmit:{type:Boolean,required:!1,default:!1}},data(){return{loading:!0,tag:``,tags:[],initialTags:[],availableCourseTags:[],separators:[`;`,`,`,` `],courseDB:null}},computed:{autoCompleteSuggestions(){return this.availableCourseTags.filter(t=>t.name.toLowerCase().indexOf(this.tag.toLowerCase())!==-1).map(t=>({text:t.name,data:{snippet:t.snippet}}))}},watch:{async cardID(){await this.getAppliedTags()},async courseID(){this.courseDB=Qe().getCourseDB(this.courseID),await this.updateAvailableCourseTags()}},async created(){this.courseDB=Qe().getCourseDB(this.courseID),await this.updateAvailableCourseTags(),await this.getAppliedTags()},methods:{tagsChanged(t){console.log(`[TagsInput] Tags changing: ${JSON.stringify(t)}`),this.tags=t},async getAppliedTags(){this.initialTags=[],this.tags=[];try{(await this.courseDB.getAppliedTags(this.cardID)).rows.forEach(t=>{console.log(`[TagsInput] The following tag is applied:
37
37
  \t${JSON.stringify(t)}`),this.tags.push({text:t.value.name,style:``,classes:``})}),this.initialTags=this.tags.map(t=>t.text)}catch(t){console.error(`Error in init-getAppliedTags: ${JSON.stringify(t)}, ${t}`)}finally{this.loading=!1}},async updateAvailableCourseTags(){try{this.availableCourseTags=(await this.courseDB.getCourseTagStubs()).rows.map(t=>t.doc)}catch(t){console.error(`Error in init-availableCourseTags: ${JSON.stringify(t)}`)}},async submit(){console.log(`[TagsInput] tagsInput is submitting...`),this.loading=!0;try{await Promise.all(this.tags.map(async t=>{if(!this.initialTags.includes(t.text))try{await this.courseDB.addTagToCard(this.cardID,t.text),console.log(`[TagsInput] Successfully added tag: ${t.text}`)}catch(n){console.error(`Failed to add tag ${t.text}:`,n)}}))}catch(t){console.error(`Exception adding tags: ${JSON.stringify(t)}`)}try{await Promise.all(this.initialTags.map(async t=>{if(this.tags.filter(n=>n.text===t).length===0)try{await this.courseDB.removeTagFromCard(this.cardID,t),console.log(`[TagsInput] Successfully removed tag: ${t}`)}catch(n){console.error(`Failed to remove tag ${t}:`,n)}}))}catch(t){console.error(`Exception removing tags: ${JSON.stringify(t)}`)}this.loading=!1}}}),Ts={"data-cy":`tags-input`},Es={class:`tag-name`},Ds={key:0,class:`tag-snippet`};function _sfc_render$5(t,n,r,i,a,o){let c=C(`vue-tags-input`),l=C(`v-btn`);return v(),N(`div`,Ts,[d(c,{modelValue:t.tag,"onUpdate:modelValue":n[0]||(n[0]=n=>t.tag=n),tags:t.tags,"autocomplete-items":t.autoCompleteSuggestions,separators:t.separators,"add-on-key":t.separators,onTagsChanged:t.tagsChanged},{"autocomplete-item":s(t=>[j(`div`,{class:w([`autocomplete-item`,{"is-active":t.selected}])},[j(`span`,Es,y(t.item.text),1),t.item.data&&t.item.data.snippet?(v(),N(`span`,Ds,` - `+y(t.item.data.snippet),1)):z(``,!0)],2)]),_:1},8,[`modelValue`,`tags`,`autocomplete-items`,`separators`,`add-on-key`,`onTagsChanged`]),t.hideSubmit?z(``,!0):(v(),R(l,{key:0,color:`success`,loading:t.loading,onClick:t.submit},{default:s(()=>n[1]||(n[1]=[k(`Save Changes`)])),_:1},8,[`loading`,`onClick`]))])}t(_sfc_render$5,`_sfc_render`);var Os=H(ws,[[`render`,_sfc_render$5],[`__scopeId`,`data-v-f7373dc0`]]),ks=A({name:`CourseCardBrowser`,components:{CardLoader:Nn,TagsInput:Os,PaginatingToolbar:_t},props:{courseId:{type:String,required:!0},tagId:{type:String,required:!1,default:``},viewLookupFunction:{type:Function,required:!0,default:()=>(console.warn(`No viewLookupFunction provided to CourseCardBrowser`),null)},editMode:{type:String,required:!1,default:`full`}},data(){return{courseDB:null,page:1,pages:[],cards:[],cardData:{},cardPreview:{},cardElos:{},cardTags:{},internalEditMode:`none`,delBtn:!1,updatePending:!0,userIsRegistered:!1,questionCount:0,tags:[],viewLookup:this.viewLookupFunction}},async created(){try{this.courseDB=Qe().getCourseDB(this.courseId),this.tagId?this.questionCount=(await this.courseDB.getTag(this.tagId)).taggedCards.length:this.questionCount=(await this.courseDB.getCourseInfo()).cardCount;for(let t=1;(t-1)*25<this.questionCount;t++)this.pages.push(t);await this.populateTableData()}catch(t){console.error(`Error initializing CourseCardBrowser:`,t)}finally{this.updatePending=!1}},methods:{idQualify(t){return t.includes(`-`)?t:`${this.courseId}-${t}`},idToQualifiedObject(t){if(t.includes(`-`)){let n=t.split(`-`);return{courseID:n[0],cardID:n[1]}}else return{courseID:this.courseId,cardID:t}},first(){this.page=1,this.populateTableData()},prev(){this.page--,this.populateTableData()},next(){this.page++,this.populateTableData()},last(){this.page=this.pages.length,this.populateTableData()},setPage(t){this.page=t,this.populateTableData()},async loadCardTags(t){try{await Promise.all(t.map(async t=>{let n=await this.courseDB.getAppliedTags(t);this.cardTags[t]=n.rows.map(t=>({name:t.value.name,snippet:t.value.snippet,count:t.value.count}))}))}catch(t){console.error(`Error loading card tags:`,t)}},clearSelections(t=``){this.cards.forEach(n=>{n.card.cardID!==t&&(n.isOpen=!1)}),this.internalEditMode=`none`,this.delBtn=!1},async deleteCard(t){console.log(`Deleting card ${t}`);let n=await this.courseDB.removeCard(t);n.ok?(this.cards=this.cards.filter(n=>n.card.cardID!=t),this.clearSelections()):(console.error(`Failed to delete card:\n\n${JSON.stringify(n)}`),dt({text:`Failed to delete card`,status:Ue.error}))},async populateTableData(){this.updatePending=!0,this.tagId?this.cards=(await this.courseDB.getTag(this.tagId)).taggedCards.map(t=>({card:{cardID:t,courseID:this.courseId},isOpen:!1,delBtn:!1})):this.cards=(await this.courseDB.getCardsByELO(0,25)).map(t=>({card:t,isOpen:!1,delBtn:!1}));let t=[],n=(await this.courseDB.getCourseDocs(this.cards.map(t=>t.card.cardID),{include_docs:!0})).rows.filter(t=>t.doc?!0:(console.error(`Card ${t.id}.doc not found.\ncard: ${JSON.stringify(t)}`),!1)).map(t=>t.doc);this.cards=this.cards.filter(n=>!t.includes(n.card.cardID)),n.forEach(t=>{t&&t.id_displayable_data&&(this.cardData[t._id]=t.id_displayable_data)});try{await Promise.all(this.cards.map(async t=>{let r=t.card.cardID,i=n.find(t=>t._id==r);if(!i||!i.id_displayable_data){console.error(`No valid data found for card ${r}`);return}let a=this.viewLookupFunction(i.id_view||`default.question.BlanksCard.FillInView`),o=i.id_displayable_data.map(t=>this.courseDB.getCourseDoc(t,{attachments:!1,binary:!0})),s=await Promise.all(o);await Promise.all(s.map(n=>{[].unshift(Je(n)),this.cardPreview[t.card.cardID]=a.name?a.name:`Unknown`}))}));let t=this.cards.map(t=>t.card.cardID),r=await this.courseDB.getCardEloData(t);t.forEach((t,n)=>{this.cardElos[t]=r[n]}),await this.loadCardTags(t)}catch(t){console.error(`Error populating table data:`,t)}finally{this.updatePending=!1,this.$forceUpdate()}}}}),As={key:0,class:`d-flex justify-center align-center pa-6`},js={key:1},Ms={key:0,class:`px-4 py-2 bg-blue-grey-lighten-5`},Ns={key:0,class:`mt-4`},Ps={class:`mt-4`},Fs={key:0,class:`ml-4`};function _sfc_render$4(t,n,r,i,a,o){let c=C(`v-progress-circular`),l=C(`paginating-toolbar`),u=C(`v-list-item-title`),f=C(`v-list-item-subtitle`),p=C(`v-btn`),m=C(`v-icon`),h=C(`v-speed-dial`),g=C(`v-list-item`),_=C(`card-loader`),b=C(`v-chip`),x=C(`v-chip-group`),S=C(`tags-input`),E=C(`v-list`),D=C(`v-card`);return v(),R(D,null,{default:s(()=>[t.updatePending?(v(),N(`div`,As,[d(c,{indeterminate:``,color:`primary`})])):(v(),N(`div`,js,[d(l,{title:`Exercises`,page:t.page,pages:t.pages,subtitle:`(${t.questionCount})`,onFirst:t.first,onPrev:t.prev,onNext:t.next,onLast:t.last,onSetPage:n[0]||(n[0]=n=>t.setPage(n))},null,8,[`page`,`pages`,`subtitle`,`onFirst`,`onPrev`,`onNext`,`onLast`]),d(E,null,{default:s(()=>[(v(!0),N(fe,null,oe(t.cards,r=>(v(),N(fe,{key:r.card.cardID},[d(g,{class:w({"bg-blue-grey-lighten-5":r.isOpen,"elevation-4":r.isOpen}),density:`compact`,"data-cy":`course-card`},{prepend:s(()=>[j(`div`,null,[d(u,{class:w([{"text-blue-grey-darken-1":r.isOpen},`font-weight-medium`])},{default:s(()=>[k(y(t.cardPreview[r.card.cardID]),1)]),_:2},1032,[`class`]),d(f,null,{default:s(()=>[k(` ELO: `+y(t.cardElos[r.card.cardID]?.global?.score||`(unknown)`),1)]),_:2},1024)])]),append:s(()=>[d(h,{modelValue:r.isOpen,"onUpdate:modelValue":t=>r.isOpen=t,location:`left center`,transition:`slide-x-transition`,style:{display:`flex`,"flex-direction":`row-reverse`},persistent:``},{activator:s(({props:n})=>[d(p,T({ref_for:!0},n,{icon:r.isOpen?`mdi-close`:`mdi-plus`,size:`small`,variant:`text`,onClick:n=>t.clearSelections(r.card.cardID)}),null,16,[`icon`,`onClick`])]),default:s(()=>[t.editMode===`full`?(v(),R(p,{key:`tags`,icon:``,size:`small`,variant:t.internalEditMode===`tags`?`elevated`:`outlined`,color:t.internalEditMode===`tags`?`teal`:`teal-darken-3`,onClick:n[1]||(n[1]=xe(n=>t.internalEditMode=`tags`,[`stop`]))},{default:s(()=>[d(m,null,{default:s(()=>n[4]||(n[4]=[k(`mdi-bookmark`)])),_:1})]),_:1},8,[`variant`,`color`])):z(``,!0),t.editMode===`full`?(v(),R(p,{key:`flag`,icon:``,size:`small`,variant:t.internalEditMode===`flag`?`elevated`:`outlined`,color:t.internalEditMode===`flag`?`error`:`error-darken-3`,onClick:n[2]||(n[2]=xe(n=>t.internalEditMode=`flag`,[`stop`]))},{default:s(()=>[d(m,null,{default:s(()=>n[5]||(n[5]=[k(`mdi-flag`)])),_:1})]),_:1},8,[`variant`,`color`])):z(``,!0)]),_:2},1032,[`modelValue`,`onUpdate:modelValue`])]),_:2},1032,[`class`]),r.isOpen?(v(),N(`div`,Ms,[d(_,{qualified_id:r.card,"view-lookup":t.viewLookup,class:`elevation-1`},null,8,[`qualified_id`,`view-lookup`]),t.editMode===`readonly`&&t.cardTags[r.card.cardID]?(v(),N(`div`,Ns,[d(x,null,{default:s(()=>[(v(!0),N(fe,null,oe(t.cardTags[r.card.cardID],t=>(v(),R(b,{key:t.name,size:`small`,color:`primary`,variant:`outlined`},{default:s(()=>[k(y(t.name),1)]),_:2},1024))),128))]),_:2},1024)])):z(``,!0),de(d(S,{"course-i-d":t.courseId,"card-i-d":r.card.cardID,class:`mt-4`},null,8,[`course-i-d`,`card-i-d`]),[[ue,t.internalEditMode===`tags`&&t.editMode===`full`]]),de(j(`div`,Ps,[d(p,{color:`error`,variant:`outlined`,onClick:t=>r.delBtn=!0},{default:s(()=>n[6]||(n[6]=[k(` Delete this card `)])),_:2},1032,[`onClick`]),r.delBtn?(v(),N(`span`,Fs,[n[8]||(n[8]=j(`span`,{class:`mr-2`},`Are you sure?`,-1)),d(p,{color:`error`,variant:`elevated`,onClick:n=>t.deleteCard(r.card.cardID)},{default:s(()=>n[7]||(n[7]=[k(` Confirm `)])),_:2},1032,[`onClick`])])):z(``,!0)],512),[[ue,t.internalEditMode===`flag`&&t.editMode===`full`]])])):z(``,!0)],64))),128))]),_:1}),d(l,{class:`elevation-0`,page:t.page,pages:t.pages,onFirst:t.first,onPrev:t.prev,onNext:t.next,onLast:t.last,onSetPage:n[3]||(n[3]=n=>t.setPage(n))},null,8,[`page`,`pages`,`onFirst`,`onPrev`,`onNext`,`onLast`])]))]),_:1})}t(_sfc_render$4,`_sfc_render`);var Is=H(ks,[[`render`,_sfc_render$4],[`__scopeId`,`data-v-5ecc9d21`]]),Ls=A({name:`CourseInformation`,components:{CourseCardBrowser:Is},props:{courseId:{type:String,required:!0},viewLookupFunction:{type:Function,required:!1,default:t=>(console.warn(`No viewLookupFunction provided to CourseInformation`),null)},editMode:{type:String,required:!1,default:`full`}},data(){return{courseDB:null,nameRules:[t=>t.length>30?`Course name must be 30 characters or less`:!0],updatePending:!0,courseConfig:{},userIsRegistered:!1,tags:[],user:null}},computed:{},async created(){this.courseDB=Qe().getCourseDB(this.courseId),this.user=await getCurrentUser();let t=await this.user.getCourseRegistrationsDoc();this.user.getUsername()===`admin`?this.userIsRegistered=!0:this.userIsRegistered=t.courses.filter(t=>t.courseID===this.courseId&&(t.status===`active`||t.status===void 0)).length===1,this.courseConfig=await this.courseDB.getCourseConfig(),this.tags=(await this.courseDB.getCourseTagStubs()).rows.map(t=>t.doc),this.updatePending=!1},methods:{async register(){U(`Registering for ${this.courseId}`),(await this.user.registerForCourse(this.courseId)).ok&&(this.userIsRegistered=!0)},async drop(){U(`Dropping course ${this.courseId}`),(await this.user.dropCourse(this.courseId)).ok&&(this.userIsRegistered=!1)}}}),Rs={key:0},zs={class:`text-h4 mb-2`},Bs={class:`text-body-2`},Vs={key:0},Hs={key:1};function _sfc_render$3(t,n,r,i,a,o){let c=C(`v-btn`),l=C(`v-icon`),u=C(`v-toolbar-title`),f=C(`v-toolbar-items`),p=C(`v-toolbar`),m=C(`v-chip`),h=C(`v-card-text`),g=C(`v-card`),b=C(`course-card-browser`);return t.updatePending?z(``,!0):(v(),N(`div`,Rs,[_(t.$slots,`header`,{courseConfig:t.courseConfig,courseId:t.courseId},()=>[j(`h1`,zs,y(t.courseConfig.name),1)],!0),j(`p`,Bs,y(t.courseConfig.description),1),_(t.$slots,`actions`,{userIsRegistered:t.userIsRegistered,courseId:t.courseId,editMode:t.editMode,register:t.register,drop:t.drop},()=>[d(be,{name:`component-fade`,mode:`out-in`},{default:s(()=>[t.userIsRegistered?(v(),N(`div`,Vs,[d(c,{color:`success`,"data-cy":`focused-study-session-btn`,class:`me-2`},{default:s(()=>n[0]||(n[0]=[k(`Start ad study session`)])),_:1}),t.editMode===`full`?(v(),R(c,{key:0,"data-cy":`add-content-btn`,color:`indigo-lighten-1`,class:`me-2`},{default:s(()=>[d(l,{start:``},{default:s(()=>n[1]||(n[1]=[k(`mdi-plus`)])),_:1}),n[2]||(n[2]=k(` Add content `))]),_:1})):z(``,!0),t.editMode===`full`?(v(),R(c,{key:1,color:`green-darken-2`,title:`Rank course content for difficulty`,class:`me-2`},{default:s(()=>[d(l,{start:``},{default:s(()=>n[3]||(n[3]=[k(`mdi-format-list-numbered`)])),_:1}),n[4]||(n[4]=k(` Arrange `))]),_:1})):z(``,!0),t.editMode===`full`?(v(),R(c,{key:2,color:`error`,size:`small`,variant:`outlined`,onClick:t.drop},{default:s(()=>n[5]||(n[5]=[k(` Drop this course `)])),_:1},8,[`onClick`])):z(``,!0)])):(v(),N(`div`,Hs,[d(c,{"data-cy":`register-btn`,color:`primary`,class:`me-2`,onClick:t.register},{default:s(()=>n[6]||(n[6]=[k(`Register`)])),_:1},8,[`onClick`]),d(c,{variant:`outlined`,color:`primary`,class:`me-2`},{default:s(()=>n[7]||(n[7]=[k(`Start a trial study session`)])),_:1})]))]),_:1})],!0),_(t.$slots,`additional-content`,{},void 0,!0),d(g,{class:`my-2`},{default:s(()=>[d(p,{density:`compact`},{default:s(()=>[d(u,null,{default:s(()=>n[8]||(n[8]=[k(`Tags`)])),_:1}),d(f,null,{default:s(()=>[d(c,{variant:`text`},{default:s(()=>[k(`(`+y(t.tags.length)+`)`,1)]),_:1})]),_:1})]),_:1}),d(h,null,{default:s(()=>[(v(!0),N(fe,null,oe(t.tags,(n,r)=>(v(),N(`span`,{key:r},[_(t.$slots,`tag-link`,{tag:n,courseId:t.courseId},()=>[d(m,{variant:`tonal`,class:`me-2 mb-2`},{default:s(()=>[k(y(n.name),1)]),_:2},1024)],!0)]))),128))]),_:3})]),_:3}),d(b,{class:`my-3`,"course-id":t.courseId,"view-lookup-function":t.viewLookupFunction,"edit-mode":t.editMode},null,8,[`course-id`,`view-lookup-function`,`edit-mode`])]))}t(_sfc_render$3,`_sfc_render`);var Us=H(Ls,[[`render`,_sfc_render$3],[`__scopeId`,`data-v-38e9efe1`]]),Ws=A({name:`CardBrowser`,components:{CardViewer:At},props:{views:{type:Array,required:!0},data:{type:Array,required:!0},suppressSpinner:{type:Boolean,default:!1}},data(){return{viewIndex:0,previewMode:Fe()}},computed:{spinner(){return this.views.length>1}},created(){console.log(`[CardBrowser] Card browser created. Cards now in 'prewviewMode'`),this.previewMode.setPreviewMode(!0)},unmounted(){console.log(`[CardBrowser] Card browser unmounted. Cards no longer in 'prewviewMode'`),this.previewMode.setPreviewMode(!1)},methods:{incrementView(){this.viewIndex++,this.viewIndex=(this.viewIndex+this.views.length)%this.views.length},decrementView(){this.viewIndex--,this.viewIndex=(this.viewIndex+this.views.length)%this.views.length}}}),Gs={key:0,class:`text-subtitle-1 pa-2`};function _sfc_render$2(t,n,r,i,a,o){let c=C(`CardViewer`),l=C(`v-icon`),u=C(`v-btn`),f=C(`v-row`);return v(),R(f,{column:``,align:`center`,justify:`center`},{default:s(()=>[d(c,{view:t.views[t.viewIndex],data:t.data,course_id:`[browsing]`,card_id:`[browsing]`},null,8,[`view`,`data`]),n[2]||(n[2]=j(`br`,null,null,-1)),n[3]||(n[3]=j(`br`,null,null,-1)),t.suppressSpinner?z(``,!0):(v(),N(`div`,Gs,[t.spinner?(v(),R(u,{key:0,icon:``,variant:`outlined`,color:`primary`,onClick:t.decrementView},{default:s(()=>[d(l,null,{default:s(()=>n[0]||(n[0]=[k(`mdi-chevron-left`)])),_:1})]),_:1},8,[`onClick`])):z(``,!0),k(` `+y(t.views[t.viewIndex].name)+` `,1),t.spinner?(v(),R(u,{key:1,icon:``,variant:`outlined`,color:`primary`,onClick:t.incrementView},{default:s(()=>[d(l,null,{default:s(()=>n[1]||(n[1]=[k(`mdi-chevron-right`)])),_:1})]),_:1},8,[`onClick`])):z(``,!0)]))]),_:1})}t(_sfc_render$2,`_sfc_render`);var Ks=H(Ws,[[`render`,_sfc_render$2]]),qs=A({name:`CourseTagFilterWidget`,props:{courseId:{type:String,required:!0},modelValue:{type:Object,default:void 0}},emits:[`update:modelValue`],setup(t,{emit:n}){let r=I(!0),i=I([]),a=I({}),o=I(t.modelValue?{...t.modelValue}:He()),s=P(()=>i.value.filter(t=>!o.value.include.includes(t))),c=P(()=>Ge(o.value)),fuzzyFilter=(t,n)=>{if(!n)return!0;let r=n.toLowerCase(),i=t.toLowerCase(),a=0;for(let t=0;t<i.length&&a<r.length;t++)i[t]===r[a]&&a++;return a===r.length};se(()=>t.modelValue,t=>{t?o.value={...t}:o.value=He()},{deep:!0}),se(o,t=>{n(`update:modelValue`,{...t})},{deep:!0}),se(()=>t.courseId,async t=>{t&&await loadTags()});async function loadTags(){r.value=!0;try{let n=await Qe().getCourseDB(t.courseId).getCourseTagStubs();i.value=[],a.value={};for(let t of n.rows)if(t.doc){let n=t.doc;i.value.push(n.name),n.snippet&&(a.value[n.name]=n.snippet)}i.value.sort((t,n)=>t.localeCompare(n))}catch(t){console.error(`[CourseTagFilterWidget] Failed to load tags:`,t),i.value=[],a.value={}}finally{r.value=!1}}return Oe(()=>{t.courseId&&loadTags()}),{loading:r,availableTags:i,availableTagsForExclude:s,tagSnippets:a,localFilter:o,hasActiveFilter:c,fuzzyFilter}}}),Js={class:`course-tag-filter-widget`},Ys={key:0,class:`filter-summary text-caption mt-2`},Xs={key:0},Zs={key:1},Qs={key:2};function _sfc_render$1(t,n,r,i,a,o){let c=C(`v-chip`),l=C(`v-list-item`),u=C(`v-autocomplete`),f=C(`v-icon`);return v(),N(`div`,Js,[d(u,{modelValue:t.localFilter.include,"onUpdate:modelValue":n[0]||(n[0]=n=>t.localFilter.include=n),items:t.availableTags,loading:t.loading,disabled:t.loading,label:`Include tags`,placeholder:`Type to search tags...`,hint:`Cards must have at least one of these tags`,"persistent-hint":``,multiple:``,chips:``,"closable-chips":``,clearable:``,density:`compact`,variant:`outlined`,class:`mb-2`,"custom-filter":t.fuzzyFilter,"no-data-text":`No matching tags found`},{chip:s(({props:t,item:n})=>[d(c,T(t,{color:`primary`,variant:`tonal`,size:`small`}),{default:s(()=>[k(y(n.raw),1)]),_:2},1040)]),item:s(({props:n,item:r})=>[d(l,T(n,{title:r.raw}),Te({_:2},[t.tagSnippets[r.raw]?{name:`subtitle`,fn:s(()=>[k(y(t.tagSnippets[r.raw]),1)]),key:`0`}:void 0]),1040,[`title`])]),_:1},8,[`modelValue`,`items`,`loading`,`disabled`,`custom-filter`]),d(u,{modelValue:t.localFilter.exclude,"onUpdate:modelValue":n[1]||(n[1]=n=>t.localFilter.exclude=n),items:t.availableTagsForExclude,loading:t.loading,disabled:t.loading,label:`Exclude tags`,placeholder:`Type to search tags...`,hint:`Cards with these tags will be excluded`,"persistent-hint":``,multiple:``,chips:``,"closable-chips":``,clearable:``,density:`compact`,variant:`outlined`,"custom-filter":t.fuzzyFilter,"no-data-text":`No matching tags found`},{chip:s(({props:t,item:n})=>[d(c,T(t,{color:`error`,variant:`tonal`,size:`small`}),{default:s(()=>[k(y(n.raw),1)]),_:2},1040)]),item:s(({props:n,item:r})=>[d(l,T(n,{title:r.raw}),Te({_:2},[t.tagSnippets[r.raw]?{name:`subtitle`,fn:s(()=>[k(y(t.tagSnippets[r.raw]),1)]),key:`0`}:void 0]),1040,[`title`])]),_:1},8,[`modelValue`,`items`,`loading`,`disabled`,`custom-filter`]),t.hasActiveFilter?(v(),N(`div`,Ys,[d(f,{size:`small`,color:`info`,class:`mr-1`},{default:s(()=>n[2]||(n[2]=[k(`mdi-filter`)])),_:1}),t.localFilter.include.length?(v(),N(`span`,Xs,` Including: `+y(t.localFilter.include.join(`, `)),1)):z(``,!0),t.localFilter.include.length&&t.localFilter.exclude.length?(v(),N(`span`,Zs,` · `)):z(``,!0),t.localFilter.exclude.length?(v(),N(`span`,Qs,` Excluding: `+y(t.localFilter.exclude.join(`, `)),1)):z(``,!0)])):z(``,!0)])}t(_sfc_render$1,`_sfc_render`);var $s=H(qs,[[`render`,_sfc_render$1],[`__scopeId`,`data-v-e1ba963b`]]),ec={min:0,startingMax:2,absoluteMax:10},tc=`UserTagPreferenceFilter`,nc=A({name:`UserTagPreferences`,props:{courseId:{type:String,required:!1,default:``},sliderConfig:{type:Object,required:!1,default:()=>({})}},emits:[`preferences-saved`,`preferences-changed`],data(){return{loading:!0,saving:!1,saveError:``,saveSuccess:!1,preferences:{boost:{}},savedPreferences:{boost:{}},tagMaxRanges:{},availableTags:[],tagToAdd:null,courseDB:null,user:null}},computed:{sliderConfigResolved(){return{min:this.sliderConfig.min??ec.min,startingMax:this.sliderConfig.startingMax??ec.startingMax,absoluteMax:this.sliderConfig.absoluteMax??ec.absoluteMax}},tagNames(){return Object.keys(this.preferences.boost).sort()},globalSliderMax(){let t=Object.values(this.tagMaxRanges);return t.length===0?this.sliderConfigResolved.startingMax:Math.max(...t)},availableTagsToAdd(){let t=new Set(Object.keys(this.preferences.boost));return this.availableTags.filter(n=>!t.has(n.name))},hasChanges(){let t=Object.keys(this.preferences.boost).sort(),n=Object.keys(this.savedPreferences.boost).sort();return t.length!==n.length||t.join(`,`)!==n.join(`,`)?!0:t.some(t=>this.preferences.boost[t]!==this.savedPreferences.boost[t])}},watch:{courseId:{immediate:!0,async handler(t){t?await this.loadPreferences():this.loading=!1}}},methods:{async loadPreferences(){this.loading=!0,this.saveError=``;try{if(this.user=await getCurrentUser()??null,!this.user)throw Error(`User not available`);this.courseDB=Qe().getCourseDB(this.courseId),this.availableTags=(await this.courseDB.getCourseTagStubs()).rows.map(t=>t.doc).filter(Boolean);let t=await this.user.getStrategyState(this.courseId,tc);t?this.preferences.boost={...t.boost}:this.preferences.boost={},this.savedPreferences.boost={...this.preferences.boost},this.tagMaxRanges={},Object.keys(this.preferences.boost).forEach(t=>{let n=this.preferences.boost[t],r=this.sliderConfigResolved.startingMax;n>r?this.tagMaxRanges[t]=Math.min(Math.ceil(n),this.sliderConfigResolved.absoluteMax):this.tagMaxRanges[t]=r})}catch(t){console.error(`Failed to load preferences:`,t),this.saveError=`Failed to load preferences. Please try again.`}finally{this.loading=!1}},addTag(t){t&&!(t in this.preferences.boost)&&(this.preferences.boost[t]=1,this.tagMaxRanges[t]=this.sliderConfigResolved.startingMax,this.$emit(`preferences-changed`,this.preferences)),this.$nextTick(()=>{this.tagToAdd=null})},removeTag(t){delete this.preferences.boost[t],delete this.tagMaxRanges[t],this.$emit(`preferences-changed`,this.preferences)},updateBoost(t,n){this.preferences.boost[t]=n,this.$emit(`preferences-changed`,this.preferences)},expandSliderRange(t){let n=this.globalSliderMax;if(n<this.sliderConfigResolved.absoluteMax){let r=n+1;Object.keys(this.tagMaxRanges).forEach(t=>{this.tagMaxRanges[t]=Math.max(this.tagMaxRanges[t],r)}),this.preferences.boost[t]=r,this.$emit(`preferences-changed`,this.preferences)}},formatMultiplier(t){return t===0?`0x`:t<.1?t.toFixed(2)+`x`:t.toFixed(1)+`x`},resetToSaved(){this.preferences.boost={...this.savedPreferences.boost},this.saveSuccess=!1,this.saveError=``,this.tagMaxRanges={},Object.keys(this.preferences.boost).forEach(t=>{let n=this.preferences.boost[t],r=this.sliderConfigResolved.startingMax;n>r?this.tagMaxRanges[t]=Math.min(Math.ceil(n),this.sliderConfigResolved.absoluteMax):this.tagMaxRanges[t]=r})},async savePreferences(){if(!this.user||!this.courseId){this.saveError=`Unable to save - user or course not available`;return}this.saving=!0,this.saveError=``,this.saveSuccess=!1;try{let t={boost:{...this.preferences.boost},updatedAt:new Date().toISOString()};await this.user.putStrategyState(this.courseId,tc,t),this.savedPreferences.boost={...this.preferences.boost},this.saveSuccess=!0,this.$emit(`preferences-saved`,t)}catch(t){console.error(`Failed to save preferences:`,t),this.saveError=`Failed to save preferences. Please try again.`}finally{this.saving=!1}}}}),rc={key:1},ic={class:`mb-6`},ac={class:`text-subtitle-1 font-weight-bold mb-2`},oc={class:`d-flex align-center ga-3 w-100`},sc={class:`text-body-2 flex-shrink-0`,style:{"min-width":`60px`,"text-align":`right`}},cc={key:2,class:`d-flex justify-center py-8`};function _sfc_render(t,n,r,i,a,o){let c=C(`v-icon`),l=C(`v-card-title`),u=C(`v-card-subtitle`),f=C(`v-alert`),m=C(`v-list-item`),h=C(`v-autocomplete`),g=C(`v-chip`),_=C(`v-slider`),b=C(`v-btn`),x=C(`v-list`),S=C(`v-progress-circular`),w=C(`v-card-text`),T=C(`v-spacer`),E=C(`v-card-actions`),D=C(`v-card`);return v(),R(D,{loading:t.loading},{default:s(()=>[d(l,null,{default:s(()=>[d(c,{start:``},{default:s(()=>n[3]||(n[3]=[k(`mdi-tune`)])),_:1}),n[4]||(n[4]=k(` Learning Preferences `))]),_:1}),t.courseId?(v(),R(u,{key:0},{default:s(()=>n[5]||(n[5]=[k(` Customize how content is presented in this course `)])),_:1})):z(``,!0),d(w,null,{default:s(()=>[t.courseId?t.loading?(v(),N(`div`,cc,[d(S,{indeterminate:``,color:`primary`})])):(v(),N(`div`,rc,[j(`div`,ic,[j(`h3`,ac,[d(c,{start:``,size:`small`},{default:s(()=>n[7]||(n[7]=[k(`mdi-tune-variant`)])),_:1}),n[8]||(n[8]=k(` Tag Preferences `))]),n[10]||(n[10]=j(`p`,{class:`text-body-2 text-medium-emphasis mb-3`},` Adjust how much you want to see cards with specific tags. 0 = exclude, 1 = neutral, higher = prefer more. `,-1)),d(h,{modelValue:t.tagToAdd,"onUpdate:modelValue":[n[0]||(n[0]=n=>t.tagToAdd=n),t.addTag],items:t.availableTagsToAdd,"item-title":`name`,"item-value":`name`,label:`Add tag preference`,placeholder:`Search tags...`,density:`compact`,variant:`outlined`,clearable:``,"hide-details":``,class:`mb-4`},{item:s(({props:t,item:n})=>[d(m,te(p(t)),{subtitle:s(()=>[k(y(n.raw.snippet),1)]),_:2},1040)]),_:1},8,[`modelValue`,`items`,`onUpdate:modelValue`]),t.tagNames.length>0?(v(),R(x,{key:0,class:`mt-4`},{default:s(()=>[(v(!0),N(fe,null,oe(t.tagNames,n=>(v(),R(m,{key:n,class:`px-0`},{default:s(()=>[j(`div`,oc,[d(g,{size:`small`,variant:`tonal`,class:`flex-shrink-0`,style:{"min-width":`120px`}},{default:s(()=>[k(y(n),1)]),_:2},1024),d(_,{"model-value":t.preferences.boost[n],min:t.sliderConfigResolved.min,max:t.globalSliderMax,step:.01,"hide-details":``,class:`flex-grow-1`,"thumb-label":``,"onUpdate:modelValue":r=>t.updateBoost(n,r)},{"thumb-label":s(({modelValue:n})=>[k(y(t.formatMultiplier(n)),1)]),_:2},1032,[`model-value`,`min`,`max`,`onUpdate:modelValue`]),j(`span`,sc,y(t.formatMultiplier(t.preferences.boost[n])),1),d(b,{icon:`mdi-plus`,size:`small`,variant:`text`,density:`compact`,disabled:t.globalSliderMax>=t.sliderConfigResolved.absoluteMax,onClick:r=>t.expandSliderRange(n)},null,8,[`disabled`,`onClick`]),d(b,{icon:`mdi-delete`,size:`small`,variant:`text`,density:`compact`,onClick:r=>t.removeTag(n)},null,8,[`onClick`])])]),_:2},1024))),128))]),_:1})):(v(),R(f,{key:1,type:`info`,variant:`tonal`,class:`mt-4`},{default:s(()=>n[9]||(n[9]=[k(` No tag preferences configured yet. Add tags above to get started. `)])),_:1}))]),t.saveError?(v(),R(f,{key:0,type:`error`,variant:`tonal`,class:`mt-4`,closable:``,"onClick:close":n[1]||(n[1]=n=>t.saveError=``)},{default:s(()=>[k(y(t.saveError),1)]),_:1})):z(``,!0),t.saveSuccess?(v(),R(f,{key:1,type:`success`,variant:`tonal`,class:`mt-4`,closable:``,"onClick:close":n[2]||(n[2]=n=>t.saveSuccess=!1)},{default:s(()=>n[11]||(n[11]=[k(` Preferences saved successfully `)])),_:1})):z(``,!0)])):(v(),R(f,{key:0,type:`info`,variant:`tonal`,class:`mb-4`},{default:s(()=>n[6]||(n[6]=[k(` Select a course to configure your learning preferences. `)])),_:1}))]),_:1}),t.courseId&&!t.loading?(v(),R(E,{key:1},{default:s(()=>[d(T),d(b,{variant:`text`,disabled:!t.hasChanges,onClick:t.resetToSaved},{default:s(()=>n[12]||(n[12]=[k(` Reset `)])),_:1},8,[`disabled`,`onClick`]),d(b,{color:`primary`,variant:`flat`,loading:t.saving,disabled:!t.hasChanges,onClick:t.savePreferences},{default:s(()=>n[13]||(n[13]=[k(` Save Preferences `)])),_:1},8,[`loading`,`disabled`,`onClick`])]),_:1})):z(``,!0)]),_:1},8,[`loading`])}var lc=H(nc,[[`render`,_sfc_render],[`__scopeId`,`data-v-8fb14605`]]);export{resolveLoginIdentifier as A,ct as B,xn as C,Ot as D,At as E,Et as F,rt as H,bt as I,_t as L,verifyEmail as M,Displayable as N,requestPasswordReset as O,Question as P,mt as R,Cn as S,un as T,ot as V,useAuthStore as _,Is as a,kn as b,tr as c,Vn as d,validatePassword as f,getCurrentUser as g,useConfigStore as h,Us as i,sendVerificationEmail as j,resetPassword as k,Jn as l,Pn as m,$s as n,Os as o,zn as p,Ks as r,ir as s,lc as t,Wn as u,Nn as v,fn as w,En as x,jn as y,dt as z};
38
- //# sourceMappingURL=dist-BsRvt0gH.js.map
38
+ //# sourceMappingURL=dist-C8EQUxWW.js.map