@vue-skuilder/platform-ui 0.1.29 → 0.1.31-a

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 (61) hide show
  1. package/dist/assets/About-BzQmP9L6.js +2 -0
  2. package/dist/assets/About-BzQmP9L6.js.map +1 -0
  3. package/dist/assets/AdminDashboard-Btfp3xbX.js +2 -0
  4. package/dist/assets/AdminDashboard-Btfp3xbX.js.map +1 -0
  5. package/dist/assets/AdminDashboard-CWnC_vEI.css +1 -0
  6. package/dist/assets/ClassroomCtrlPanel-Del1NMJ0.js +2 -0
  7. package/dist/assets/ClassroomCtrlPanel-Del1NMJ0.js.map +1 -0
  8. package/dist/assets/Classrooms-uc9jXghN.js +2 -0
  9. package/dist/assets/Classrooms-uc9jXghN.js.map +1 -0
  10. package/dist/assets/CourseRouter-DfwtPHs0.js +2 -0
  11. package/dist/assets/CourseRouter-DfwtPHs0.js.map +1 -0
  12. package/dist/assets/CourseRouter-DuzvSsqI.css +1 -0
  13. package/dist/assets/Courses-DQW3kca9.css +1 -0
  14. package/dist/assets/Courses-Iub72F0b.js +2 -0
  15. package/dist/assets/Courses-Iub72F0b.js.map +1 -0
  16. package/dist/assets/DataInputFormTester-BL-SAhyy.js +2 -0
  17. package/dist/assets/DataInputFormTester-BL-SAhyy.js.map +1 -0
  18. package/dist/assets/EloModeration-B90G61YI.css +1 -0
  19. package/dist/assets/EloModeration-DK8zrUJv.js +2 -0
  20. package/dist/assets/EloModeration-DK8zrUJv.js.map +1 -0
  21. package/dist/assets/JoinCode-CnXEpiOH.js +2 -0
  22. package/dist/assets/JoinCode-CnXEpiOH.js.map +1 -0
  23. package/dist/assets/JoinCode-DFiral3R.css +1 -0
  24. package/dist/assets/NewCourseDialog-4P2ZrBpL.js +2 -0
  25. package/dist/assets/NewCourseDialog-4P2ZrBpL.js.map +1 -0
  26. package/dist/assets/ReleaseNotes-CH_BZW3D.js +2 -0
  27. package/dist/assets/ReleaseNotes-CH_BZW3D.js.map +1 -0
  28. package/dist/assets/RequestPasswordReset-06j_OmhC.js +2 -0
  29. package/dist/assets/RequestPasswordReset-06j_OmhC.js.map +1 -0
  30. package/dist/assets/RequestPasswordReset-Du5-awJG.css +1 -0
  31. package/dist/assets/ResetPassword-Bm2btF6K.js +2 -0
  32. package/dist/assets/ResetPassword-Bm2btF6K.js.map +1 -0
  33. package/dist/assets/Study-Cxxw_AYM.css +1 -0
  34. package/dist/assets/Study-D3owlaib.js +2 -0
  35. package/dist/assets/Study-D3owlaib.js.map +1 -0
  36. package/dist/assets/TagInformation-BpBQo85-.js +2 -0
  37. package/dist/assets/TagInformation-BpBQo85-.js.map +1 -0
  38. package/dist/assets/User-NjHri3_k.js +2 -0
  39. package/dist/assets/User-NjHri3_k.js.map +1 -0
  40. package/dist/assets/UserStats-B_Oc2Pl5.js +2 -0
  41. package/dist/assets/UserStats-B_Oc2Pl5.js.map +1 -0
  42. package/dist/assets/VerifyEmail-C_CXjeU5.js +2 -0
  43. package/dist/assets/VerifyEmail-C_CXjeU5.js.map +1 -0
  44. package/dist/assets/edit-ui.es-BX72VVRb.js +2 -0
  45. package/dist/assets/edit-ui.es-BX72VVRb.js.map +1 -0
  46. package/dist/assets/index-BHFq3MXV.js +3 -0
  47. package/dist/assets/index-BHFq3MXV.js.map +1 -0
  48. package/dist/assets/index-CfLe2ewO.js +3 -0
  49. package/dist/assets/index-CfLe2ewO.js.map +1 -0
  50. package/dist/assets/index-kzKpN32E.css +1 -0
  51. package/dist/assets/mousetrap-BPMmAIzH.js +2 -0
  52. package/dist/assets/mousetrap-BPMmAIzH.js.map +1 -0
  53. package/dist/index.html +2 -2
  54. package/dist/sw.js +1 -1
  55. package/dist/sw.js.map +1 -1
  56. package/package.json +7 -9
  57. package/src/router.ts +24 -19
  58. package/src/views/Courses.vue +2 -2
  59. package/dist/assets/index-DKrG4Ojc.css +0 -1
  60. package/dist/assets/index-DriRJ4HM.js +0 -2
  61. package/dist/assets/index-DriRJ4HM.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import{d as a,_ as e,r as t,c as o,o as s,w as l,a as n,b as r,e as i}from"./index-CfLe2ewO.js";const d=e(a({name:"AboutView",components:{},data:()=>({type:"Viewable"})}),[["render",function(a,e,d,c,u,b){const f=t("v-btn"),m=t("v-col"),p=t("v-row"),h=t("v-container");return s(),o(h,{class:"about"},{default:l((()=>[n(p,null,{default:l((()=>[n(m,null,{default:l((()=>[e[1]||(e[1]=r("h1",{class:"text-h2 mb-6"},"Todo.",-1)),e[2]||(e[2]=r("p",{class:"text-body-1 mb-4"}," This is a placeholder for the about page. It will be filled in with more information later. ",-1)),n(f,{to:"./notes",variant:"text",color:"primary"},{default:l((()=>e[0]||(e[0]=[i(" Release Notes ")]))),_:1})])),_:1})])),_:1})])),_:1})}]]);export{d as default};
2
+ //# sourceMappingURL=About-BzQmP9L6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"About-BzQmP9L6.js","sources":["../../src/views/About.vue"],"sourcesContent":["<template>\n <v-container class=\"about\">\n <v-row>\n <v-col>\n <h1 class=\"text-h2 mb-6\">Todo.</h1>\n\n <p class=\"text-body-1 mb-4\">\n This is a placeholder for the about page. It will be filled in with more information later.\n </p>\n\n <v-btn :to=\"'./notes'\" variant=\"text\" color=\"primary\"> Release Notes </v-btn>\n </v-col>\n </v-row>\n </v-container>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'AboutView',\n components: {},\n data() {\n return {\n type: 'Viewable',\n };\n },\n});\n</script>\n"],"names":["defineComponent","name","components","data","type","_createBlock","_component_v_container","class","default","_createVNode","_component_v_row","_component_v_col","_cache","_createElementVNode","_component_v_btn","to","variant","color","_withCtx","_createTextVNode","_"],"mappings":"0GAmBeA,EAAgB,CAC7BC,KAAM,YACNC,WAAY,CAAA,EACZC,KAAA,KACS,CACLC,KAAM,2HAvBVC,EAYcC,EAAA,CAZDC,MAAM,SAAO,CAD5BC,WAEI,IAUQ,CAVRC,EAUQC,EAAA,KAAA,CAZZF,WAGM,IAQQ,CARRC,EAQQE,EAAA,KAAA,CAXdH,WAIQ,IAAmC,CAAAI,EAAA,KAAAA,EAAA,GAAnCC,EAAmC,KAAA,CAA/BN,MAAM,gBAAe,SAAK,IAAAK,EAAA,KAAAA,EAAA,GAE9BC,EAEI,IAAA,CAFDN,MAAM,oBAAmB,iGAE5B,IAEAE,EAA6EK,EAAA,CAArEC,GAAI,UAAWC,QAAQ,OAAOC,MAAM,WAAA,CAVpDT,QAAAU,GAU8D,IAAeN,EAAA,KAAAA,EAAA,GAAA,CAV7EO,EAU8D,uBAV9DC,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAA"}
@@ -0,0 +1,2 @@
1
+ import{d as e,S as s,Z as a,z as r,$ as t,C as l,s as o,g as d,_ as c,r as i,f as u,o as n,b as h,a as m,c as C,h as y,w as p,e as g,t as f}from"./index-CfLe2ewO.js";import{allCourseWare as I}from"./index-BHFq3MXV.js";const v=e({name:"AdminDashboard",components:{CardSearch:t,CardSearchResults:r,CardHistoryViewer:a,CardLoader:s},data:()=>({query:"",selectedCard:null,userId:"",userDB:null,dataLayer:null,adminDB:null,selectedUserId:"",selectedUserReader:null,selectedCourseId:null,userOptions:[],courseOptions:[]}),async created(){this.userDB=await o(),this.userId=this.userDB.getUsername(),this.dataLayer=await d(),this.adminDB=this.dataLayer.getAdminDB(),await this.loadUsers(),await this.loadCourses()},methods:{async loadUsers(){try{const e=await this.adminDB.getUsers();this.userOptions=e.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)try{this.selectedUserReader=await this.dataLayer.createUserReaderForUser(e)}catch(s){console.error("Failed to create user reader:",s),this.selectedUserReader=null}else this.selectedUserReader=null},onSearch(e){this.query=e},onCardSelected(e){this.selectedCard=e},async loadCourses(){try{const e=await l.allCourseWare();this.courseOptions=e.filter((e=>e._id)).map((e=>{const s=e.name&&e.name.trim();let a,r;return s&&s!==e._id&&""!==s?(a=s,r=s.toLowerCase()):(a=e._id,r=e._id.toLowerCase()),{label:`📚 ${a}`,value:e._id,sortKey:r}})).sort(((e,s)=>e.sortKey.localeCompare(s.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)...");const e=this.dataLayer.getAdminDB(),s=await e.getCourses();this.courseOptions=s.filter((e=>e.courseID)).map((e=>{const s=e.name&&e.name.trim(),a=e.creator?` (${e.creator})`:"";let r,t;s&&s!==e.courseID?(r=s,t=s.toLowerCase()):(r=e.courseID,t=e.courseID.toLowerCase());return{label:`${e.public?"🌐":"🔒"} ${r}${a}`,value:e.courseID,sortKey:t}})).sort(((e,s)=>e.sortKey.localeCompare(s.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){const s=this.courseOptions.find((s=>s.value===e));return s?s.label:e},getSelectedCourseDetails(){return this.selectedCourseId?`ID: ${this.selectedCourseId}`:""},viewLookup:e=>I.getView(e)}}),U={class:"admin-dashboard"},w={key:0,class:"mt-2"},b={key:0,class:"text-caption text-grey-darken-1"};const D=c(v,[["render",function(e,s,a,r,t,l){const o=i("v-card-title"),d=i("v-select"),c=i("v-chip"),I=i("v-card-text"),v=i("v-card"),D=i("card-search"),_=i("card-search-results"),S=i("v-col"),L=i("card-loader"),k=i("v-row"),B=i("card-history-viewer");return n(),u("div",U,[s[4]||(s[4]=h("h1",null,"Admin Dashboard",-1)),m(v,{class:"mb-4"},{default:p((()=>[m(o,null,{default:p((()=>s[2]||(s[2]=[g("User Selection")]))),_:1}),m(I,null,{default:p((()=>[m(d,{modelValue:e.selectedUserId,"onUpdate:modelValue":[s[0]||(s[0]=s=>e.selectedUserId=s),e.onUserSelected],items:e.userOptions,"item-title":"label","item-value":"value",label:"Select User"},null,8,["modelValue","items","onUpdate:modelValue"]),e.selectedUserId?(n(),C(c,{key:0,color:"primary",class:"mt-2"},{default:p((()=>[g(" Viewing data for: "+f(e.selectedUserId),1)])),_:1})):y("",!0)])),_:1})])),_:1}),m(v,{class:"mb-4"},{default:p((()=>[m(o,null,{default:p((()=>s[3]||(s[3]=[g("Search Filters")]))),_:1}),m(I,null,{default:p((()=>[m(d,{modelValue:e.selectedCourseId,"onUpdate:modelValue":[s[1]||(s[1]=s=>e.selectedCourseId=s),e.onCourseFilterChanged],items:e.courseOptions,"item-title":"label","item-value":"value",label:"Filter by Course (optional)",clearable:""},null,8,["modelValue","items","onUpdate:modelValue"]),e.selectedCourseId?(n(),u("div",w,[m(c,{color:"info",class:"mb-1"},{default:p((()=>[g(" 🎯 "+f(e.getCourseNameById(e.selectedCourseId)),1)])),_:1}),e.getSelectedCourseDetails()?(n(),u("div",b,f(e.getSelectedCourseDetails()),1)):y("",!0)])):(n(),C(c,{key:1,color:"warning",class:"mt-2"},{default:p((()=>[g(" ⚠️ Searching ALL "+f(e.courseOptions.length)+" courses (may be slow) ",1)])),_:1}))])),_:1})])),_:1}),m(D,{onSearch:e.onSearch},null,8,["onSearch"]),m(k,null,{default:p((()=>[m(S,{cols:"6"},{default:p((()=>[e.query?(n(),C(_,{key:0,query:e.query,"data-layer":e.dataLayer,"course-filter":e.selectedCourseId,onCardSelected:e.onCardSelected},null,8,["query","data-layer","course-filter","onCardSelected"])):y("",!0)])),_:1}),m(S,{cols:"6"},{default:p((()=>[e.selectedCard?(n(),C(L,{key:0,qualified_id:{courseID:e.selectedCard.courseId,cardID:e.selectedCard.cardId},"view-lookup":e.viewLookup},null,8,["qualified_id","view-lookup"])):y("",!0)])),_:1})])),_:1}),e.selectedCard&&e.selectedUserReader?(n(),C(B,{key:0,"card-id":e.selectedCard.cardId,"course-id":e.selectedCard.courseId,"user-id":e.selectedUserId,"user-d-b":e.selectedUserReader},null,8,["card-id","course-id","user-id","user-d-b"])):y("",!0)])}],["__scopeId","data-v-7409c94e"]]);export{D as default};
2
+ //# sourceMappingURL=AdminDashboard-Btfp3xbX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminDashboard-Btfp3xbX.js","sources":["../../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"],"names":["_sfc_main","defineComponent","name","components","CardSearch","CardSearchResults","CardHistoryViewer","CardLoader","data","query","selectedCard","userId","userDB","dataLayer","adminDB","selectedUserId","selectedUserReader","selectedCourseId","userOptions","courseOptions","created","this","getCurrentUser","getUsername","getDataLayer","getAdminDB","loadUsers","loadCourses","methods","users","getUsers","filter","user","startsWith","map","label","value","option","error","console","onUserSelected","createUserReaderForUser","onSearch","onCardSelected","card","lookupCourses","CourseLookup","allCourseWare","course","_id","courseName","trim","displayName","sortKey","toLowerCase","sort","a","b","localeCompare","log","length","loadCoursesExpensive","basicCourseList","getCourses","courseID","creator","public","loadCoursesBasic","onCourseFilterChanged","getCourseNameById","courseId","find","c","getSelectedCourseDetails","viewLookup","viewDescriptor","getView","_hoisted_1","class","key","_openBlock","_createElementBlock","_cache","_createElementVNode","_createVNode","_component_v_card","default","_component_v_card_title","_createTextVNode","_","_component_v_card_text","_component_v_select","modelValue","_ctx","$event","items","_createBlock","_component_v_chip","color","_withCtx","_toDisplayString","_createCommentVNode","clearable","_hoisted_2","_hoisted_3","_component_card_search","_component_v_row","_component_v_col","cols","_component_card_search_results","_component_card_loader","qualified_id","cardID","cardId","_component_card_history_viewer"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ .admin-dashboard[data-v-7409c94e]{padding:2rem}
@@ -0,0 +1,2 @@
1
+ import{d as e,s,m as t,g as a,_ as l,r as o,f as n,h as i,o as r,b as d,a as c,e as u,w as m,t as g,c as C,F as h,n as f}from"./index-CfLe2ewO.js";const v=e({name:"ClassroomCtrlPanel",props:{classroomId:{type:String,required:!0}},data:()=>({classroomCfg:null,classroomDB:null,assignedContent:[],nameRules:[e=>!(e.length>30)||"Course name must be 30 characters or less"],updatePending:!0,addingContent:!1,availableCourses:[],selectedCourse:"",availableTags:[],selectedTags:[]}),computed:{_assignedCourses(){return this.assignedContent.filter((e=>"course"===e.type))},_assignedTags(){return this.assignedContent.filter((e=>"tag"===e.type))}},watch:{async selectedCourse(){if(this.selectedCourse){const e=a().getCourseDB(this.selectedCourse),s=await e.getCourseTagStubs();this.availableTags=s.rows.map((e=>e.doc))}else this.availableTags=[]}},async created(){try{this.classroomDB=await a().getClassroomDB(this.classroomId,"teacher"),this.assignedContent=await this.classroomDB.getAssignedContent(),this.classroomCfg=this.classroomDB.getConfig(),console.log(`[ClassroomCtrlPanel] Route loaded w/ (prop) _id: ${this.classroomId}`),console.log(`[ClassroomCtrlPanel] Config: ${JSON.stringify(this.classroomCfg)}`),this.availableCourses=await a().getCoursesDB().getCourseList(),this.updatePending=!1}catch(e){console.error("[ClassroomCtrlPanel] Error initializing:",e)}},methods:{async assignContent(){if(!this.classroomDB)return;const e=await s();0===this.selectedTags.length?await(this.classroomDB.assignContent?.({assignedOn:t(),activeOn:t(),type:"course",courseID:this.selectedCourse,assignedBy:e.getUsername()})):await Promise.all(this.selectedTags.map((s=>this.classroomDB.assignContent?.({assignedOn:t(),activeOn:t(),type:"tag",courseID:this.selectedCourse,tagID:s,assignedBy:e.getUsername()})))),this.assignedContent=await this.classroomDB.getAssignedContent(),this.addingContent=!1,this.selectedCourse="",this.selectedTags=[],this.availableTags=[]},async removeContent(e){this.classroomDB&&this.classroomDB.removeContent&&(await this.classroomDB.removeContent(e),this.assignedContent=await this.classroomDB.getAssignedContent())},async submit(){this.updatePending=!0}}}),p={key:0},y=["onClick"],D=["onClick"];const _=l(v,[["render",function(e,s,t,a,l,v){const _=o("router-link"),b=o("v-btn"),k=o("v-checkbox"),B=o("v-col"),T=o("v-icon"),w=o("v-fade-transition"),A=o("v-toolbar-title"),I=o("v-spacer"),P=o("v-toolbar"),V=o("v-select"),S=o("v-card-text"),x=o("v-card-actions"),O=o("v-card"),U=o("v-row");return e.updatePending?i("",!0):(r(),n("div",p,[d("h1",null,[c(_,{to:"/classrooms"},{default:m((()=>s[5]||(s[5]=[u("My Classrooms")]))),_:1}),u(" / "+g(e.classroomCfg.name),1)]),d("h3",null,[u(" Join code: "+g(e.classroomCfg.joinCode)+" ",1),c(_,{to:`/classrooms/${e.classroomId}/code`},{default:m((()=>[c(b,{size:"x-small",icon:"mdi-fullscreen",color:"accent",alt:"Make Fullscreen"})])),_:1},8,["to"])]),c(U,null,{default:m((()=>[c(B,{cols:"12",sm:"6",md:"4"},{default:m((()=>[c(k,{modelValue:e.classroomCfg.peerAssist,"onUpdate:modelValue":s[0]||(s[0]=s=>e.classroomCfg.peerAssist=s),label:"Allow peer instruction"},null,8,["modelValue"])])),_:1}),e.classroomDB?(r(),C(B,{key:0,cols:"12"},{default:m((()=>[s[10]||(s[10]=d("h2",null,"Assigned Content:",-1)),s[11]||(s[11]=d("h3",null,"Quilts:",-1)),s[12]||(s[12]=d("ul",null,null,-1)),d("ul",null,[(r(!0),n(h,null,f(e._assignedCourses,(s=>(r(),n("li",{key:s.courseID},[u(g(s.courseID)+" ",1),d("a",{onClick:t=>e.removeContent(s)},"Remove",8,y)])))),128))]),s[13]||(s[13]=d("h3",null,"Tags:",-1)),d("ul",null,[(r(!0),n(h,null,f(e._assignedTags,((s,t)=>(r(),n("li",{key:t},[u(g(s.courseID)+" - "+g(s.tagID)+" ",1),d("a",{onClick:t=>e.removeContent(s)},"Remove",8,D)])))),128))]),c(w,null,{default:m((()=>[e.addingContent?i("",!0):(r(),C(b,{key:0,color:"primary",onClick:s[1]||(s[1]=s=>e.addingContent=!0)},{default:m((()=>[s[7]||(s[7]=u(" Assign New Content ")),c(T,{end:""},{default:m((()=>s[6]||(s[6]=[u("mdi-plus")]))),_:1})])),_:1}))])),_:1}),e.addingContent?(r(),C(O,{key:0},{default:m((()=>[c(P,null,{default:m((()=>[c(A,null,{default:m((()=>s[8]||(s[8]=[u("Add Content")]))),_:1}),c(I),c(b,{icon:"mdi-close",color:"error",onClick:s[2]||(s[2]=s=>e.addingContent=!1)})])),_:1}),c(S,null,{default:m((()=>[c(V,{modelValue:e.selectedCourse,"onUpdate:modelValue":s[3]||(s[3]=s=>e.selectedCourse=s),label:"Select Quilt",items:e.availableCourses,"item-title":"name","item-value":"_id",title:"Select Quilt"},null,8,["modelValue","items"]),c(V,{modelValue:e.selectedTags,"onUpdate:modelValue":s[4]||(s[4]=s=>e.selectedTags=s),label:"Select Tags",items:e.availableTags,"item-title":"name","item-value":"name",multiple:"",chips:"",hint:"","persistent-hint":""},null,8,["modelValue","items"])])),_:1}),c(x,null,{default:m((()=>[""!==e.selectedCourse?(r(),C(b,{key:0,color:"primary",onClick:e.assignContent},{default:m((()=>[u(g(0==e.selectedTags.length?"Add Entire Quilt":"Add Tags")+" ",1),c(T,{end:""},{default:m((()=>s[9]||(s[9]=[u("mdi-plus")]))),_:1})])),_:1},8,["onClick"])):i("",!0)])),_:1})])),_:1})):i("",!0)])),_:1})):i("",!0)])),_:1})]))}]]);export{_ as default};
2
+ //# sourceMappingURL=ClassroomCtrlPanel-Del1NMJ0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClassroomCtrlPanel-Del1NMJ0.js","sources":["../../src/components/Classrooms/ClassroomCtrlPanel.vue"],"sourcesContent":["<template>\n <div v-if=\"!updatePending\">\n <h1><router-link to=\"/classrooms\">My Classrooms</router-link> / {{ classroomCfg!.name }}</h1>\n\n <h3>\n Join code: {{ classroomCfg!.joinCode }}\n <router-link :to=\"`/classrooms/${classroomId}/code`\">\n <v-btn size=\"x-small\" icon=\"mdi-fullscreen\" color=\"accent\" alt=\"Make Fullscreen\"> </v-btn>\n </router-link>\n </h3>\n <v-row>\n <v-col cols=\"12\" sm=\"6\" md=\"4\">\n <v-checkbox v-model=\"classroomCfg!.peerAssist\" label=\"Allow peer instruction\"></v-checkbox>\n </v-col>\n <v-col v-if=\"classroomDB\" cols=\"12\">\n <h2>Assigned Content:</h2>\n <h3>Quilts:</h3>\n <ul></ul>\n <ul>\n <li v-for=\"c in _assignedCourses\" :key=\"c.courseID\">\n {{ c.courseID }} <a @click=\"removeContent(c)\">Remove</a>\n </li>\n </ul>\n <h3>Tags:</h3>\n <ul>\n <li v-for=\"(c, i) in _assignedTags\" :key=\"i\">\n {{ c.courseID }} - {{ c.tagID }} <a @click=\"removeContent(c)\">Remove</a>\n </li>\n </ul>\n <v-fade-transition>\n <v-btn v-if=\"!addingContent\" color=\"primary\" @click=\"addingContent = true\">\n Assign New Content\n <v-icon end>mdi-plus</v-icon>\n </v-btn>\n </v-fade-transition>\n <v-card v-if=\"addingContent\">\n <v-toolbar>\n <v-toolbar-title>Add Content</v-toolbar-title>\n <v-spacer></v-spacer>\n <v-btn icon=\"mdi-close\" color=\"error\" @click=\"addingContent = false\"> </v-btn>\n </v-toolbar>\n <v-card-text>\n <v-select\n v-model=\"selectedCourse\"\n label=\"Select Quilt\"\n :items=\"availableCourses\"\n item-title=\"name\"\n item-value=\"_id\"\n title=\"Select Quilt\"\n ></v-select>\n\n <v-select\n v-model=\"selectedTags\"\n label=\"Select Tags\"\n :items=\"availableTags\"\n item-title=\"name\"\n item-value=\"name\"\n multiple\n chips\n hint=\"\"\n persistent-hint\n ></v-select>\n </v-card-text>\n\n <v-card-actions>\n <v-btn v-if=\"selectedCourse !== ''\" color=\"primary\" @click=\"assignContent\">\n {{ selectedTags.length == 0 ? 'Add Entire Quilt' : 'Add Tags' }}\n <v-icon end>mdi-plus</v-icon>\n </v-btn>\n </v-card-actions>\n </v-card>\n </v-col>\n </v-row>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport moment from 'moment';\nimport { TeacherClassroomDBInterface, AssignedContent, AssignedTag, Tag, getDataLayer } from '@vue-skuilder/db';\nimport { ClassroomConfig, CourseConfig } from '@vue-skuilder/common';\nimport { defineComponent } from 'vue';\nimport { getCurrentUser } from '@vue-skuilder/common-ui';\n\nexport default defineComponent({\n name: 'ClassroomCtrlPanel',\n\n props: {\n classroomId: {\n type: String,\n required: true,\n },\n },\n\n data() {\n return {\n classroomCfg: null as ClassroomConfig | null,\n classroomDB: null as TeacherClassroomDBInterface | null,\n assignedContent: [] as AssignedContent[],\n nameRules: [\n (value: string): string | boolean => {\n const max = 30;\n return value.length > max ? `Course name must be ${max} characters or less` : true;\n },\n ],\n updatePending: true,\n addingContent: false,\n availableCourses: [] as CourseConfig[],\n selectedCourse: '',\n availableTags: [] as Tag[],\n selectedTags: [] as string[],\n };\n },\n\n computed: {\n _assignedCourses(): AssignedContent[] {\n return this.assignedContent.filter((c) => c.type === 'course');\n },\n _assignedTags(): AssignedTag[] {\n return this.assignedContent.filter((c) => c.type === 'tag') as AssignedTag[];\n },\n },\n\n watch: {\n async selectedCourse() {\n if (this.selectedCourse) {\n // Get course DB from data layer\n const courseDB = getDataLayer().getCourseDB(this.selectedCourse);\n // Get tags from course DB\n const tagResponse = await courseDB.getCourseTagStubs();\n this.availableTags = tagResponse.rows.map((row) => row.doc!);\n } else {\n this.availableTags = [];\n }\n },\n },\n\n async created() {\n try {\n // Get classroom DB from data layer\n this.classroomDB = (await getDataLayer().getClassroomDB(\n this.classroomId,\n 'teacher'\n )) as TeacherClassroomDBInterface;\n this.assignedContent = await this.classroomDB.getAssignedContent();\n this.classroomCfg = this.classroomDB.getConfig();\n\n console.log(`[ClassroomCtrlPanel] Route loaded w/ (prop) _id: ${this.classroomId}`);\n console.log(`[ClassroomCtrlPanel] Config: ${JSON.stringify(this.classroomCfg)}`);\n\n // Get course list from data layer\n this.availableCourses = await getDataLayer().getCoursesDB().getCourseList();\n\n this.updatePending = false;\n } catch (error) {\n console.error('[ClassroomCtrlPanel] Error initializing:', error);\n }\n },\n\n methods: {\n async assignContent() {\n if (!this.classroomDB) return;\n const u = await getCurrentUser();\n\n if (this.selectedTags.length === 0) {\n await this.classroomDB.assignContent?.({\n assignedOn: moment(),\n activeOn: moment(),\n type: 'course',\n courseID: this.selectedCourse,\n assignedBy: u.getUsername(),\n });\n } else {\n await Promise.all(\n this.selectedTags.map((tag) =>\n this.classroomDB!.assignContent?.({\n assignedOn: moment(),\n activeOn: moment(),\n type: 'tag',\n courseID: this.selectedCourse,\n tagID: tag,\n assignedBy: u.getUsername(),\n })\n )\n );\n }\n\n this.assignedContent = await this.classroomDB.getAssignedContent();\n this.addingContent = false;\n this.selectedCourse = '';\n this.selectedTags = [];\n this.availableTags = [];\n },\n\n async removeContent(c: AssignedContent) {\n if (this.classroomDB && this.classroomDB.removeContent) {\n await this.classroomDB.removeContent(c);\n this.assignedContent = await this.classroomDB.getAssignedContent();\n }\n },\n\n async submit() {\n this.updatePending = true;\n },\n },\n});\n</script>\n"],"names":["_sfc_main","defineComponent","name","props","classroomId","type","String","required","data","classroomCfg","classroomDB","assignedContent","nameRules","value","length","updatePending","addingContent","availableCourses","selectedCourse","availableTags","selectedTags","computed","_assignedCourses","this","filter","c","_assignedTags","watch","courseDB","getDataLayer","getCourseDB","tagResponse","getCourseTagStubs","rows","map","row","doc","created","getClassroomDB","getAssignedContent","getConfig","console","log","JSON","stringify","getCoursesDB","getCourseList","error","methods","assignContent","u","getCurrentUser","assignedOn","moment","activeOn","courseID","assignedBy","getUsername","Promise","all","tag","tagID","removeContent","submit","_hoisted_1","key","_hoisted_2","_hoisted_3","_ctx","_createCommentVNode","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_component_router_link","to","default","_cache","_createTextVNode","_","_toDisplayString","joinCode","_withCtx","_component_v_btn","size","icon","color","alt","_component_v_row","_component_v_col","cols","sm","md","_component_v_checkbox","modelValue","peerAssist","$event","label","_createBlock","_Fragment","_renderList","onClick","i","_component_v_fade_transition","_component_v_icon","end","_component_v_card","_component_v_toolbar","_component_v_toolbar_title","_component_v_spacer","_component_v_card_text","_component_v_select","items","title","multiple","chips","hint","_component_v_card_actions"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{d as e,s,l as t,i as a,j as l,k as o,m as r,_ as n,r as i,c as d,o as u,w as c,a as m,e as p,g as h,h as f,T as C,f as g,F as _,n as v,t as y,p as b}from"./index-CfLe2ewO.js";import{s as w,M as A}from"./mousetrap-BPMmAIzH.js";const k=e({emits:["ClassroomEditingComplete"],data(){return{mousetrap:new A(this.$el),peerAssist:!0,name:"",birthYear:void 0,id:"",nameRules:[e=>!(e.length>30)||"Course name must be 30 characters or less"],description:"",banner:void 0,thumb:void 0,updatePending:!1,birthYears:[]}},created(){this.mousetrap.bind("esc",this.clearFormAndDismiss);const e=r().year();this.birthYears.push({text:`< ${e-17} (Adult Students)`,value:0});for(let s=17;s>=6;s--)this.birthYears.push({text:`${e-s} (Grade ${s-5})`,value:e-s});this.birthYears.push({text:`>${e-6} (K or younger)`,value:e-5})},methods:{async submit(){this.updatePending=!0;const e=await s(),r={name:this.name,teachers:[e.getUsername()],students:[],birthYear:this.birthYear,classMeetingSchedule:"",peerAssist:this.peerAssist,joinCode:""};t(`Class Config:\n ${JSON.stringify(r)}`);const n=await w({data:r,type:a.CREATE_CLASSROOM,response:null,user:e.getUsername()});n.response&&n.response.ok?(l({text:`Class created successfully. Join code: ${n.response.joincode}`,status:o.ok}),e.registerForClassroom(n.response.uuid,"teacher")):l({text:"Failed to create class. Please try again.",status:o.error}),this.clearFormAndDismiss(),this.updatePending=!1},clearFormAndDismiss(){this.name="",this.description="",this.$emit("ClassroomEditingComplete")}}});const x=n(e({name:"ClassroomsView",components:{ClassroomEditor:n(k,[["render",function(e,s,t,a,l,o){const r=i("v-card-title"),n=i("v-spacer"),h=i("v-icon"),f=i("v-btn"),C=i("v-toolbar"),g=i("v-text-field"),_=i("v-col"),v=i("v-checkbox"),y=i("v-select"),b=i("v-row"),w=i("v-container"),A=i("v-form"),k=i("v-card");return u(),d(k,null,{default:c((()=>[m(C,{color:"primary"},{default:c((()=>[m(r,{class:"text-h6 font-weight-regular"},{default:c((()=>s[3]||(s[3]=[p("Start a New Class")]))),_:1}),m(n),m(f,{icon:"",onClick:e.clearFormAndDismiss},{default:c((()=>[m(h,null,{default:c((()=>s[4]||(s[4]=[p("mdi-close")]))),_:1})])),_:1},8,["onClick"])])),_:1}),m(A,null,{default:c((()=>[m(w,null,{default:c((()=>[m(b,null,{default:c((()=>[m(_,{cols:"12",sm:"6",md:"4"},{default:c((()=>[m(g,{modelValue:e.name,"onUpdate:modelValue":s[0]||(s[0]=s=>e.name=s),counter:"30",rules:e.nameRules,label:"Class Name",required:"",hint:"Eg: Smith, Chemistry, Period 3"},null,8,["modelValue","rules"])])),_:1}),m(_,{cols:"12",sm:"6",md:"4"},{default:c((()=>[m(v,{modelValue:e.peerAssist,"onUpdate:modelValue":s[1]||(s[1]=s=>e.peerAssist=s),label:"Allow peer instruction"},null,8,["modelValue"])])),_:1}),m(_,{cols:"12",sm:"6",md:"4"},{default:c((()=>[m(y,{modelValue:e.birthYear,"onUpdate:modelValue":s[2]||(s[2]=s=>e.birthYear=s),items:e.birthYears,label:"Approximate Birth Year of Students","item-title":"text","item-value":"value"},null,8,["modelValue","items"])])),_:1}),m(_,{cols:"12",sm:"6",md:"4"},{default:c((()=>[m(f,{loading:e.updatePending,color:"primary",onClick:e.submit},{default:c((()=>s[5]||(s[5]=[p("Create This Class")]))),_:1},8,["loading","onClick"])])),_:1})])),_:1})])),_:1})])),_:1})])),_:1})}]])},beforeRouteEnter(e,s,t){t()},data:()=>({classes:[],joinCode:"",studentClasses:[],teacherClasses:[],spinnerMap:{},newClassDialog:!1,user:null}),created(){this.refreshData()},methods:{async refreshData(){this.$data.user=await s();const e=(await this.user.getUserClassrooms()).registrations,t=[],a=[];e.forEach((async e=>{const s=(await h().getClassroomDB(e.classID,"teacher"==e.registeredAs||"student"==e.registeredAs?e.registeredAs:"student")).getConfig();console.log(`Registered class: ${JSON.stringify(s)}`);const l={_id:e.classID,name:s.name};"student"===e.registeredAs?t.push(l):"teacher"===e.registeredAs&&a.push(l)})),this.studentClasses=t,this.teacherClasses=a},async deleteClass(e){const s=await w({type:a.DELETE_CLASSROOM,user:this.user?.getUsername()||"",classID:e,response:null});s.response&&s.response.ok?l({text:"Class deleted successfully.",status:o.ok}):l({text:"Failed to delete class. Please try again.",status:o.error})},async leaveClass(e){this.spinnerMap[e]=!0,console.log(`Attempting to drop class: ${e}`);const s=await w({type:a.LEAVE_CLASSROOM,data:{classID:e},user:this.user?.getUsername()||"",response:null});s.response&&s.response.ok&&this.user&&await this.user.dropFromClassroom(e),delete this.spinnerMap[e],this.refreshData()},async joinClass(){const e=await w({type:a.JOIN_CLASSROOM,data:{joinCode:this.joinCode,registerAs:"student",user:this.user?.getUsername()||""},user:this.user?.getUsername()||"",response:null});e.response&&e.response.ok?(console.log("Adding registration to userDB..."),this.user?(await registerUserForClassroom(this.user.getUsername(),e.response.id_course,"student"),l({text:`Successfully joined class: ${e.response.course_name}.`,status:o.ok})):l({text:"Failed to join class. [Unknown current user.]",status:o.error})):e.response&&l({text:e.response.errorText,status:o.error}),this.refreshData()},async processResponse(){this.newClassDialog=!this.newClassDialog}}}),[["render",function(e,s,t,a,l,o){const r=i("v-toolbar-title"),n=i("v-toolbar"),h=i("v-list-item-title"),w=i("v-btn"),A=i("v-list-item"),k=i("v-list"),x=i("v-card"),D=i("v-col"),S=i("v-row"),V=i("v-divider"),j=i("v-text-field"),E=i("v-card-text"),U=i("classroom-editor"),M=i("v-dialog"),O=i("v-container");return u(),d(O,{fluid:""},{default:c((()=>[m(S,{class:"pa-4",justify:"space-around"},{default:c((()=>[e.studentClasses.length>0?(u(),d(D,{key:0,cols:"12",sm:"12",md:"4"},{default:c((()=>[m(x,null,{default:c((()=>[m(n,{color:"primary"},{default:c((()=>[m(r,null,{default:c((()=>s[2]||(s[2]=[p("My Classes")]))),_:1})])),_:1}),m(k,null,{default:c((()=>[m(C,{name:"component-fade",mode:"out-in"},{default:c((()=>[(u(!0),g(_,null,v(e.studentClasses,(t=>(u(),d(A,{key:t._id,value:t},{append:c((()=>[m(w,{size:"small",color:"secondary",loading:void 0!==e.spinnerMap[t._id],onClick:s=>e.leaveClass(t._id)},{default:c((()=>s[3]||(s[3]=[p(" Leave this class ")]))),_:2},1032,["loading","onClick"])])),default:c((()=>[m(h,null,{default:c((()=>[p(y(t.name),1)])),_:2},1024)])),_:2},1032,["value"])))),128))])),_:1})])),_:1})])),_:1})])),_:1})):f("",!0),e.teacherClasses.length>0?(u(),d(D,{key:1,cols:"12",sm:"12",md:"4"},{default:c((()=>[m(x,null,{default:c((()=>[m(n,{color:"primary"},{default:c((()=>[m(r,null,{default:c((()=>s[4]||(s[4]=[p("Classes I Manage")]))),_:1})])),_:1}),m(k,null,{default:c((()=>[m(C,{name:"component-fade",mode:"out-in"},{default:c((()=>[(u(!0),g(_,null,v(e.teacherClasses,(t=>(u(),d(A,{key:t._id,value:t},{append:c((()=>[m(w,{size:"small",color:"secondary",loading:void 0!==e.spinnerMap[t._id],to:`/classrooms/${t._id}`},{default:c((()=>s[5]||(s[5]=[p(" Open ")]))),_:2},1032,["loading","to"])])),default:c((()=>[m(h,null,{default:c((()=>[p(y(t.name),1)])),_:2},1024)])),_:2},1032,["value"])))),128))])),_:1})])),_:1})])),_:1})])),_:1})):f("",!0),0===e.studentClasses.length&&0===e.teacherClasses.length?(u(),d(D,{key:2,class:"text-h5 text-center"},{default:c((()=>s[6]||(s[6]=[p(" You are not in any classes! Join your class below if someone has given you a joincode. Or else, start your own! ")]))),_:1})):f("",!0)])),_:1}),m(V,{class:"my-4"}),m(S,{class:"pa-4"},{default:c((()=>[m(D,{cols:"12",sm:"12",md:"8",lg:"6",xl:"6"},{default:c((()=>[m(x,null,{default:c((()=>[m(n,{color:"primary"},{default:c((()=>[m(r,null,{default:c((()=>s[7]||(s[7]=[p("Join a class")]))),_:1})])),_:1}),m(E,null,{default:c((()=>[m(j,{modelValue:e.joinCode,"onUpdate:modelValue":s[0]||(s[0]=s=>e.joinCode=s),label:"Class Code",variant:"outlined"},null,8,["modelValue"]),m(w,{color:"primary",onClick:e.joinClass},{default:c((()=>s[8]||(s[8]=[p("Join")]))),_:1},8,["onClick"])])),_:1})])),_:1})])),_:1})])),_:1}),m(M,{modelValue:e.newClassDialog,"onUpdate:modelValue":s[1]||(s[1]=s=>e.newClassDialog=s),fullscreen:"",transition:"dialog-bottom-transition",scrim:!1},{activator:c((({props:e})=>[m(w,b({color:"primary"},e),{default:c((()=>s[9]||(s[9]=[p("Start a new Class")]))),_:2},1040)])),default:c((()=>[m(U,{onClassroomEditingComplete:e.processResponse},null,8,["onClassroomEditingComplete"])])),_:1},8,["modelValue"])])),_:1})}]]);export{x as default};
2
+ //# sourceMappingURL=Classrooms-uc9jXghN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Classrooms-uc9jXghN.js","sources":["../../src/components/Classrooms/CreateClassroom.vue","../../src/views/Classrooms.vue"],"sourcesContent":["<template>\n <v-card>\n <v-toolbar color=\"primary\">\n <v-card-title class=\"text-h6 font-weight-regular\">Start a New Class</v-card-title>\n <v-spacer></v-spacer>\n <v-btn icon @click=\"clearFormAndDismiss\">\n <v-icon>mdi-close</v-icon>\n </v-btn>\n </v-toolbar>\n <v-form>\n <v-container>\n <v-row>\n <v-col cols=\"12\" sm=\"6\" md=\"4\">\n <v-text-field\n v-model=\"name\"\n counter=\"30\"\n :rules=\"nameRules\"\n label=\"Class Name\"\n required\n hint=\"Eg: Smith, Chemistry, Period 3\"\n ></v-text-field>\n </v-col>\n <v-col cols=\"12\" sm=\"6\" md=\"4\">\n <v-checkbox v-model=\"peerAssist\" label=\"Allow peer instruction\"></v-checkbox>\n </v-col>\n <v-col cols=\"12\" sm=\"6\" md=\"4\">\n <v-select\n v-model=\"birthYear\"\n :items=\"birthYears\"\n label=\"Approximate Birth Year of Students\"\n item-title=\"text\"\n item-value=\"value\"\n ></v-select>\n </v-col>\n <v-col cols=\"12\" sm=\"6\" md=\"4\">\n <v-btn :loading=\"updatePending\" color=\"primary\" @click=\"submit\">Create This Class</v-btn>\n </v-col>\n </v-row>\n </v-container>\n </v-form>\n </v-card>\n</template>\n\n<script lang=\"ts\">\nimport moment from 'moment';\nimport Mousetrap from 'mousetrap';\nimport { log } from '@vue-skuilder/common';\nimport { Status, ClassroomConfig, CreateClassroom, ServerRequestType } from '@vue-skuilder/common';\nimport serverRequest from '../../server';\nimport { alertUser } from '@vue-skuilder/common-ui';\nimport { defineComponent } from 'vue';\nimport { getCurrentUser } from '@vue-skuilder/common-ui';\n\nexport default defineComponent({\n emits: ['ClassroomEditingComplete'],\n\n data() {\n return {\n mousetrap: new Mousetrap(this.$el),\n peerAssist: true,\n name: '',\n birthYear: undefined as number | undefined,\n id: '',\n nameRules: [\n (value: string): string | boolean => {\n const max = 30;\n if (value.length > max) {\n return `Course name must be ${max} characters or less`;\n } else {\n return true;\n }\n },\n ],\n description: '',\n banner: undefined as Blob | undefined,\n thumb: undefined as Blob | undefined,\n updatePending: false,\n birthYears: [] as Array<{\n text: string;\n value: number;\n }>,\n };\n },\n\n created() {\n this.mousetrap.bind('esc', this.clearFormAndDismiss);\n\n const year: number = moment().year();\n\n this.birthYears.push({\n text: `< ${year - 17} (Adult Students)`,\n value: 0,\n });\n\n for (let age = 17; age >= 6; age--) {\n this.birthYears.push({\n text: `${year - age} (Grade ${age - 5})`,\n value: year - age,\n });\n }\n\n this.birthYears.push({\n text: `>${year - 6} (K or younger)`,\n value: year - 5,\n });\n },\n\n methods: {\n async submit() {\n this.updatePending = true;\n const u = await getCurrentUser();\n\n const config: ClassroomConfig = {\n name: this.name,\n teachers: [u.getUsername()],\n students: [],\n birthYear: this.birthYear,\n classMeetingSchedule: '',\n peerAssist: this.peerAssist,\n joinCode: '',\n };\n\n log(`Class Config:\n ${JSON.stringify(config)}`);\n\n const result = await serverRequest<CreateClassroom>({\n data: config,\n type: ServerRequestType.CREATE_CLASSROOM,\n response: null,\n user: u.getUsername(),\n });\n\n if (result.response && result.response.ok) {\n alertUser({\n text: `Class created successfully. Join code: ${result.response.joincode}`,\n status: Status.ok,\n });\n\n u.registerForClassroom(result.response.uuid, 'teacher');\n } else {\n alertUser({\n text: `Failed to create class. Please try again.`,\n status: Status.error,\n });\n }\n\n this.clearFormAndDismiss();\n this.updatePending = false;\n },\n\n clearFormAndDismiss() {\n this.name = '';\n this.description = '';\n\n this.$emit('ClassroomEditingComplete');\n },\n },\n});\n</script>\n","<template>\n <v-container fluid>\n <v-row class=\"pa-4\" justify=\"space-around\">\n <!-- Student Classes -->\n <v-col v-if=\"studentClasses.length > 0\" cols=\"12\" sm=\"12\" md=\"4\">\n <v-card>\n <v-toolbar color=\"primary\">\n <v-toolbar-title>My Classes</v-toolbar-title>\n </v-toolbar>\n\n <v-list>\n <transition-group name=\"component-fade\" mode=\"out-in\">\n <v-list-item v-for=\"classroom in studentClasses\" :key=\"classroom._id\" :value=\"classroom\">\n <v-list-item-title>\n {{ classroom.name }}\n </v-list-item-title>\n\n <template #append>\n <v-btn\n size=\"small\"\n color=\"secondary\"\n :loading=\"spinnerMap[classroom._id] !== undefined\"\n @click=\"leaveClass(classroom._id)\"\n >\n Leave this class\n </v-btn>\n </template>\n </v-list-item>\n </transition-group>\n </v-list>\n </v-card>\n </v-col>\n\n <!-- Teacher Classes -->\n <v-col v-if=\"teacherClasses.length > 0\" cols=\"12\" sm=\"12\" md=\"4\">\n <v-card>\n <v-toolbar color=\"primary\">\n <v-toolbar-title>Classes I Manage</v-toolbar-title>\n </v-toolbar>\n\n <v-list>\n <transition-group name=\"component-fade\" mode=\"out-in\">\n <v-list-item v-for=\"classroom in teacherClasses\" :key=\"classroom._id\" :value=\"classroom\">\n <v-list-item-title>\n {{ classroom.name }}\n </v-list-item-title>\n\n <template #append>\n <v-btn\n size=\"small\"\n color=\"secondary\"\n :loading=\"spinnerMap[classroom._id] !== undefined\"\n :to=\"`/classrooms/${classroom._id}`\"\n >\n Open\n </v-btn>\n </template>\n </v-list-item>\n </transition-group>\n </v-list>\n </v-card>\n </v-col>\n\n <!-- Empty State Message -->\n <v-col v-if=\"studentClasses.length === 0 && teacherClasses.length === 0\" class=\"text-h5 text-center\">\n You are not in any classes! Join your class below if someone has given you a joincode. Or else, start your own!\n </v-col>\n </v-row>\n\n <v-divider class=\"my-4\"></v-divider>\n\n <!-- Join Class Form -->\n <v-row class=\"pa-4\">\n <v-col cols=\"12\" sm=\"12\" md=\"8\" lg=\"6\" xl=\"6\">\n <v-card>\n <v-toolbar color=\"primary\">\n <v-toolbar-title>Join a class</v-toolbar-title>\n </v-toolbar>\n <v-card-text>\n <v-text-field v-model=\"joinCode\" label=\"Class Code\" variant=\"outlined\"></v-text-field>\n <v-btn color=\"primary\" @click=\"joinClass\">Join</v-btn>\n </v-card-text>\n </v-card>\n </v-col>\n </v-row>\n\n <!-- New Class Dialog -->\n <v-dialog v-model=\"newClassDialog\" fullscreen transition=\"dialog-bottom-transition\" :scrim=\"false\">\n <template #activator=\"{ props }\">\n <v-btn color=\"primary\" v-bind=\"props\">Start a new Class</v-btn>\n </template>\n <classroom-editor @classroom-editing-complete=\"processResponse\" />\n </v-dialog>\n </v-container>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { Status, ServerRequestType, JoinClassroom, LeaveClassroom, DeleteClassroom } from '@vue-skuilder/common';\nimport { getDataLayer, UserDBInterface } from '@vue-skuilder/db';\nimport serverRequest from '@pui/server/index';\nimport { alertUser } from '@vue-skuilder/common-ui';\nimport ClassroomEditor from '@pui/components/Classrooms/CreateClassroom.vue';\nimport { getCurrentUser } from '@vue-skuilder/common-ui';\n\ninterface CourseReg {\n _id: string;\n name: string;\n}\n\nexport default defineComponent({\n name: 'ClassroomsView',\n\n components: {\n ClassroomEditor,\n },\n\n beforeRouteEnter(to, from, next) {\n // todo ?\n // See https://router.vuejs.org/guide/advanced/data-fetching.html#fetching-before-navigation\n // this.refreshData().then(() => {\n // next();\n // });\n next();\n },\n\n data() {\n return {\n classes: [] as string[],\n joinCode: '',\n studentClasses: [] as CourseReg[],\n teacherClasses: [] as CourseReg[],\n spinnerMap: {} as { [index: string]: boolean },\n newClassDialog: false,\n user: null as UserDBInterface | null,\n };\n },\n\n created() {\n this.refreshData();\n },\n\n methods: {\n async refreshData() {\n this.$data.user = await getCurrentUser();\n const registrations = (await this.user!.getUserClassrooms()).registrations;\n const studentClasses: CourseReg[] = [];\n const teacherClasses: CourseReg[] = [];\n\n registrations.forEach(async (reg) => {\n const cfg = (\n await getDataLayer().getClassroomDB(\n reg.classID,\n reg.registeredAs == 'teacher' || reg.registeredAs == 'student' ? reg.registeredAs : 'student'\n )\n ).getConfig();\n console.log(`Registered class: ${JSON.stringify(cfg)}`);\n const regItem = {\n _id: reg.classID,\n name: cfg.name,\n };\n\n if (reg.registeredAs === 'student') {\n studentClasses.push(regItem);\n } else if (reg.registeredAs === 'teacher') {\n teacherClasses.push(regItem);\n }\n });\n\n this.studentClasses = studentClasses;\n this.teacherClasses = teacherClasses;\n },\n\n async deleteClass(classId: string) {\n const result = await serverRequest<DeleteClassroom>({\n type: ServerRequestType.DELETE_CLASSROOM,\n user: this.user?.getUsername() || '',\n classID: classId,\n response: null,\n });\n if (result.response && result.response.ok) {\n alertUser({\n text: `Class deleted successfully.`,\n status: Status.ok,\n });\n } else {\n alertUser({\n text: `Failed to delete class. Please try again.`,\n status: Status.error,\n });\n }\n },\n\n async leaveClass(classID: string) {\n this.spinnerMap[classID] = true;\n console.log(`Attempting to drop class: ${classID}`);\n\n const result = await serverRequest<LeaveClassroom>({\n type: ServerRequestType.LEAVE_CLASSROOM,\n data: {\n classID: classID,\n },\n user: this.user?.getUsername() || '',\n response: null,\n });\n if (result.response && result.response.ok) {\n if (this.user) {\n await this.user!.dropFromClassroom(classID);\n }\n }\n\n delete this.spinnerMap[classID];\n this.refreshData();\n },\n\n async joinClass() {\n const result = await serverRequest<JoinClassroom>({\n type: ServerRequestType.JOIN_CLASSROOM,\n data: {\n joinCode: this.joinCode,\n registerAs: 'student',\n user: this.user?.getUsername() || '',\n },\n user: this.user?.getUsername() || '',\n response: null,\n });\n\n if (result.response && result.response.ok) {\n console.log(`Adding registration to userDB...`);\n if (this.user) {\n await registerUserForClassroom(this.user.getUsername(), result.response!.id_course, 'student');\n alertUser({\n text: `Successfully joined class: ${result.response.course_name}.`,\n status: Status.ok,\n });\n } else {\n alertUser({\n text: `Failed to join class. [Unknown current user.]`,\n status: Status.error,\n });\n }\n } else {\n if (result.response) {\n alertUser({\n text: result.response.errorText!,\n status: Status.error,\n });\n }\n }\n this.refreshData();\n },\n\n async processResponse() {\n this.newClassDialog = !this.newClassDialog;\n },\n },\n});\n</script>\n"],"names":["_sfc_main$1","defineComponent","emits","data","mousetrap","Mousetrap","this","$el","peerAssist","name","birthYear","id","nameRules","value","length","description","banner","thumb","updatePending","birthYears","created","bind","clearFormAndDismiss","year","moment","push","text","age","methods","submit","u","getCurrentUser","config","teachers","getUsername","students","classMeetingSchedule","joinCode","log","JSON","stringify","result","serverRequest","type","ServerRequestType","CREATE_CLASSROOM","response","user","ok","alertUser","joincode","status","Status","registerForClassroom","uuid","error","$emit","components","ClassroomEditor","_createBlock","_component_v_card","default","_createVNode","_component_v_toolbar","color","_component_v_card_title","class","_cache","_createTextVNode","_","_component_v_spacer","_component_v_btn","icon","onClick","_ctx","_withCtx","_component_v_icon","_component_v_form","_component_v_container","_component_v_row","_component_v_col","cols","sm","md","_component_v_text_field","modelValue","$event","counter","rules","label","required","hint","_component_v_checkbox","_component_v_select","items","loading","beforeRouteEnter","to","from","next","classes","studentClasses","teacherClasses","spinnerMap","newClassDialog","refreshData","$data","registrations","getUserClassrooms","forEach","async","reg","cfg","getDataLayer","getClassroomDB","classID","registeredAs","getConfig","console","regItem","_id","deleteClass","classId","DELETE_CLASSROOM","leaveClass","LEAVE_CLASSROOM","dropFromClassroom","joinClass","JOIN_CLASSROOM","registerAs","registerUserForClassroom","id_course","course_name","errorText","processResponse","_openBlock","fluid","justify","key","_component_v_toolbar_title","_component_v_list","_TransitionGroup","mode","_createElementBlock","_Fragment","_renderList","classroom","_component_v_list_item","append","size","_component_v_list_item_title","_toDisplayString","_createCommentVNode","_component_v_divider","lg","xl","_component_v_card_text","variant","_component_v_dialog","fullscreen","transition","scrim","activator","props","_mergeProps","_component_classroom_editor","onClassroomEditingComplete"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{d as e,_ as t,r as n,c as r,h as o,o as s,w as a,a as i,e as l,b as c,f as u,t as d,F as f,n as h,u as p,y as m,Q as g,g as y,s as b,v as w,p as S}from"./index-CfLe2ewO.js";import{N as v}from"./NewCourseDialog-4P2ZrBpL.js";import{MidiConfig as E,allCourseWare as x}from"./index-BHFq3MXV.js";import"./mousetrap-BPMmAIzH.js";function O(e,t){return function(){return e.apply(t,arguments)}}const{toString:R}=Object.prototype,{getPrototypeOf:C}=Object,{iterator:_,toStringTag:A}=Symbol,T=(e=>t=>{const n=R.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),k=e=>(e=e.toLowerCase(),t=>T(t)===e),D=e=>t=>typeof t===e,{isArray:U}=Array,j=D("undefined");function N(e){return null!==e&&!j(e)&&null!==e.constructor&&!j(e.constructor)&&P(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const F=k("ArrayBuffer");const L=D("string"),P=D("function"),I=D("number"),B=e=>null!==e&&"object"==typeof e,q=e=>{if("object"!==T(e))return!1;const t=C(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||A in e||_ in e)},M=k("Date"),z=k("File"),$=k("Blob"),W=k("FileList"),V=k("URLSearchParams"),[H,J,K,G]=["ReadableStream","Request","Response","Headers"].map(k);function Q(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),U(e))for(r=0,o=e.length;r<o;r++)t.call(null,e[r],r,e);else{if(N(e))return;const o=n?Object.getOwnPropertyNames(e):Object.keys(e),s=o.length;let a;for(r=0;r<s;r++)a=o[r],t.call(null,e[a],a,e)}}function X(e,t){if(N(e))return null;t=t.toLowerCase();const n=Object.keys(e);let r,o=n.length;for(;o-- >0;)if(r=n[o],t===r.toLowerCase())return r;return null}const Z="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:window,Y=e=>!j(e)&&e!==Z;const ee=(e=>t=>e&&t instanceof e)("undefined"!=typeof Uint8Array&&C(Uint8Array)),te=k("HTMLFormElement"),ne=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),re=k("RegExp"),oe=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};Q(n,((n,o)=>{let s;!1!==(s=t(n,o,e))&&(r[o]=s||n)})),Object.defineProperties(e,r)};const se=k("AsyncFunction"),ae=(ie="function"==typeof setImmediate,le=P(Z.postMessage),ie?setImmediate:le?(ce=`axios@${Math.random()}`,ue=[],Z.addEventListener("message",(({source:e,data:t})=>{e===Z&&t===ce&&ue.length&&ue.shift()()}),!1),e=>{ue.push(e),Z.postMessage(ce,"*")}):e=>setTimeout(e));var ie,le,ce,ue;const de="undefined"!=typeof queueMicrotask?queueMicrotask.bind(Z):"undefined"!=typeof process&&process.nextTick||ae,fe={isArray:U,isArrayBuffer:F,isBuffer:N,isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||P(e.append)&&("formdata"===(t=T(e))||"object"===t&&P(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&F(e.buffer),t},isString:L,isNumber:I,isBoolean:e=>!0===e||!1===e,isObject:B,isPlainObject:q,isEmptyObject:e=>{if(!B(e)||N(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(t){return!1}},isReadableStream:H,isRequest:J,isResponse:K,isHeaders:G,isUndefined:j,isDate:M,isFile:z,isBlob:$,isRegExp:re,isFunction:P,isStream:e=>B(e)&&P(e.pipe),isURLSearchParams:V,isTypedArray:ee,isFileList:W,forEach:Q,merge:function e(){const{caseless:t,skipUndefined:n}=Y(this)&&this||{},r={},o=(o,s)=>{const a=t&&X(r,s)||s;q(r[a])&&q(o)?r[a]=e(r[a],o):q(o)?r[a]=e({},o):U(o)?r[a]=o.slice():n&&j(o)||(r[a]=o)};for(let s=0,a=arguments.length;s<a;s++)arguments[s]&&Q(arguments[s],o);return r},extend:(e,t,n,{allOwnKeys:r}={})=>(Q(t,((t,r)=>{n&&P(t)?e[r]=O(t,n):e[r]=t}),{allOwnKeys:r}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,s,a;const i={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),s=o.length;s-- >0;)a=o[s],r&&!r(a,e,t)||i[a]||(t[a]=e[a],i[a]=!0);e=!1!==n&&C(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:T,kindOfTest:k,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(U(e))return e;let t=e.length;if(!I(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[_]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:te,hasOwnProperty:ne,hasOwnProp:ne,reduceDescriptors:oe,freezeMethods:e=>{oe(e,((t,n)=>{if(P(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];P(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return U(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:X,global:Z,isContextDefined:Y,isSpecCompliantForm:function(e){return!!(e&&P(e.append)&&"FormData"===e[A]&&e[_])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(B(e)){if(t.indexOf(e)>=0)return;if(N(e))return e;if(!("toJSON"in e)){t[r]=e;const o=U(e)?[]:{};return Q(e,((e,t)=>{const s=n(e,r+1);!j(s)&&(o[t]=s)})),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:se,isThenable:e=>e&&(B(e)||P(e))&&P(e.then)&&P(e.catch),setImmediate:ae,asap:de,isIterable:e=>null!=e&&P(e[_])};function he(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status?o.status:null)}fe.inherits(he,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:fe.toJSONObject(this.config),code:this.code,status:this.status}}});const pe=he.prototype,me={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{me[e]={value:e}})),Object.defineProperties(he,me),Object.defineProperty(pe,"isAxiosError",{value:!0}),he.from=(e,t,n,r,o,s)=>{const a=Object.create(pe);fe.toFlatObject(e,a,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e));const i=e&&e.message?e.message:"Error",l=null==t&&e?e.code:t;return he.call(a,i,l,n,r,o),e&&null==a.cause&&Object.defineProperty(a,"cause",{value:e,configurable:!0}),a.name=e&&e.name||"Error",s&&Object.assign(a,s),a};function ge(e){return fe.isPlainObject(e)||fe.isArray(e)}function ye(e){return fe.endsWith(e,"[]")?e.slice(0,-2):e}function be(e,t,n){return e?e.concat(t).map((function(e,t){return e=ye(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const we=fe.toFlatObject(fe,{},null,(function(e){return/^is[A-Z]/.test(e)}));function Se(e,t,n){if(!fe.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=fe.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!fe.isUndefined(t[e])}))).metaTokens,o=n.visitor||c,s=n.dots,a=n.indexes,i=(n.Blob||"undefined"!=typeof Blob&&Blob)&&fe.isSpecCompliantForm(t);if(!fe.isFunction(o))throw new TypeError("visitor must be a function");function l(e){if(null===e)return"";if(fe.isDate(e))return e.toISOString();if(fe.isBoolean(e))return e.toString();if(!i&&fe.isBlob(e))throw new he("Blob is not supported. Use a Buffer instead.");return fe.isArrayBuffer(e)||fe.isTypedArray(e)?i&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,n,o){let i=e;if(e&&!o&&"object"==typeof e)if(fe.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(fe.isArray(e)&&function(e){return fe.isArray(e)&&!e.some(ge)}(e)||(fe.isFileList(e)||fe.endsWith(n,"[]"))&&(i=fe.toArray(e)))return n=ye(n),i.forEach((function(e,r){!fe.isUndefined(e)&&null!==e&&t.append(!0===a?be([n],r,s):null===a?n:n+"[]",l(e))})),!1;return!!ge(e)||(t.append(be(o,n,s),l(e)),!1)}const u=[],d=Object.assign(we,{defaultVisitor:c,convertValue:l,isVisitable:ge});if(!fe.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!fe.isUndefined(n)){if(-1!==u.indexOf(n))throw Error("Circular reference detected in "+r.join("."));u.push(n),fe.forEach(n,(function(n,s){!0===(!(fe.isUndefined(n)||null===n)&&o.call(t,n,fe.isString(s)?s.trim():s,r,d))&&e(n,r?r.concat(s):[s])})),u.pop()}}(e),t}function ve(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function Ee(e,t){this._pairs=[],e&&Se(e,this,t)}const xe=Ee.prototype;function Oe(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Re(e,t,n){if(!t)return e;const r=n&&n.encode||Oe;fe.isFunction(n)&&(n={serialize:n});const o=n&&n.serialize;let s;if(s=o?o(t,n):fe.isURLSearchParams(t)?t.toString():new Ee(t,n).toString(r),s){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+s}return e}xe.append=function(e,t){this._pairs.push([e,t])},xe.toString=function(e){const t=e?function(t){return e.call(this,t,ve)}:ve;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};class InterceptorManager{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){fe.forEach(this.handlers,(function(t){null!==t&&e(t)}))}}const Ce={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},_e={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Ee,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},Ae="undefined"!=typeof window&&"undefined"!=typeof document,Te="object"==typeof navigator&&navigator||void 0,ke=Ae&&(!Te||["ReactNative","NativeScript","NS"].indexOf(Te.product)<0),De="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,Ue=Ae&&window.location.href||"http://localhost",je={...Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Ae,hasStandardBrowserEnv:ke,hasStandardBrowserWebWorkerEnv:De,navigator:Te,origin:Ue},Symbol.toStringTag,{value:"Module"})),..._e};function Ne(e){function t(e,n,r,o){let s=e[o++];if("__proto__"===s)return!0;const a=Number.isFinite(+s),i=o>=e.length;if(s=!s&&fe.isArray(r)?r.length:s,i)return fe.hasOwnProp(r,s)?r[s]=[r[s],n]:r[s]=n,!a;r[s]&&fe.isObject(r[s])||(r[s]=[]);return t(e,n,r[s],o)&&fe.isArray(r[s])&&(r[s]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let s;for(r=0;r<o;r++)s=n[r],t[s]=e[s];return t}(r[s])),!a}if(fe.isFormData(e)&&fe.isFunction(e.entries)){const n={};return fe.forEachEntry(e,((e,r)=>{t(function(e){return fe.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null}const Fe={transitional:Ce,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=fe.isObject(e);o&&fe.isHTMLForm(e)&&(e=new FormData(e));if(fe.isFormData(e))return r?JSON.stringify(Ne(e)):e;if(fe.isArrayBuffer(e)||fe.isBuffer(e)||fe.isStream(e)||fe.isFile(e)||fe.isBlob(e)||fe.isReadableStream(e))return e;if(fe.isArrayBufferView(e))return e.buffer;if(fe.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let s;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return Se(e,new je.classes.URLSearchParams,{visitor:function(e,t,n,r){return je.isNode&&fe.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)},...t})}(e,this.formSerializer).toString();if((s=fe.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return Se(s?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(fe.isString(e))try{return(t||JSON.parse)(e),fe.trim(e)}catch(r){if("SyntaxError"!==r.name)throw r}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||Fe.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(fe.isResponse(e)||fe.isReadableStream(e))return e;if(e&&fe.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e,this.parseReviver)}catch(o){if(n){if("SyntaxError"===o.name)throw he.from(o,he.ERR_BAD_RESPONSE,this,null,this.response);throw o}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:je.classes.FormData,Blob:je.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};fe.forEach(["delete","get","head","post","put","patch"],(e=>{Fe.headers[e]={}}));const Le=fe.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Pe=Symbol("internals");function Ie(e){return e&&String(e).trim().toLowerCase()}function Be(e){return!1===e||null==e?e:fe.isArray(e)?e.map(Be):String(e)}function qe(e,t,n,r,o){return fe.isFunction(r)?r.call(this,t,n):(o&&(t=n),fe.isString(t)?fe.isString(r)?-1!==t.indexOf(r):fe.isRegExp(r)?r.test(t):void 0:void 0)}let Me=class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=Ie(t);if(!o)throw new Error("header name must be a non-empty string");const s=fe.findKey(r,o);(!s||void 0===r[s]||!0===n||void 0===n&&!1!==r[s])&&(r[s||t]=Be(e))}const s=(e,t)=>fe.forEach(e,((e,n)=>o(e,n,t)));if(fe.isPlainObject(e)||e instanceof this.constructor)s(e,t);else if(fe.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))s((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&Le[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t);else if(fe.isObject(e)&&fe.isIterable(e)){let n,r,o={};for(const t of e){if(!fe.isArray(t))throw TypeError("Object iterator must return a key-value pair");o[r=t[0]]=(n=o[r])?fe.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}s(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=Ie(e)){const n=fe.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(fe.isFunction(t))return t.call(this,e,n);if(fe.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Ie(e)){const n=fe.findKey(this,e);return!(!n||void 0===this[n]||t&&!qe(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=Ie(e)){const o=fe.findKey(n,e);!o||t&&!qe(0,n[o],o,t)||(delete n[o],r=!0)}}return fe.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!qe(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return fe.forEach(this,((r,o)=>{const s=fe.findKey(n,o);if(s)return t[s]=Be(r),void delete t[o];const a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(o):String(o).trim();a!==o&&delete t[o],t[a]=Be(r),n[a]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return fe.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&fe.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[Pe]=this[Pe]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=Ie(e);t[r]||(!function(e,t){const n=fe.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return fe.isArray(e)?e.forEach(r):r(e),this}};function ze(e,t){const n=this||Fe,r=t||n,o=Me.from(r.headers);let s=r.data;return fe.forEach(e,(function(e){s=e.call(n,s,o.normalize(),t?t.status:void 0)})),o.normalize(),s}function $e(e){return!(!e||!e.__CANCEL__)}function We(e,t,n){he.call(this,null==e?"canceled":e,he.ERR_CANCELED,t,n),this.name="CanceledError"}function Ve(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new he("Request failed with status code "+n.status,[he.ERR_BAD_REQUEST,he.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}Me.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),fe.reduceDescriptors(Me.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),fe.freezeMethods(Me),fe.inherits(We,he,{__CANCEL__:!0});const He=(e,t,n=3)=>{let r=0;const o=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,s=0,a=0;return t=void 0!==t?t:1e3,function(i){const l=Date.now(),c=r[a];o||(o=l),n[s]=i,r[s]=l;let u=a,d=0;for(;u!==s;)d+=n[u++],u%=e;if(s=(s+1)%e,s===a&&(a=(a+1)%e),l-o<t)return;const f=c&&l-c;return f?Math.round(1e3*d/f):void 0}}(50,250);return function(e,t){let n,r,o=0,s=1e3/t;const a=(t,s=Date.now())=>{o=s,n=null,r&&(clearTimeout(r),r=null),e(...t)};return[(...e)=>{const t=Date.now(),i=t-o;i>=s?a(e,t):(n=e,r||(r=setTimeout((()=>{r=null,a(n)}),s-i)))},()=>n&&a(n)]}((n=>{const s=n.loaded,a=n.lengthComputable?n.total:void 0,i=s-r,l=o(i);r=s;e({loaded:s,total:a,progress:a?s/a:void 0,bytes:i,rate:l||void 0,estimated:l&&a&&s<=a?(a-s)/l:void 0,event:n,lengthComputable:null!=a,[t?"download":"upload"]:!0})}),n)},Je=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Ke=e=>(...t)=>fe.asap((()=>e(...t))),Ge=je.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,je.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(je.origin),je.navigator&&/(msie|trident)/i.test(je.navigator.userAgent)):()=>!0,Qe=je.hasStandardBrowserEnv?{write(e,t,n,r,o,s,a){if("undefined"==typeof document)return;const i=[`${e}=${encodeURIComponent(t)}`];fe.isNumber(n)&&i.push(`expires=${new Date(n).toUTCString()}`),fe.isString(r)&&i.push(`path=${r}`),fe.isString(o)&&i.push(`domain=${o}`),!0===s&&i.push("secure"),fe.isString(a)&&i.push(`SameSite=${a}`),document.cookie=i.join("; ")},read(e){if("undefined"==typeof document)return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function Xe(e,t,n){let r=!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t);return e&&(r||0==n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Ze=e=>e instanceof Me?{...e}:e;function Ye(e,t){t=t||{};const n={};function r(e,t,n,r){return fe.isPlainObject(e)&&fe.isPlainObject(t)?fe.merge.call({caseless:r},e,t):fe.isPlainObject(t)?fe.merge({},t):fe.isArray(t)?t.slice():t}function o(e,t,n,o){return fe.isUndefined(t)?fe.isUndefined(e)?void 0:r(void 0,e,0,o):r(e,t,0,o)}function s(e,t){if(!fe.isUndefined(t))return r(void 0,t)}function a(e,t){return fe.isUndefined(t)?fe.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function i(n,o,s){return s in t?r(n,o):s in e?r(void 0,n):void 0}const l={url:s,method:s,data:s,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:i,headers:(e,t,n)=>o(Ze(e),Ze(t),0,!0)};return fe.forEach(Object.keys({...e,...t}),(function(r){const s=l[r]||o,a=s(e[r],t[r],r);fe.isUndefined(a)&&s!==i||(n[r]=a)})),n}const et=e=>{const t=Ye({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:o,xsrfCookieName:s,headers:a,auth:i}=t;if(t.headers=a=Me.from(a),t.url=Re(Xe(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),i&&a.set("Authorization","Basic "+btoa((i.username||"")+":"+(i.password?unescape(encodeURIComponent(i.password)):""))),fe.isFormData(n))if(je.hasStandardBrowserEnv||je.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(fe.isFunction(n.getHeaders)){const e=n.getHeaders(),t=["content-type","content-length"];Object.entries(e).forEach((([e,n])=>{t.includes(e.toLowerCase())&&a.set(e,n)}))}if(je.hasStandardBrowserEnv&&(r&&fe.isFunction(r)&&(r=r(t)),r||!1!==r&&Ge(t.url))){const e=o&&s&&Qe.read(s);e&&a.set(o,e)}return t},tt="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){const r=et(e);let o=r.data;const s=Me.from(r.headers).normalize();let a,i,l,c,u,{responseType:d,onUploadProgress:f,onDownloadProgress:h}=r;function p(){c&&c(),u&&u(),r.cancelToken&&r.cancelToken.unsubscribe(a),r.signal&&r.signal.removeEventListener("abort",a)}let m=new XMLHttpRequest;function g(){if(!m)return;const r=Me.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders());Ve((function(e){t(e),p()}),(function(e){n(e),p()}),{data:d&&"text"!==d&&"json"!==d?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:r,config:e,request:m}),m=null}m.open(r.method.toUpperCase(),r.url,!0),m.timeout=r.timeout,"onloadend"in m?m.onloadend=g:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(g)},m.onabort=function(){m&&(n(new he("Request aborted",he.ECONNABORTED,e,m)),m=null)},m.onerror=function(t){const r=new he(t&&t.message?t.message:"Network Error",he.ERR_NETWORK,e,m);r.event=t||null,n(r),m=null},m.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||Ce;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new he(t,o.clarifyTimeoutError?he.ETIMEDOUT:he.ECONNABORTED,e,m)),m=null},void 0===o&&s.setContentType(null),"setRequestHeader"in m&&fe.forEach(s.toJSON(),(function(e,t){m.setRequestHeader(t,e)})),fe.isUndefined(r.withCredentials)||(m.withCredentials=!!r.withCredentials),d&&"json"!==d&&(m.responseType=r.responseType),h&&([l,u]=He(h,!0),m.addEventListener("progress",l)),f&&m.upload&&([i,c]=He(f),m.upload.addEventListener("progress",i),m.upload.addEventListener("loadend",c)),(r.cancelToken||r.signal)&&(a=t=>{m&&(n(!t||t.type?new We(null,e,m):t),m.abort(),m=null)},r.cancelToken&&r.cancelToken.subscribe(a),r.signal&&(r.signal.aborted?a():r.signal.addEventListener("abort",a)));const y=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(r.url);y&&-1===je.protocols.indexOf(y)?n(new he("Unsupported protocol "+y+":",he.ERR_BAD_REQUEST,e)):m.send(o||null)}))},nt=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,r=new AbortController;const o=function(e){if(!n){n=!0,a();const t=e instanceof Error?e:this.reason;r.abort(t instanceof he?t:new We(t instanceof Error?t.message:t))}};let s=t&&setTimeout((()=>{s=null,o(new he(`timeout ${t} of ms exceeded`,he.ETIMEDOUT))}),t);const a=()=>{e&&(s&&clearTimeout(s),s=null,e.forEach((e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)})),e=null)};e.forEach((e=>e.addEventListener("abort",o)));const{signal:i}=r;return i.unsubscribe=()=>fe.asap(a),i}},rt=function*(e,t){let n=e.byteLength;if(n<t)return void(yield e);let r,o=0;for(;o<n;)r=o+t,yield e.slice(o,r),o=r},ot=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:n}=await t.read();if(e)break;yield n}}finally{await t.cancel()}},st=(e,t,n,r)=>{const o=async function*(e,t){for await(const n of ot(e))yield*rt(n,t)}(e,t);let s,a=0,i=e=>{s||(s=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await o.next();if(t)return i(),void e.close();let s=r.byteLength;if(n){let e=a+=s;n(e)}e.enqueue(new Uint8Array(r))}catch(t){throw i(t),t}},cancel:e=>(i(e),o.return())},{highWaterMark:2})},{isFunction:at}=fe,it=(({Request:e,Response:t})=>({Request:e,Response:t}))(fe.global),{ReadableStream:lt,TextEncoder:ct}=fe.global,ut=(e,...t)=>{try{return!!e(...t)}catch(n){return!1}},dt=e=>{e=fe.merge.call({skipUndefined:!0},it,e);const{fetch:t,Request:n,Response:r}=e,o=t?at(t):"function"==typeof fetch,s=at(n),a=at(r);if(!o)return!1;const i=o&&at(lt),l=o&&("function"==typeof ct?(e=>t=>e.encode(t))(new ct):async e=>new Uint8Array(await new n(e).arrayBuffer())),c=s&&i&&ut((()=>{let e=!1;const t=new n(je.origin,{body:new lt,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})),u=a&&i&&ut((()=>fe.isReadableStream(new r("").body))),d={stream:u&&(e=>e.body)};o&&["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!d[e]&&(d[e]=(t,n)=>{let r=t&&t[e];if(r)return r.call(t);throw new he(`Response type '${e}' is not supported`,he.ERR_NOT_SUPPORT,n)})}));const f=async(e,t)=>{const r=fe.toFiniteNumber(e.getContentLength());return null==r?(async e=>{if(null==e)return 0;if(fe.isBlob(e))return e.size;if(fe.isSpecCompliantForm(e)){const t=new n(je.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return fe.isArrayBufferView(e)||fe.isArrayBuffer(e)?e.byteLength:(fe.isURLSearchParams(e)&&(e+=""),fe.isString(e)?(await l(e)).byteLength:void 0)})(t):r};return async e=>{let{url:o,method:a,data:i,signal:l,cancelToken:h,timeout:p,onDownloadProgress:m,onUploadProgress:g,responseType:y,headers:b,withCredentials:w="same-origin",fetchOptions:S}=et(e),v=t||fetch;y=y?(y+"").toLowerCase():"text";let E=nt([l,h&&h.toAbortSignal()],p),x=null;const O=E&&E.unsubscribe&&(()=>{E.unsubscribe()});let R;try{if(g&&c&&"get"!==a&&"head"!==a&&0!==(R=await f(b,i))){let e,t=new n(o,{method:"POST",body:i,duplex:"half"});if(fe.isFormData(i)&&(e=t.headers.get("content-type"))&&b.setContentType(e),t.body){const[e,n]=Je(R,He(Ke(g)));i=st(t.body,65536,e,n)}}fe.isString(w)||(w=w?"include":"omit");const t=s&&"credentials"in n.prototype,l={...S,signal:E,method:a.toUpperCase(),headers:b.normalize().toJSON(),body:i,duplex:"half",credentials:t?w:void 0};x=s&&new n(o,l);let h=await(s?v(x,S):v(o,l));const p=u&&("stream"===y||"response"===y);if(u&&(m||p&&O)){const e={};["status","statusText","headers"].forEach((t=>{e[t]=h[t]}));const t=fe.toFiniteNumber(h.headers.get("content-length")),[n,o]=m&&Je(t,He(Ke(m),!0))||[];h=new r(st(h.body,65536,n,(()=>{o&&o(),O&&O()})),e)}y=y||"text";let C=await d[fe.findKey(d,y)||"text"](h,e);return!p&&O&&O(),await new Promise(((t,n)=>{Ve(t,n,{data:C,headers:Me.from(h.headers),status:h.status,statusText:h.statusText,config:e,request:x})}))}catch(C){if(O&&O(),C&&"TypeError"===C.name&&/Load failed|fetch/i.test(C.message))throw Object.assign(new he("Network Error",he.ERR_NETWORK,e,x),{cause:C.cause||C});throw he.from(C,C&&C.code,e,x)}}},ft=new Map,ht=e=>{let t=e&&e.env||{};const{fetch:n,Request:r,Response:o}=t,s=[r,o,n];let a,i,l=s.length,c=ft;for(;l--;)a=s[l],i=c.get(a),void 0===i&&c.set(a,i=l?new Map:dt(t)),c=i;return i};ht();const pt={http:null,xhr:tt,fetch:{get:ht}};fe.forEach(pt,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(n){}Object.defineProperty(e,"adapterName",{value:t})}}));const mt=e=>`- ${e}`,gt=e=>fe.isFunction(e)||null===e||!1===e;const yt={getAdapter:function(e,t){e=fe.isArray(e)?e:[e];const{length:n}=e;let r,o;const s={};for(let a=0;a<n;a++){let n;if(r=e[a],o=r,!gt(r)&&(o=pt[(n=String(r)).toLowerCase()],void 0===o))throw new he(`Unknown adapter '${n}'`);if(o&&(fe.isFunction(o)||(o=o.get(t))))break;s[n||"#"+a]=o}if(!o){const e=Object.entries(s).map((([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new he("There is no suitable adapter to dispatch the request "+(n?e.length>1?"since :\n"+e.map(mt).join("\n"):" "+mt(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return o},adapters:pt};function bt(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new We(null,e)}function wt(e){bt(e),e.headers=Me.from(e.headers),e.data=ze.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return yt.getAdapter(e.adapter||Fe.adapter,e)(e).then((function(t){return bt(e),t.data=ze.call(e,e.transformResponse,t),t.headers=Me.from(t.headers),t}),(function(t){return $e(t)||(bt(e),t&&t.response&&(t.response.data=ze.call(e,e.transformResponse,t.response),t.response.headers=Me.from(t.response.headers))),Promise.reject(t)}))}const St="1.13.2",vt={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{vt[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const Et={};vt.transitional=function(e,t,n){function r(e,t){return"[Axios v"+St+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,s)=>{if(!1===e)throw new he(r(o," has been removed"+(t?" in "+t:"")),he.ERR_DEPRECATED);return t&&!Et[o]&&(Et[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,s)}},vt.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};const xt={assertOptions:function(e,t,n){if("object"!=typeof e)throw new he("options must be an object",he.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const s=r[o],a=t[s];if(a){const t=e[s],n=void 0===t||a(t,s,e);if(!0!==n)throw new he("option "+s+" must be "+n,he.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new he("Unknown option "+s,he.ERR_BAD_OPTION)}},validators:vt},Ot=xt.validators;let Rt=class Axios{constructor(e){this.defaults=e||{},this.interceptors={request:new InterceptorManager,response:new InterceptorManager}}async request(e,t){try{return await this._request(e,t)}catch(n){if(n instanceof Error){let e={};Error.captureStackTrace?Error.captureStackTrace(e):e=new Error;const t=e.stack?e.stack.replace(/^.+\n/,""):"";try{n.stack?t&&!String(n.stack).endsWith(t.replace(/^.+\n.+\n/,""))&&(n.stack+="\n"+t):n.stack=t}catch(r){}}throw n}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Ye(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&xt.assertOptions(n,{silentJSONParsing:Ot.transitional(Ot.boolean),forcedJSONParsing:Ot.transitional(Ot.boolean),clarifyTimeoutError:Ot.transitional(Ot.boolean)},!1),null!=r&&(fe.isFunction(r)?t.paramsSerializer={serialize:r}:xt.assertOptions(r,{encode:Ot.function,serialize:Ot.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),xt.assertOptions(t,{baseUrl:Ot.spelling("baseURL"),withXsrfToken:Ot.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=o&&fe.merge(o.common,o[t.method]);o&&fe.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=Me.concat(s,o);const a=[];let i=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(i=i&&e.synchronous,a.unshift(e.fulfilled,e.rejected))}));const l=[];let c;this.interceptors.response.forEach((function(e){l.push(e.fulfilled,e.rejected)}));let u,d=0;if(!i){const e=[wt.bind(this),void 0];for(e.unshift(...a),e.push(...l),u=e.length,c=Promise.resolve(t);d<u;)c=c.then(e[d++],e[d++]);return c}u=a.length;let f=t;for(;d<u;){const e=a[d++],t=a[d++];try{f=e(f)}catch(h){t.call(this,h);break}}try{c=wt.call(this,f)}catch(h){return Promise.reject(h)}for(d=0,u=l.length;d<u;)c=c.then(l[d++],l[d++]);return c}getUri(e){return Re(Xe((e=Ye(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}};fe.forEach(["delete","get","head","options"],(function(e){Rt.prototype[e]=function(t,n){return this.request(Ye(n||{},{method:e,url:t,data:(n||{}).data}))}})),fe.forEach(["post","put","patch"],(function(e){function t(t){return function(n,r,o){return this.request(Ye(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}Rt.prototype[e]=t(),Rt.prototype[e+"Form"]=t(!0)}));const Ct={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Ct).forEach((([e,t])=>{Ct[t]=e}));const _t=function e(t){const n=new Rt(t),r=O(Rt.prototype.request,n);return fe.extend(r,Rt.prototype,n,{allOwnKeys:!0}),fe.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(Ye(t,n))},r}(Fe);_t.Axios=Rt,_t.CanceledError=We,_t.CancelToken=class CancelToken{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const n=this;this.promise.then((e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,o){n.reason||(n.reason=new We(e,r,o),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new CancelToken((function(t){e=t})),cancel:e}}},_t.isCancel=$e,_t.VERSION=St,_t.toFormData=Se,_t.AxiosError=he,_t.Cancel=_t.CanceledError,_t.all=function(e){return Promise.all(e)},_t.spread=function(e){return function(t){return e.apply(null,t)}},_t.isAxiosError=function(e){return fe.isObject(e)&&!0===e.isAxiosError},_t.mergeConfig=Ye,_t.AxiosHeaders=Me,_t.formToJSON=e=>Ne(fe.isHTMLForm(e)?new FormData(e):e),_t.getAdapter=yt.getAdapter,_t.HttpStatusCode=Ct,_t.default=_t;const{Axios:At,AxiosError:Tt,CanceledError:kt,isCancel:Dt,CancelToken:Ut,VERSION:jt,all:Nt,Cancel:Ft,isAxiosError:Lt,spread:Pt,toFormData:It,AxiosHeaders:Bt,HttpStatusCode:qt,formToJSON:Mt,getAdapter:zt,mergeConfig:$t}=_t,Wt=e({name:"OrchestrationDashboard",props:{courseId:{type:String,required:!0},isAdmin:{type:Boolean,default:!1}},data:()=>({loading:!1,updating:!1,error:null,weights:[],lastUpdate:null,detailsDialog:!1,selectedStrategy:null,selectedStrategyState:null,scatterData:null}),async created(){this.isAdmin&&await this.loadWeights()},methods:{async loadWeights(){this.loading=!0,this.error=null;try{const e=await _t.get(`/orchestration/${this.courseId}/weights`);this.weights=e.data.weights}catch(e){this.error=`Failed to load weights: ${e instanceof Error?e.message:String(e)}`}finally{this.loading=!1}},async triggerUpdate(){this.updating=!0,this.error=null;try{const e=await _t.post(`/orchestration/${this.courseId}/update`);this.lastUpdate=(new Date).toISOString(),await this.loadWeights();const{strategiesUpdated:t,outcomesProcessed:n}=e.data;alert(`Update complete!\n${t} strategies updated\n${n} outcomes processed`)}catch(e){const t=e&&"object"==typeof e&&"response"in e?e.response?.data?.error:e instanceof Error?e.message:String(e);this.error=`Failed to trigger update: ${t}`}finally{this.updating=!1}},async showStrategyDetails(e){this.selectedStrategy=this.weights.find((t=>t.strategyId===e))||null,this.selectedStrategyState=null,this.scatterData=null,this.detailsDialog=!0;try{const t=await _t.get(`/orchestration/${this.courseId}/strategy/${e}/history`);this.selectedStrategyState=t.data;const n=await _t.get(`/orchestration/${this.courseId}/strategy/${e}/scatter`);this.scatterData=n.data}catch(t){this.error=`Failed to load strategy details: ${t instanceof Error?t.message:String(t)}`}},getWeightColor:e=>e<.5?"red":e<.8?"orange":e<1.2?"green":e<1.5?"blue":"purple",getConfidenceColor:e=>e<.3?"red":e<.6?"orange":e<.8?"blue":"green",getGradientColor:e=>e?e>.01?"text-green":e<-.01?"text-red":"text-grey":""}}),Vt={class:"mb-4"},Ht={key:0,class:"ml-3 text-caption"},Jt={class:"text-caption"},Kt={key:1,class:"text-caption text-medium-emphasis"},Gt={key:1,class:"text-caption text-medium-emphasis"},Qt={key:0,class:"text-caption"},Xt={key:1,class:"text-caption text-medium-emphasis"},Zt={class:"text-h6"},Yt={class:"text-h6"},en={class:"text-h6"},tn={class:"text-body-2"},nn={class:"text-body-2"},rn={class:"text-body-2"},on={class:"text-caption"},sn={key:0,class:"mb-2"},an={class:"text-caption"},ln={class:"text-caption"},cn={key:1,class:"text-caption text-center mt-2"};const un=e({name:"CourseInformationWrapper",components:{CourseInformation:g,MidiConfig:E,UserTagPreferences:m,OrchestrationDashboard:t(Wt,[["render",function(e,t,m,g,y,b){const w=n("v-icon"),S=n("v-chip"),v=n("v-expansion-panel-title"),E=n("v-btn"),x=n("v-card-title"),O=n("v-progress-linear"),R=n("v-table"),C=n("v-card-text"),_=n("v-card"),A=n("v-col"),T=n("v-row"),k=n("v-spacer"),D=n("v-card-actions"),U=n("v-dialog"),j=n("v-alert"),N=n("v-expansion-panel-text"),F=n("v-expansion-panel"),L=n("v-expansion-panels");return e.isAdmin?(s(),r(L,{key:0,class:"my-3"},{default:a((()=>[i(F,null,{default:a((()=>[i(v,null,{default:a((()=>[i(w,{start:""},{default:a((()=>t[2]||(t[2]=[l("mdi-chart-line")]))),_:1}),t[4]||(t[4]=l(" Orchestration Dashboard ")),e.loading?(s(),r(S,{key:0,size:"small",class:"ml-2"},{default:a((()=>t[3]||(t[3]=[l("Loading...")]))),_:1})):o("",!0)])),_:1}),i(N,null,{default:a((()=>[i(_,{flat:""},{default:a((()=>[i(C,null,{default:a((()=>[c("div",Vt,[i(E,{color:"primary",loading:e.updating,disabled:e.updating,onClick:e.triggerUpdate},{default:a((()=>[i(w,{start:""},{default:a((()=>t[5]||(t[5]=[l("mdi-refresh")]))),_:1}),t[6]||(t[6]=l(" Trigger Period Update "))])),_:1},8,["loading","disabled","onClick"]),e.lastUpdate?(s(),u("span",Ht," Last update: "+d(new Date(e.lastUpdate).toLocaleString()),1)):o("",!0)]),e.weights.length>0?(s(),r(_,{key:0,class:"mb-4"},{default:a((()=>[i(x,null,{default:a((()=>t[7]||(t[7]=[l("Current Strategy Weights")]))),_:1}),i(C,null,{default:a((()=>[i(R,{density:"compact"},{default:a((()=>[t[10]||(t[10]=c("thead",null,[c("tr",null,[c("th",null,"Strategy"),c("th",null,"Implementation"),c("th",null,"Weight"),c("th",null,"Confidence"),c("th",null,"Samples"),c("th",null,"Static"),c("th",null,"Actions")])],-1)),c("tbody",null,[(s(!0),u(f,null,h(e.weights,(n=>(s(),u("tr",{key:n.strategyId},[c("td",null,d(n.strategyName),1),c("td",null,[c("code",Jt,d(n.implementingClass),1)]),c("td",null,[n.learnable?(s(),r(S,{key:0,size:"small",color:e.getWeightColor(n.learnable.weight)},{default:a((()=>[l(d(n.learnable.weight.toFixed(2)),1)])),_:2},1032,["color"])):(s(),u("span",Kt,"—"))]),c("td",null,[n.learnable?(s(),r(O,{key:0,"model-value":100*n.learnable.confidence,height:"8",color:e.getConfidenceColor(n.learnable.confidence)},null,8,["model-value","color"])):(s(),u("span",Gt,"—"))]),c("td",null,[n.learnable?(s(),u("span",Qt,d(n.learnable.sampleSize),1)):(s(),u("span",Xt,"—"))]),c("td",null,[n.staticWeight?(s(),r(w,{key:0,size:"small",color:"warning"},{default:a((()=>t[8]||(t[8]=[l(" mdi-lock ")]))),_:1})):o("",!0)]),c("td",null,[n.learnable?(s(),r(E,{key:0,size:"x-small",variant:"text",onClick:t=>e.showStrategyDetails(n.strategyId)},{default:a((()=>t[9]||(t[9]=[l(" Details ")]))),_:2},1032,["onClick"])):o("",!0)])])))),128))])])),_:1})])),_:1})])),_:1})):o("",!0),i(U,{modelValue:e.detailsDialog,"onUpdate:modelValue":t[1]||(t[1]=t=>e.detailsDialog=t),"max-width":"1000"},{default:a((()=>[e.selectedStrategy?(s(),r(_,{key:0},{default:a((()=>[i(x,null,{default:a((()=>[l(d(e.selectedStrategy.strategyName)+" ",1),i(S,{size:"small",class:"ml-2"},{default:a((()=>[l(d(e.selectedStrategy.strategyId),1)])),_:1})])),_:1}),i(C,null,{default:a((()=>[i(_,{class:"mb-4",variant:"outlined"},{default:a((()=>[i(x,{class:"text-subtitle-1"},{default:a((()=>t[11]||(t[11]=[l("Current State")]))),_:1}),i(C,null,{default:a((()=>[i(T,null,{default:a((()=>[i(A,{cols:"3"},{default:a((()=>[t[12]||(t[12]=c("div",{class:"text-caption text-medium-emphasis"},"Peak Weight",-1)),c("div",Zt,d(e.selectedStrategyState?.currentWeight?.weight.toFixed(3)||"—"),1)])),_:1}),i(A,{cols:"3"},{default:a((()=>[t[13]||(t[13]=c("div",{class:"text-caption text-medium-emphasis"},"Confidence",-1)),c("div",Yt,d((100*e.selectedStrategyState?.currentWeight?.confidence).toFixed(1)||"—")+"%",1)])),_:1}),i(A,{cols:"3"},{default:a((()=>[t[14]||(t[14]=c("div",{class:"text-caption text-medium-emphasis"},"Samples",-1)),c("div",en,d(e.selectedStrategyState?.currentWeight?.sampleSize||0),1)])),_:1}),i(A,{cols:"3"},{default:a((()=>[t[15]||(t[15]=c("div",{class:"text-caption text-medium-emphasis"},"Gradient",-1)),c("div",{class:p(["text-h6",e.getGradientColor(e.selectedStrategyState?.regression?.gradient)])},d(e.selectedStrategyState?.regression?.gradient.toFixed(4)||"—"),3)])),_:1})])),_:1}),e.selectedStrategyState?.regression?(s(),r(T,{key:0},{default:a((()=>[i(A,{cols:"4"},{default:a((()=>[t[16]||(t[16]=c("div",{class:"text-caption text-medium-emphasis"},"R²",-1)),c("div",tn,d(e.selectedStrategyState.regression.rSquared.toFixed(3)),1)])),_:1}),i(A,{cols:"4"},{default:a((()=>[t[17]||(t[17]=c("div",{class:"text-caption text-medium-emphasis"},"Intercept",-1)),c("div",nn,d(e.selectedStrategyState.regression.intercept.toFixed(3)),1)])),_:1}),i(A,{cols:"4"},{default:a((()=>[t[18]||(t[18]=c("div",{class:"text-caption text-medium-emphasis"},"Last Computed",-1)),c("div",rn,d(new Date(e.selectedStrategyState.regression.computedAt).toLocaleString()),1)])),_:1})])),_:1})):o("",!0)])),_:1})])),_:1}),e.selectedStrategyState?.history?.length?(s(),r(_,{key:0,class:"mb-4",variant:"outlined"},{default:a((()=>[i(x,{class:"text-subtitle-1"},{default:a((()=>t[19]||(t[19]=[l("Weight Trajectory (last 10)")]))),_:1}),i(C,null,{default:a((()=>[i(R,{density:"compact"},{default:a((()=>[t[20]||(t[20]=c("thead",null,[c("tr",null,[c("th",null,"Timestamp"),c("th",null,"Weight"),c("th",null,"Confidence"),c("th",null,"Gradient")])],-1)),c("tbody",null,[(s(!0),u(f,null,h(e.selectedStrategyState.history.slice(-10).reverse(),((t,n)=>(s(),u("tr",{key:n},[c("td",on,d(new Date(t.timestamp).toLocaleString()),1),c("td",null,[i(S,{size:"x-small",color:e.getWeightColor(t.weight)},{default:a((()=>[l(d(t.weight.toFixed(3)),1)])),_:2},1032,["color"])]),c("td",null,[i(O,{"model-value":100*t.confidence,height:"6",color:e.getConfidenceColor(t.confidence)},null,8,["model-value","color"])]),c("td",{class:p(e.getGradientColor(t.gradient))},d(t.gradient.toFixed(4)),3)])))),128))])])),_:1})])),_:1})])),_:1})):o("",!0),e.scatterData?.data?.length?(s(),r(_,{key:1,variant:"outlined"},{default:a((()=>[i(x,{class:"text-subtitle-1"},{default:a((()=>[l(" Recent Observations ("+d(e.scatterData.observations)+") ",1),i(S,{size:"small",class:"ml-2"},{default:a((()=>t[21]||(t[21]=[l("Last 7 days")]))),_:1})])),_:1}),i(C,null,{default:a((()=>[e.scatterData.regression?(s(),u("div",sn,[t[22]||(t[22]=c("strong",null,"Regression:",-1)),l(" outcome = "+d(e.scatterData.regression.gradient.toFixed(4))+" × deviation + "+d(e.scatterData.regression.intercept.toFixed(4))+" (R² = "+d(e.scatterData.regression.rSquared.toFixed(3))+") ",1)])):o("",!0),i(R,{density:"compact"},{default:a((()=>[t[23]||(t[23]=c("thead",null,[c("tr",null,[c("th",null,"User"),c("th",null,"Deviation"),c("th",null,"Outcome"),c("th",null,"Period End")])],-1)),c("tbody",null,[(s(!0),u(f,null,h(e.scatterData.data.slice(0,20),((e,t)=>(s(),u("tr",{key:t},[c("td",an,d(e.userId.substring(0,8))+"...",1),c("td",null,[i(S,{size:"x-small",color:e.deviation>0?"blue":"orange"},{default:a((()=>[l(d(e.deviation.toFixed(3)),1)])),_:2},1032,["color"])]),c("td",null,[i(S,{size:"x-small",color:e.outcome>.7?"green":"red"},{default:a((()=>[l(d(e.outcome.toFixed(3)),1)])),_:2},1032,["color"])]),c("td",ln,d(new Date(e.periodEnd).toLocaleString()),1)])))),128))])])),_:1}),e.scatterData.data.length>20?(s(),u("div",cn," Showing 20 of "+d(e.scatterData.data.length)+" observations ",1)):o("",!0)])),_:1})])),_:1})):o("",!0)])),_:1}),i(D,null,{default:a((()=>[i(k),i(E,{onClick:t[0]||(t[0]=t=>e.detailsDialog=!1)},{default:a((()=>t[24]||(t[24]=[l("Close")]))),_:1})])),_:1})])),_:1})):o("",!0)])),_:1},8,["modelValue"]),e.error?(s(),r(j,{key:1,type:"error",class:"mt-4"},{default:a((()=>[l(d(e.error),1)])),_:1})):o("",!0)])),_:1})])),_:1})])),_:1})])),_:1})])),_:1})):o("",!0)}],["__scopeId","data-v-b32c2c08"]])},props:{courseId:{type:String,required:!0}},data:()=>({courseConfig:{},user:null,editMode:"full",userIsRegistered:!1}),computed:{isPianoCourse(){return this.courseConfig.name?.toLowerCase().includes("piano")??!1},isAdmin(){return"admin"===this.user?.getUsername()}},async created(){const e=y(),t=e.getCourseDB(this.courseId);if(this.courseConfig=await t.getCourseConfig(),this.user=await b(),this.user){const e=await this.user.getCourseRegistrationsDoc();this.userIsRegistered="admin"===this.user.getUsername()||e.courses.some((e=>e.courseID===this.courseId&&("active"===e.status||void 0===e.status)))}this.editMode=e.isReadOnly()?"readonly":"full"},methods:{viewLookup:e=>x.getView(e)}}),dn={class:"text-h4 mb-2"},fn={key:0},hn={key:1};const pn=e({name:"CourseRouter",components:{CourseInformationWrapper:t(un,[["render",function(e,t,f,h,p,m){const g=n("router-link"),y=n("v-btn"),b=n("v-icon"),S=n("v-chip"),v=n("midi-config"),E=n("orchestration-dashboard"),x=n("v-expansion-panel-title"),O=n("user-tag-preferences"),R=n("v-expansion-panel-text"),C=n("v-expansion-panel"),_=n("v-expansion-panels"),A=n("course-information");return s(),u("div",null,[i(A,{"course-id":e.courseId,"view-lookup-function":e.viewLookup,"edit-mode":e.editMode,"user-is-registered":e.userIsRegistered},{header:a((({courseConfig:e})=>[c("h1",dn,[i(g,{to:"/q"},{default:a((()=>t[0]||(t[0]=[l("Quilts")]))),_:1}),l(" / "+d(e.name),1)])])),actions:a((({userIsRegistered:e,courseId:n,editMode:c,register:d,drop:f})=>[i(w,{name:"component-fade",mode:"out-in"},{default:a((()=>[e?(s(),u("div",fn,[i(g,{to:`/study/${n}`,class:"me-2"},{default:a((()=>[i(y,{color:"success","data-cy":"focused-study-session-btn"},{default:a((()=>t[1]||(t[1]=[l("Start a study session *")]))),_:1})])),_:2},1032,["to"]),"full"===c?(s(),r(g,{key:0,to:`/edit/${n}`,class:"me-2"},{default:a((()=>[i(y,{"data-cy":"add-content-btn",color:"indigo-lighten-1"},{default:a((()=>[i(b,{start:""},{default:a((()=>t[2]||(t[2]=[l("mdi-plus")]))),_:1}),t[3]||(t[3]=l(" Add content "))])),_:1})])),_:2},1032,["to"])):o("",!0),"full"===c?(s(),r(g,{key:1,to:`/courses/${n}/elo`,class:"me-2"},{default:a((()=>[i(y,{color:"green-darken-2",title:"Rank course content for difficulty"},{default:a((()=>[i(b,{start:""},{default:a((()=>t[4]||(t[4]=[l("mdi-format-list-numbered")]))),_:1}),t[5]||(t[5]=l(" Arrange "))])),_:1})])),_:2},1032,["to"])):o("",!0),"full"===c?(s(),r(y,{key:2,color:"error",size:"small",variant:"outlined",onClick:f},{default:a((()=>t[6]||(t[6]=[l(" Drop this course ")]))),_:2},1032,["onClick"])):o("",!0)])):(s(),u("div",hn,[i(y,{"data-cy":"register-btn",color:"primary",class:"me-2",onClick:d},{default:a((()=>t[7]||(t[7]=[l("Register")]))),_:2},1032,["onClick"]),i(g,{to:`/q/${n}/preview`},{default:a((()=>[i(y,{variant:"outlined",color:"primary",class:"me-2"},{default:a((()=>t[8]||(t[8]=[l("Start a trial study session")]))),_:1})])),_:2},1032,["to"])]))])),_:2},1024)])),"tag-link":a((({tag:e,courseId:t})=>[i(g,{to:`/q/${t}/tags/${e.name}`},{default:a((()=>[i(S,{variant:"tonal",class:"me-2 mb-2"},{default:a((()=>[l(d(e.name),1)])),_:2},1024)])),_:2},1032,["to"])])),"additional-content":a((()=>[e.isPianoCourse?(s(),r(v,{key:0,_id:e.courseId,user:e.user,class:"my-3"},null,8,["_id","user"])):o("",!0),i(E,{"course-id":e.courseId,"is-admin":e.isAdmin},null,8,["course-id","is-admin"]),e.userIsRegistered?(s(),r(_,{key:1,class:"my-3"},{default:a((()=>[i(C,null,{default:a((()=>[i(x,null,{default:a((()=>[i(b,{start:""},{default:a((()=>t[9]||(t[9]=[l("mdi-tune")]))),_:1}),t[10]||(t[10]=l(" Learning Preferences "))])),_:1}),i(R,null,{default:a((()=>[i(O,{"course-id":e.courseId},null,8,["course-id"])])),_:1})])),_:1})])),_:1})):o("",!0)])),_:1},8,["course-id","view-lookup-function","edit-mode","user-is-registered"])])}],["__scopeId","data-v-aa3214c2"]]),NewCourseDialog:v},props:{query:{type:String,required:!0}},data:()=>({courseList:[],courseId:void 0,candidates:[],newCourseDialog:!1,initComplete:!1}),async created(){this.courseList=await y().getCoursesDB().getCourseList(),this.loadQuery()},methods:{update(e){e.courseID&&e.disambiguator&&y().getCoursesDB().disambiguateCourse(e.courseID,e.disambiguator)},loadQuery(e){let t;t=e?e.toLowerCase():this.query.toLowerCase(),this.candidates=this.courseList.filter((e=>{const n=e.name.replaceAll(" ","_").toLowerCase();return t===n||t===e.courseID||t===`${n}_(${e.disambiguator})`})),1===this.candidates.length?this.courseId=this.candidates[0].courseID:0===this.candidates.length&&(this.courseId=""),this.initComplete=!0}}}),mn={key:0},gn={class:"text-h3"},yn=["onClick"];const bn=t(pn,[["render",function(e,t,p,m,g,y){const b=n("course-information-wrapper"),w=n("v-row"),v=n("v-divider"),E=n("v-btn"),x=n("new-course-dialog"),O=n("v-dialog"),R=n("v-container"),C=n("v-text-field");return s(),u("div",null,[e.initComplete?(s(),u("div",mn,[void 0!==e.courseId&&""!==e.courseId?(s(),r(b,{key:0,"course-id":e.courseId},null,8,["course-id"])):0===e.candidates.length?(s(),r(R,{key:1},{default:a((()=>[i(w,{class:"text-h4"},{default:a((()=>[l(d(e.query),1)])),_:1}),i(v),i(w,{class:"ma-3 text-h5"},{default:a((()=>t[2]||(t[2]=[l("Nothing here!")]))),_:1}),i(w,{class:"ma-3"},{default:a((()=>[i(O,{modelValue:e.newCourseDialog,"onUpdate:modelValue":t[1]||(t[1]=t=>e.newCourseDialog=t),fullscreen:"",transition:"dialog-bottom-transition",overlay:!1},{activator:a((({props:e})=>[i(E,S({color:"primary"},e),{default:a((()=>t[3]||(t[3]=[l("Start a new Quilt")]))),_:2},1040)])),default:a((()=>[i(x,{name:e.query,onCourseEditingComplete:t[0]||(t[0]=t=>e.newCourseDialog=!1)},null,8,["name"])])),_:1},8,["modelValue"])])),_:1})])),_:1})):(s(),r(R,{key:2},{default:a((()=>[c("div",null,[c("span",gn,d(e.query),1),t[5]||(t[5]=l()),t[6]||(t[6]=c("span",{class:"text-h5"},"could refer to:",-1)),i(v),(s(!0),u(f,null,h(e.candidates,((n,r)=>(s(),u("div",{key:r,class:"ma-5"},[i(w,{class:"text-h5"},{default:a((()=>[c("a",{onClick:t=>e.loadQuery(n.courseID)},d(n.name),9,yn),t[4]||(t[4]=l(" - ")),i(C,{id:`${r}-disambiguator`,modelValue:n.disambiguator,"onUpdate:modelValue":e=>n.disambiguator=e,label:"Disambiguator",onChange:t=>e.update(n)},null,8,["id","modelValue","onUpdate:modelValue","onChange"]),l(" "+d(n.description),1)])),_:2},1024)])))),128))])])),_:1}))])):o("",!0)])}]]);export{bn as default};
2
+ //# sourceMappingURL=CourseRouter-DfwtPHs0.js.map