@vue-skuilder/platform-ui 0.2.27 → 0.2.28

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 (118) hide show
  1. package/dist/assets/{About-BwZepkSu.js → About-Cr-gVLN3.js} +2 -2
  2. package/dist/assets/{About-BwZepkSu.js.map → About-Cr-gVLN3.js.map} +1 -1
  3. package/dist/assets/AdminDashboard-Tu5cntiN.js +2 -0
  4. package/dist/assets/AdminDashboard-Tu5cntiN.js.map +1 -0
  5. package/dist/assets/AdminDashboard-fWfBatiA.css +1 -0
  6. package/dist/assets/AdminLearner-DKV-rmzE.js +2 -0
  7. package/dist/assets/AdminLearner-DKV-rmzE.js.map +1 -0
  8. package/dist/assets/{ClassroomCtrlPanel-BXa2InOS.js → ClassroomCtrlPanel-BlIKf9Ec.js} +2 -2
  9. package/dist/assets/{ClassroomCtrlPanel-BXa2InOS.js.map → ClassroomCtrlPanel-BlIKf9Ec.js.map} +1 -1
  10. package/dist/assets/{Classrooms-RBQL8it0.js → Classrooms-CUHpCVyZ.js} +3 -3
  11. package/dist/assets/{Classrooms-RBQL8it0.js.map → Classrooms-CUHpCVyZ.js.map} +1 -1
  12. package/dist/assets/CourseRouter-CmWQVX3p.js +7 -0
  13. package/dist/assets/{CourseRouter-CRYYJcwq.js.map → CourseRouter-CmWQVX3p.js.map} +1 -1
  14. package/dist/assets/CourseWare-BTFRjgBR-DCGIN7hI.js +3 -0
  15. package/dist/assets/{CourseWare-BTFRjgBR-fJXdIFUp.js.map → CourseWare-BTFRjgBR-DCGIN7hI.js.map} +1 -1
  16. package/dist/assets/{Courses-BxuNznL1.js → Courses-D4v2o2EL.js} +3 -3
  17. package/dist/assets/{Courses-BxuNznL1.js.map → Courses-D4v2o2EL.js.map} +1 -1
  18. package/dist/assets/{EloModeration-D3WYWr7A.js → EloModeration-BVRrWLlD.js} +2 -2
  19. package/dist/assets/{EloModeration-D3WYWr7A.js.map → EloModeration-BVRrWLlD.js.map} +1 -1
  20. package/dist/assets/{JoinCode-D4Svx2AZ.js → JoinCode-tyMSgQmu.js} +2 -2
  21. package/dist/assets/{JoinCode-D4Svx2AZ.js.map → JoinCode-tyMSgQmu.js.map} +1 -1
  22. package/dist/assets/{NewCourseDialog-eMM_zeNc.js → NewCourseDialog-CskVoqOS.js} +2 -2
  23. package/dist/assets/{NewCourseDialog-eMM_zeNc.js.map → NewCourseDialog-CskVoqOS.js.map} +1 -1
  24. package/dist/assets/{ReleaseNotes-B7DliPZd.js → ReleaseNotes-DeNVWB2D.js} +2 -2
  25. package/dist/assets/{ReleaseNotes-B7DliPZd.js.map → ReleaseNotes-DeNVWB2D.js.map} +1 -1
  26. package/dist/assets/{RequestPasswordReset-CX9buoN1.js → RequestPasswordReset-8ekUShJq.js} +2 -2
  27. package/dist/assets/{RequestPasswordReset-CX9buoN1.js.map → RequestPasswordReset-8ekUShJq.js.map} +1 -1
  28. package/dist/assets/{ResetPassword-54t3uwpt.js → ResetPassword-CZVPnMM4.js} +2 -2
  29. package/dist/assets/{ResetPassword-54t3uwpt.js.map → ResetPassword-CZVPnMM4.js.map} +1 -1
  30. package/dist/assets/Study-BdxV-Ilv.js +2 -0
  31. package/dist/assets/{Study-1bB9HH5I.js.map → Study-BdxV-Ilv.js.map} +1 -1
  32. package/dist/assets/{TagInformation-DfisiYQj.js → TagInformation-DYyYbYmu.js} +2 -2
  33. package/dist/assets/{TagInformation-DfisiYQj.js.map → TagInformation-DYyYbYmu.js.map} +1 -1
  34. package/dist/assets/{User-TVn_VW8y.js → User-dB5PO1RG.js} +3 -3
  35. package/dist/assets/{User-TVn_VW8y.js.map → User-dB5PO1RG.js.map} +1 -1
  36. package/dist/assets/{UserStats-BOS3nRFB.js → UserStats-uVV3CIXd.js} +2 -2
  37. package/dist/assets/{UserStats-BOS3nRFB.js.map → UserStats-uVV3CIXd.js.map} +1 -1
  38. package/dist/assets/{VerifyEmail-DnC6Lcu-.js → VerifyEmail-Dlm91Y-S.js} +2 -2
  39. package/dist/assets/{VerifyEmail-DnC6Lcu-.js.map → VerifyEmail-Dlm91Y-S.js.map} +1 -1
  40. package/dist/assets/admin-BNR4JZ2X.js +4 -0
  41. package/dist/assets/admin-BNR4JZ2X.js.map +1 -0
  42. package/dist/assets/admin-D-L0jR6i.css +1 -0
  43. package/dist/assets/{chess-E2uOAyQS-Bq2eA-0f.js → chess-E2uOAyQS-CyL0N9F7.js} +3 -3
  44. package/dist/assets/{chess-E2uOAyQS-Bq2eA-0f.js.map → chess-E2uOAyQS-CyL0N9F7.js.map} +1 -1
  45. package/dist/assets/chess-Lfm7Fsvs-CGl6HDqe.js +1 -0
  46. package/dist/assets/common-ui.es-DFOzc2ze.js +38 -0
  47. package/dist/assets/common-ui.es-DFOzc2ze.js.map +1 -0
  48. package/dist/assets/common-ui.es-e3Go1Szv.js +1 -0
  49. package/dist/assets/dist-BtPAFjJU.js +1 -0
  50. package/dist/assets/{dist-B1rlsz-O.js → dist-DDw00TzX.js} +6 -6
  51. package/dist/assets/dist-DDw00TzX.js.map +1 -0
  52. package/dist/assets/{dist-Bs_ymDcS.js → dist-DQUROFxW.js} +4 -4
  53. package/dist/assets/{dist-Bs_ymDcS.js.map → dist-DQUROFxW.js.map} +1 -1
  54. package/dist/assets/dist-DXykAjYp.js +1 -0
  55. package/dist/assets/edit-ui.es-BUTgY-3X.js +1 -0
  56. package/dist/assets/edit-ui.es-w6kgjkws.js +36 -0
  57. package/dist/assets/{edit-ui.es-BYkRhLNm.js.map → edit-ui.es-w6kgjkws.js.map} +1 -1
  58. package/dist/assets/{french-Dk7YG8Td-idvPJOyv.js → french-Dk7YG8Td-Cg49rQNc.js} +2 -2
  59. package/dist/assets/{french-Dk7YG8Td-idvPJOyv.js.map → french-Dk7YG8Td-Cg49rQNc.js.map} +1 -1
  60. package/dist/assets/french-evUMlbbq-eazzEipj.js +1 -0
  61. package/dist/assets/index-oJ86i_Jb.js +4 -0
  62. package/dist/assets/index-oJ86i_Jb.js.map +1 -0
  63. package/dist/assets/{math-B4HbgYf6-DlDwrhG3.js → math-B4HbgYf6-F4RSa_qw.js} +6 -6
  64. package/dist/assets/{math-B4HbgYf6-DlDwrhG3.js.map → math-B4HbgYf6-F4RSa_qw.js.map} +1 -1
  65. package/dist/assets/math-DYni7rRl-B9M881Tg.js +1 -0
  66. package/dist/assets/piano-BN5Btq91-BRTyPgQM.js +1 -0
  67. package/dist/assets/piano-DF1g6yaX-CBHsd-Bx.js +2 -0
  68. package/dist/assets/{piano-DF1g6yaX-Bz3YzlGc.js.map → piano-DF1g6yaX-CBHsd-Bx.js.map} +1 -1
  69. package/dist/assets/{pitch-CgGJFkZ1-jTBbu2PH.js → pitch-CgGJFkZ1-mnBGefMf.js} +2 -2
  70. package/dist/assets/{pitch-CgGJFkZ1-jTBbu2PH.js.map → pitch-CgGJFkZ1-mnBGefMf.js.map} +1 -1
  71. package/dist/assets/pitch-Dn0iNqiS-B8AXyb7U.js +1 -0
  72. package/dist/assets/{server-CngqYJXJ.js → server-DRRLfaGM.js} +2 -2
  73. package/dist/assets/{server-CngqYJXJ.js.map → server-DRRLfaGM.js.map} +1 -1
  74. package/dist/assets/{sightsing-BFQ7HRig-TY63jvHz.js → sightsing-BFQ7HRig-BJLyffo9.js} +3 -3
  75. package/dist/assets/{sightsing-BFQ7HRig-TY63jvHz.js.map → sightsing-BFQ7HRig-BJLyffo9.js.map} +1 -1
  76. package/dist/assets/sightsing-CJX3k0Fd-CUYD16hW.js +1 -0
  77. package/dist/assets/{typing-BevtfWlp-WuHuczGo.js → typing-BevtfWlp-BhybW0tx.js} +2 -2
  78. package/dist/assets/{typing-BevtfWlp-WuHuczGo.js.map → typing-BevtfWlp-BhybW0tx.js.map} +1 -1
  79. package/dist/assets/typing-k-ojjO7G-DxqrbEGQ.js +1 -0
  80. package/dist/assets/vue-router-CDq4a4rc.js +2 -0
  81. package/dist/assets/vue-router-CDq4a4rc.js.map +1 -0
  82. package/dist/assets/{word-work-BOnRlZgd-BVbBvXQS.js → word-work-BOnRlZgd-BpNUJRLI.js} +2 -2
  83. package/dist/assets/{word-work-BOnRlZgd-BVbBvXQS.js.map → word-work-BOnRlZgd-BpNUJRLI.js.map} +1 -1
  84. package/dist/assets/word-work-Dd6tIKrt-B18ud_iH.js +1 -0
  85. package/dist/assets/{workbox-window.prod.es5-DBwpKi3B.js → workbox-window.prod.es5-r2bRTooK.js} +1 -1
  86. package/dist/assets/{workbox-window.prod.es5-DBwpKi3B.js.map → workbox-window.prod.es5-r2bRTooK.js.map} +1 -1
  87. package/dist/index.html +4 -3
  88. package/dist/sw.js +1 -1
  89. package/dist/sw.js.map +1 -1
  90. package/package.json +7 -7
  91. package/src/router.ts +8 -0
  92. package/src/views/AdminDashboard.vue +79 -19
  93. package/src/views/AdminLearner.vue +108 -0
  94. package/dist/assets/AdminDashboard-CIcq497y.js +0 -2
  95. package/dist/assets/AdminDashboard-CIcq497y.js.map +0 -1
  96. package/dist/assets/AdminDashboard-CWnC_vEI.css +0 -1
  97. package/dist/assets/CourseRouter-CRYYJcwq.js +0 -7
  98. package/dist/assets/CourseWare-BTFRjgBR-fJXdIFUp.js +0 -3
  99. package/dist/assets/Study-1bB9HH5I.js +0 -2
  100. package/dist/assets/chess-Lfm7Fsvs-DS5rTsA2.js +0 -1
  101. package/dist/assets/common-ui.es-CN0Lc64m.js +0 -38
  102. package/dist/assets/common-ui.es-CN0Lc64m.js.map +0 -1
  103. package/dist/assets/common-ui.es-fu0mNnpY.js +0 -1
  104. package/dist/assets/dist-B1rlsz-O.js.map +0 -1
  105. package/dist/assets/dist-DZiBPA0D.js +0 -1
  106. package/dist/assets/dist-dMwpP4kc.js +0 -1
  107. package/dist/assets/edit-ui.es-BYkRhLNm.js +0 -36
  108. package/dist/assets/edit-ui.es-DLN3acd3.js +0 -1
  109. package/dist/assets/french-evUMlbbq-DxNOW4TY.js +0 -1
  110. package/dist/assets/index-CF5bC3bl.js +0 -4
  111. package/dist/assets/index-CF5bC3bl.js.map +0 -1
  112. package/dist/assets/math-DYni7rRl-BuP4-lli.js +0 -1
  113. package/dist/assets/piano-BN5Btq91-BtifFdAn.js +0 -1
  114. package/dist/assets/piano-DF1g6yaX-Bz3YzlGc.js +0 -2
  115. package/dist/assets/pitch-Dn0iNqiS-CDhseaCp.js +0 -1
  116. package/dist/assets/sightsing-CJX3k0Fd-RHUC0Qrm.js +0 -1
  117. package/dist/assets/typing-k-ojjO7G-3h2XW_H1.js +0 -1
  118. package/dist/assets/word-work-Dd6tIKrt-Jn9YNKpa.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"workbox-window.prod.es5-DBwpKi3B.js","names":[],"sources":["../../../../node_modules/workbox-window/build/workbox-window.prod.es5.mjs"],"sourcesContent":["try{self[\"workbox:window:7.2.0\"]&&_()}catch(n){}function n(n,t){return new Promise((function(r){var e=new MessageChannel;e.port1.onmessage=function(n){r(n.data)},n.postMessage(t,[e.port2])}))}function t(n){var t=function(n,t){if(\"object\"!=typeof n||!n)return n;var r=n[Symbol.toPrimitive];if(void 0!==r){var e=r.call(n,t||\"default\");if(\"object\"!=typeof e)return e;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(n)}(n,\"string\");return\"symbol\"==typeof t?t:t+\"\"}function r(n,r){for(var e=0;e<r.length;e++){var i=r[e];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(n,t(i.key),i)}}function e(n,t){return e=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,t){return n.__proto__=t,n},e(n,t)}function i(n,t){(null==t||t>n.length)&&(t=n.length);for(var r=0,e=new Array(t);r<t;r++)e[r]=n[r];return e}function o(n,t){var r=\"undefined\"!=typeof Symbol&&n[Symbol.iterator]||n[\"@@iterator\"];if(r)return(r=r.call(n)).next.bind(r);if(Array.isArray(n)||(r=function(n,t){if(n){if(\"string\"==typeof n)return i(n,t);var r=Object.prototype.toString.call(n).slice(8,-1);return\"Object\"===r&&n.constructor&&(r=n.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(n):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(n,t):void 0}}(n))||t&&n&&\"number\"==typeof n.length){r&&(n=r);var e=0;return function(){return e>=n.length?{done:!0}:{done:!1,value:n[e++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}try{self[\"workbox:core:7.2.0\"]&&_()}catch(n){}var u=function(){var n=this;this.promise=new Promise((function(t,r){n.resolve=t,n.reject=r}))};function a(n,t){var r=location.href;return new URL(n,r).href===new URL(t,r).href}var c=function(n,t){this.type=n,Object.assign(this,t)};function f(n,t,r){return r?t?t(n):n:(n&&n.then||(n=Promise.resolve(n)),t?n.then(t):n)}function s(){}var v={type:\"SKIP_WAITING\"};function h(n,t){if(!t)return n&&n.then?n.then(s):Promise.resolve()}var l=function(t){function i(n,r){var e,i;return void 0===r&&(r={}),(e=t.call(this)||this).nn={},e.tn=0,e.rn=new u,e.en=new u,e.on=new u,e.un=0,e.an=new Set,e.cn=function(){var n=e.fn,t=n.installing;e.tn>0||!a(t.scriptURL,e.sn.toString())||performance.now()>e.un+6e4?(e.vn=t,n.removeEventListener(\"updatefound\",e.cn)):(e.hn=t,e.an.add(t),e.rn.resolve(t)),++e.tn,t.addEventListener(\"statechange\",e.ln)},e.ln=function(n){var t=e.fn,r=n.target,i=r.state,o=r===e.vn,u={sw:r,isExternal:o,originalEvent:n};!o&&e.mn&&(u.isUpdate=!0),e.dispatchEvent(new c(i,u)),\"installed\"===i?e.wn=self.setTimeout((function(){\"installed\"===i&&t.waiting===r&&e.dispatchEvent(new c(\"waiting\",u))}),200):\"activating\"===i&&(clearTimeout(e.wn),o||e.en.resolve(r))},e.yn=function(n){var t=e.hn,r=t!==navigator.serviceWorker.controller;e.dispatchEvent(new c(\"controlling\",{isExternal:r,originalEvent:n,sw:t,isUpdate:e.mn})),r||e.on.resolve(t)},e.gn=(i=function(n){var t=n.data,r=n.ports,i=n.source;return f(e.getSW(),(function(){e.an.has(i)&&e.dispatchEvent(new c(\"message\",{data:t,originalEvent:n,ports:r,sw:i}))}))},function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];try{return Promise.resolve(i.apply(this,n))}catch(n){return Promise.reject(n)}}),e.sn=n,e.nn=r,navigator.serviceWorker.addEventListener(\"message\",e.gn),e}var o,s;s=t,(o=i).prototype=Object.create(s.prototype),o.prototype.constructor=o,e(o,s);var l,m,w,y=i.prototype;return y.register=function(n){var t=(void 0===n?{}:n).immediate,r=void 0!==t&&t;try{var e=this;return f(function(n,t){var r=n();if(r&&r.then)return r.then(t);return t(r)}((function(){if(!r&&\"complete\"!==document.readyState)return h(new Promise((function(n){return window.addEventListener(\"load\",n)})))}),(function(){return e.mn=Boolean(navigator.serviceWorker.controller),e.dn=e.pn(),f(e.bn(),(function(n){e.fn=n,e.dn&&(e.hn=e.dn,e.en.resolve(e.dn),e.on.resolve(e.dn),e.dn.addEventListener(\"statechange\",e.ln,{once:!0}));var t=e.fn.waiting;return t&&a(t.scriptURL,e.sn.toString())&&(e.hn=t,Promise.resolve().then((function(){e.dispatchEvent(new c(\"waiting\",{sw:t,wasWaitingBeforeRegister:!0}))})).then((function(){}))),e.hn&&(e.rn.resolve(e.hn),e.an.add(e.hn)),e.fn.addEventListener(\"updatefound\",e.cn),navigator.serviceWorker.addEventListener(\"controllerchange\",e.yn),e.fn}))})))}catch(n){return Promise.reject(n)}},y.update=function(){try{return this.fn?f(h(this.fn.update())):f()}catch(n){return Promise.reject(n)}},y.getSW=function(){return void 0!==this.hn?Promise.resolve(this.hn):this.rn.promise},y.messageSW=function(t){try{return f(this.getSW(),(function(r){return n(r,t)}))}catch(n){return Promise.reject(n)}},y.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&n(this.fn.waiting,v)},y.pn=function(){var n=navigator.serviceWorker.controller;return n&&a(n.scriptURL,this.sn.toString())?n:void 0},y.bn=function(){try{var n=this;return f(function(n,t){try{var r=n()}catch(n){return t(n)}if(r&&r.then)return r.then(void 0,t);return r}((function(){return f(navigator.serviceWorker.register(n.sn,n.nn),(function(t){return n.un=performance.now(),t}))}),(function(n){throw n})))}catch(n){return Promise.reject(n)}},l=i,(m=[{key:\"active\",get:function(){return this.en.promise}},{key:\"controlling\",get:function(){return this.on.promise}}])&&r(l.prototype,m),w&&r(l,w),Object.defineProperty(l,\"prototype\",{writable:!1}),l}(function(){function n(){this.Pn=new Map}var t=n.prototype;return t.addEventListener=function(n,t){this.jn(n).add(t)},t.removeEventListener=function(n,t){this.jn(n).delete(t)},t.dispatchEvent=function(n){n.target=this;for(var t,r=o(this.jn(n.type));!(t=r()).done;){(0,t.value)(n)}},t.jn=function(n){return this.Pn.has(n)||this.Pn.set(n,new Set),this.Pn.get(n)},n}());export{l as Workbox,c as WorkboxEvent,n as messageSW};\n//# sourceMappingURL=workbox-window.prod.es5.mjs.map\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"workbox-window.prod.es5-r2bRTooK.js","names":[],"sources":["../../../../node_modules/workbox-window/build/workbox-window.prod.es5.mjs"],"sourcesContent":["try{self[\"workbox:window:7.2.0\"]&&_()}catch(n){}function n(n,t){return new Promise((function(r){var e=new MessageChannel;e.port1.onmessage=function(n){r(n.data)},n.postMessage(t,[e.port2])}))}function t(n){var t=function(n,t){if(\"object\"!=typeof n||!n)return n;var r=n[Symbol.toPrimitive];if(void 0!==r){var e=r.call(n,t||\"default\");if(\"object\"!=typeof e)return e;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(n)}(n,\"string\");return\"symbol\"==typeof t?t:t+\"\"}function r(n,r){for(var e=0;e<r.length;e++){var i=r[e];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(n,t(i.key),i)}}function e(n,t){return e=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,t){return n.__proto__=t,n},e(n,t)}function i(n,t){(null==t||t>n.length)&&(t=n.length);for(var r=0,e=new Array(t);r<t;r++)e[r]=n[r];return e}function o(n,t){var r=\"undefined\"!=typeof Symbol&&n[Symbol.iterator]||n[\"@@iterator\"];if(r)return(r=r.call(n)).next.bind(r);if(Array.isArray(n)||(r=function(n,t){if(n){if(\"string\"==typeof n)return i(n,t);var r=Object.prototype.toString.call(n).slice(8,-1);return\"Object\"===r&&n.constructor&&(r=n.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(n):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(n,t):void 0}}(n))||t&&n&&\"number\"==typeof n.length){r&&(n=r);var e=0;return function(){return e>=n.length?{done:!0}:{done:!1,value:n[e++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}try{self[\"workbox:core:7.2.0\"]&&_()}catch(n){}var u=function(){var n=this;this.promise=new Promise((function(t,r){n.resolve=t,n.reject=r}))};function a(n,t){var r=location.href;return new URL(n,r).href===new URL(t,r).href}var c=function(n,t){this.type=n,Object.assign(this,t)};function f(n,t,r){return r?t?t(n):n:(n&&n.then||(n=Promise.resolve(n)),t?n.then(t):n)}function s(){}var v={type:\"SKIP_WAITING\"};function h(n,t){if(!t)return n&&n.then?n.then(s):Promise.resolve()}var l=function(t){function i(n,r){var e,i;return void 0===r&&(r={}),(e=t.call(this)||this).nn={},e.tn=0,e.rn=new u,e.en=new u,e.on=new u,e.un=0,e.an=new Set,e.cn=function(){var n=e.fn,t=n.installing;e.tn>0||!a(t.scriptURL,e.sn.toString())||performance.now()>e.un+6e4?(e.vn=t,n.removeEventListener(\"updatefound\",e.cn)):(e.hn=t,e.an.add(t),e.rn.resolve(t)),++e.tn,t.addEventListener(\"statechange\",e.ln)},e.ln=function(n){var t=e.fn,r=n.target,i=r.state,o=r===e.vn,u={sw:r,isExternal:o,originalEvent:n};!o&&e.mn&&(u.isUpdate=!0),e.dispatchEvent(new c(i,u)),\"installed\"===i?e.wn=self.setTimeout((function(){\"installed\"===i&&t.waiting===r&&e.dispatchEvent(new c(\"waiting\",u))}),200):\"activating\"===i&&(clearTimeout(e.wn),o||e.en.resolve(r))},e.yn=function(n){var t=e.hn,r=t!==navigator.serviceWorker.controller;e.dispatchEvent(new c(\"controlling\",{isExternal:r,originalEvent:n,sw:t,isUpdate:e.mn})),r||e.on.resolve(t)},e.gn=(i=function(n){var t=n.data,r=n.ports,i=n.source;return f(e.getSW(),(function(){e.an.has(i)&&e.dispatchEvent(new c(\"message\",{data:t,originalEvent:n,ports:r,sw:i}))}))},function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];try{return Promise.resolve(i.apply(this,n))}catch(n){return Promise.reject(n)}}),e.sn=n,e.nn=r,navigator.serviceWorker.addEventListener(\"message\",e.gn),e}var o,s;s=t,(o=i).prototype=Object.create(s.prototype),o.prototype.constructor=o,e(o,s);var l,m,w,y=i.prototype;return y.register=function(n){var t=(void 0===n?{}:n).immediate,r=void 0!==t&&t;try{var e=this;return f(function(n,t){var r=n();if(r&&r.then)return r.then(t);return t(r)}((function(){if(!r&&\"complete\"!==document.readyState)return h(new Promise((function(n){return window.addEventListener(\"load\",n)})))}),(function(){return e.mn=Boolean(navigator.serviceWorker.controller),e.dn=e.pn(),f(e.bn(),(function(n){e.fn=n,e.dn&&(e.hn=e.dn,e.en.resolve(e.dn),e.on.resolve(e.dn),e.dn.addEventListener(\"statechange\",e.ln,{once:!0}));var t=e.fn.waiting;return t&&a(t.scriptURL,e.sn.toString())&&(e.hn=t,Promise.resolve().then((function(){e.dispatchEvent(new c(\"waiting\",{sw:t,wasWaitingBeforeRegister:!0}))})).then((function(){}))),e.hn&&(e.rn.resolve(e.hn),e.an.add(e.hn)),e.fn.addEventListener(\"updatefound\",e.cn),navigator.serviceWorker.addEventListener(\"controllerchange\",e.yn),e.fn}))})))}catch(n){return Promise.reject(n)}},y.update=function(){try{return this.fn?f(h(this.fn.update())):f()}catch(n){return Promise.reject(n)}},y.getSW=function(){return void 0!==this.hn?Promise.resolve(this.hn):this.rn.promise},y.messageSW=function(t){try{return f(this.getSW(),(function(r){return n(r,t)}))}catch(n){return Promise.reject(n)}},y.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&n(this.fn.waiting,v)},y.pn=function(){var n=navigator.serviceWorker.controller;return n&&a(n.scriptURL,this.sn.toString())?n:void 0},y.bn=function(){try{var n=this;return f(function(n,t){try{var r=n()}catch(n){return t(n)}if(r&&r.then)return r.then(void 0,t);return r}((function(){return f(navigator.serviceWorker.register(n.sn,n.nn),(function(t){return n.un=performance.now(),t}))}),(function(n){throw n})))}catch(n){return Promise.reject(n)}},l=i,(m=[{key:\"active\",get:function(){return this.en.promise}},{key:\"controlling\",get:function(){return this.on.promise}}])&&r(l.prototype,m),w&&r(l,w),Object.defineProperty(l,\"prototype\",{writable:!1}),l}(function(){function n(){this.Pn=new Map}var t=n.prototype;return t.addEventListener=function(n,t){this.jn(n).add(t)},t.removeEventListener=function(n,t){this.jn(n).delete(t)},t.dispatchEvent=function(n){n.target=this;for(var t,r=o(this.jn(n.type));!(t=r()).done;){(0,t.value)(n)}},t.jn=function(n){return this.Pn.has(n)||this.Pn.set(n,new Set),this.Pn.get(n)},n}());export{l as Workbox,c as WorkboxEvent,n as messageSW};\n//# sourceMappingURL=workbox-window.prod.es5.mjs.map\n"],"x_google_ignoreList":[0],"mappings":"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"}
package/dist/index.html CHANGED
@@ -8,13 +8,14 @@
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-CF5bC3bl.js"></script>
11
+ <script type="module" crossorigin src="/assets/index-oJ86i_Jb.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="/assets/chunk-D6hFPZc3.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/dist-l4NOxAbA.js">
14
- <link rel="modulepreload" crossorigin href="/assets/dist-B1rlsz-O.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/dist-DDw00TzX.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/vue.runtime.esm-bundler-C3q8JS9f.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/MarkdownRenderer-kStoDRNE-HDBFbDeD.js">
17
- <link rel="modulepreload" crossorigin href="/assets/common-ui.es-CN0Lc64m.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/vue-router-CDq4a4rc.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/common-ui.es-DFOzc2ze.js">
18
19
  <link rel="stylesheet" crossorigin href="/assets/common-ui-BY2Ut5jf.css">
19
20
  <link rel="stylesheet" crossorigin href="/assets/index-NFrxkZjT.css">
20
21
  <link rel="manifest" href="/manifest.webmanifest"></head>
package/dist/sw.js CHANGED
@@ -1,2 +1,2 @@
1
- if(!self.define){let s,l={};const e=(e,i)=>(e=new URL(e+".js",i).href,l[e]||new Promise((l=>{if("document"in self){const s=document.createElement("script");s.src=e,s.onload=l,document.head.appendChild(s)}else s=e,importScripts(e),l()})).then((()=>{let s=l[e];if(!s)throw new Error(`Module ${e} didn’t register its module`);return s})));self.define=(i,r)=>{const n=s||("document"in self?document.currentScript.src:"")||location.href;if(l[n])return;let o={};const u=s=>e(s,n),t={module:{uri:n},exports:o,require:u};l[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-BwZepkSu.js",revision:null},{url:"assets/AdminDashboard-CIcq497y.js",revision:null},{url:"assets/AdminDashboard-CWnC_vEI.css",revision:null},{url:"assets/chess-E2uOAyQS-Bq2eA-0f.js",revision:null},{url:"assets/chess-E2uOAyQS-DB7z_kWx.css",revision:null},{url:"assets/chess-Lfm7Fsvs-DS5rTsA2.js",revision:null},{url:"assets/chunk-D6hFPZc3.js",revision:null},{url:"assets/ClassroomCtrlPanel-BXa2InOS.js",revision:null},{url:"assets/Classrooms-RBQL8it0.js",revision:null},{url:"assets/common-ui-BY2Ut5jf.css",revision:null},{url:"assets/common-ui.es-CN0Lc64m.js",revision:null},{url:"assets/common-ui.es-fu0mNnpY.js",revision:null},{url:"assets/CourseRouter-CRYYJcwq.js",revision:null},{url:"assets/CourseRouter-DvfjFpWl.css",revision:null},{url:"assets/Courses-BxuNznL1.js",revision:null},{url:"assets/Courses-CsGfVDf9.css",revision:null},{url:"assets/CourseWare-BTFRjgBR-D750E7i0.css",revision:null},{url:"assets/CourseWare-BTFRjgBR-fJXdIFUp.js",revision:null},{url:"assets/dist-B1rlsz-O.js",revision:null},{url:"assets/dist-Bs_ymDcS.js",revision:null},{url:"assets/dist-dMwpP4kc.js",revision:null},{url:"assets/dist-DZiBPA0D.js",revision:null},{url:"assets/dist-l4NOxAbA.js",revision:null},{url:"assets/edit-ui.es-BYkRhLNm.js",revision:null},{url:"assets/edit-ui.es-DLN3acd3.js",revision:null},{url:"assets/EloModeration-D3WYWr7A.js",revision:null},{url:"assets/EloModeration-DgUqPPoO.css",revision:null},{url:"assets/french-Dk7YG8Td-idvPJOyv.js",revision:null},{url:"assets/french-evUMlbbq-DxNOW4TY.js",revision:null},{url:"assets/index-CF5bC3bl.js",revision:null},{url:"assets/index-NFrxkZjT.css",revision:null},{url:"assets/JoinCode-D4Svx2AZ.js",revision:null},{url:"assets/JoinCode-DPSfXf5z.css",revision:null},{url:"assets/MarkdownRenderer-kStoDRNE-HDBFbDeD.js",revision:null},{url:"assets/MarkdownRenderer-kStoDRNE-HqRzdAdp.js",revision:null},{url:"assets/materialdesignicons-webfont-Dp5v-WZN.woff2",revision:null},{url:"assets/math-B4HbgYf6-CZyvKZtp.css",revision:null},{url:"assets/math-B4HbgYf6-DlDwrhG3.js",revision:null},{url:"assets/math-DYni7rRl-BuP4-lli.js",revision:null},{url:"assets/NewCourseDialog-eMM_zeNc.js",revision:null},{url:"assets/piano-BN5Btq91-BtifFdAn.js",revision:null},{url:"assets/piano-DF1g6yaX-BLvDAgl1.css",revision:null},{url:"assets/piano-DF1g6yaX-Bz3YzlGc.js",revision:null},{url:"assets/pitch-CgGJFkZ1-jTBbu2PH.js",revision:null},{url:"assets/pitch-Dn0iNqiS-CDhseaCp.js",revision:null},{url:"assets/ReleaseNotes-B7DliPZd.js",revision:null},{url:"assets/RequestPasswordReset-CX9buoN1.js",revision:null},{url:"assets/RequestPasswordReset-Du5-awJG.css",revision:null},{url:"assets/ResetPassword-54t3uwpt.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-CngqYJXJ.js",revision:null},{url:"assets/sightsing-BFQ7HRig-DkUGf5Yf.css",revision:null},{url:"assets/sightsing-BFQ7HRig-TY63jvHz.js",revision:null},{url:"assets/sightsing-CJX3k0Fd-RHUC0Qrm.js",revision:null},{url:"assets/Study-1bB9HH5I.js",revision:null},{url:"assets/Study-R4LCAP7J.css",revision:null},{url:"assets/TagInformation-DfisiYQj.js",revision:null},{url:"assets/typing-BevtfWlp-B7ZMUAQJ.css",revision:null},{url:"assets/typing-BevtfWlp-WuHuczGo.js",revision:null},{url:"assets/typing-k-ojjO7G-3h2XW_H1.js",revision:null},{url:"assets/User-TVn_VW8y.js",revision:null},{url:"assets/UserStats-BOS3nRFB.js",revision:null},{url:"assets/VerifyEmail-DnC6Lcu-.js",revision:null},{url:"assets/vue.runtime.esm-bundler-C3q8JS9f.js",revision:null},{url:"assets/word-work-BOnRlZgd-BVbBvXQS.js",revision:null},{url:"assets/word-work-Dd6tIKrt-Jn9YNKpa.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:"48a805a12aa395b26c39e90340a4f01b"},{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-Cr-gVLN3.js",revision:null},{url:"assets/admin-BNR4JZ2X.js",revision:null},{url:"assets/admin-D-L0jR6i.css",revision:null},{url:"assets/AdminDashboard-fWfBatiA.css",revision:null},{url:"assets/AdminDashboard-Tu5cntiN.js",revision:null},{url:"assets/AdminLearner-DKV-rmzE.js",revision:null},{url:"assets/chess-E2uOAyQS-CyL0N9F7.js",revision:null},{url:"assets/chess-E2uOAyQS-DB7z_kWx.css",revision:null},{url:"assets/chess-Lfm7Fsvs-CGl6HDqe.js",revision:null},{url:"assets/chunk-D6hFPZc3.js",revision:null},{url:"assets/ClassroomCtrlPanel-BlIKf9Ec.js",revision:null},{url:"assets/Classrooms-CUHpCVyZ.js",revision:null},{url:"assets/common-ui-BY2Ut5jf.css",revision:null},{url:"assets/common-ui.es-DFOzc2ze.js",revision:null},{url:"assets/common-ui.es-e3Go1Szv.js",revision:null},{url:"assets/CourseRouter-CmWQVX3p.js",revision:null},{url:"assets/CourseRouter-DvfjFpWl.css",revision:null},{url:"assets/Courses-CsGfVDf9.css",revision:null},{url:"assets/Courses-D4v2o2EL.js",revision:null},{url:"assets/CourseWare-BTFRjgBR-D750E7i0.css",revision:null},{url:"assets/CourseWare-BTFRjgBR-DCGIN7hI.js",revision:null},{url:"assets/dist-BtPAFjJU.js",revision:null},{url:"assets/dist-DDw00TzX.js",revision:null},{url:"assets/dist-DQUROFxW.js",revision:null},{url:"assets/dist-DXykAjYp.js",revision:null},{url:"assets/dist-l4NOxAbA.js",revision:null},{url:"assets/edit-ui.es-BUTgY-3X.js",revision:null},{url:"assets/edit-ui.es-w6kgjkws.js",revision:null},{url:"assets/EloModeration-BVRrWLlD.js",revision:null},{url:"assets/EloModeration-DgUqPPoO.css",revision:null},{url:"assets/french-Dk7YG8Td-Cg49rQNc.js",revision:null},{url:"assets/french-evUMlbbq-eazzEipj.js",revision:null},{url:"assets/index-NFrxkZjT.css",revision:null},{url:"assets/index-oJ86i_Jb.js",revision:null},{url:"assets/JoinCode-DPSfXf5z.css",revision:null},{url:"assets/JoinCode-tyMSgQmu.js",revision:null},{url:"assets/MarkdownRenderer-kStoDRNE-HDBFbDeD.js",revision:null},{url:"assets/MarkdownRenderer-kStoDRNE-HqRzdAdp.js",revision:null},{url:"assets/materialdesignicons-webfont-Dp5v-WZN.woff2",revision:null},{url:"assets/math-B4HbgYf6-CZyvKZtp.css",revision:null},{url:"assets/math-B4HbgYf6-F4RSa_qw.js",revision:null},{url:"assets/math-DYni7rRl-B9M881Tg.js",revision:null},{url:"assets/NewCourseDialog-CskVoqOS.js",revision:null},{url:"assets/piano-BN5Btq91-BRTyPgQM.js",revision:null},{url:"assets/piano-DF1g6yaX-BLvDAgl1.css",revision:null},{url:"assets/piano-DF1g6yaX-CBHsd-Bx.js",revision:null},{url:"assets/pitch-CgGJFkZ1-mnBGefMf.js",revision:null},{url:"assets/pitch-Dn0iNqiS-B8AXyb7U.js",revision:null},{url:"assets/ReleaseNotes-DeNVWB2D.js",revision:null},{url:"assets/RequestPasswordReset-8ekUShJq.js",revision:null},{url:"assets/RequestPasswordReset-Du5-awJG.css",revision:null},{url:"assets/ResetPassword-CZVPnMM4.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-DRRLfaGM.js",revision:null},{url:"assets/sightsing-BFQ7HRig-BJLyffo9.js",revision:null},{url:"assets/sightsing-BFQ7HRig-DkUGf5Yf.css",revision:null},{url:"assets/sightsing-CJX3k0Fd-CUYD16hW.js",revision:null},{url:"assets/Study-BdxV-Ilv.js",revision:null},{url:"assets/Study-R4LCAP7J.css",revision:null},{url:"assets/TagInformation-DYyYbYmu.js",revision:null},{url:"assets/typing-BevtfWlp-B7ZMUAQJ.css",revision:null},{url:"assets/typing-BevtfWlp-BhybW0tx.js",revision:null},{url:"assets/typing-k-ojjO7G-DxqrbEGQ.js",revision:null},{url:"assets/User-dB5PO1RG.js",revision:null},{url:"assets/UserStats-uVV3CIXd.js",revision:null},{url:"assets/VerifyEmail-Dlm91Y-S.js",revision:null},{url:"assets/vue-router-CDq4a4rc.js",revision:null},{url:"assets/vue.runtime.esm-bundler-C3q8JS9f.js",revision:null},{url:"assets/word-work-BOnRlZgd-BpNUJRLI.js",revision:null},{url:"assets/word-work-Dd6tIKrt-B18ud_iH.js",revision:null},{url:"assets/workbox-window.prod.es5-r2bRTooK.js",revision:null},{url:"favicon.ico",revision:"b71387b4508120b59615e43d5e103706"},{url:"img/icons/safari-pinned-tab.svg",revision:"f22d501a35a87d9f21701cb031f6ea17"},{url:"index.html",revision:"f88c9ff49ea4c245cc6eff3a7007556f"},{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/c71d1c56ad14f5cdad0c3a5ea2dd96d0/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-BwZepkSu.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/AdminDashboard-CIcq497y.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/AdminDashboard-CWnC_vEI.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/chess-E2uOAyQS-Bq2eA-0f.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/chess-E2uOAyQS-DB7z_kWx.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/chess-Lfm7Fsvs-DS5rTsA2.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/chunk-D6hFPZc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/ClassroomCtrlPanel-BXa2InOS.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Classrooms-RBQL8it0.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/common-ui-BY2Ut5jf.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/common-ui.es-CN0Lc64m.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/common-ui.es-fu0mNnpY.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/CourseRouter-CRYYJcwq.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/CourseRouter-DvfjFpWl.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Courses-BxuNznL1.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Courses-CsGfVDf9.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/CourseWare-BTFRjgBR-D750E7i0.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/CourseWare-BTFRjgBR-fJXdIFUp.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-B1rlsz-O.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-Bs_ymDcS.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-dMwpP4kc.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-DZiBPA0D.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-l4NOxAbA.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/edit-ui.es-BYkRhLNm.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/edit-ui.es-DLN3acd3.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/EloModeration-D3WYWr7A.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/EloModeration-DgUqPPoO.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/french-Dk7YG8Td-idvPJOyv.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/french-evUMlbbq-DxNOW4TY.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-CF5bC3bl.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-NFrxkZjT.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/JoinCode-D4Svx2AZ.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/JoinCode-DPSfXf5z.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/MarkdownRenderer-kStoDRNE-HDBFbDeD.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/MarkdownRenderer-kStoDRNE-HqRzdAdp.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/materialdesignicons-webfont-Dp5v-WZN.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/math-B4HbgYf6-CZyvKZtp.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/math-B4HbgYf6-DlDwrhG3.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/math-DYni7rRl-BuP4-lli.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/NewCourseDialog-eMM_zeNc.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/piano-BN5Btq91-BtifFdAn.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/piano-DF1g6yaX-BLvDAgl1.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/piano-DF1g6yaX-Bz3YzlGc.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/pitch-CgGJFkZ1-jTBbu2PH.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/pitch-Dn0iNqiS-CDhseaCp.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/ReleaseNotes-B7DliPZd.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/RequestPasswordReset-CX9buoN1.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/RequestPasswordReset-Du5-awJG.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/ResetPassword-54t3uwpt.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-CngqYJXJ.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/sightsing-BFQ7HRig-DkUGf5Yf.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/sightsing-BFQ7HRig-TY63jvHz.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/sightsing-CJX3k0Fd-RHUC0Qrm.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Study-1bB9HH5I.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Study-R4LCAP7J.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/TagInformation-DfisiYQj.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/typing-BevtfWlp-B7ZMUAQJ.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/typing-BevtfWlp-WuHuczGo.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/typing-k-ojjO7G-3h2XW_H1.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/User-TVn_VW8y.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/UserStats-BOS3nRFB.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/VerifyEmail-DnC6Lcu-.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-BVbBvXQS.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/word-work-Dd6tIKrt-Jn9YNKpa.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\": \"48a805a12aa395b26c39e90340a4f01b\"\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,6BACPC,SAAY,MAEd,CACED,IAAO,8BACPC,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,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,oCACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,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,yCACPC,SAAY,MAEd,CACED,IAAO,wCACPC,SAAY,MAEd,CACED,IAAO,wCACPC,SAAY,MAEd,CACED,IAAO,2BACPC,SAAY,MAEd,CACED,IAAO,4BACPC,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"}
1
+ {"version":3,"file":"sw.js","sources":["../../../../../../../tmp/21825a5f3f907c8e9e0aad1375171d7f/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-Cr-gVLN3.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/admin-BNR4JZ2X.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/admin-D-L0jR6i.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/AdminDashboard-fWfBatiA.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/AdminDashboard-Tu5cntiN.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/AdminLearner-DKV-rmzE.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/chess-E2uOAyQS-CyL0N9F7.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/chess-E2uOAyQS-DB7z_kWx.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/chess-Lfm7Fsvs-CGl6HDqe.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/chunk-D6hFPZc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/ClassroomCtrlPanel-BlIKf9Ec.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Classrooms-CUHpCVyZ.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/common-ui-BY2Ut5jf.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/common-ui.es-DFOzc2ze.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/common-ui.es-e3Go1Szv.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/CourseRouter-CmWQVX3p.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-D4v2o2EL.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/CourseWare-BTFRjgBR-D750E7i0.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/CourseWare-BTFRjgBR-DCGIN7hI.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-BtPAFjJU.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-DDw00TzX.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-DQUROFxW.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-DXykAjYp.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/dist-l4NOxAbA.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/edit-ui.es-BUTgY-3X.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/edit-ui.es-w6kgjkws.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/EloModeration-BVRrWLlD.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/EloModeration-DgUqPPoO.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/french-Dk7YG8Td-Cg49rQNc.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/french-evUMlbbq-eazzEipj.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-NFrxkZjT.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-oJ86i_Jb.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/JoinCode-DPSfXf5z.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/JoinCode-tyMSgQmu.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/MarkdownRenderer-kStoDRNE-HDBFbDeD.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/MarkdownRenderer-kStoDRNE-HqRzdAdp.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/materialdesignicons-webfont-Dp5v-WZN.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"assets/math-B4HbgYf6-CZyvKZtp.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/math-B4HbgYf6-F4RSa_qw.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/math-DYni7rRl-B9M881Tg.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/NewCourseDialog-CskVoqOS.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/piano-BN5Btq91-BRTyPgQM.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/piano-DF1g6yaX-BLvDAgl1.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/piano-DF1g6yaX-CBHsd-Bx.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/pitch-CgGJFkZ1-mnBGefMf.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/pitch-Dn0iNqiS-B8AXyb7U.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/ReleaseNotes-DeNVWB2D.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/RequestPasswordReset-8ekUShJq.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/RequestPasswordReset-Du5-awJG.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/ResetPassword-CZVPnMM4.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-DRRLfaGM.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/sightsing-BFQ7HRig-BJLyffo9.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/sightsing-BFQ7HRig-DkUGf5Yf.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/sightsing-CJX3k0Fd-CUYD16hW.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Study-BdxV-Ilv.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/Study-R4LCAP7J.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/TagInformation-DYyYbYmu.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/typing-BevtfWlp-B7ZMUAQJ.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/typing-BevtfWlp-BhybW0tx.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/typing-k-ojjO7G-DxqrbEGQ.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/User-dB5PO1RG.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/UserStats-uVV3CIXd.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/VerifyEmail-Dlm91Y-S.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/vue-router-CDq4a4rc.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-BpNUJRLI.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/word-work-Dd6tIKrt-B18ud_iH.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/workbox-window.prod.es5-r2bRTooK.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\": \"f88c9ff49ea4c245cc6eff3a7007556f\"\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,2BACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,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,4BACPC,SAAY,MAEd,CACED,IAAO,2BACPC,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,oCACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,qCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,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,2BACPC,SAAY,MAEd,CACED,IAAO,4BACPC,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,gCACPC,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.2.27",
6
+ "version": "0.2.28",
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.2.27",
29
- "@vue-skuilder/common-ui": "0.2.27",
30
- "@vue-skuilder/courseware": "0.2.27",
31
- "@vue-skuilder/db": "0.2.27",
32
- "@vue-skuilder/edit-ui": "0.2.27",
28
+ "@vue-skuilder/common": "0.2.28",
29
+ "@vue-skuilder/common-ui": "0.2.28",
30
+ "@vue-skuilder/courseware": "0.2.28",
31
+ "@vue-skuilder/db": "0.2.28",
32
+ "@vue-skuilder/edit-ui": "0.2.28",
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.2.27"
94
+ "stableVersion": "0.2.28"
95
95
  }
package/src/router.ts CHANGED
@@ -11,6 +11,7 @@ import SignUp from './views/SignUp.vue';
11
11
  // Lazy: everything else — each becomes its own chunk
12
12
  const About = () => import('./views/About.vue');
13
13
  const AdminDashboard = () => import('./views/AdminDashboard.vue');
14
+ const AdminLearner = () => import('./views/AdminLearner.vue');
14
15
  const Classrooms = () => import('./views/Classrooms.vue');
15
16
  const ClassroomCtrlPanel = () => import('./components/Classrooms/ClassroomCtrlPanel.vue');
16
17
  const JoinCode = () => import('./components/Classrooms/JoinCode.vue');
@@ -174,6 +175,13 @@ const router = createRouter({
174
175
  component: AdminDashboard,
175
176
  meta: { requiresAdmin: true },
176
177
  },
178
+ {
179
+ path: '/admin/learners/:courseId?/:username?',
180
+ name: 'admin-learner',
181
+ props: true,
182
+ component: AdminLearner,
183
+ meta: { requiresAdmin: true },
184
+ },
177
185
  {
178
186
  path: '/user/:username',
179
187
  alias: '/u/:username',
@@ -1,6 +1,9 @@
1
1
  <template>
2
2
  <div class="admin-dashboard">
3
3
  <h1>Admin Dashboard</h1>
4
+ <v-btn class="mb-4" variant="tonal" prepend-icon="mdi-account-search" to="/admin/learners">
5
+ Learner diagnostics
6
+ </v-btn>
4
7
 
5
8
  <!-- User Selection Section -->
6
9
  <v-card class="mb-4">
@@ -65,22 +68,60 @@
65
68
  </v-row>
66
69
 
67
70
  <!-- Card History Section -->
68
- <card-history-viewer
69
- v-if="selectedCard && selectedUserReader"
70
- :card-id="selectedCard.cardId"
71
- :course-id="selectedCard.courseId"
72
- :user-id="selectedUserId"
73
- :user-d-b="selectedUserReader"
74
- />
71
+ <v-card v-if="selectedCard && selectedUserId" class="mt-4" variant="outlined">
72
+ <v-card-title class="d-flex align-center">
73
+ Card history: {{ selectedUserId }}
74
+ <v-spacer />
75
+ <v-btn variant="text" size="small" prepend-icon="mdi-account-search" :to="learnerLink">
76
+ Learner diagnostics
77
+ </v-btn>
78
+ </v-card-title>
79
+ <v-card-text>
80
+ <v-progress-linear v-if="dossierLoading" indeterminate />
81
+ <v-alert v-else-if="dossierError" type="error" variant="tonal" density="compact">{{ dossierError }}</v-alert>
82
+ <card-dossier-detail v-else-if="cardDossier" :dossier="cardDossier" />
83
+ <div v-else class="text-caption text-disabled">{{ selectedUserId }} has no history with this card.</div>
84
+ </v-card-text>
85
+ </v-card>
75
86
  </div>
76
87
  </template>
77
88
 
78
89
  <script lang="ts">
79
90
  import { defineComponent } from 'vue';
80
- import { CardSearch, CardSearchResults, CardHistoryViewer, CardLoader, getCurrentUser } from '@vue-skuilder/common-ui';
91
+ import { CardSearch, CardSearchResults, CardLoader, getCurrentUser } from '@vue-skuilder/common-ui';
92
+ import { CardDossierDetail } from '@vue-skuilder/common-ui/admin';
93
+ import '@vue-skuilder/common-ui/admin/style';
81
94
  import { getDataLayer, CourseLookup } from '@vue-skuilder/db';
95
+ import {
96
+ cardDossiers,
97
+ fetchLearnerDump,
98
+ fromDump,
99
+ type CardDossier,
100
+ type LearnerDump,
101
+ } from '@vue-skuilder/db/diagnostics';
82
102
  import { allCourseWare } from '@vue-skuilder/courseware';
83
- import { UserDBInterface, UserDBReader, DataLayerProvider, AdminDBInterface } from '@vue-skuilder/db';
103
+ import { UserDBInterface, DataLayerProvider, AdminDBInterface } from '@vue-skuilder/db';
104
+ import ENV from '../ENVIRONMENT_VARS';
105
+
106
+ // A learner's records, per learner and course, fetched once per page load with
107
+ // the admin's couch session cookie. Not through a data-layer UserDB: building
108
+ // another user's UserDB replaces the logged-in one.
109
+ const dumps = new Map<string, Promise<LearnerDump>>();
110
+
111
+ function learnerDump(username: string, courseId: string): Promise<LearnerDump> {
112
+ const key = `${courseId}::${username}`;
113
+ if (!dumps.has(key)) {
114
+ const pending = fetchLearnerDump({
115
+ couchUrl: `${ENV.COUCHDB_SERVER_PROTOCOL}://${ENV.COUCHDB_SERVER_URL}`,
116
+ username,
117
+ courseId,
118
+ auth: { kind: 'cookie' },
119
+ });
120
+ dumps.set(key, pending);
121
+ pending.catch(() => dumps.delete(key));
122
+ }
123
+ return dumps.get(key)!;
124
+ }
84
125
 
85
126
  interface UserOption {
86
127
  label: string;
@@ -92,7 +133,7 @@ export default defineComponent({
92
133
  components: {
93
134
  CardSearch,
94
135
  CardSearchResults,
95
- CardHistoryViewer,
136
+ CardDossierDetail,
96
137
  CardLoader,
97
138
  },
98
139
  data() {
@@ -104,12 +145,21 @@ export default defineComponent({
104
145
  dataLayer: null as DataLayerProvider | null,
105
146
  adminDB: null as AdminDBInterface | null,
106
147
  selectedUserId: '',
107
- selectedUserReader: null as UserDBReader | null,
148
+ cardDossier: null as CardDossier | null,
149
+ dossierLoading: false,
150
+ dossierError: null as string | null,
108
151
  selectedCourseId: null as string | null,
109
152
  userOptions: [] as UserOption[],
110
153
  courseOptions: [] as UserOption[],
111
154
  };
112
155
  },
156
+ computed: {
157
+ learnerLink(): string {
158
+ if (!this.selectedCard || !this.selectedUserId) return '/admin/learners';
159
+ const course = encodeURIComponent(this.selectedCard.courseId);
160
+ return `/admin/learners/${course}/${encodeURIComponent(this.selectedUserId)}`;
161
+ },
162
+ },
113
163
  async created() {
114
164
  this.userDB = await getCurrentUser();
115
165
  this.userId = this.userDB.getUsername();
@@ -138,17 +188,26 @@ export default defineComponent({
138
188
  }
139
189
  },
140
190
 
141
- async onUserSelected(userId: string) {
142
- if (!userId) {
143
- this.selectedUserReader = null;
144
- return;
145
- }
191
+ onUserSelected() {
192
+ void this.loadDossier();
193
+ },
146
194
 
195
+ /** The selected learner's record for the selected card, from their dataset. */
196
+ async loadDossier() {
197
+ const card = this.selectedCard;
198
+ const user = this.selectedUserId;
199
+ this.cardDossier = null;
200
+ this.dossierError = null;
201
+ if (!card || !user) return;
202
+ this.dossierLoading = true;
147
203
  try {
148
- this.selectedUserReader = await this.dataLayer!.createUserReaderForUser(userId);
204
+ const dataset = fromDump(await learnerDump(user, card.courseId), card.courseId);
205
+ if (card !== this.selectedCard || user !== this.selectedUserId) return;
206
+ this.cardDossier = cardDossiers(dataset).find((d) => d.cardId === card.cardId) ?? null;
149
207
  } catch (error) {
150
- console.error('Failed to create user reader:', error);
151
- this.selectedUserReader = null;
208
+ this.dossierError = error instanceof Error ? error.message : String(error);
209
+ } finally {
210
+ this.dossierLoading = false;
152
211
  }
153
212
  },
154
213
 
@@ -158,6 +217,7 @@ export default defineComponent({
158
217
 
159
218
  onCardSelected(card: { cardId: string; courseId: string }) {
160
219
  this.selectedCard = card;
220
+ void this.loadDossier();
161
221
  },
162
222
 
163
223
  async loadCourses() {
@@ -0,0 +1,108 @@
1
+ <template>
2
+ <div class="pa-8">
3
+ <h1 class="text-h5 mb-4">Learner</h1>
4
+
5
+ <div class="d-flex flex-wrap ga-4 mb-4">
6
+ <v-autocomplete
7
+ :model-value="courseId"
8
+ :items="courseOptions"
9
+ item-title="label"
10
+ item-value="value"
11
+ label="Course"
12
+ density="compact"
13
+ hide-details
14
+ style="max-width: 28rem"
15
+ @update:model-value="pickCourse"
16
+ />
17
+ <v-autocomplete
18
+ :model-value="selectedUser"
19
+ :items="userOptions"
20
+ label="Learner"
21
+ density="compact"
22
+ hide-details
23
+ style="max-width: 20rem"
24
+ :disabled="!courseId"
25
+ @update:model-value="pickUser"
26
+ />
27
+ </div>
28
+
29
+ <learner-dataset-source
30
+ v-if="courseId"
31
+ :key="`${courseId}/${selectedUser ?? ''}`"
32
+ :couch-url="couchUrl"
33
+ :course-id="courseId"
34
+ :initial-username="selectedUser"
35
+ :autoload="!!selectedUser"
36
+ @loaded="onLoaded"
37
+ />
38
+ <learner-diagnostics v-if="dataset" :dataset="dataset" class="mt-6" />
39
+ </div>
40
+ </template>
41
+
42
+ <script setup lang="ts">
43
+ import { onMounted, ref, shallowRef } from 'vue';
44
+ import { useRouter } from 'vue-router';
45
+ import { CourseLookup, getDataLayer } from '@vue-skuilder/db';
46
+ import type { LearnerDataset } from '@vue-skuilder/db/diagnostics';
47
+ import { LearnerDatasetSource, LearnerDiagnostics } from '@vue-skuilder/common-ui/admin';
48
+ import '@vue-skuilder/common-ui/admin/style';
49
+ import ENV from '../ENVIRONMENT_VARS';
50
+
51
+ /**
52
+ * Admin view of one learner in one course: `/admin/learners/:courseId?/:username?`.
53
+ * Reads through the admin's couch session cookie, same origin as the app.
54
+ */
55
+ const props = defineProps<{ courseId?: string; username?: string }>();
56
+
57
+ const router = useRouter();
58
+ const couchUrl = `${ENV.COUCHDB_SERVER_PROTOCOL}://${ENV.COUCHDB_SERVER_URL}`;
59
+
60
+ const courseOptions = ref<Array<{ label: string; value: string }>>([]);
61
+ const userOptions = ref<string[]>([]);
62
+ // Drives the source component's key. The route can follow a learner typed
63
+ // into the component without remounting (and refetching) it.
64
+ const selectedUser = ref(props.username);
65
+ const dataset = shallowRef<LearnerDataset | null>(null);
66
+
67
+ function syncUrl(courseId?: string, username?: string): void {
68
+ const parts = ['/admin/learners', courseId, courseId ? username : undefined].filter((p): p is string => !!p);
69
+ void router.replace(parts.map((p, i) => (i === 0 ? p : encodeURIComponent(p))).join('/'));
70
+ }
71
+
72
+ function pickCourse(courseId: string | null): void {
73
+ selectedUser.value = undefined;
74
+ dataset.value = null;
75
+ syncUrl(courseId ?? undefined);
76
+ }
77
+
78
+ function pickUser(username: string | null): void {
79
+ selectedUser.value = username ?? undefined;
80
+ syncUrl(props.courseId, selectedUser.value);
81
+ }
82
+
83
+ function onLoaded(loaded: LearnerDataset): void {
84
+ dataset.value = loaded;
85
+ if (loaded.username !== props.username) syncUrl(props.courseId, loaded.username);
86
+ }
87
+
88
+ onMounted(async () => {
89
+ try {
90
+ const courses = await CourseLookup.allCourseWare();
91
+ courseOptions.value = courses
92
+ .filter((c) => c._id)
93
+ .map((c) => ({ label: c.name?.trim() || c._id, value: c._id }))
94
+ .sort((a, b) => a.label.localeCompare(b.label));
95
+ } catch (e) {
96
+ console.error('[AdminLearner] course list failed', e);
97
+ }
98
+ try {
99
+ const users = await (await getDataLayer()).getAdminDB().getUsers();
100
+ userOptions.value = users
101
+ .map((u) => (u as { name?: string }).name)
102
+ .filter((name): name is string => !!name && !name.startsWith('Guest'))
103
+ .sort();
104
+ } catch (e) {
105
+ console.error('[AdminLearner] user list failed', e);
106
+ }
107
+ });
108
+ </script>
@@ -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{I as d,T as f,b as p,m,u as h}from"./common-ui.es-CN0Lc64m.js";import"./dist-l4NOxAbA.js";import"./MarkdownRenderer-kStoDRNE-HDBFbDeD.js";import{U as g,r as _}from"./dist-B1rlsz-O.js";import{t as v}from"./index-CF5bC3bl.js";import"./CourseWare-BTFRjgBR-fJXdIFUp.js";import"./chess-E2uOAyQS-Bq2eA-0f.js";import"./math-B4HbgYf6-DlDwrhG3.js";import"./piano-DF1g6yaX-Bz3YzlGc.js";import"./sightsing-BFQ7HRig-TY63jvHz.js";import"./typing-BevtfWlp-WuHuczGo.js";import{t as y}from"./dist-Bs_ymDcS.js";var b=a({name:`AdminDashboard`,components:{CardSearch:h,CardSearchResults:m,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-CIcq497y.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdminDashboard-CIcq497y.js","names":[],"sources":["../../src/views/AdminDashboard.vue","../../src/views/AdminDashboard.vue"],"sourcesContent":["<template>\n <div class=\"admin-dashboard\">\n <h1>Admin Dashboard</h1>\n\n <!-- User Selection Section -->\n <v-card class=\"mb-4\">\n <v-card-title>User Selection</v-card-title>\n <v-card-text>\n <v-select\n v-model=\"selectedUserId\"\n :items=\"userOptions\"\n item-title=\"label\"\n item-value=\"value\"\n label=\"Select User\"\n @update:model-value=\"onUserSelected\"\n ></v-select>\n <v-chip v-if=\"selectedUserId\" color=\"primary\" class=\"mt-2\"> Viewing data for: {{ selectedUserId }} </v-chip>\n </v-card-text>\n </v-card>\n\n <!-- Course Filter Section -->\n <v-card class=\"mb-4\">\n <v-card-title>Search Filters</v-card-title>\n <v-card-text>\n <v-select\n v-model=\"selectedCourseId\"\n :items=\"courseOptions\"\n item-title=\"label\"\n item-value=\"value\"\n label=\"Filter by Course (optional)\"\n clearable\n @update:model-value=\"onCourseFilterChanged\"\n ></v-select>\n <div v-if=\"selectedCourseId\" class=\"mt-2\">\n <v-chip color=\"info\" class=\"mb-1\"> 🎯 {{ getCourseNameById(selectedCourseId) }} </v-chip>\n <div v-if=\"getSelectedCourseDetails()\" class=\"text-caption text-grey-darken-1\">\n {{ getSelectedCourseDetails() }}\n </div>\n </div>\n <v-chip v-else color=\"warning\" class=\"mt-2\">\n ⚠️ Searching ALL {{ courseOptions.length }} courses (may be slow)\n </v-chip>\n </v-card-text>\n </v-card>\n\n <!-- Card Search Section -->\n <card-search @search=\"onSearch\" />\n <v-row>\n <v-col cols=\"6\">\n <card-search-results\n v-if=\"query\"\n :query=\"query\"\n :data-layer=\"dataLayer\"\n :course-filter=\"selectedCourseId\"\n @card-selected=\"onCardSelected\"\n />\n </v-col>\n <v-col cols=\"6\">\n <card-loader\n v-if=\"selectedCard\"\n :qualified_id=\"{ courseID: selectedCard.courseId, cardID: selectedCard.cardId }\"\n :view-lookup=\"viewLookup\"\n />\n </v-col>\n </v-row>\n\n <!-- Card History Section -->\n <card-history-viewer\n v-if=\"selectedCard && selectedUserReader\"\n :card-id=\"selectedCard.cardId\"\n :course-id=\"selectedCard.courseId\"\n :user-id=\"selectedUserId\"\n :user-d-b=\"selectedUserReader\"\n />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { CardSearch, CardSearchResults, CardHistoryViewer, CardLoader, getCurrentUser } from '@vue-skuilder/common-ui';\nimport { getDataLayer, CourseLookup } from '@vue-skuilder/db';\nimport { allCourseWare } from '@vue-skuilder/courseware';\nimport { UserDBInterface, UserDBReader, DataLayerProvider, AdminDBInterface } from '@vue-skuilder/db';\n\ninterface UserOption {\n label: string;\n value: string;\n}\n\nexport default defineComponent({\n name: 'AdminDashboard',\n components: {\n CardSearch,\n CardSearchResults,\n CardHistoryViewer,\n CardLoader,\n },\n data() {\n return {\n query: '',\n selectedCard: null as { cardId: string; courseId: string } | null,\n userId: '',\n userDB: null as UserDBInterface | null,\n dataLayer: null as DataLayerProvider | null,\n adminDB: null as AdminDBInterface | null,\n selectedUserId: '',\n selectedUserReader: null as UserDBReader | null,\n selectedCourseId: null as string | null,\n userOptions: [] as UserOption[],\n courseOptions: [] as UserOption[],\n };\n },\n async created() {\n this.userDB = await getCurrentUser();\n this.userId = this.userDB.getUsername();\n this.dataLayer = await getDataLayer();\n this.adminDB = this.dataLayer.getAdminDB();\n\n // Load user list for selection\n await this.loadUsers();\n\n // Load available courses\n await this.loadCourses();\n },\n methods: {\n async loadUsers() {\n try {\n const users = await this.adminDB!.getUsers();\n this.userOptions = users\n .filter((user) => user.name && !user.name.startsWith('Guest_'))\n .map((user) => ({\n label: user.name || 'Unknown User',\n value: user.name || '',\n }))\n .filter((option) => option.value !== '');\n } catch (error) {\n console.error('Failed to load users:', error);\n }\n },\n\n async onUserSelected(userId: string) {\n if (!userId) {\n this.selectedUserReader = null;\n return;\n }\n\n try {\n this.selectedUserReader = await this.dataLayer!.createUserReaderForUser(userId);\n } catch (error) {\n console.error('Failed to create user reader:', error);\n this.selectedUserReader = null;\n }\n },\n\n onSearch(query: string) {\n this.query = query;\n },\n\n onCardSelected(card: { cardId: string; courseId: string }) {\n this.selectedCard = card;\n },\n\n async loadCourses() {\n try {\n // Try efficient lookup-only approach first\n // const coursesDB = this.dataLayer!.getCoursesDB();\n\n // Get basic course list from lookup DB (lightweight, just IDs and basic names)\n const lookupCourses = await CourseLookup.allCourseWare();\n\n this.courseOptions = lookupCourses\n .filter((course) => course._id)\n .map((course) => {\n const courseName = course.name && course.name.trim();\n let displayName: string;\n let sortKey: string;\n\n if (courseName && courseName !== course._id && courseName !== '') {\n // Has a real name different from ID\n displayName = courseName;\n sortKey = courseName.toLowerCase();\n } else {\n // No name or name is same as ID - use ID\n displayName = course._id;\n sortKey = course._id.toLowerCase();\n }\n\n // Simple display without expensive metadata lookups\n return {\n label: `📚 ${displayName}`,\n value: course._id,\n sortKey,\n };\n })\n .sort((a, b) => a.sortKey.localeCompare(b.sortKey));\n\n console.log(`Loaded ${this.courseOptions.length} courses for filtering (lightweight mode)`);\n } catch (error) {\n console.error('Failed to load courses (lightweight):', error);\n // Fallback to expensive approach\n await this.loadCoursesExpensive();\n }\n },\n\n async loadCoursesExpensive() {\n try {\n console.log('Using expensive course loading (full configs)...');\n const adminDB = this.dataLayer!.getAdminDB();\n const basicCourseList = await adminDB.getCourses(); // This fetches full configs\n\n this.courseOptions = basicCourseList\n .filter((course) => course.courseID)\n .map((course) => {\n const courseName = course.name && course.name.trim();\n const creator = course.creator ? ` (${course.creator})` : '';\n\n let displayName: string;\n let sortKey: string;\n\n if (courseName && courseName !== course.courseID) {\n // Has a real name different from ID\n displayName = courseName;\n sortKey = courseName.toLowerCase();\n } else {\n // No name or name is same as ID - use ID\n displayName = course.courseID!;\n sortKey = course.courseID!.toLowerCase();\n }\n\n const visibility = course.public ? '🌐' : '🔒';\n\n return {\n label: `${visibility} ${displayName}${creator}`,\n value: course.courseID!,\n sortKey,\n };\n })\n .sort((a, b) => a.sortKey.localeCompare(b.sortKey));\n\n console.log(`Loaded ${this.courseOptions.length} courses for filtering (expensive mode)`);\n } catch (error) {\n console.error('Failed to load courses (expensive):', error);\n // Final fallback\n this.loadCoursesBasic();\n }\n },\n\n async loadCoursesBasic() {\n try {\n // Fallback: just get course IDs from lookup DB (fast)\n console.log('Using fallback course loading (IDs only)');\n // This would need a new method that just gets the lookup docs without full configs\n // For now, we'll show a basic message\n this.courseOptions = [{ label: '⚠️ Course names not available - using IDs only', value: '' }];\n } catch (error) {\n console.error('Failed to load basic courses:', error);\n }\n },\n\n onCourseFilterChanged() {\n // If there's an active search, re-run it with the new filter\n if (this.query) {\n // The CardSearchResults component will automatically re-search with the new filter\n }\n },\n\n getCourseNameById(courseId: string): string {\n const course = this.courseOptions.find((c) => c.value === courseId);\n return course ? course.label : courseId;\n },\n\n getSelectedCourseDetails(): string {\n if (!this.selectedCourseId) return '';\n\n // For now, just return the ID as additional context\n return `ID: ${this.selectedCourseId}`;\n },\n\n viewLookup(viewDescriptor: unknown) {\n return allCourseWare.getView(viewDescriptor);\n },\n },\n});\n</script>\n\n<style scoped>\n.admin-dashboard {\n padding: 2rem;\n}\n</style>\n","<template>\n <div class=\"admin-dashboard\">\n <h1>Admin Dashboard</h1>\n\n <!-- User Selection Section -->\n <v-card class=\"mb-4\">\n <v-card-title>User Selection</v-card-title>\n <v-card-text>\n <v-select\n v-model=\"selectedUserId\"\n :items=\"userOptions\"\n item-title=\"label\"\n item-value=\"value\"\n label=\"Select User\"\n @update:model-value=\"onUserSelected\"\n ></v-select>\n <v-chip v-if=\"selectedUserId\" color=\"primary\" class=\"mt-2\"> Viewing data for: {{ selectedUserId }} </v-chip>\n </v-card-text>\n </v-card>\n\n <!-- Course Filter Section -->\n <v-card class=\"mb-4\">\n <v-card-title>Search Filters</v-card-title>\n <v-card-text>\n <v-select\n v-model=\"selectedCourseId\"\n :items=\"courseOptions\"\n item-title=\"label\"\n item-value=\"value\"\n label=\"Filter by Course (optional)\"\n clearable\n @update:model-value=\"onCourseFilterChanged\"\n ></v-select>\n <div v-if=\"selectedCourseId\" class=\"mt-2\">\n <v-chip color=\"info\" class=\"mb-1\"> 🎯 {{ getCourseNameById(selectedCourseId) }} </v-chip>\n <div v-if=\"getSelectedCourseDetails()\" class=\"text-caption text-grey-darken-1\">\n {{ getSelectedCourseDetails() }}\n </div>\n </div>\n <v-chip v-else color=\"warning\" class=\"mt-2\">\n ⚠️ Searching ALL {{ courseOptions.length }} courses (may be slow)\n </v-chip>\n </v-card-text>\n </v-card>\n\n <!-- Card Search Section -->\n <card-search @search=\"onSearch\" />\n <v-row>\n <v-col cols=\"6\">\n <card-search-results\n v-if=\"query\"\n :query=\"query\"\n :data-layer=\"dataLayer\"\n :course-filter=\"selectedCourseId\"\n @card-selected=\"onCardSelected\"\n />\n </v-col>\n <v-col cols=\"6\">\n <card-loader\n v-if=\"selectedCard\"\n :qualified_id=\"{ courseID: selectedCard.courseId, cardID: selectedCard.cardId }\"\n :view-lookup=\"viewLookup\"\n />\n </v-col>\n </v-row>\n\n <!-- Card History Section -->\n <card-history-viewer\n v-if=\"selectedCard && selectedUserReader\"\n :card-id=\"selectedCard.cardId\"\n :course-id=\"selectedCard.courseId\"\n :user-id=\"selectedUserId\"\n :user-d-b=\"selectedUserReader\"\n />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { CardSearch, CardSearchResults, CardHistoryViewer, CardLoader, getCurrentUser } from '@vue-skuilder/common-ui';\nimport { getDataLayer, CourseLookup } from '@vue-skuilder/db';\nimport { allCourseWare } from '@vue-skuilder/courseware';\nimport { UserDBInterface, UserDBReader, DataLayerProvider, AdminDBInterface } from '@vue-skuilder/db';\n\ninterface UserOption {\n label: string;\n value: string;\n}\n\nexport default defineComponent({\n name: 'AdminDashboard',\n components: {\n CardSearch,\n CardSearchResults,\n CardHistoryViewer,\n CardLoader,\n },\n data() {\n return {\n query: '',\n selectedCard: null as { cardId: string; courseId: string } | null,\n userId: '',\n userDB: null as UserDBInterface | null,\n dataLayer: null as DataLayerProvider | null,\n adminDB: null as AdminDBInterface | null,\n selectedUserId: '',\n selectedUserReader: null as UserDBReader | null,\n selectedCourseId: null as string | null,\n userOptions: [] as UserOption[],\n courseOptions: [] as UserOption[],\n };\n },\n async created() {\n this.userDB = await getCurrentUser();\n this.userId = this.userDB.getUsername();\n this.dataLayer = await getDataLayer();\n this.adminDB = this.dataLayer.getAdminDB();\n\n // Load user list for selection\n await this.loadUsers();\n\n // Load available courses\n await this.loadCourses();\n },\n methods: {\n async loadUsers() {\n try {\n const users = await this.adminDB!.getUsers();\n this.userOptions = users\n .filter((user) => user.name && !user.name.startsWith('Guest_'))\n .map((user) => ({\n label: user.name || 'Unknown User',\n value: user.name || '',\n }))\n .filter((option) => option.value !== '');\n } catch (error) {\n console.error('Failed to load users:', error);\n }\n },\n\n async onUserSelected(userId: string) {\n if (!userId) {\n this.selectedUserReader = null;\n return;\n }\n\n try {\n this.selectedUserReader = await this.dataLayer!.createUserReaderForUser(userId);\n } catch (error) {\n console.error('Failed to create user reader:', error);\n this.selectedUserReader = null;\n }\n },\n\n onSearch(query: string) {\n this.query = query;\n },\n\n onCardSelected(card: { cardId: string; courseId: string }) {\n this.selectedCard = card;\n },\n\n async loadCourses() {\n try {\n // Try efficient lookup-only approach first\n // const coursesDB = this.dataLayer!.getCoursesDB();\n\n // Get basic course list from lookup DB (lightweight, just IDs and basic names)\n const lookupCourses = await CourseLookup.allCourseWare();\n\n this.courseOptions = lookupCourses\n .filter((course) => course._id)\n .map((course) => {\n const courseName = course.name && course.name.trim();\n let displayName: string;\n let sortKey: string;\n\n if (courseName && courseName !== course._id && courseName !== '') {\n // Has a real name different from ID\n displayName = courseName;\n sortKey = courseName.toLowerCase();\n } else {\n // No name or name is same as ID - use ID\n displayName = course._id;\n sortKey = course._id.toLowerCase();\n }\n\n // Simple display without expensive metadata lookups\n return {\n label: `📚 ${displayName}`,\n value: course._id,\n sortKey,\n };\n })\n .sort((a, b) => a.sortKey.localeCompare(b.sortKey));\n\n console.log(`Loaded ${this.courseOptions.length} courses for filtering (lightweight mode)`);\n } catch (error) {\n console.error('Failed to load courses (lightweight):', error);\n // Fallback to expensive approach\n await this.loadCoursesExpensive();\n }\n },\n\n async loadCoursesExpensive() {\n try {\n console.log('Using expensive course loading (full configs)...');\n const adminDB = this.dataLayer!.getAdminDB();\n const basicCourseList = await adminDB.getCourses(); // This fetches full configs\n\n this.courseOptions = basicCourseList\n .filter((course) => course.courseID)\n .map((course) => {\n const courseName = course.name && course.name.trim();\n const creator = course.creator ? ` (${course.creator})` : '';\n\n let displayName: string;\n let sortKey: string;\n\n if (courseName && courseName !== course.courseID) {\n // Has a real name different from ID\n displayName = courseName;\n sortKey = courseName.toLowerCase();\n } else {\n // No name or name is same as ID - use ID\n displayName = course.courseID!;\n sortKey = course.courseID!.toLowerCase();\n }\n\n const visibility = course.public ? '🌐' : '🔒';\n\n return {\n label: `${visibility} ${displayName}${creator}`,\n value: course.courseID!,\n sortKey,\n };\n })\n .sort((a, b) => a.sortKey.localeCompare(b.sortKey));\n\n console.log(`Loaded ${this.courseOptions.length} courses for filtering (expensive mode)`);\n } catch (error) {\n console.error('Failed to load courses (expensive):', error);\n // Final fallback\n this.loadCoursesBasic();\n }\n },\n\n async loadCoursesBasic() {\n try {\n // Fallback: just get course IDs from lookup DB (fast)\n console.log('Using fallback course loading (IDs only)');\n // This would need a new method that just gets the lookup docs without full configs\n // For now, we'll show a basic message\n this.courseOptions = [{ label: '⚠️ Course names not available - using IDs only', value: '' }];\n } catch (error) {\n console.error('Failed to load basic courses:', error);\n }\n },\n\n onCourseFilterChanged() {\n // If there's an active search, re-run it with the new filter\n if (this.query) {\n // The CardSearchResults component will automatically re-search with the new filter\n }\n },\n\n getCourseNameById(courseId: string): string {\n const course = this.courseOptions.find((c) => c.value === courseId);\n return course ? course.label : courseId;\n },\n\n getSelectedCourseDetails(): string {\n if (!this.selectedCourseId) return '';\n\n // For now, just return the ID as additional context\n return `ID: ${this.selectedCourseId}`;\n },\n\n viewLookup(viewDescriptor: unknown) {\n return allCourseWare.getView(viewDescriptor);\n },\n },\n});\n</script>\n\n<style scoped>\n.admin-dashboard {\n padding: 2rem;\n}\n</style>\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- .admin-dashboard[data-v-7409c94e]{padding:2rem}