@vue-skuilder/platform-ui 0.1.34 → 0.1.36

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 (114) hide show
  1. package/dist/assets/{About-BpqIdlZQ.js → About-eVevEMqh.js} +2 -2
  2. package/dist/assets/{About-BpqIdlZQ.js.map → About-eVevEMqh.js.map} +1 -1
  3. package/dist/assets/AdminDashboard-C_oJ8NGZ.js +2 -0
  4. package/dist/assets/{AdminDashboard-BObO6egG.js.map → AdminDashboard-C_oJ8NGZ.js.map} +1 -1
  5. package/dist/assets/{ClassroomCtrlPanel-lgN6cdTd.js → ClassroomCtrlPanel-DanEeAZ0.js} +2 -2
  6. package/dist/assets/{ClassroomCtrlPanel-lgN6cdTd.js.map → ClassroomCtrlPanel-DanEeAZ0.js.map} +1 -1
  7. package/dist/assets/{Classrooms-BWoQ4i1_.js → Classrooms-OrG6VOnx.js} +2 -2
  8. package/dist/assets/{Classrooms-BWoQ4i1_.js.map → Classrooms-OrG6VOnx.js.map} +1 -1
  9. package/dist/assets/{CourseRouter-CODD0Qm5.js → CourseRouter-CK8Xh2h2.js} +3 -3
  10. package/dist/assets/{CourseRouter-CODD0Qm5.js.map → CourseRouter-CK8Xh2h2.js.map} +1 -1
  11. package/dist/assets/CourseWare-BTFRjgBR-D750E7i0.css +1 -0
  12. package/dist/assets/CourseWare-BTFRjgBR-OzjKW1B2.js +3 -0
  13. package/dist/assets/CourseWare-BTFRjgBR-OzjKW1B2.js.map +1 -0
  14. package/dist/assets/{Courses-ClDdLQUO.js → Courses-DB0JFz1Q.js} +2 -2
  15. package/dist/assets/{Courses-ClDdLQUO.js.map → Courses-DB0JFz1Q.js.map} +1 -1
  16. package/dist/assets/EloModeration-BmU0CqZt.js +2 -0
  17. package/dist/assets/{EloModeration-B6LM11G_.js.map → EloModeration-BmU0CqZt.js.map} +1 -1
  18. package/dist/assets/{JoinCode-DgPD_OFL.js → JoinCode-KoSLXpUy.js} +2 -2
  19. package/dist/assets/{JoinCode-DgPD_OFL.js.map → JoinCode-KoSLXpUy.js.map} +1 -1
  20. package/dist/assets/{MarkdownRenderer-DoVbFpA6-BIbDxYC4.js → MarkdownRenderer-DoVbFpA6-CvaBjTS8.js} +2 -2
  21. package/dist/assets/{MarkdownRenderer-DoVbFpA6-BIbDxYC4.js.map → MarkdownRenderer-DoVbFpA6-CvaBjTS8.js.map} +1 -1
  22. package/dist/assets/MarkdownRenderer-DoVbFpA6-DZdbKtns.js +1 -0
  23. package/dist/assets/{NewCourseDialog-DhwvBT3y.js → NewCourseDialog-BXxQ1cvK.js} +2 -2
  24. package/dist/assets/{NewCourseDialog-DhwvBT3y.js.map → NewCourseDialog-BXxQ1cvK.js.map} +1 -1
  25. package/dist/assets/{ReleaseNotes-DtwDIIfH.js → ReleaseNotes-CERYwZro.js} +2 -2
  26. package/dist/assets/{ReleaseNotes-DtwDIIfH.js.map → ReleaseNotes-CERYwZro.js.map} +1 -1
  27. package/dist/assets/{RequestPasswordReset-DBv0XCIk.js → RequestPasswordReset-Bc4FHaYS.js} +2 -2
  28. package/dist/assets/{RequestPasswordReset-DBv0XCIk.js.map → RequestPasswordReset-Bc4FHaYS.js.map} +1 -1
  29. package/dist/assets/{ResetPassword-BtBplqsQ.js → ResetPassword-CeR_bmOz.js} +2 -2
  30. package/dist/assets/{ResetPassword-BtBplqsQ.js.map → ResetPassword-CeR_bmOz.js.map} +1 -1
  31. package/dist/assets/Study-voro05GB.js +2 -0
  32. package/dist/assets/{Study-D9W1DKes.js.map → Study-voro05GB.js.map} +1 -1
  33. package/dist/assets/TagInformation-1urKQaI-.js +2 -0
  34. package/dist/assets/{TagInformation-DgUkKxoU.js.map → TagInformation-1urKQaI-.js.map} +1 -1
  35. package/dist/assets/{User-DorFkRx_.js → User-26Hebdw-.js} +2 -2
  36. package/dist/assets/{User-DorFkRx_.js.map → User-26Hebdw-.js.map} +1 -1
  37. package/dist/assets/{UserStats-ck9Oh4qt.js → UserStats-DbWUnAPD.js} +2 -2
  38. package/dist/assets/{UserStats-ck9Oh4qt.js.map → UserStats-DbWUnAPD.js.map} +1 -1
  39. package/dist/assets/{VerifyEmail-BYt5xfhm.js → VerifyEmail-uix17ueS.js} +2 -2
  40. package/dist/assets/{VerifyEmail-BYt5xfhm.js.map → VerifyEmail-uix17ueS.js.map} +1 -1
  41. package/dist/assets/chess-BbHATAzk-BhFAwbgX.js +7 -0
  42. package/dist/assets/chess-BbHATAzk-BhFAwbgX.js.map +1 -0
  43. package/dist/assets/chess-BbHATAzk-DB7z_kWx.css +1 -0
  44. package/dist/assets/chess-X1bmWmh3-C7B3mHa1.js +1 -0
  45. package/dist/assets/common-ui.es-C18SEA_L.js +1 -0
  46. package/dist/assets/{common-ui.es-BrXWBn7p.js → common-ui.es-p3cgaI_b.js} +5 -5
  47. package/dist/assets/{common-ui.es-BrXWBn7p.js.map → common-ui.es-p3cgaI_b.js.map} +1 -1
  48. package/dist/assets/dist-CszlUrrD.js +1 -0
  49. package/dist/assets/dist-D2Tzeiyw.js +1 -0
  50. package/dist/assets/{dist-CzLl7g6t.js → dist-DA7EuQY2.js} +34 -12
  51. package/dist/assets/dist-DA7EuQY2.js.map +1 -0
  52. package/dist/assets/dist-DCY40cJ7.js +18 -0
  53. package/dist/assets/dist-DCY40cJ7.js.map +1 -0
  54. package/dist/assets/{dist-CrcJCHFk.js → dist-leWgtXBf.js} +2 -2
  55. package/dist/assets/dist-leWgtXBf.js.map +1 -0
  56. package/dist/assets/edit-ui.es-BIV0deYk.js +36 -0
  57. package/dist/assets/{edit-ui.es-C9MhXwkt.js.map → edit-ui.es-BIV0deYk.js.map} +1 -1
  58. package/dist/assets/edit-ui.es-BLMFpJm1.js +1 -0
  59. package/dist/assets/french-Dk7YG8Td-YK4jNZUN.js +2 -0
  60. package/dist/assets/french-Dk7YG8Td-YK4jNZUN.js.map +1 -0
  61. package/dist/assets/french-evUMlbbq-BbJDdRqK.js +1 -0
  62. package/dist/assets/index-B-cSF0fq.js +4 -0
  63. package/dist/assets/index-B-cSF0fq.js.map +1 -0
  64. package/dist/assets/{index-C8gy3Ea0.css → index-CmEEzdUX.css} +1 -1
  65. package/dist/assets/math-B4HbgYf6-CLJIZTjv.js +34 -0
  66. package/dist/assets/math-B4HbgYf6-CLJIZTjv.js.map +1 -0
  67. package/dist/assets/math-B4HbgYf6-CZyvKZtp.css +1 -0
  68. package/dist/assets/math-DYni7rRl-C6a4BDoN.js +1 -0
  69. package/dist/assets/piano-BN5Btq91-Cdn8kuW5.js +1 -0
  70. package/dist/assets/piano-DF1g6yaX-AR14jqWm.js +2 -0
  71. package/dist/assets/piano-DF1g6yaX-AR14jqWm.js.map +1 -0
  72. package/dist/assets/piano-DF1g6yaX-BLvDAgl1.css +1 -0
  73. package/dist/assets/pitch-CgGJFkZ1-DYkp_AV0.js +2 -0
  74. package/dist/assets/pitch-CgGJFkZ1-DYkp_AV0.js.map +1 -0
  75. package/dist/assets/pitch-Dn0iNqiS-CJ_97iB4.js +1 -0
  76. package/dist/assets/{server-Db_WegNj.js → server-Bq50faqp.js} +2 -2
  77. package/dist/assets/{server-Db_WegNj.js.map → server-Bq50faqp.js.map} +1 -1
  78. package/dist/assets/sightsing-BFQ7HRig-BNrrORP_.js +133 -0
  79. package/dist/assets/sightsing-BFQ7HRig-BNrrORP_.js.map +1 -0
  80. package/dist/assets/sightsing-BFQ7HRig-DkUGf5Yf.css +1 -0
  81. package/dist/assets/sightsing-CJX3k0Fd-l4fhB1Aj.js +1 -0
  82. package/dist/assets/typing-BevtfWlp-B7ZMUAQJ.css +1 -0
  83. package/dist/assets/typing-BevtfWlp-Cl6jtRmX.js +2 -0
  84. package/dist/assets/typing-BevtfWlp-Cl6jtRmX.js.map +1 -0
  85. package/dist/assets/typing-k-ojjO7G-CHgxm7Rx.js +1 -0
  86. package/dist/assets/word-work-BOnRlZgd-CGV2xRx9.js +2 -0
  87. package/dist/assets/word-work-BOnRlZgd-CGV2xRx9.js.map +1 -0
  88. package/dist/assets/word-work-Dd6tIKrt-BjF3-3lq.js +1 -0
  89. package/dist/index.html +6 -6
  90. package/dist/sw.js +1 -1
  91. package/dist/sw.js.map +1 -1
  92. package/package.json +7 -7
  93. package/src/dev/Playtest.vue +254 -0
  94. package/src/main.ts +13 -2
  95. package/src/router.ts +17 -17
  96. package/dist/assets/AdminDashboard-BObO6egG.js +0 -2
  97. package/dist/assets/DataInputFormTester-ywHjm2yC.js +0 -2
  98. package/dist/assets/DataInputFormTester-ywHjm2yC.js.map +0 -1
  99. package/dist/assets/EloModeration-B6LM11G_.js +0 -2
  100. package/dist/assets/MarkdownRenderer-DoVbFpA6-CQGwEJFh.js +0 -1
  101. package/dist/assets/Study-D9W1DKes.js +0 -2
  102. package/dist/assets/TagInformation-DgUkKxoU.js +0 -2
  103. package/dist/assets/common-ui.es-DKUQOgQx.js +0 -1
  104. package/dist/assets/dist-5cG6aSxW.js +0 -1
  105. package/dist/assets/dist-CrcJCHFk.js.map +0 -1
  106. package/dist/assets/dist-CzLl7g6t.js.map +0 -1
  107. package/dist/assets/dist-D5-LrzD6.js +0 -186
  108. package/dist/assets/dist-D5-LrzD6.js.map +0 -1
  109. package/dist/assets/dist-y6_rrqhr.js +0 -1
  110. package/dist/assets/edit-ui.es-C9MhXwkt.js +0 -36
  111. package/dist/assets/edit-ui.es-DT9CMaNG.js +0 -1
  112. package/dist/assets/index-DUZItsH-.js +0 -4
  113. package/dist/assets/index-DUZItsH-.js.map +0 -1
  114. package/src/dev/DataInputFormTester.vue +0 -117
@@ -0,0 +1 @@
1
+ #abc{width:100%;height:100%}
@@ -0,0 +1 @@
1
+ import"./vue.runtime.esm-bundler-C3q8JS9f.js";import"./common-ui.es-p3cgaI_b.js";import"./dist-leWgtXBf.js";import"./MarkdownRenderer-DoVbFpA6-CvaBjTS8.js";import"./dist-DA7EuQY2.js";import"./CourseWare-BTFRjgBR-OzjKW1B2.js";import{t as e}from"./sightsing-BFQ7HRig-BNrrORP_.js";export{e as default};
@@ -0,0 +1 @@
1
+ .letter-display[data-v-4ae4db54]{color:#333;text-transform:uppercase;background-color:#f8f9fa;border:2px solid #dee2e6;border-radius:8px;justify-content:center;align-items:center;width:80px;height:80px;margin:20px auto;font-family:monospace;font-size:48px;font-weight:700;display:flex;box-shadow:0 2px #dee2e6,0 3px 3px #0003}.letter-display.pressed[data-v-4ae4db54]{transform:translateY(2px);box-shadow:0 0 #dee2e6,0 1px 2px #0003}
@@ -0,0 +1,2 @@
1
+ import"./chunk-D6hFPZc3.js";import{B as e,H as t,T as n,Vt as r,_ as i,b as a,f as o,g as s,lt as c,y as l,z as u}from"./vue.runtime.esm-bundler-C3q8JS9f.js";import{m as d}from"./common-ui.es-p3cgaI_b.js";import{S as f,T as p,n as m,y as h}from"./dist-leWgtXBf.js";import{S as g,x as _}from"./MarkdownRenderer-DoVbFpA6-CvaBjTS8.js";import{n as v,t as y,u as b}from"./CourseWare-BTFRjgBR-OzjKW1B2.js";var x,S,C=n({name:`LetterQuestionView`,props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(t,{emit:n}){let r=g(t,n,`LetterQuestionView`),i=_(r),a=c(null);i.question.value=new D(t.data);let o=s(()=>i.question.value),handleKeyPress=e=>{if(!o.value)return;let t=e.key.toLowerCase(),n=o.value.letter.toLowerCase();if(t===n){a.value?.classList.add(`pressed`);let handleKeyUp=e=>{e.key.toLowerCase()===n&&(a.value?.classList.remove(`pressed`),i.submitAnswer(t),window.removeEventListener(`keyup`,handleKeyUp))};window.addEventListener(`keyup`,handleKeyUp)}else i.submitAnswer(t)};return u(()=>{window.addEventListener(`keypress`,handleKeyPress)}),e(()=>{window.removeEventListener(`keypress`,handleKeyPress)}),{...i,...r,letterDisplay:a,question:o}}}),w={"data-viewable":`LetterQuestionView`};function _sfc_render(e,n,s,c,u,d){return t(),a(`div`,w,[e.question?(t(),a(o,{key:0},[n[0]||(n[0]=i(`p`,{class:`text-h5`},`Type this letter!`,-1)),i(`div`,{ref:`letterDisplay`,class:`letter-display`},r(e.question.letter),513)],64)):l(``,!0)])}var T=y(C,[[`render`,_sfc_render],[`__scopeId`,`data-v-4ae4db54`]]),E=b(function(){let e=[];for(let t=0;t<26;t++)e.push({letter:String.fromCharCode(65+t)});return e},`data`),D=(x=class TypeLetterQuestion extends d{constructor(e){var _super=(...e)=>(super(...e),h(this,`letter`,void 0),this);_super(e),this.letter=e[0].letter}evaluate(e,t){return{isCorrect:this.isCorrect(e),performance:this.displayedSkill(e,t)}}displayedSkill(e,t){if(this.isCorrect(e)){if(t<3e3)return 1;{let e=1-(t-3e3)/7e3*.75;return Math.max(.25,e)}}return 0}dataShapes(){return TypeLetterQuestion.dataShapes}views(){return TypeLetterQuestion.views}isCorrect(e){let t=e.toLowerCase()===this.letter.toLowerCase();return console.log(`singleLetter Q isCorrect: ${t}`),t}},h(x,`dataShapes`,[{name:m.TYPING_singleLetter,fields:[{name:`letter`,type:f.STRING,validator:{instructions:`Enter a single letter`,test:function(e){return!e||e.length!==1||!/[a-zA-Z]/.test(e)?{status:p.error,msg:`Input must be a single letter`}:{status:p.ok,msg:``}}}}]}]),h(x,`views`,[T]),h(x,`acceptsUserData`,!0),h(x,`seedData`,E()),x),data=function(){return[{gameLength:30,initialSpeed:2,acceleration:.1,spawnInterval:1}]},O=new v(`typing`,[D,(S=class FallingLettersQuestion extends d{constructor(e){var _super2=(...e)=>(super(...e),h(this,`gameLength`,void 0),h(this,`initialSpeed`,void 0),h(this,`acceleration`,void 0),h(this,`spawnInterval`,void 0),this);_super2(e),this.gameLength=e[0].gameLength,this.initialSpeed=e[0].initialSpeed,this.acceleration=e[0].acceleration,this.spawnInterval=e[0].spawnInterval}evaluate(e){return{isCorrect:this.isCorrect(e),performance:this.displayedSkill(e)}}displayedSkill(e){return e.win?1:e.percentage}dataShapes(){return FallingLettersQuestion.dataShapes}views(){return FallingLettersQuestion.views}isCorrect(e){return e.win}},h(S,`dataShapes`,[{name:m.TYPING_fallingLetters,fields:[{name:`gameLength`,type:f.NUMBER},{name:`initialSpeed`,type:f.NUMBER},{name:`acceleration`,type:f.NUMBER},{name:`spawnInterval`,type:f.NUMBER,validator:{instructions:`How often should a new letter spawn? (in seconds)`,test:e=>typeof e==`string`?parseFloat(e)>0?{status:p.ok,msg:``}:{status:p.error,msg:`Must be greater than 0`}:{status:p.error,msg:`Unexpected non-string input.`},placeholder:`1`}}]}]),h(S,`views`,[]),h(S,`acceptsUserData`,!0),h(S,`seedData`,data()),S)]);export{O as t};
2
+ //# sourceMappingURL=typing-BevtfWlp-Cl6jtRmX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typing-BevtfWlp-Cl6jtRmX.js","names":["c","g","h","f","i","l","u","d","o","r","s","p","a","t","e","m","_","v","y","n"],"sources":["../../../courseware/dist/typing-BevtfWlp.js"],"sourcesContent":["import { r as e } from \"./shapes-BQUVJdp5.js\";\nimport { r as t, t as n } from \"./CourseWare-BTFRjgBR.js\";\nimport { Fragment as r, computed as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, defineComponent as c, onMounted as l, onUnmounted as u, openBlock as d, ref as f, toDisplayString as p } from \"vue\";\nimport { Question as m, useQuestionView as h, useViewable as g } from \"@vue-skuilder/common-ui\";\nimport { DataShapeName as _, FieldType as v, Status as y } from \"@vue-skuilder/common\";\nimport './assets/typing.css';//#region src/typing/questions/single-letter/typeSingleLetter.vue?vue&type=script&lang.ts\nvar b = c({\n\tname: \"LetterQuestionView\",\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Array,\n\t\t\trequired: !0\n\t\t},\n\t\tmodifyDifficulty: {\n\t\t\ttype: Number,\n\t\t\trequired: !1,\n\t\t\tdefault: 0\n\t\t}\n\t},\n\tsetup(e, { emit: t }) {\n\t\tlet n = g(e, t, \"LetterQuestionView\"), r = h(n), a = f(null);\n\t\tr.question.value = new w(e.data);\n\t\tlet o = i(() => r.question.value), handleKeyPress = (e) => {\n\t\t\tif (!o.value) return;\n\t\t\tlet t = e.key.toLowerCase(), n = o.value.letter.toLowerCase();\n\t\t\tif (t === n) {\n\t\t\t\ta.value?.classList.add(\"pressed\");\n\t\t\t\tlet handleKeyUp = (e) => {\n\t\t\t\t\te.key.toLowerCase() === n && (a.value?.classList.remove(\"pressed\"), r.submitAnswer(t), window.removeEventListener(\"keyup\", handleKeyUp));\n\t\t\t\t};\n\t\t\t\twindow.addEventListener(\"keyup\", handleKeyUp);\n\t\t\t} else r.submitAnswer(t);\n\t\t};\n\t\treturn l(() => {\n\t\t\twindow.addEventListener(\"keypress\", handleKeyPress);\n\t\t}), u(() => {\n\t\t\twindow.removeEventListener(\"keypress\", handleKeyPress);\n\t\t}), {\n\t\t\t...r,\n\t\t\t...n,\n\t\t\tletterDisplay: a,\n\t\t\tquestion: o\n\t\t};\n\t}\n}), x = { \"data-viewable\": \"LetterQuestionView\" };\nfunction _sfc_render(e, t, n, i, c, l) {\n\treturn d(), o(\"div\", x, [e.question ? (d(), o(r, { key: 0 }, [t[0] ||= s(\"p\", { class: \"text-h5\" }, \"Type this letter!\", -1), s(\"div\", {\n\t\tref: \"letterDisplay\",\n\t\tclass: \"letter-display\"\n\t}, p(e.question.letter), 513)], 64)) : a(\"\", !0)]);\n}\nvar S = /* @__PURE__ */ t(b, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-4ae4db54\"]]), C = /* @__PURE__ */ e(function() {\n\tlet e = [];\n\tfor (let t = 0; t < 26; t++) e.push({ letter: String.fromCharCode(65 + t) });\n\treturn e;\n}, \"data\"), w = class TypeLetterQuestion extends m {\n\tstatic dataShapes = [{\n\t\tname: _.TYPING_singleLetter,\n\t\tfields: [{\n\t\t\tname: \"letter\",\n\t\t\ttype: v.STRING,\n\t\t\tvalidator: {\n\t\t\t\tinstructions: \"Enter a single letter\",\n\t\t\t\ttest: function(e) {\n\t\t\t\t\treturn !e || e.length !== 1 || !/[a-zA-Z]/.test(e) ? {\n\t\t\t\t\t\tstatus: y.error,\n\t\t\t\t\t\tmsg: \"Input must be a single letter\"\n\t\t\t\t\t} : {\n\t\t\t\t\t\tstatus: y.ok,\n\t\t\t\t\t\tmsg: \"\"\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}]\n\t}];\n\tstatic views = [S];\n\tstatic acceptsUserData = !0;\n\tletter;\n\tstatic seedData = C();\n\tconstructor(e) {\n\t\tsuper(e), this.letter = e[0].letter;\n\t}\n\tevaluate(e, t) {\n\t\treturn {\n\t\t\tisCorrect: this.isCorrect(e),\n\t\t\tperformance: this.displayedSkill(e, t)\n\t\t};\n\t}\n\tdisplayedSkill(e, t) {\n\t\tif (this.isCorrect(e)) {\n\t\t\tif (t < 3e3) return 1;\n\t\t\t{\n\t\t\t\tlet e = 1 - (t - 3e3) / 7e3 * .75;\n\t\t\t\treturn Math.max(.25, e);\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\tdataShapes() {\n\t\treturn TypeLetterQuestion.dataShapes;\n\t}\n\tviews() {\n\t\treturn TypeLetterQuestion.views;\n\t}\n\tisCorrect(e) {\n\t\tlet t = e.toLowerCase() === this.letter.toLowerCase();\n\t\treturn console.log(`singleLetter Q isCorrect: ${t}`), t;\n\t}\n}, data = function() {\n\treturn [{\n\t\tgameLength: 30,\n\t\tinitialSpeed: 2,\n\t\tacceleration: .1,\n\t\tspawnInterval: 1\n\t}];\n}, T = new n(\"typing\", [w, class FallingLettersQuestion extends m {\n\tstatic dataShapes = [{\n\t\tname: _.TYPING_fallingLetters,\n\t\tfields: [\n\t\t\t{\n\t\t\t\tname: \"gameLength\",\n\t\t\t\ttype: v.NUMBER\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"initialSpeed\",\n\t\t\t\ttype: v.NUMBER\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"acceleration\",\n\t\t\t\ttype: v.NUMBER\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"spawnInterval\",\n\t\t\t\ttype: v.NUMBER,\n\t\t\t\tvalidator: {\n\t\t\t\t\tinstructions: \"How often should a new letter spawn? (in seconds)\",\n\t\t\t\t\ttest: (e) => typeof e == \"string\" ? parseFloat(e) > 0 ? {\n\t\t\t\t\t\tstatus: y.ok,\n\t\t\t\t\t\tmsg: \"\"\n\t\t\t\t\t} : {\n\t\t\t\t\t\tstatus: y.error,\n\t\t\t\t\t\tmsg: \"Must be greater than 0\"\n\t\t\t\t\t} : {\n\t\t\t\t\t\tstatus: y.error,\n\t\t\t\t\t\tmsg: \"Unexpected non-string input.\"\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder: \"1\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}];\n\tstatic views = [];\n\tstatic acceptsUserData = !0;\n\tstatic seedData = data();\n\tgameLength;\n\tinitialSpeed;\n\tacceleration;\n\tspawnInterval;\n\tconstructor(e) {\n\t\tsuper(e), this.gameLength = e[0].gameLength, this.initialSpeed = e[0].initialSpeed, this.acceleration = e[0].acceleration, this.spawnInterval = e[0].spawnInterval;\n\t}\n\tevaluate(e) {\n\t\treturn {\n\t\t\tisCorrect: this.isCorrect(e),\n\t\t\tperformance: this.displayedSkill(e)\n\t\t};\n\t}\n\tdisplayedSkill(e) {\n\t\treturn e.win ? 1 : e.percentage;\n\t}\n\tdataShapes() {\n\t\treturn FallingLettersQuestion.dataShapes;\n\t}\n\tviews() {\n\t\treturn FallingLettersQuestion.views;\n\t}\n\tisCorrect(e) {\n\t\treturn e.win;\n\t}\n}]);\n//#endregion\nexport { T as t };\n\n//# sourceMappingURL=typing-BevtfWlp.js.map"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import"./vue.runtime.esm-bundler-C3q8JS9f.js";import"./common-ui.es-p3cgaI_b.js";import"./dist-leWgtXBf.js";import"./MarkdownRenderer-DoVbFpA6-CvaBjTS8.js";import"./dist-DA7EuQY2.js";import"./CourseWare-BTFRjgBR-OzjKW1B2.js";import{t as e}from"./typing-BevtfWlp-Cl6jtRmX.js";export{e as default};
@@ -0,0 +1,2 @@
1
+ import"./chunk-D6hFPZc3.js";import{$ as e,C as t,H as n,K as r,T as i,Vt as a,_ as o,b as s,f as c,g as l,lt as u,y as d}from"./vue.runtime.esm-bundler-C3q8JS9f.js";import{m as f}from"./common-ui.es-p3cgaI_b.js";import{S as p,d as m,n as h,y as g}from"./dist-leWgtXBf.js";import{C as _,S as v,s as y,x as b}from"./MarkdownRenderer-DoVbFpA6-CvaBjTS8.js";import{n as x,t as S}from"./CourseWare-BTFRjgBR-OzjKW1B2.js";var C,w=i({name:`IdentifyVocab`,components:{AudioAutoPlayer:_,UserInputString:y},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=v(e,t,`IdentifyVocab`),r=b(n),i=u(``);r.question.value=new k(e.data);let a=l(()=>r.question.value),submit=()=>{a.value&&r.submitAnswer(i.value)};return{...n,...r,answer:i,question:a,submit}}}),T={"data-viewable":`IdentifyVocab`},E={key:0,class:`text-h6`};function _sfc_render(i,l,u,f,p,m){let h=r(`UserInputString`),g=r(`center`),_=r(`audio-auto-player`);return n(),s(`div`,T,[i.question?(n(),s(c,{key:0},[l[1]||(l[1]=o(`span`,{class:`text-h5`},` Spell the word: `,-1)),t(h,{modelValue:i.answer,"onUpdate:modelValue":l[0]||(l[0]=e=>i.answer=e)},null,8,[`modelValue`]),t(g,null,{default:e(()=>[i.priorAttempts?(n(),s(`span`,E,a(i.question.word),1)):d(``,!0)]),_:1}),t(g,null,{default:e(()=>[t(_,{src:[i.getURL(`WordAudio`),i.getURL(`SentenceAudio`),i.getURL(`WordAudio`)]},null,8,[`src`])]),_:1})],64)):d(``,!0)])}var D=S(w,[[`render`,_sfc_render]]),O=[{name:`Word`,type:p.STRING,validator:m.NonEmptyString},{name:`ExampleSentence`,type:p.STRING},{name:`WordAudio`,type:p.AUDIO},{name:`SentenceAudio`,type:p.AUDIO}],k=(C=class SpellingQuestion extends f{constructor(e){var _super=(...e)=>(super(...e),g(this,`word`,void 0),g(this,`sentence`,void 0),g(this,`audio_word`,void 0),g(this,`audio_sentence`,void 0),this);_super(e),this.word=e[0].Word,this.sentence=e[0].Sentence,this.audio_word=e[0].WordAudio,this.audio_sentence=e[0].SentenceAudio}isCorrect(e){return e===this.word}dataShapes(){return SpellingQuestion.dataShapes}views(){return SpellingQuestion.views}},g(C,`dataShapes`,[{fields:O,name:h.WORDWORK_Spelling}]),g(C,`views`,[D]),C),A=new x(`wordWork`,[k]);export{A as t};
2
+ //# sourceMappingURL=word-work-BOnRlZgd-CGV2xRx9.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"word-work-BOnRlZgd-CGV2xRx9.js","names":["c","m","g","v","_","u","r","d","l","a","n","o","s","p","f","i","e","b","x","h","y","t"],"sources":["../../../courseware/dist/word-work-BOnRlZgd.js"],"sourcesContent":["import \"./shapes-BQUVJdp5.js\";\nimport { r as e, t } from \"./CourseWare-BTFRjgBR.js\";\nimport { Fragment as n, computed as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createVNode as s, defineComponent as c, openBlock as l, ref as u, resolveComponent as d, toDisplayString as f, withCtx as p } from \"vue\";\nimport { AudioAutoPlayer as m, Question as h, UserInputString as g, useQuestionView as _, useViewable as v } from \"@vue-skuilder/common-ui\";\nimport { DataShapeName as y, FieldType as b, Validators as x } from \"@vue-skuilder/common\";\n//#region src/word-work/questions/spelling/textBox.vue?vue&type=script&lang.ts\nvar S = c({\n\tname: \"IdentifyVocab\",\n\tcomponents: {\n\t\tAudioAutoPlayer: m,\n\t\tUserInputString: g\n\t},\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Array,\n\t\t\trequired: !0\n\t\t},\n\t\tmodifyDifficulty: {\n\t\t\ttype: Number,\n\t\t\trequired: !1,\n\t\t\tdefault: 0\n\t\t}\n\t},\n\tsetup(e, { emit: t }) {\n\t\tlet n = v(e, t, \"IdentifyVocab\"), i = _(n), a = u(\"\");\n\t\ti.question.value = new D(e.data);\n\t\tlet o = r(() => i.question.value), submit = () => {\n\t\t\to.value && i.submitAnswer(a.value);\n\t\t};\n\t\treturn {\n\t\t\t...n,\n\t\t\t...i,\n\t\t\tanswer: a,\n\t\t\tquestion: o,\n\t\t\tsubmit\n\t\t};\n\t}\n}), C = { \"data-viewable\": \"IdentifyVocab\" }, w = {\n\tkey: 0,\n\tclass: \"text-h6\"\n};\nfunction _sfc_render(e, t, r, c, u, m) {\n\tlet h = d(\"UserInputString\"), g = d(\"center\"), _ = d(\"audio-auto-player\");\n\treturn l(), a(\"div\", C, [e.question ? (l(), a(n, { key: 0 }, [\n\t\tt[1] ||= o(\"span\", { class: \"text-h5\" }, \" Spell the word: \", -1),\n\t\ts(h, {\n\t\t\tmodelValue: e.answer,\n\t\t\t\"onUpdate:modelValue\": t[0] ||= (t) => e.answer = t\n\t\t}, null, 8, [\"modelValue\"]),\n\t\ts(g, null, {\n\t\t\tdefault: p(() => [e.priorAttempts ? (l(), a(\"span\", w, f(e.question.word), 1)) : i(\"\", !0)]),\n\t\t\t_: 1\n\t\t}),\n\t\ts(g, null, {\n\t\t\tdefault: p(() => [s(_, { src: [\n\t\t\t\te.getURL(\"WordAudio\"),\n\t\t\t\te.getURL(\"SentenceAudio\"),\n\t\t\t\te.getURL(\"WordAudio\")\n\t\t\t] }, null, 8, [\"src\"])]),\n\t\t\t_: 1\n\t\t})\n\t], 64)) : i(\"\", !0)]);\n}\nvar T = /* @__PURE__ */ e(S, [[\"render\", _sfc_render]]), E = [\n\t{\n\t\tname: \"Word\",\n\t\ttype: b.STRING,\n\t\tvalidator: x.NonEmptyString\n\t},\n\t{\n\t\tname: \"ExampleSentence\",\n\t\ttype: b.STRING\n\t},\n\t{\n\t\tname: \"WordAudio\",\n\t\ttype: b.AUDIO\n\t},\n\t{\n\t\tname: \"SentenceAudio\",\n\t\ttype: b.AUDIO\n\t}\n], D = class SpellingQuestion extends h {\n\tstatic dataShapes = [{\n\t\tfields: E,\n\t\tname: y.WORDWORK_Spelling\n\t}];\n\tstatic views = [T];\n\tword;\n\tsentence;\n\taudio_word;\n\taudio_sentence;\n\tconstructor(e) {\n\t\tsuper(e), this.word = e[0].Word, this.sentence = e[0].Sentence, this.audio_word = e[0].WordAudio, this.audio_sentence = e[0].SentenceAudio;\n\t}\n\tisCorrect(e) {\n\t\treturn e === this.word;\n\t}\n\tdataShapes() {\n\t\treturn SpellingQuestion.dataShapes;\n\t}\n\tviews() {\n\t\treturn SpellingQuestion.views;\n\t}\n}, O = new t(\"wordWork\", [D]);\n//#endregion\nexport { O as t };\n\n//# sourceMappingURL=word-work-BOnRlZgd.js.map"],"mappings":"oaAMI,EAAIA,EAAE,CACT,KAAM,gBACN,WAAY,CACX,gBAAiBC,EACjB,gBAAiBC,EACjB,CACD,MAAO,CACN,KAAM,CACL,KAAM,MACN,SAAU,CAAC,EACX,CACD,iBAAkB,CACjB,KAAM,OACN,SAAU,CAAC,EACX,QAAS,EACT,CACD,CACD,MAAM,EAAG,CAAE,KAAM,GAAK,CACrB,IAAI,EAAIC,EAAE,EAAG,EAAG,gBAAgB,CAAE,EAAIC,EAAE,EAAE,CAAE,EAAIC,EAAE,GAAG,CACrD,EAAE,SAAS,MAAQ,IAAI,EAAE,EAAE,KAAK,CAChC,IAAI,EAAIC,MAAQ,EAAE,SAAS,MAAM,CAAE,WAAe,CACjD,EAAE,OAAS,EAAE,aAAa,EAAE,MAAM,EAEnC,MAAO,CACN,GAAG,EACH,GAAG,EACH,OAAQ,EACR,SAAU,EACV,OACA,EAEF,CAAC,CAAE,EAAI,CAAE,gBAAiB,gBAAiB,CAAE,EAAI,CACjD,IAAK,EACL,MAAO,UACP,CACD,SAAS,YAAY,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,KAClC,EAAIC,EAAE,kBAAkB,CAAE,EAAIA,EAAE,SAAS,CAAE,EAAIA,EAAE,oBAAoB,CACzE,OAAOC,GAAG,CAAEC,EAAE,MAAO,EAAG,CAAC,EAAE,UAAYD,GAAG,CAAEC,EAAEC,EAAG,CAAE,IAAK,EAAG,CAAE,CAC5D,EAAE,KAAF,EAAE,GAAOC,EAAE,OAAQ,CAAE,MAAO,UAAW,CAAE,oBAAqB,GAAG,EACjEC,EAAE,EAAG,CACJ,WAAY,EAAE,OACd,sBAAuB,EAAE,KAAF,EAAE,GAAQ,GAAM,EAAE,OAAS,GAClD,CAAE,KAAM,EAAG,CAAC,aAAa,CAAC,CAC3BA,EAAE,EAAG,KAAM,CACV,QAASC,MAAQ,CAAC,EAAE,eAAiBL,GAAG,CAAEC,EAAE,OAAQ,EAAGK,EAAE,EAAE,SAAS,KAAK,CAAE,EAAE,EAAIC,EAAE,GAAI,CAAC,EAAE,CAAC,CAAC,CAC5F,EAAG,EACH,CAAC,CACFH,EAAE,EAAG,KAAM,CACV,QAASC,MAAQ,CAACD,EAAE,EAAG,CAAE,IAAK,CAC7B,EAAE,OAAO,YAAY,CACrB,EAAE,OAAO,gBAAgB,CACzB,EAAE,OAAO,YAAY,CACrB,CAAE,CAAE,KAAM,EAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CACxB,EAAG,EACH,CAAC,CACF,CAAE,GAAG,EAAIG,EAAE,GAAI,CAAC,EAAE,CAAC,CAAC,KAElB,EAAoBC,EAAE,EAAG,CAAC,CAAC,SAAU,YAAY,CAAC,CAAC,CAAE,EAAI,CAC5D,CACC,KAAM,OACN,KAAMC,EAAE,OACR,UAAWC,EAAE,eACb,CACD,CACC,KAAM,kBACN,KAAMD,EAAE,OACR,CACD,CACC,KAAM,YACN,KAAMA,EAAE,MACR,CACD,CACC,KAAM,gBACN,KAAMA,EAAE,MACR,CACD,CAAE,GAAA,EAAI,MAAM,yBAAyBE,CAAE,CAUvC,YAAY,EAAG,wCAJf,OAAA,IAAA,GAAK,CAAA,EAAA,KACL,WAAA,IAAA,GAAS,CAAA,EAAA,KACT,aAAA,IAAA,GAAW,CAAA,EAAA,KACX,iBAAA,IAAA,GAAe,CAAA,MAEd,OAAM,EAAE,CAAE,KAAK,KAAO,EAAE,GAAG,KAAM,KAAK,SAAW,EAAE,GAAG,SAAU,KAAK,WAAa,EAAE,GAAG,UAAW,KAAK,eAAiB,EAAE,GAAG,cAE9H,UAAU,EAAG,CACZ,OAAO,IAAM,KAAK,KAEnB,YAAa,CACZ,OAAO,iBAAiB,WAEzB,OAAQ,CACP,OAAO,iBAAiB,YAnBlB,aAAa,CAAC,CACpB,OAAQ,EACR,KAAMC,EAAE,kBACR,CAAC,CAAC,CAAA,EAAA,EACI,QAAQ,CAAC,EAAE,CAAC,CAAA,GAiBjB,EAAI,IAAIC,EAAE,WAAY,CAAC,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ import"./vue.runtime.esm-bundler-C3q8JS9f.js";import"./common-ui.es-p3cgaI_b.js";import"./dist-leWgtXBf.js";import"./MarkdownRenderer-DoVbFpA6-CvaBjTS8.js";import"./dist-DA7EuQY2.js";import"./CourseWare-BTFRjgBR-OzjKW1B2.js";import{t as e}from"./word-work-BOnRlZgd-CGV2xRx9.js";export{e as default};
package/dist/index.html CHANGED
@@ -8,15 +8,15 @@
8
8
  <meta name="viewport" content="width=device-width,initial-scale=1.0" />
9
9
  <link rel="shortcut icon" href="/favicon.ico" />
10
10
  <title>eduQuilt</title>
11
- <script type="module" crossorigin src="/assets/index-DUZItsH-.js"></script>
11
+ <script type="module" crossorigin src="/assets/index-B-cSF0fq.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="/assets/chunk-D6hFPZc3.js">
13
- <link rel="modulepreload" crossorigin href="/assets/dist-CrcJCHFk.js">
14
- <link rel="modulepreload" crossorigin href="/assets/dist-CzLl7g6t.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/dist-leWgtXBf.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/dist-DA7EuQY2.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/vue.runtime.esm-bundler-C3q8JS9f.js">
16
- <link rel="modulepreload" crossorigin href="/assets/MarkdownRenderer-DoVbFpA6-BIbDxYC4.js">
17
- <link rel="modulepreload" crossorigin href="/assets/common-ui.es-BrXWBn7p.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/MarkdownRenderer-DoVbFpA6-CvaBjTS8.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/common-ui.es-p3cgaI_b.js">
18
18
  <link rel="stylesheet" crossorigin href="/assets/common-ui-BY2Ut5jf.css">
19
- <link rel="stylesheet" crossorigin href="/assets/index-C8gy3Ea0.css">
19
+ <link rel="stylesheet" crossorigin href="/assets/index-CmEEzdUX.css">
20
20
  <link rel="manifest" href="/manifest.webmanifest"></head>
21
21
 
22
22
  <body>
package/dist/sw.js CHANGED
@@ -1,2 +1,2 @@
1
- if(!self.define){let s,e={};const l=(l,i)=>(l=new URL(l+".js",i).href,e[l]||new Promise((e=>{if("document"in self){const s=document.createElement("script");s.src=l,s.onload=e,document.head.appendChild(s)}else s=l,importScripts(l),e()})).then((()=>{let s=e[l];if(!s)throw new Error(`Module ${l} didn’t register its module`);return s})));self.define=(i,o)=>{const r=s||("document"in self?document.currentScript.src:"")||location.href;if(e[r])return;let n={};const u=s=>l(s,r),t={module:{uri:r},exports:n,require:u};e[r]=Promise.all(i.map((s=>t[s]||u(s)))).then((s=>(o(...s),n)))}}define(["./workbox-1be04862"],(function(s){"use strict";self.skipWaiting(),s.clientsClaim(),s.precacheAndRoute([{url:"assets/About-BpqIdlZQ.js",revision:null},{url:"assets/AdminDashboard-BObO6egG.js",revision:null},{url:"assets/AdminDashboard-CWnC_vEI.css",revision:null},{url:"assets/chunk-D6hFPZc3.js",revision:null},{url:"assets/ClassroomCtrlPanel-lgN6cdTd.js",revision:null},{url:"assets/Classrooms-BWoQ4i1_.js",revision:null},{url:"assets/common-ui-BY2Ut5jf.css",revision:null},{url:"assets/common-ui.es-BrXWBn7p.js",revision:null},{url:"assets/common-ui.es-DKUQOgQx.js",revision:null},{url:"assets/CourseRouter-CODD0Qm5.js",revision:null},{url:"assets/CourseRouter-DvfjFpWl.css",revision:null},{url:"assets/Courses-ClDdLQUO.js",revision:null},{url:"assets/Courses-CsGfVDf9.css",revision:null},{url:"assets/DataInputFormTester-ywHjm2yC.js",revision:null},{url:"assets/dist-5cG6aSxW.js",revision:null},{url:"assets/dist-CrcJCHFk.js",revision:null},{url:"assets/dist-CzLl7g6t.js",revision:null},{url:"assets/dist-D5-LrzD6.js",revision:null},{url:"assets/dist-y6_rrqhr.js",revision:null},{url:"assets/edit-ui.es-C9MhXwkt.js",revision:null},{url:"assets/edit-ui.es-DT9CMaNG.js",revision:null},{url:"assets/EloModeration-B6LM11G_.js",revision:null},{url:"assets/EloModeration-DgUqPPoO.css",revision:null},{url:"assets/index-C8gy3Ea0.css",revision:null},{url:"assets/index-DUZItsH-.js",revision:null},{url:"assets/JoinCode-DgPD_OFL.js",revision:null},{url:"assets/JoinCode-DPSfXf5z.css",revision:null},{url:"assets/MarkdownRenderer-DoVbFpA6-BIbDxYC4.js",revision:null},{url:"assets/MarkdownRenderer-DoVbFpA6-CQGwEJFh.js",revision:null},{url:"assets/materialdesignicons-webfont-Dp5v-WZN.woff2",revision:null},{url:"assets/NewCourseDialog-DhwvBT3y.js",revision:null},{url:"assets/ReleaseNotes-DtwDIIfH.js",revision:null},{url:"assets/RequestPasswordReset-DBv0XCIk.js",revision:null},{url:"assets/RequestPasswordReset-Du5-awJG.css",revision:null},{url:"assets/ResetPassword-BtBplqsQ.js",revision:null},{url:"assets/Roboto-Black-VhoA2qKx.woff2",revision:null},{url:"assets/Roboto-BlackItalic-D4yie1YO.woff2",revision:null},{url:"assets/Roboto-Bold-hN3duQhD.woff2",revision:null},{url:"assets/Roboto-BoldItalic-BWDm51uc.woff2",revision:null},{url:"assets/Roboto-Light-DHTugVNA.woff2",revision:null},{url:"assets/Roboto-LightItalic-JQyp2Y3P.woff2",revision:null},{url:"assets/Roboto-Medium-ByKogCTi.woff2",revision:null},{url:"assets/Roboto-MediumItalic-i1eR0KbF.woff2",revision:null},{url:"assets/Roboto-Regular-C6rbFxYz.woff2",revision:null},{url:"assets/Roboto-RegularItalic-CvPUdkvM.woff2",revision:null},{url:"assets/Roboto-Thin-NicBC1pN.woff2",revision:null},{url:"assets/Roboto-ThinItalic-CKlCjrO_.woff2",revision:null},{url:"assets/server-Db_WegNj.js",revision:null},{url:"assets/Study-D9W1DKes.js",revision:null},{url:"assets/Study-R4LCAP7J.css",revision:null},{url:"assets/TagInformation-DgUkKxoU.js",revision:null},{url:"assets/User-DorFkRx_.js",revision:null},{url:"assets/UserStats-ck9Oh4qt.js",revision:null},{url:"assets/VerifyEmail-BYt5xfhm.js",revision:null},{url:"assets/vue.runtime.esm-bundler-C3q8JS9f.js",revision:null},{url:"assets/workbox-window.prod.es5-DBwpKi3B.js",revision:null},{url:"favicon.ico",revision:"b71387b4508120b59615e43d5e103706"},{url:"img/icons/safari-pinned-tab.svg",revision:"f22d501a35a87d9f21701cb031f6ea17"},{url:"index.html",revision:"5fa4fb13f89206e02c184546abd6b0c2"},{url:"manifest.json",revision:"14a155103e25199244cdda503219c3e1"},{url:"robots.txt",revision:"b6216d61c03e6ce0c9aea6ca7808f7ca"},{url:"manifest.webmanifest",revision:"0ad80257ac95729a8c88588d23a396c1"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("/index.html"),{allowlist:[/^(?!\/(couch|express)).*$/]}))}));
1
+ if(!self.define){let s,e={};const l=(l,i)=>(l=new URL(l+".js",i).href,e[l]||new Promise((e=>{if("document"in self){const s=document.createElement("script");s.src=l,s.onload=e,document.head.appendChild(s)}else s=l,importScripts(l),e()})).then((()=>{let s=e[l];if(!s)throw new Error(`Module ${l} didn’t register its module`);return s})));self.define=(i,r)=>{const n=s||("document"in self?document.currentScript.src:"")||location.href;if(e[n])return;let o={};const u=s=>l(s,n),t={module:{uri:n},exports:o,require:u};e[n]=Promise.all(i.map((s=>t[s]||u(s)))).then((s=>(r(...s),o)))}}define(["./workbox-1be04862"],(function(s){"use strict";self.skipWaiting(),s.clientsClaim(),s.precacheAndRoute([{url:"assets/About-eVevEMqh.js",revision:null},{url:"assets/AdminDashboard-C_oJ8NGZ.js",revision:null},{url:"assets/AdminDashboard-CWnC_vEI.css",revision:null},{url:"assets/chess-BbHATAzk-BhFAwbgX.js",revision:null},{url:"assets/chess-BbHATAzk-DB7z_kWx.css",revision:null},{url:"assets/chess-X1bmWmh3-C7B3mHa1.js",revision:null},{url:"assets/chunk-D6hFPZc3.js",revision:null},{url:"assets/ClassroomCtrlPanel-DanEeAZ0.js",revision:null},{url:"assets/Classrooms-OrG6VOnx.js",revision:null},{url:"assets/common-ui-BY2Ut5jf.css",revision:null},{url:"assets/common-ui.es-C18SEA_L.js",revision:null},{url:"assets/common-ui.es-p3cgaI_b.js",revision:null},{url:"assets/CourseRouter-CK8Xh2h2.js",revision:null},{url:"assets/CourseRouter-DvfjFpWl.css",revision:null},{url:"assets/Courses-CsGfVDf9.css",revision:null},{url:"assets/Courses-DB0JFz1Q.js",revision:null},{url:"assets/CourseWare-BTFRjgBR-D750E7i0.css",revision:null},{url:"assets/CourseWare-BTFRjgBR-OzjKW1B2.js",revision:null},{url:"assets/dist-CszlUrrD.js",revision:null},{url:"assets/dist-D2Tzeiyw.js",revision:null},{url:"assets/dist-DA7EuQY2.js",revision:null},{url:"assets/dist-DCY40cJ7.js",revision:null},{url:"assets/dist-leWgtXBf.js",revision:null},{url:"assets/edit-ui.es-BIV0deYk.js",revision:null},{url:"assets/edit-ui.es-BLMFpJm1.js",revision:null},{url:"assets/EloModeration-BmU0CqZt.js",revision:null},{url:"assets/EloModeration-DgUqPPoO.css",revision:null},{url:"assets/french-Dk7YG8Td-YK4jNZUN.js",revision:null},{url:"assets/french-evUMlbbq-BbJDdRqK.js",revision:null},{url:"assets/index-B-cSF0fq.js",revision:null},{url:"assets/index-CmEEzdUX.css",revision:null},{url:"assets/JoinCode-DPSfXf5z.css",revision:null},{url:"assets/JoinCode-KoSLXpUy.js",revision:null},{url:"assets/MarkdownRenderer-DoVbFpA6-CvaBjTS8.js",revision:null},{url:"assets/MarkdownRenderer-DoVbFpA6-DZdbKtns.js",revision:null},{url:"assets/materialdesignicons-webfont-Dp5v-WZN.woff2",revision:null},{url:"assets/math-B4HbgYf6-CLJIZTjv.js",revision:null},{url:"assets/math-B4HbgYf6-CZyvKZtp.css",revision:null},{url:"assets/math-DYni7rRl-C6a4BDoN.js",revision:null},{url:"assets/NewCourseDialog-BXxQ1cvK.js",revision:null},{url:"assets/piano-BN5Btq91-Cdn8kuW5.js",revision:null},{url:"assets/piano-DF1g6yaX-AR14jqWm.js",revision:null},{url:"assets/piano-DF1g6yaX-BLvDAgl1.css",revision:null},{url:"assets/pitch-CgGJFkZ1-DYkp_AV0.js",revision:null},{url:"assets/pitch-Dn0iNqiS-CJ_97iB4.js",revision:null},{url:"assets/ReleaseNotes-CERYwZro.js",revision:null},{url:"assets/RequestPasswordReset-Bc4FHaYS.js",revision:null},{url:"assets/RequestPasswordReset-Du5-awJG.css",revision:null},{url:"assets/ResetPassword-CeR_bmOz.js",revision:null},{url:"assets/Roboto-Black-VhoA2qKx.woff2",revision:null},{url:"assets/Roboto-BlackItalic-D4yie1YO.woff2",revision:null},{url:"assets/Roboto-Bold-hN3duQhD.woff2",revision:null},{url:"assets/Roboto-BoldItalic-BWDm51uc.woff2",revision:null},{url:"assets/Roboto-Light-DHTugVNA.woff2",revision:null},{url:"assets/Roboto-LightItalic-JQyp2Y3P.woff2",revision:null},{url:"assets/Roboto-Medium-ByKogCTi.woff2",revision:null},{url:"assets/Roboto-MediumItalic-i1eR0KbF.woff2",revision:null},{url:"assets/Roboto-Regular-C6rbFxYz.woff2",revision:null},{url:"assets/Roboto-RegularItalic-CvPUdkvM.woff2",revision:null},{url:"assets/Roboto-Thin-NicBC1pN.woff2",revision:null},{url:"assets/Roboto-ThinItalic-CKlCjrO_.woff2",revision:null},{url:"assets/server-Bq50faqp.js",revision:null},{url:"assets/sightsing-BFQ7HRig-BNrrORP_.js",revision:null},{url:"assets/sightsing-BFQ7HRig-DkUGf5Yf.css",revision:null},{url:"assets/sightsing-CJX3k0Fd-l4fhB1Aj.js",revision:null},{url:"assets/Study-R4LCAP7J.css",revision:null},{url:"assets/Study-voro05GB.js",revision:null},{url:"assets/TagInformation-1urKQaI-.js",revision:null},{url:"assets/typing-BevtfWlp-B7ZMUAQJ.css",revision:null},{url:"assets/typing-BevtfWlp-Cl6jtRmX.js",revision:null},{url:"assets/typing-k-ojjO7G-CHgxm7Rx.js",revision:null},{url:"assets/User-26Hebdw-.js",revision:null},{url:"assets/UserStats-DbWUnAPD.js",revision:null},{url:"assets/VerifyEmail-uix17ueS.js",revision:null},{url:"assets/vue.runtime.esm-bundler-C3q8JS9f.js",revision:null},{url:"assets/word-work-BOnRlZgd-CGV2xRx9.js",revision:null},{url:"assets/word-work-Dd6tIKrt-BjF3-3lq.js",revision:null},{url:"assets/workbox-window.prod.es5-DBwpKi3B.js",revision:null},{url:"favicon.ico",revision:"b71387b4508120b59615e43d5e103706"},{url:"img/icons/safari-pinned-tab.svg",revision:"f22d501a35a87d9f21701cb031f6ea17"},{url:"index.html",revision:"2d74e67693c07ab49c1cd655f61a595f"},{url:"manifest.json",revision:"14a155103e25199244cdda503219c3e1"},{url:"robots.txt",revision:"b6216d61c03e6ce0c9aea6ca7808f7ca"},{url:"manifest.webmanifest",revision:"0ad80257ac95729a8c88588d23a396c1"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("/index.html"),{allowlist:[/^(?!\/(couch|express)).*$/]}))}));
2
2
  //# sourceMappingURL=sw.js.map
package/dist/sw.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sw.js","sources":["../../../../../../../tmp/fe55481d26ab027419f39877b414fb23/sw.js"],"sourcesContent":["import {clientsClaim as workbox_core_clientsClaim} from '/home/runner/work/vue-skuilder/vue-skuilder/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/runner/work/vue-skuilder/vue-skuilder/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {cleanupOutdatedCaches as workbox_precaching_cleanupOutdatedCaches} from '/home/runner/work/vue-skuilder/vue-skuilder/node_modules/workbox-precaching/cleanupOutdatedCaches.mjs';\nimport {registerRoute as workbox_routing_registerRoute} from '/home/runner/work/vue-skuilder/vue-skuilder/node_modules/workbox-routing/registerRoute.mjs';\nimport {NavigationRoute as workbox_routing_NavigationRoute} from '/home/runner/work/vue-skuilder/vue-skuilder/node_modules/workbox-routing/NavigationRoute.mjs';\nimport {createHandlerBoundToURL as workbox_precaching_createHandlerBoundToURL} from '/home/runner/work/vue-skuilder/vue-skuilder/node_modules/workbox-precaching/createHandlerBoundToURL.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"assets/About-BpqIdlZQ.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/AdminDashboard-BObO6egG.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/AdminDashboard-CWnC_vEI.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/chunk-D6hFPZc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/ClassroomCtrlPanel-lgN6cdTd.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Classrooms-BWoQ4i1_.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/common-ui-BY2Ut5jf.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/common-ui.es-BrXWBn7p.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/common-ui.es-DKUQOgQx.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/CourseRouter-CODD0Qm5.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/CourseRouter-DvfjFpWl.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Courses-ClDdLQUO.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Courses-CsGfVDf9.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/DataInputFormTester-ywHjm2yC.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-5cG6aSxW.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-CrcJCHFk.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-CzLl7g6t.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-D5-LrzD6.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-y6_rrqhr.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/edit-ui.es-C9MhXwkt.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/edit-ui.es-DT9CMaNG.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/EloModeration-B6LM11G_.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/EloModeration-DgUqPPoO.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-C8gy3Ea0.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-DUZItsH-.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/JoinCode-DgPD_OFL.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/JoinCode-DPSfXf5z.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/MarkdownRenderer-DoVbFpA6-BIbDxYC4.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/MarkdownRenderer-DoVbFpA6-CQGwEJFh.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/materialdesignicons-webfont-Dp5v-WZN.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/NewCourseDialog-DhwvBT3y.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/ReleaseNotes-DtwDIIfH.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/RequestPasswordReset-DBv0XCIk.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/RequestPasswordReset-Du5-awJG.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/ResetPassword-BtBplqsQ.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-Black-VhoA2qKx.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-BlackItalic-D4yie1YO.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-Bold-hN3duQhD.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-BoldItalic-BWDm51uc.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-Light-DHTugVNA.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-LightItalic-JQyp2Y3P.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-Medium-ByKogCTi.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-MediumItalic-i1eR0KbF.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-Regular-C6rbFxYz.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-RegularItalic-CvPUdkvM.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-Thin-NicBC1pN.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-ThinItalic-CKlCjrO_.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/server-Db_WegNj.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Study-D9W1DKes.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Study-R4LCAP7J.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/TagInformation-DgUkKxoU.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/User-DorFkRx_.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/UserStats-ck9Oh4qt.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/VerifyEmail-BYt5xfhm.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/vue.runtime.esm-bundler-C3q8JS9f.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/workbox-window.prod.es5-DBwpKi3B.js\",\n \"revision\": null\n },\n {\n \"url\": \"favicon.ico\",\n \"revision\": \"b71387b4508120b59615e43d5e103706\"\n },\n {\n \"url\": \"img/icons/safari-pinned-tab.svg\",\n \"revision\": \"f22d501a35a87d9f21701cb031f6ea17\"\n },\n {\n \"url\": \"index.html\",\n \"revision\": \"5fa4fb13f89206e02c184546abd6b0c2\"\n },\n {\n \"url\": \"manifest.json\",\n \"revision\": \"14a155103e25199244cdda503219c3e1\"\n },\n {\n \"url\": \"robots.txt\",\n \"revision\": \"b6216d61c03e6ce0c9aea6ca7808f7ca\"\n },\n {\n \"url\": \"manifest.webmanifest\",\n \"revision\": \"0ad80257ac95729a8c88588d23a396c1\"\n }\n], {});\nworkbox_precaching_cleanupOutdatedCaches();\nworkbox_routing_registerRoute(new workbox_routing_NavigationRoute(workbox_precaching_createHandlerBoundToURL(\"/index.html\"), {\n allowlist: [/^(?!\\/(couch|express)).*$/],\n \n}));\n\n\n\n\n\n\n"],"names":["self","skipWaiting","workbox_core_clientsClaim","workbox_precaching_precacheAndRoute","url","revision","workbox_precaching_cleanupOutdatedCaches","workbox","registerRoute","workbox_routing_NavigationRoute","NavigationRoute","workbox_precaching_createHandlerBoundToURL","allowlist"],"mappings":"0nBAwBAA,KAAKC,cAELC,EAAAA,eAQAC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,2BACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,2BACPC,SAAY,MAEd,CACED,IAAO,wCACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,8BACPC,SAAY,MAEd,CACED,IAAO,yCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,2BACPC,SAAY,MAEd,CACED,IAAO,8BACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,oDACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0CACPC,SAAY,MAEd,CACED,IAAO,2CACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,2CACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,0CACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,2CACPC,SAAY,MAEd,CACED,IAAO,sCACPC,SAAY,MAEd,CACED,IAAO,4CACPC,SAAY,MAEd,CACED,IAAO,uCACPC,SAAY,MAEd,CACED,IAAO,6CACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,0CACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,2BACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,6CACPC,SAAY,MAEd,CACED,IAAO,6CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,gBACPC,SAAY,oCAEd,CACED,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,qCAEb,CAAE,GACLC,EAAAA,wBAC6BC,EAAAC,cAAC,IAAIC,EAA+BC,gBAACC,0BAA2C,eAAgB,CAC3HC,UAAW,CAAC"}
1
+ {"version":3,"file":"sw.js","sources":["../../../../../../../tmp/349a1c64ac676ca07ca32c252e837879/sw.js"],"sourcesContent":["import {clientsClaim as workbox_core_clientsClaim} from '/home/runner/work/vue-skuilder/vue-skuilder/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/runner/work/vue-skuilder/vue-skuilder/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {cleanupOutdatedCaches as workbox_precaching_cleanupOutdatedCaches} from '/home/runner/work/vue-skuilder/vue-skuilder/node_modules/workbox-precaching/cleanupOutdatedCaches.mjs';\nimport {registerRoute as workbox_routing_registerRoute} from '/home/runner/work/vue-skuilder/vue-skuilder/node_modules/workbox-routing/registerRoute.mjs';\nimport {NavigationRoute as workbox_routing_NavigationRoute} from '/home/runner/work/vue-skuilder/vue-skuilder/node_modules/workbox-routing/NavigationRoute.mjs';\nimport {createHandlerBoundToURL as workbox_precaching_createHandlerBoundToURL} from '/home/runner/work/vue-skuilder/vue-skuilder/node_modules/workbox-precaching/createHandlerBoundToURL.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"assets/About-eVevEMqh.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/AdminDashboard-C_oJ8NGZ.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/AdminDashboard-CWnC_vEI.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/chess-BbHATAzk-BhFAwbgX.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/chess-BbHATAzk-DB7z_kWx.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/chess-X1bmWmh3-C7B3mHa1.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/chunk-D6hFPZc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/ClassroomCtrlPanel-DanEeAZ0.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Classrooms-OrG6VOnx.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/common-ui-BY2Ut5jf.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/common-ui.es-C18SEA_L.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/common-ui.es-p3cgaI_b.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/CourseRouter-CK8Xh2h2.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/CourseRouter-DvfjFpWl.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Courses-CsGfVDf9.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Courses-DB0JFz1Q.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/CourseWare-BTFRjgBR-D750E7i0.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/CourseWare-BTFRjgBR-OzjKW1B2.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-CszlUrrD.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-D2Tzeiyw.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-DA7EuQY2.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-DCY40cJ7.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-leWgtXBf.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/edit-ui.es-BIV0deYk.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/edit-ui.es-BLMFpJm1.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/EloModeration-BmU0CqZt.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/EloModeration-DgUqPPoO.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/french-Dk7YG8Td-YK4jNZUN.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/french-evUMlbbq-BbJDdRqK.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-B-cSF0fq.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-CmEEzdUX.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/JoinCode-DPSfXf5z.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/JoinCode-KoSLXpUy.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/MarkdownRenderer-DoVbFpA6-CvaBjTS8.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/MarkdownRenderer-DoVbFpA6-DZdbKtns.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/materialdesignicons-webfont-Dp5v-WZN.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/math-B4HbgYf6-CLJIZTjv.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/math-B4HbgYf6-CZyvKZtp.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/math-DYni7rRl-C6a4BDoN.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/NewCourseDialog-BXxQ1cvK.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/piano-BN5Btq91-Cdn8kuW5.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/piano-DF1g6yaX-AR14jqWm.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/piano-DF1g6yaX-BLvDAgl1.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/pitch-CgGJFkZ1-DYkp_AV0.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/pitch-Dn0iNqiS-CJ_97iB4.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/ReleaseNotes-CERYwZro.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/RequestPasswordReset-Bc4FHaYS.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/RequestPasswordReset-Du5-awJG.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/ResetPassword-CeR_bmOz.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-Black-VhoA2qKx.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-BlackItalic-D4yie1YO.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-Bold-hN3duQhD.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-BoldItalic-BWDm51uc.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-Light-DHTugVNA.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-LightItalic-JQyp2Y3P.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-Medium-ByKogCTi.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-MediumItalic-i1eR0KbF.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-Regular-C6rbFxYz.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-RegularItalic-CvPUdkvM.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-Thin-NicBC1pN.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Roboto-ThinItalic-CKlCjrO_.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/server-Bq50faqp.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/sightsing-BFQ7HRig-BNrrORP_.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/sightsing-BFQ7HRig-DkUGf5Yf.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/sightsing-CJX3k0Fd-l4fhB1Aj.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Study-R4LCAP7J.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Study-voro05GB.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/TagInformation-1urKQaI-.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/typing-BevtfWlp-B7ZMUAQJ.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/typing-BevtfWlp-Cl6jtRmX.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/typing-k-ojjO7G-CHgxm7Rx.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/User-26Hebdw-.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/UserStats-DbWUnAPD.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/VerifyEmail-uix17ueS.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/vue.runtime.esm-bundler-C3q8JS9f.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/word-work-BOnRlZgd-CGV2xRx9.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/word-work-Dd6tIKrt-BjF3-3lq.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/workbox-window.prod.es5-DBwpKi3B.js\",\n \"revision\": null\n },\n {\n \"url\": \"favicon.ico\",\n \"revision\": \"b71387b4508120b59615e43d5e103706\"\n },\n {\n \"url\": \"img/icons/safari-pinned-tab.svg\",\n \"revision\": \"f22d501a35a87d9f21701cb031f6ea17\"\n },\n {\n \"url\": \"index.html\",\n \"revision\": \"2d74e67693c07ab49c1cd655f61a595f\"\n },\n {\n \"url\": \"manifest.json\",\n \"revision\": \"14a155103e25199244cdda503219c3e1\"\n },\n {\n \"url\": \"robots.txt\",\n \"revision\": \"b6216d61c03e6ce0c9aea6ca7808f7ca\"\n },\n {\n \"url\": \"manifest.webmanifest\",\n \"revision\": \"0ad80257ac95729a8c88588d23a396c1\"\n }\n], {});\nworkbox_precaching_cleanupOutdatedCaches();\nworkbox_routing_registerRoute(new workbox_routing_NavigationRoute(workbox_precaching_createHandlerBoundToURL(\"/index.html\"), {\n allowlist: [/^(?!\\/(couch|express)).*$/],\n \n}));\n\n\n\n\n\n\n"],"names":["self","skipWaiting","workbox_core_clientsClaim","workbox_precaching_precacheAndRoute","url","revision","workbox_precaching_cleanupOutdatedCaches","workbox","registerRoute","workbox_routing_NavigationRoute","NavigationRoute","workbox_precaching_createHandlerBoundToURL","allowlist"],"mappings":"0nBAwBAA,KAAKC,cAELC,EAAAA,eAQAC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,2BACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,2BACPC,SAAY,MAEd,CACED,IAAO,wCACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,8BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,0CACPC,SAAY,MAEd,CACED,IAAO,yCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,2BACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,8BACPC,SAAY,MAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,oDACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0CACPC,SAAY,MAEd,CACED,IAAO,2CACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,2CACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,0CACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,2CACPC,SAAY,MAEd,CACED,IAAO,sCACPC,SAAY,MAEd,CACED,IAAO,4CACPC,SAAY,MAEd,CACED,IAAO,uCACPC,SAAY,MAEd,CACED,IAAO,6CACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,0CACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,wCACPC,SAAY,MAEd,CACED,IAAO,yCACPC,SAAY,MAEd,CACED,IAAO,wCACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,2BACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,sCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,6CACPC,SAAY,MAEd,CACED,IAAO,wCACPC,SAAY,MAEd,CACED,IAAO,wCACPC,SAAY,MAEd,CACED,IAAO,6CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,gBACPC,SAAY,oCAEd,CACED,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,qCAEb,CAAE,GACLC,EAAAA,wBAC6BC,EAAAC,cAAC,IAAIC,EAA+BC,gBAACC,0BAA2C,eAAgB,CAC3HC,UAAW,CAAC"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.1.34",
6
+ "version": "0.1.36",
7
7
  "scripts": {
8
8
  "dev": "vite",
9
9
  "build": "vite build",
@@ -25,11 +25,11 @@
25
25
  "dependencies": {
26
26
  "@mdi/font": "^7.3.67",
27
27
  "@tonaljs/tonal": "^3.6.0",
28
- "@vue-skuilder/common": "0.1.34",
29
- "@vue-skuilder/common-ui": "0.1.34",
30
- "@vue-skuilder/courseware": "0.1.34",
31
- "@vue-skuilder/db": "0.1.34",
32
- "@vue-skuilder/edit-ui": "0.1.34",
28
+ "@vue-skuilder/common": "0.1.36",
29
+ "@vue-skuilder/common-ui": "0.1.36",
30
+ "@vue-skuilder/courseware": "0.1.36",
31
+ "@vue-skuilder/db": "0.1.36",
32
+ "@vue-skuilder/edit-ui": "0.1.36",
33
33
  "@vue/compiler-sfc": "^3.5.13",
34
34
  "abcjs": "^6.2.2",
35
35
  "canvas-confetti": "^1.9.3",
@@ -91,5 +91,5 @@
91
91
  "engines": {
92
92
  "node": ">=18"
93
93
  },
94
- "stableVersion": "0.1.34"
94
+ "stableVersion": "0.1.36"
95
95
  }
@@ -0,0 +1,254 @@
1
+ <template>
2
+ <div class="playtest pa-4">
3
+ <!-- Index mode: no question selected -->
4
+ <template v-if="!slug">
5
+ <h1 class="text-h4 mb-4">Playtest</h1>
6
+ <p class="text-body-2 mb-4">
7
+ Render any question type from <code>@vue-skuilder/courseware</code> with author-input
8
+ and/or self-generation. Dev-only route. Bypasses the <code>allCourseWare</code> registry —
9
+ unregistered prototypes (e.g. forks) are loadable here.
10
+ </p>
11
+ <div v-for="group in grouped" :key="group.domain" class="mb-4">
12
+ <h2 class="text-h6">{{ group.domain }}</h2>
13
+ <ul>
14
+ <li v-for="q in group.questions" :key="q.slug">
15
+ <router-link :to="`/play/${q.slug}`">{{ q.slug }}</router-link>
16
+ </li>
17
+ </ul>
18
+ </div>
19
+ </template>
20
+
21
+ <!-- Loading / error -->
22
+ <template v-else-if="loadError">
23
+ <router-link to="/play">&larr; back to index</router-link>
24
+ <v-alert type="error" class="mt-4">{{ loadError }}</v-alert>
25
+ </template>
26
+ <template v-else-if="!QClass">
27
+ <v-progress-circular indeterminate />
28
+ </template>
29
+
30
+ <!-- Question mode -->
31
+ <template v-else>
32
+ <div class="d-flex align-center mb-3">
33
+ <router-link to="/play">&larr; index</router-link>
34
+ <h1 class="text-h5 mx-4">{{ slug }}</h1>
35
+ <v-chip size="small" :color="QClass.acceptsUserData ? 'primary' : 'secondary'">
36
+ {{ QClass.acceptsUserData ? 'authored' : 'self-gen' }}
37
+ </v-chip>
38
+ <v-spacer />
39
+ <v-btn size="small" color="primary" @click="reroll">Reroll</v-btn>
40
+ </div>
41
+
42
+ <v-row>
43
+ <!-- Author input + DataInputForm's own preview -->
44
+ <v-col v-if="dataShape" cols="12" lg="6">
45
+ <h3 class="text-subtitle-1 mb-2">Author input</h3>
46
+ <DataInputForm
47
+ :key="`form-${rerollKey}`"
48
+ :data-shape="dataShape"
49
+ :preview-component="QClass"
50
+ :course-cfg="fakeCourseCfg"
51
+ />
52
+ </v-col>
53
+
54
+ <!-- Direct CardViewer + response log -->
55
+ <v-col :cols="dataShape ? 12 : 12" :lg="dataShape ? 6 : 12">
56
+ <h3 class="text-subtitle-1 mb-2">Render &amp; capture</h3>
57
+ <div v-if="renderData">
58
+ <CardViewer
59
+ :key="`view-${rerollKey}`"
60
+ :view="QClass.views[0]"
61
+ :data="renderData"
62
+ card_id="playtest"
63
+ course_id="playtest"
64
+ @emit-response="onResponse"
65
+ />
66
+ </div>
67
+ <v-alert v-else type="info" density="compact">
68
+ Fill in the author form on the left to populate render data.
69
+ </v-alert>
70
+
71
+ <h3 class="text-subtitle-1 mt-4 mb-2">
72
+ Response log ({{ responseLog.length }})
73
+ <v-btn v-if="responseLog.length" size="x-small" variant="text" @click="responseLog = []">
74
+ clear
75
+ </v-btn>
76
+ </h3>
77
+ <pre v-if="responseLog.length" class="response-log">{{
78
+ JSON.stringify(responseLog, null, 2)
79
+ }}</pre>
80
+ <div v-else class="text-caption text-grey">No responses captured yet.</div>
81
+ </v-col>
82
+ </v-row>
83
+ </template>
84
+ </div>
85
+ </template>
86
+
87
+ <script lang="ts">
88
+ import { defineComponent } from 'vue';
89
+ import { useRoute } from 'vue-router';
90
+ import { DataInputForm, useDataInputFormStore } from '@vue-skuilder/edit-ui';
91
+ import { CardViewer, Question } from '@vue-skuilder/common-ui';
92
+ import type { DataShape, CourseConfig, ViewData } from '@vue-skuilder/common';
93
+ import type { CardRecord } from '@vue-skuilder/db';
94
+
95
+ type QClass = typeof Question;
96
+
97
+ // Discover every question module under @vue-skuilder/courseware.
98
+ // import.meta.glob is resolved at build time; in dev these are real
99
+ // filesystem paths across the yarn workspace.
100
+ const questionModules = import.meta.glob('../../../courseware/src/**/questions/**/index.ts');
101
+
102
+ const PREFIX = '../../../courseware/src/';
103
+ const SUFFIX = '/index.ts';
104
+
105
+ function pathToSlug(path: string): string {
106
+ // path: ../../../courseware/src/chess/questions/puzzle/index.ts
107
+ // slug: chess/puzzle
108
+ return path.slice(PREFIX.length, -SUFFIX.length).replace('/questions/', '/');
109
+ }
110
+
111
+ function slugToPath(slug: string): string {
112
+ // slug: chess/puzzle → path: chess/questions/puzzle
113
+ const [domain, ...rest] = slug.split('/');
114
+ return `${PREFIX}${domain}/questions/${rest.join('/')}${SUFFIX}`;
115
+ }
116
+
117
+ const allSlugs = Object.keys(questionModules).map(pathToSlug).sort();
118
+
119
+ const groupedSlugs = allSlugs.reduce<{ domain: string; questions: { slug: string }[] }[]>(
120
+ (acc, slug) => {
121
+ const domain = slug.split('/')[0];
122
+ let group = acc.find((g) => g.domain === domain);
123
+ if (!group) {
124
+ group = { domain, questions: [] };
125
+ acc.push(group);
126
+ }
127
+ group.questions.push({ slug });
128
+ return acc;
129
+ },
130
+ []
131
+ );
132
+
133
+ const fakeCourseCfg: CourseConfig = {
134
+ courseID: 'playtest',
135
+ name: 'Playtest',
136
+ description: 'Dev playtest harness — not a real course.',
137
+ admins: ['admin'],
138
+ creator: 'admin',
139
+ deleted: false,
140
+ moderators: [],
141
+ public: false,
142
+ disambiguator: 'playtest',
143
+ questionTypes: [],
144
+ dataShapes: [],
145
+ };
146
+
147
+ export default defineComponent({
148
+ name: 'PlaytestViewer',
149
+ components: { DataInputForm, CardViewer },
150
+
151
+ setup() {
152
+ return { route: useRoute(), dataInputFormStore: useDataInputFormStore() };
153
+ },
154
+
155
+ data() {
156
+ return {
157
+ QClass: null as QClass | null,
158
+ dataShape: null as DataShape | null,
159
+ loadError: '' as string,
160
+ rerollKey: 0,
161
+ responseLog: [] as CardRecord[],
162
+ grouped: groupedSlugs,
163
+ fakeCourseCfg,
164
+ };
165
+ },
166
+
167
+ computed: {
168
+ slug(): string {
169
+ const raw = this.route.params.pathMatch;
170
+ const s = Array.isArray(raw) ? raw.join('/') : raw || '';
171
+ return s.replace(/^\/+|\/+$/g, '');
172
+ },
173
+
174
+ /**
175
+ * Reactive view-data assembled from the DataInputForm store.
176
+ *
177
+ * Returns `[previewInput]` when the form's validation passes — this is
178
+ * the same shape `card-browser` consumes inside DataInputForm, so the
179
+ * two panels stay in sync. If the dataShape has no fields (rare;
180
+ * fully self-generating types), fall back to `[{}]` so the view can
181
+ * still mount.
182
+ */
183
+ renderData(): ViewData[] | null {
184
+ if (!this.dataShape) return null;
185
+ if (this.dataShape.fields.length === 0) return [{}];
186
+ const preview = this.dataInputFormStore.dataInputForm.fieldStore.getPreview;
187
+ if (!preview || Object.keys(preview).length === 0) return null;
188
+ return [preview as ViewData];
189
+ },
190
+ },
191
+
192
+ watch: {
193
+ slug: {
194
+ immediate: true,
195
+ handler(s: string) {
196
+ this.load(s);
197
+ },
198
+ },
199
+ },
200
+
201
+ methods: {
202
+ async load(slug: string) {
203
+ this.QClass = null;
204
+ this.dataShape = null;
205
+ this.loadError = '';
206
+ this.responseLog = [];
207
+ if (!slug) return;
208
+
209
+ const path = slugToPath(slug);
210
+ const loader = questionModules[path];
211
+ if (!loader) {
212
+ this.loadError = `No module at ${path}. Known slugs: ${allSlugs.join(', ')}`;
213
+ return;
214
+ }
215
+
216
+ try {
217
+ const mod = (await loader()) as Record<string, unknown>;
218
+ const found = Object.values(mod).find(
219
+ (v) => typeof v === 'function' && (v as { prototype: unknown }).prototype instanceof Question
220
+ ) as QClass | undefined;
221
+ if (!found) {
222
+ this.loadError = `Module ${path} exports no Question subclass.`;
223
+ return;
224
+ }
225
+ this.QClass = found;
226
+ this.dataShape = found.dataShapes?.[0] ?? null;
227
+ } catch (e) {
228
+ this.loadError = `Failed to load ${path}: ${(e as Error).message}`;
229
+ }
230
+ },
231
+
232
+ reroll() {
233
+ this.rerollKey++;
234
+ this.responseLog = [];
235
+ },
236
+
237
+ onResponse(r: CardRecord) {
238
+ this.responseLog.push(r);
239
+ },
240
+ },
241
+ });
242
+ </script>
243
+
244
+ <style scoped>
245
+ .response-log {
246
+ background: rgba(0, 0, 0, 0.04);
247
+ padding: 8px;
248
+ border-radius: 4px;
249
+ font-size: 12px;
250
+ max-height: 320px;
251
+ overflow: auto;
252
+ white-space: pre-wrap;
253
+ }
254
+ </style>
package/src/main.ts CHANGED
@@ -27,8 +27,19 @@ import { initializeDataLayer } from '@vue-skuilder/db';
27
27
  const pinia = createPinia();
28
28
  const app = createApp(App);
29
29
 
30
- // Dynamically import { allCourseWare }
31
- const { allCourseWare: Courses } = await import('@vue-skuilder/courseware');
30
+ // Dynamically import { allCourseWare } and register all built-in courses.
31
+ // As of the courseware tree-shaking refactor, `allCourseWare` starts empty;
32
+ // platform-ui historically depended on all subcourses being available, so
33
+ // we eagerly load them all here. See packages/courseware/src/index.ts.
34
+ const {
35
+ allCourseWare: Courses,
36
+ defaultCourse,
37
+ loadAllSubcourses,
38
+ } = await import('@vue-skuilder/courseware');
39
+ if (!Courses.courses.find((c) => c.name === defaultCourse.name)) {
40
+ Courses.courses.push(defaultCourse);
41
+ }
42
+ await loadAllSubcourses();
32
43
 
33
44
  // Register all view components globally
34
45
  const viewComponents = Courses.allViewsRaw();
package/src/router.ts CHANGED
@@ -27,29 +27,29 @@ const VerifyEmailView = () => import('./views/VerifyEmail.vue');
27
27
  const RequestPasswordResetView = () => import('./views/RequestPasswordReset.vue');
28
28
  const ResetPasswordView = () => import('./views/ResetPassword.vue');
29
29
  const MarkdownRenderer = () => import('@vue-skuilder/common-ui').then((m) => m.MarkdownRenderer);
30
- const DataInputFormTester = () => import('./dev/DataInputFormTester.vue');
30
+ // Dev-only playtest harness. Lazy-imported but the route entry below is
31
+ // also wrapped in `import.meta.env.DEV` so the chunk is dropped from prod
32
+ // builds entirely.
33
+ const Playtest = () => import('./dev/Playtest.vue');
31
34
 
32
35
  const router = createRouter({
33
36
  history: createWebHistory(),
34
37
  // mode: 'history', // deprecated in Vue 3 / Vue Router 4
35
38
 
36
39
  routes: [
37
- // {
38
- // path: '/debug/:component',
39
- // name: 'componentPreviews',
40
- // component: components[component]
41
- // }
42
- // todo:
43
- //
44
- // beforeEnter: () => authenticateAdmin ?
45
- //
46
- // const components: Component[] = [];
47
- {
48
- path: '/dif/:pathMatch(.*)',
49
- name: 'testThePathComponent',
50
- component: DataInputFormTester,
51
- props: true,
52
- },
40
+ // Dev-only playtest harness — see ./dev/Playtest.vue. The route is
41
+ // only registered when Vite is in dev mode, so prod builds neither
42
+ // expose the URL nor include the chunk.
43
+ ...(import.meta.env.DEV
44
+ ? [
45
+ {
46
+ path: '/play/:pathMatch(.*)?',
47
+ name: 'playtest',
48
+ component: Playtest,
49
+ props: true,
50
+ },
51
+ ]
52
+ : []),
53
53
  {
54
54
  path: '/md',
55
55
  component: MarkdownRenderer,
@@ -1,2 +0,0 @@
1
- import"./chunk-D6hFPZc3.js";import{$ as e,C as t,H as n,K as r,S as i,T as a,Vt as o,_ as s,b as c,v as l,y as u}from"./vue.runtime.esm-bundler-C3q8JS9f.js";import{B as d,T as f,b as p,c as m,p as h}from"./common-ui.es-BrXWBn7p.js";import"./dist-CrcJCHFk.js";import"./MarkdownRenderer-DoVbFpA6-BIbDxYC4.js";import{k as g,n as _}from"./dist-CzLl7g6t.js";import{t as v}from"./index-DUZItsH-.js";import{g as y}from"./dist-D5-LrzD6.js";var b=a({name:`AdminDashboard`,components:{CardSearch:m,CardSearchResults:h,CardHistoryViewer:p,CardLoader:d},data(){return{query:``,selectedCard:null,userId:``,userDB:null,dataLayer:null,adminDB:null,selectedUserId:``,selectedUserReader:null,selectedCourseId:null,userOptions:[],courseOptions:[]}},async created(){this.userDB=await f(),this.userId=this.userDB.getUsername(),this.dataLayer=await g(),this.adminDB=this.dataLayer.getAdminDB(),await this.loadUsers(),await this.loadCourses()},methods:{async loadUsers(){try{this.userOptions=(await this.adminDB.getUsers()).filter(e=>e.name&&!e.name.startsWith(`Guest_`)).map(e=>({label:e.name||`Unknown User`,value:e.name||``})).filter(e=>e.value!==``)}catch(e){console.error(`Failed to load users:`,e)}},async onUserSelected(e){if(!e){this.selectedUserReader=null;return}try{this.selectedUserReader=await this.dataLayer.createUserReaderForUser(e)}catch(e){console.error(`Failed to create user reader:`,e),this.selectedUserReader=null}},onSearch(e){this.query=e},onCardSelected(e){this.selectedCard=e},async loadCourses(){try{this.courseOptions=(await _.allCourseWare()).filter(e=>e._id).map(e=>{let t=e.name&&e.name.trim(),n,r;return t&&t!==e._id&&t!==``?(n=t,r=t.toLowerCase()):(n=e._id,r=e._id.toLowerCase()),{label:`📚 ${n}`,value:e._id,sortKey:r}}).sort((e,t)=>e.sortKey.localeCompare(t.sortKey)),console.log(`Loaded ${this.courseOptions.length} courses for filtering (lightweight mode)`)}catch(e){console.error(`Failed to load courses (lightweight):`,e),await this.loadCoursesExpensive()}},async loadCoursesExpensive(){try{console.log(`Using expensive course loading (full configs)...`),this.courseOptions=(await this.dataLayer.getAdminDB().getCourses()).filter(e=>e.courseID).map(e=>{let t=e.name&&e.name.trim(),n=e.creator?` (${e.creator})`:``,r,i;return t&&t!==e.courseID?(r=t,i=t.toLowerCase()):(r=e.courseID,i=e.courseID.toLowerCase()),{label:`${e.public?`🌐`:`🔒`} ${r}${n}`,value:e.courseID,sortKey:i}}).sort((e,t)=>e.sortKey.localeCompare(t.sortKey)),console.log(`Loaded ${this.courseOptions.length} courses for filtering (expensive mode)`)}catch(e){console.error(`Failed to load courses (expensive):`,e),this.loadCoursesBasic()}},async loadCoursesBasic(){try{console.log(`Using fallback course loading (IDs only)`),this.courseOptions=[{label:`⚠️ Course names not available - using IDs only`,value:``}]}catch(e){console.error(`Failed to load basic courses:`,e)}},onCourseFilterChanged(){this.query},getCourseNameById(e){let t=this.courseOptions.find(t=>t.value===e);return t?t.label:e},getSelectedCourseDetails(){return this.selectedCourseId?`ID: ${this.selectedCourseId}`:``},viewLookup(e){return y.getView(e)}}}),x={class:`admin-dashboard`},S={key:0,class:`mt-2`},C={key:0,class:`text-caption text-grey-darken-1`};function _sfc_render(a,d,f,p,m,h){let g=r(`v-card-title`),_=r(`v-select`),v=r(`v-chip`),y=r(`v-card-text`),b=r(`v-card`),w=r(`card-search`),T=r(`card-search-results`),E=r(`v-col`),D=r(`card-loader`),O=r(`v-row`),k=r(`card-history-viewer`);return n(),c(`div`,x,[d[4]||(d[4]=s(`h1`,null,`Admin Dashboard`,-1)),t(b,{class:`mb-4`},{default:e(()=>[t(g,null,{default:e(()=>d[2]||(d[2]=[i(`User Selection`)])),_:1}),t(y,null,{default:e(()=>[t(_,{modelValue:a.selectedUserId,"onUpdate:modelValue":[d[0]||(d[0]=e=>a.selectedUserId=e),a.onUserSelected],items:a.userOptions,"item-title":`label`,"item-value":`value`,label:`Select User`},null,8,[`modelValue`,`items`,`onUpdate:modelValue`]),a.selectedUserId?(n(),l(v,{key:0,color:`primary`,class:`mt-2`},{default:e(()=>[i(` Viewing data for: `+o(a.selectedUserId),1)]),_:1})):u(``,!0)]),_:1})]),_:1}),t(b,{class:`mb-4`},{default:e(()=>[t(g,null,{default:e(()=>d[3]||(d[3]=[i(`Search Filters`)])),_:1}),t(y,null,{default:e(()=>[t(_,{modelValue:a.selectedCourseId,"onUpdate:modelValue":[d[1]||(d[1]=e=>a.selectedCourseId=e),a.onCourseFilterChanged],items:a.courseOptions,"item-title":`label`,"item-value":`value`,label:`Filter by Course (optional)`,clearable:``},null,8,[`modelValue`,`items`,`onUpdate:modelValue`]),a.selectedCourseId?(n(),c(`div`,S,[t(v,{color:`info`,class:`mb-1`},{default:e(()=>[i(` 🎯 `+o(a.getCourseNameById(a.selectedCourseId)),1)]),_:1}),a.getSelectedCourseDetails()?(n(),c(`div`,C,o(a.getSelectedCourseDetails()),1)):u(``,!0)])):(n(),l(v,{key:1,color:`warning`,class:`mt-2`},{default:e(()=>[i(` ⚠️ Searching ALL `+o(a.courseOptions.length)+` courses (may be slow) `,1)]),_:1}))]),_:1})]),_:1}),t(w,{onSearch:a.onSearch},null,8,[`onSearch`]),t(O,null,{default:e(()=>[t(E,{cols:`6`},{default:e(()=>[a.query?(n(),l(T,{key:0,query:a.query,"data-layer":a.dataLayer,"course-filter":a.selectedCourseId,onCardSelected:a.onCardSelected},null,8,[`query`,`data-layer`,`course-filter`,`onCardSelected`])):u(``,!0)]),_:1}),t(E,{cols:`6`},{default:e(()=>[a.selectedCard?(n(),l(D,{key:0,qualified_id:{courseID:a.selectedCard.courseId,cardID:a.selectedCard.cardId},"view-lookup":a.viewLookup},null,8,[`qualified_id`,`view-lookup`])):u(``,!0)]),_:1})]),_:1}),a.selectedCard&&a.selectedUserReader?(n(),l(k,{key:0,"card-id":a.selectedCard.cardId,"course-id":a.selectedCard.courseId,"user-id":a.selectedUserId,"user-d-b":a.selectedUserReader},null,8,[`card-id`,`course-id`,`user-id`,`user-d-b`])):u(``,!0)])}var w=v(b,[[`render`,_sfc_render],[`__scopeId`,`data-v-7409c94e`]]);export{w as default};
2
- //# sourceMappingURL=AdminDashboard-BObO6egG.js.map
@@ -1,2 +0,0 @@
1
- import"./chunk-D6hFPZc3.js";import{H as e,K as t,T as n,b as r,v as i}from"./vue.runtime.esm-bundler-C3q8JS9f.js";import{G as a,m as o}from"./common-ui.es-BrXWBn7p.js";import"./dist-CrcJCHFk.js";import"./MarkdownRenderer-DoVbFpA6-BIbDxYC4.js";import"./dist-CzLl7g6t.js";import{t as s}from"./index-DUZItsH-.js";import"./dist-D5-LrzD6.js";import{n as c}from"./edit-ui.es-C9MhXwkt.js";var l=Object.assign({}),u=n({name:`DataInputFormTester`,components:{DataInputForm:c},setup(){return{route:a()}},data(){return{dataShape:null,cds:null,component:null}},async created(){try{let e=`../${this.route.params.pathMatch}/index.ts`;if(console.log(`Looking for module:`,e),console.log(`Available paths:`,Object.keys(l)),e in l){let t=await l[e](),n=Object.entries(t).find(([e,t])=>{let n=typeof t==`function`,r=n&&t.prototype instanceof o;return console.log(`Checking export "${e}":`,{isClass:n,extendsQuestion:r,type:typeof t}),r});if(!n)throw Error(`No export found extending Question class`);this.component=n[1];let r=this.component?.dataShapes[0];r&&(this.dataShape=r)}else throw Error(`No module found at path: ${e}`)}catch(e){console.log(`[difTester] Error loading component`,e)}}}),d={key:1};function _sfc_render(n,a,o,s,c,l){let u=t(`data-input-form`);return e(),r(`div`,null,[n.component&&n.dataShape?(e(),i(u,{key:0,"data-shape":n.dataShape,"course-cfg":{courseID:`testCourse`,name:`testCourseName`,description:`All of these courses will be the same!`,admins:[`admin`],creator:`admin`,deleted:!1,moderators:[],public:!0,disambiguator:`testCourseName`,questionTypes:[],dataShapes:[]},"preview-component":n.component},null,8,[`data-shape`,`preview-component`])):(e(),r(`div`,d,` No component loaded :/ `))])}var f=s(u,[[`render`,_sfc_render]]);export{f as default};
2
- //# sourceMappingURL=DataInputFormTester-ywHjm2yC.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataInputFormTester-ywHjm2yC.js","names":[],"sources":["../../src/dev/DataInputFormTester.vue","../../src/dev/DataInputFormTester.vue"],"sourcesContent":["<template>\n <div>\n <data-input-form\n v-if=\"component && dataShape\"\n :data-shape=\"dataShape\"\n :course-cfg=\"{\n courseID: 'testCourse',\n name: 'testCourseName',\n description: 'All of these courses will be the same!',\n admins: ['admin'],\n creator: 'admin',\n deleted: false,\n moderators: [],\n public: true,\n disambiguator: 'testCourseName',\n questionTypes: [],\n dataShapes: [],\n }\"\n :preview-component=\"component\"\n />\n <div v-else>\n No component loaded :/\n <!--\n\n todo: provide list of Question type components, with router links\n to their DataInputFormTester loaders.\n\n --></div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { DataInputForm } from '@vue-skuilder/edit-ui';\nimport { DataShape } from '../../src/base-course/Interfaces/DataShape';\nimport { useRoute } from 'vue-router';\nimport { Question } from '@vue-skuilder/common-ui';\n\ntype CourseShapes = {\n courseID: string;\n dataShapes: DataShape[];\n};\n\nconst questionModules = import.meta.glob('../**/questions/**/index.ts', {\n // Adding eager: false ensures lazy loading\n eager: false,\n});\n\ntype ModuleExports = {\n [key: string]: unknown;\n};\n\nexport default defineComponent({\n name: 'DataInputFormTester',\n\n components: {\n DataInputForm,\n },\n\n setup() {\n return {\n route: useRoute(),\n };\n },\n\n data() {\n return {\n dataShape: null as DataShape | null,\n cds: null as CourseShapes[] | null,\n component: null as typeof Question | null,\n };\n },\n\n async created() {\n try {\n const q = this.route.params.pathMatch;\n const modulePath = `../${q}/index.ts`;\n\n console.log('Looking for module:', modulePath);\n console.log('Available paths:', Object.keys(questionModules));\n\n if (modulePath in questionModules) {\n const module = (await questionModules[modulePath]()) as ModuleExports;\n\n // Find the Question implementation\n const matchingExport = Object.entries(module).find(([name, exportValue]) => {\n const isClass = typeof exportValue === 'function';\n const extendsQuestion = isClass && exportValue.prototype instanceof Question;\n\n console.log(`Checking export \"${name}\":`, {\n isClass,\n extendsQuestion,\n type: typeof exportValue,\n });\n\n return extendsQuestion;\n });\n\n if (!matchingExport) {\n throw new Error('No export found extending Question class');\n }\n\n this.component = matchingExport[1] as typeof Question;\n\n const ds = this.component?.dataShapes[0];\n if (ds) {\n this.dataShape = ds;\n }\n } else {\n throw new Error(`No module found at path: ${modulePath}`);\n }\n } catch (e) {\n console.log('[difTester] Error loading component', e);\n }\n },\n});\n</script>\n","<template>\n <div>\n <data-input-form\n v-if=\"component && dataShape\"\n :data-shape=\"dataShape\"\n :course-cfg=\"{\n courseID: 'testCourse',\n name: 'testCourseName',\n description: 'All of these courses will be the same!',\n admins: ['admin'],\n creator: 'admin',\n deleted: false,\n moderators: [],\n public: true,\n disambiguator: 'testCourseName',\n questionTypes: [],\n dataShapes: [],\n }\"\n :preview-component=\"component\"\n />\n <div v-else>\n No component loaded :/\n <!--\n\n todo: provide list of Question type components, with router links\n to their DataInputFormTester loaders.\n\n --></div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { DataInputForm } from '@vue-skuilder/edit-ui';\nimport { DataShape } from '../../src/base-course/Interfaces/DataShape';\nimport { useRoute } from 'vue-router';\nimport { Question } from '@vue-skuilder/common-ui';\n\ntype CourseShapes = {\n courseID: string;\n dataShapes: DataShape[];\n};\n\nconst questionModules = import.meta.glob('../**/questions/**/index.ts', {\n // Adding eager: false ensures lazy loading\n eager: false,\n});\n\ntype ModuleExports = {\n [key: string]: unknown;\n};\n\nexport default defineComponent({\n name: 'DataInputFormTester',\n\n components: {\n DataInputForm,\n },\n\n setup() {\n return {\n route: useRoute(),\n };\n },\n\n data() {\n return {\n dataShape: null as DataShape | null,\n cds: null as CourseShapes[] | null,\n component: null as typeof Question | null,\n };\n },\n\n async created() {\n try {\n const q = this.route.params.pathMatch;\n const modulePath = `../${q}/index.ts`;\n\n console.log('Looking for module:', modulePath);\n console.log('Available paths:', Object.keys(questionModules));\n\n if (modulePath in questionModules) {\n const module = (await questionModules[modulePath]()) as ModuleExports;\n\n // Find the Question implementation\n const matchingExport = Object.entries(module).find(([name, exportValue]) => {\n const isClass = typeof exportValue === 'function';\n const extendsQuestion = isClass && exportValue.prototype instanceof Question;\n\n console.log(`Checking export \"${name}\":`, {\n isClass,\n extendsQuestion,\n type: typeof exportValue,\n });\n\n return extendsQuestion;\n });\n\n if (!matchingExport) {\n throw new Error('No export found extending Question class');\n }\n\n this.component = matchingExport[1] as typeof Question;\n\n const ds = this.component?.dataShapes[0];\n if (ds) {\n this.dataShape = ds;\n }\n } else {\n throw new Error(`No module found at path: ${modulePath}`);\n }\n } catch (e) {\n console.log('[difTester] Error loading component', e);\n }\n },\n});\n</script>\n"],"mappings":"8XC2CA,IAAM,EAAkB,OAAA,OAAA,EAAA,CAGtB,CAMF,EAAe,EAAgB,CAC7B,KAAM,sBAEN,WAAY,CACV,cAAA,EACD,CAED,OAAQ,CACN,MAAO,CACL,MAAO,GAAU,CAClB,EAGH,MAAO,CACL,MAAO,CACL,UAAW,KACX,IAAK,KACL,UAAW,KACZ,EAGH,MAAM,SAAU,CACd,GAAI,CAEF,IAAM,EAAa,MADT,KAAK,MAAM,OAAO,UACD,WAK3B,GAHA,QAAQ,IAAI,sBAAuB,EAAW,CAC9C,QAAQ,IAAI,mBAAoB,OAAO,KAAK,EAAgB,CAAC,CAEzD,KAAc,EAAiB,CACjC,IAAM,EAAU,MAAM,EAAgB,IAAa,CAG7C,EAAiB,OAAO,QAAQ,EAAO,CAAC,MAAM,CAAC,EAAM,KAAiB,CAC1E,IAAM,EAAU,OAAO,GAAgB,WACjC,EAAkB,GAAW,EAAY,qBAAqB,EAQpE,OANA,QAAQ,IAAI,oBAAoB,EAAK,IAAK,CACxC,UACA,kBACA,KAAM,OAAO,EACd,CAAC,CAEK,GACP,CAEF,GAAI,CAAC,EACH,MAAU,MAAM,2CAA2C,CAG7D,KAAK,UAAY,EAAe,GAEhC,IAAM,EAAK,KAAK,WAAW,WAAW,GAClC,IACF,KAAK,UAAY,QAGnB,MAAU,MAAM,4BAA4B,IAAa,OAEpD,EAAG,CACV,QAAQ,IAAI,sCAAuC,EAAE,GAG1D,CAAC,IAnHF,IAAA,EAAA,yEACE,EA2BM,MAAA,KAAA,CAzBI,EAAA,WAAa,EAAA,WAAA,GAAA,CADrB,EAiBE,EAAA,CAnBN,IAAA,EAIO,aAAY,EAAA,UACZ,aAAY,oOAYZ,CACA,oBAAmB,EAAA,4DAEtB,EAOS,MA3Bb,EAoBgB,2BAEV,EAAA,CAAA"}
@@ -1,2 +0,0 @@
1
- import"./chunk-D6hFPZc3.js";import{$ as e,C as t,H as n,K as r,S as i,T as a,_ as o,v as s,y as c}from"./vue.runtime.esm-bundler-C3q8JS9f.js";import{B as l}from"./common-ui.es-BrXWBn7p.js";import{m as u}from"./dist-CrcJCHFk.js";import"./MarkdownRenderer-DoVbFpA6-BIbDxYC4.js";import{k as d}from"./dist-CzLl7g6t.js";import{t as f}from"./index-DUZItsH-.js";import{g as p}from"./dist-D5-LrzD6.js";var m=a({name:`ELOModerator`,components:{CardLoader:l},props:{courseId:{type:String,required:!0}},data(){return{courseDB:null,updatePending:!0,courseConfig:null,cards:[],id1:null,id2:null,elo1:null,elo2:null,viewLookup:p.getView}},async created(){this.courseDB=d().getCourseDB(this.courseId),this.courseConfig=await this.courseDB.getCourseConfig(),await this.getNewCards()},methods:{vote(e){if(!this.elo1||!this.elo2)return;let t=u(this.elo1,this.elo2,e===`a`?1:0,{globalOnly:!0});this.courseDB.updateCardElo(this.cards[0].cardId,t.userElo),this.courseDB.updateCardElo(this.cards[1].cardId,t.cardElo),this.getNewCards()},async getNewCards(){this.courseDB&&(this.updatePending=!0,this.cards=await this.courseDB.getInexperiencedCards(),this.id1=null,this.id2=null,this.id1={courseID:this.courseId,cardID:this.cards[0].cardId},this.id2={courseID:this.courseId,cardID:this.cards[1].cardId},this.elo1=this.cards[0].elo,this.elo2=this.cards[1].elo,this.updatePending=!1)}}});function _sfc_render(a,l,u,d,f,p){let m=r(`v-col`),h=r(`v-row`),g=r(`v-icon`),_=r(`v-btn`),v=r(`card-loader`),y=r(`v-container`);return a.updatePending?c(``,!0):(n(),s(y,{key:0},{default:e(()=>[t(h,null,{default:e(()=>[t(m,{cols:`12`},{default:e(()=>l[2]||(l[2]=[o(`h1`,null,[i(`Which seems `),o(`em`,null,`harder`),i(`?`)],-1)])),_:1})]),_:1}),t(h,null,{default:e(()=>[t(m,null,{default:e(()=>[t(_,{color:`success`,class:`ma-5`,onClick:l[0]||(l[0]=e=>a.vote(`a`))},{default:e(()=>[t(g,null,{default:e(()=>l[3]||(l[3]=[i(`mdi-check`)])),_:1})]),_:1}),t(v,{class:`ma-2`,qualified_id:a.id1,"view-lookup":a.viewLookup},null,8,[`qualified_id`,`view-lookup`])]),_:1})]),_:1}),t(h,null,{default:e(()=>[t(m,null,{default:e(()=>[t(_,{color:`success`,class:`ma-5`,onClick:l[1]||(l[1]=e=>a.vote(`b`))},{default:e(()=>[t(g,null,{default:e(()=>l[4]||(l[4]=[i(`mdi-check`)])),_:1})]),_:1}),t(v,{class:`ma-2`,qualified_id:a.id2,"view-lookup":a.viewLookup},null,8,[`qualified_id`,`view-lookup`])]),_:1})]),_:1})]),_:1}))}var h=f(m,[[`render`,_sfc_render],[`__scopeId`,`data-v-df68b8b6`]]);export{h as default};
2
- //# sourceMappingURL=EloModeration-B6LM11G_.js.map
@@ -1 +0,0 @@
1
- import"./vue.runtime.esm-bundler-C3q8JS9f.js";import"./dist-CrcJCHFk.js";import{w as e}from"./MarkdownRenderer-DoVbFpA6-BIbDxYC4.js";export{e as n};