@vue-skuilder/courseware 0.1.40 → 0.2.1

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.
@@ -1,3 +1,3 @@
1
1
  import "./CourseWare-BTFRjgBR.js";
2
- import { t as e } from "./chess-BbHATAzk.js";
2
+ import { t as e } from "./chess-E2uOAyQS.js";
3
3
  export { e as default };
package/dist/index.cjs.js CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});require('./assets/index.css');const e=require(`./shapes-C_-mvrCc.cjs`),t=require(`./CourseWare-DSeyTAtH.cjs`),n=require(`./chess-BsgVZARV.cjs`),r=require(`./french-Bxet7hJm.cjs`),i=require(`./math-B1oDAkOy.cjs`),a=require(`./piano-CefQUc72.cjs`),o=require(`./pitch-C-lh9ezH.cjs`),s=require(`./sightsing-Cr_SJ5Vc.cjs`),c=require(`./typing-CK-glKhm.cjs`),l=require(`./word-work-fNbCLNuN.cjs`);let u=require(`vue`),d=require(`@vue-skuilder/common-ui`),f=require(`@vue-skuilder/common`),p=require(`@vue-skuilder/db`);var m=new t.t(`default`,[t.n]),h=(0,u.defineComponent)({name:`PianoRangeVisualizer`,props:{lowestNote:{type:Number,required:!0},highestNote:{type:Number,required:!0},maxWidth:{type:Number,default:1e3}},setup(e){let t=(0,u.ref)(null),n=(0,u.ref)(800),r=(0,u.computed)(()=>{let e=0;for(let t=21;t<=108;t++)isWhiteKey(t)&&e++;return e}),i=(0,u.computed)(()=>Math.min(22,n.value/Math.max(25,r.value))),a=(0,u.computed)(()=>i.value*.6),o=(0,u.computed)(()=>Math.min(e.maxWidth,i.value*r.value+10)),isWhiteKey=e=>{let t=e%12;return[0,2,4,5,7,9,11].includes(t)},getKeyPosition=e=>{let t=0;for(let n=21;n<e;n++)isWhiteKey(n)&&t++;return isWhiteKey(e)?t*i.value:t*i.value-a.value/2},getNoteLabel=e=>{let t=[`C`,`C#`,`D`,`D#`,`E`,`F`,`F#`,`G`,`G#`,`A`,`A#`,`B`],n=e%12,r=Math.floor(e/12)-1;return`${t[n]}${r}`};return(0,u.onMounted)(()=>{t.value&&(n.value=t.value.clientWidth,new ResizeObserver(e=>{for(let t of e)n.value=t.contentRect.width}).observe(t.value))}),{pianoWrapper:t,keyHeight:100,blackKeyHeight:60,whiteKeyWidth:i,blackKeyWidth:a,svgWidth:o,isWhiteKey,getKeyPosition,getNoteLabel}}}),g={class:`piano-range-container`},_={class:`piano-wrapper`,ref:`pianoWrapper`},v=[`width`,`height`],y={class:`background-keys`,opacity:`0.15`},b=[`x`,`width`,`height`],x=[`x`,`width`,`height`],S={class:`selected-range`},C=[`x`,`width`,`height`],w=[`x`,`width`,`height`],T={class:`range-markers`},E=[`x`,`height`],D=[`x`,`height`],O=[`x`,`y`],k=[`x`,`y`];function _sfc_render$1(e,t,n,r,i,a){return(0,u.openBlock)(),(0,u.createElementBlock)(`div`,g,[(0,u.createElementVNode)(`div`,_,[((0,u.openBlock)(),(0,u.createElementBlock)(`svg`,{width:e.svgWidth,height:e.keyHeight+20,class:`piano-svg`},[(0,u.createElementVNode)(`g`,y,[((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,null,(0,u.renderList)(88,t=>((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,{key:`bg-${t}`},[e.isWhiteKey(t+20)?((0,u.openBlock)(),(0,u.createElementBlock)(`rect`,{key:0,x:e.getKeyPosition(t+20),y:`0`,width:e.whiteKeyWidth,height:e.keyHeight,class:`white-key`,stroke:`#999`,"stroke-width":`1`},null,8,b)):(0,u.createCommentVNode)(``,!0)],64))),64)),((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,null,(0,u.renderList)(88,t=>((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,{key:`bg-black-${t}`},[e.isWhiteKey(t+20)?(0,u.createCommentVNode)(``,!0):((0,u.openBlock)(),(0,u.createElementBlock)(`rect`,{key:0,x:e.getKeyPosition(t+20),y:`0`,width:e.blackKeyWidth,height:e.blackKeyHeight,class:`black-key`},null,8,x))],64))),64))]),(0,u.createElementVNode)(`g`,S,[((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,null,(0,u.renderList)(128,t=>((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,{key:`white-${t}`},[e.isWhiteKey(t)&&t>=e.lowestNote&&t<=e.highestNote?((0,u.openBlock)(),(0,u.createElementBlock)(`rect`,{key:0,x:e.getKeyPosition(t),y:`0`,width:e.whiteKeyWidth,height:e.keyHeight,class:`white-key active`,stroke:`#666`,"stroke-width":`1`},null,8,C)):(0,u.createCommentVNode)(``,!0)],64))),64)),((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,null,(0,u.renderList)(128,t=>((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,{key:`black-${t}`},[!e.isWhiteKey(t)&&t>=e.lowestNote&&t<=e.highestNote?((0,u.openBlock)(),(0,u.createElementBlock)(`rect`,{key:0,x:e.getKeyPosition(t),y:`0`,width:e.blackKeyWidth,height:e.blackKeyHeight,class:`black-key active`},null,8,w)):(0,u.createCommentVNode)(``,!0)],64))),64))]),(0,u.createElementVNode)(`g`,T,[(0,u.createElementVNode)(`rect`,{x:e.getKeyPosition(e.lowestNote)-2,y:`0`,width:4,height:e.keyHeight+5,class:`range-marker start`},null,8,E),(0,u.createElementVNode)(`rect`,{x:e.getKeyPosition(e.highestNote)+e.whiteKeyWidth-2,y:`0`,width:4,height:e.keyHeight+5,class:`range-marker end`},null,8,D)]),(0,u.createElementVNode)(`text`,{x:e.getKeyPosition(e.lowestNote)+3,y:e.keyHeight+12,class:`note-label`},(0,u.toDisplayString)(e.getNoteLabel(e.lowestNote)),9,O),(0,u.createElementVNode)(`text`,{x:e.getKeyPosition(e.highestNote)+e.whiteKeyWidth-3,y:e.keyHeight+12,"text-anchor":`end`,class:`note-label`},(0,u.toDisplayString)(e.getNoteLabel(e.highestNote)),9,k)],8,v))],512)])}e.r(_sfc_render$1,`_sfc_render`);var A=t.r(h,[[`render`,_sfc_render$1],[`__scopeId`,`data-v-4b232a8b`]]),j=(0,u.defineComponent)({name:`MidiConfig`,components:{PianoRangeVisualizer:A},props:{_id:{type:String,required:!0},user:{type:Object,required:!0}},setup(e){let t=(0,u.ref)(),n=(0,u.ref)(!0),r=(0,u.ref)([]),i=(0,u.ref)([]),o=(0,u.ref)(``),s=(0,u.ref)(``),c=(0,u.ref)(!1),l=(0,u.ref)(``),m=(0,u.ref)(``),h=(0,u.ref)(!1),g=(0,u.ref)(`full-88`),_=(0,u.ref)(21),v=(0,u.ref)(108),y=(0,u.ref)(``),b=(0,u.ref)(0),x=(0,u.ref)(0),S=(0,u.ref)([]),initNoteOptions=()=>{let e=[`C`,`C#`,`D`,`D#`,`E`,`F`,`F#`,`G`,`G#`,`A`,`A#`,`B`],t=[];for(let n=0;n<=127;n++){let r=Math.floor(n/12)-1,i=e[n%12];t.push({title:`${i}${r} (${n})`,value:n})}S.value=t},C=(0,u.ref)([{title:`Full 88-key Piano (A0-C8)`,value:`full-88`},{title:`76-key Keyboard (E1-G7)`,value:`76-key`},{title:`61-key Keyboard (C2-C7)`,value:`61-key`},{title:`49-key Keyboard (C3-C7)`,value:`49-key`},{title:`37-key Keyboard (C3-C6)`,value:`37-key`},{title:`25-key Keyboard (C4-C6)`,value:`25-key`},{title:`Custom Range`,value:`custom`}]),checkConfigChanged=()=>{h.value=o.value!==l.value||s.value!==m.value||g.value!==y.value||g.value===`custom`&&(_.value!==b.value||v.value!==x.value)},updateCustomRangeFromPreset=()=>{switch(g.value){case`full-88`:_.value=21,v.value=108;break;case`76-key`:_.value=28,v.value=103;break;case`61-key`:_.value=36,v.value=96;break;case`49-key`:_.value=48,v.value=96;break;case`37-key`:_.value=48,v.value=84;break;case`25-key`:_.value=60,v.value=84;break}checkConfigChanged()},updateRangeAndCheckChanges=()=>{_.value>=v.value&&(v.value=_.value+12),checkConfigChanged()},playSound=()=>{t.value?.play([{note:{number:64,name:`E`,octave:4},type:`noteon`,velocity:.4251968503937008,timestamp:0},{note:{number:64,name:`E`,octave:4},velocity:.3779527559055118,type:`noteoff`,timestamp:511.90500000002794},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5275590551181102,timestamp:535.8800000001211},{note:{number:60,name:`C`,octave:4},velocity:.33858267716535434,type:`noteoff`,timestamp:674.9899999999907},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5590551181102362,timestamp:1070.8800000000047},{note:{number:60,name:`C`,octave:4},velocity:.3464566929133858,type:`noteoff`,timestamp:1214.8999999999069},{note:{number:64,name:`E`,octave:4},type:`noteon`,velocity:.5118110236220472,timestamp:1424.9400000000605},{note:{number:64,name:`E`,octave:4},velocity:.2755905511811024,type:`noteoff`,timestamp:1576.9150000000373},{note:{number:62,name:`D`,octave:4},type:`noteon`,velocity:.3937007874015748,timestamp:1756.9149999999208},{note:{number:62,name:`D`,octave:4},velocity:.36220472440944884,type:`noteoff`,timestamp:1926.9899999998743},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5196850393700787,timestamp:1970.9600000000792},{note:{number:60,name:`C`,octave:4},velocity:.36220472440944884,type:`noteoff`,timestamp:2126.009999999893},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5984251968503937,timestamp:2502.0050000000047},{note:{number:60,name:`C`,octave:4},velocity:.3858267716535433,type:`noteoff`,timestamp:2853.920000000042},{note:{number:67,name:`G`,octave:4},type:`noteon`,velocity:.6850393700787402,timestamp:2875.8649999999907},{note:{number:67,name:`G`,octave:4},velocity:.6377952755905512,type:`noteoff`,timestamp:4497.004999999888}])},indicateHeardNotes=e=>{(0,d.alertUser)({text:`I hear a ${e.note.name}!`,status:f.Status.ok})};(0,u.watch)(o,()=>{t.value?.selectInput(o.value),checkConfigChanged()}),(0,u.watch)(s,()=>{t.value?.selectOutput(s.value),checkConfigChanged()});let retrieveSettings=async()=>{let t=await(await e.user.getCourseInterface(e._id)).getCourseSettings();if(t?.midiinput){let e=t.midiinput.toString();r.value.some(t=>t.value===e)&&(o.value=e,l.value=e)}if(t?.midioutput){let e=t.midioutput.toString();i.value.some(t=>t.value===e)&&(s.value=e,m.value=e)}t?.keyboardRange&&(y.value=t.keyboardRange.toString(),g.value=y.value),t?.lowestNote&&(b.value=parseInt(t.lowestNote.toString()),_.value=b.value),t?.highestNote&&(x.value=parseInt(t.highestNote.toString()),v.value=x.value),t?.lowestNote&&t?.highestNote&&!t?.keyboardRange&&(g.value=`custom`),h.value=!1},saveSettings=async()=>{c.value=!0,(await(0,p.getDataLayer)().getUserDB().getCourseInterface(e._id)).updateCourseSettings([{key:`midiinput`,value:o.value},{key:`midioutput`,value:s.value},{key:`keyboardRange`,value:g.value},{key:`lowestNote`,value:_.value},{key:`highestNote`,value:v.value}]),l.value=o.value,m.value=s.value,y.value=g.value,b.value=_.value,x.value=v.value,h.value=!1,c.value=!1,(0,d.alertUser)({text:`Settings updated.`,status:f.Status.ok})};return(0,u.onMounted)(async()=>{initNoteOptions();try{t.value=await a.r.instance(),n.value=t.value.state===`ready`||t.value.state===`nodevice`}catch(e){console.log(`Error on midi Init: ${e}`),n.value=!1}n.value&&(t.value?.addNoteonListenter(indicateHeardNotes),t.value?(r.value=t.value.inputs.filter(e=>e.state===`connected`).map(e=>({title:`${e.manufacturer}: ${e.name}`,value:e.id})),i.value=t.value?.outputs.filter(e=>e.state===`connected`).map(e=>({title:`${e.manufacturer}: ${e.name}`,value:e.id}))):(r.value=[{title:`No inputs available`,value:``}],i.value=[{title:`No outputs available`,value:``}]),await retrieveSettings(),!o.value&&r.value.length>0&&(o.value=r.value[0].value),!s.value&&i.value.length>0&&(s.value=i.value[0].value))}),{midiSupported:n,inputs:r,outputs:i,selectedInput:o,selectedOutput:s,updatePending:c,playSound,saveSettings,configChanged:h,lowestNote:_,highestNote:v,keyboardRangeOptions:C,selectedKeyboardRange:g,noteOptions:S,updateCustomRangeFromPreset,updateRangeAndCheckChanges}}}),M={key:0,class:`custom-range-inputs d-flex gap-4`},N={class:`d-flex justify-space-between mt-3`},P={key:1};function _sfc_render(e,t,n,r,i,a){let o=(0,u.resolveComponent)(`v-toolbar-title`),s=(0,u.resolveComponent)(`v-toolbar`),c=(0,u.resolveComponent)(`v-select`),l=(0,u.resolveComponent)(`v-divider`),d=(0,u.resolveComponent)(`piano-range-visualizer`),f=(0,u.resolveComponent)(`v-btn`),p=(0,u.resolveComponent)(`v-form`),m=(0,u.resolveComponent)(`v-card-text`),h=(0,u.resolveComponent)(`v-card`);return(0,u.openBlock)(),(0,u.createBlock)(h,null,{default:(0,u.withCtx)(()=>[(0,u.createVNode)(s,{dense:``},{default:(0,u.withCtx)(()=>[(0,u.createVNode)(o,null,{default:(0,u.withCtx)(()=>t[5]||=[(0,u.createTextVNode)(`Configure Midi Device`)]),_:1})]),_:1}),(0,u.createVNode)(m,null,{default:(0,u.withCtx)(()=>[e.midiSupported?((0,u.openBlock)(),(0,u.createBlock)(p,{key:0,onsubmit:`return false;`},{default:(0,u.withCtx)(()=>[(0,u.createVNode)(c,{modelValue:e.selectedInput,"onUpdate:modelValue":t[0]||=t=>e.selectedInput=t,items:e.inputs,label:`Select Input`,hint:`Play some notes on your input device to test the connection`},null,8,[`modelValue`,`items`]),(0,u.createVNode)(c,{modelValue:e.selectedOutput,"onUpdate:modelValue":t[1]||=t=>e.selectedOutput=t,items:e.outputs,label:`Select Output`},null,8,[`modelValue`,`items`]),(0,u.createVNode)(l,{class:`my-4`}),t[8]||=(0,u.createElementVNode)(`h3`,{class:`text-subtitle-1 mb-2`},`Keyboard Range`,-1),(0,u.createVNode)(c,{modelValue:e.selectedKeyboardRange,"onUpdate:modelValue":[t[2]||=t=>e.selectedKeyboardRange=t,e.updateCustomRangeFromPreset],items:e.keyboardRangeOptions,label:`Select Keyboard Range`},null,8,[`modelValue`,`items`,`onUpdate:modelValue`]),e.selectedKeyboardRange===`custom`?((0,u.openBlock)(),(0,u.createElementBlock)(`div`,M,[(0,u.createVNode)(c,{modelValue:e.lowestNote,"onUpdate:modelValue":[t[3]||=t=>e.lowestNote=t,e.updateRangeAndCheckChanges],items:e.noteOptions,label:`Lowest Note`},null,8,[`modelValue`,`items`,`onUpdate:modelValue`]),(0,u.createVNode)(c,{modelValue:e.highestNote,"onUpdate:modelValue":[t[4]||=t=>e.highestNote=t,e.updateRangeAndCheckChanges],items:e.noteOptions,label:`Highest Note`},null,8,[`modelValue`,`items`,`onUpdate:modelValue`])])):(0,u.createCommentVNode)(``,!0),(0,u.createVNode)(d,{"lowest-note":e.lowestNote,"highest-note":e.highestNote},null,8,[`lowest-note`,`highest-note`]),(0,u.createElementVNode)(`div`,N,[(0,u.createVNode)(f,{color:`primary`,onClick:e.playSound},{default:(0,u.withCtx)(()=>t[6]||=[(0,u.createTextVNode)(`Test midi output`)]),_:1},8,[`onClick`]),(0,u.createVNode)(f,{loading:e.updatePending,disabled:!e.configChanged&&!e.updatePending,color:`info`,class:`save-button`,onClick:e.saveSettings},{default:(0,u.withCtx)(()=>t[7]||=[(0,u.createTextVNode)(` Save these settings `)]),_:1},8,[`loading`,`disabled`,`onClick`])])]),_:1})):((0,u.openBlock)(),(0,u.createElementBlock)(`div`,P,t[9]||=[(0,u.createElementVNode)(`p`,null,`This quilt requires a midi input device, which is not supported by this browser.`,-1),(0,u.createElementVNode)(`div`,null,[(0,u.createElementVNode)(`p`,null,`Try one of the following browsers:`),(0,u.createElementVNode)(`ul`,null,[(0,u.createElementVNode)(`li`,null,[(0,u.createElementVNode)(`a`,{href:`https://www.google.com/chrome/`},`Google Chrome`)]),(0,u.createElementVNode)(`li`,null,[(0,u.createElementVNode)(`a`,{href:`https://www.microsoft.com/edge`},`Microsoft Edge`)]),(0,u.createElementVNode)(`li`,null,[(0,u.createElementVNode)(`a`,{href:`https://brave.com/`},`Brave`)])])],-1)]))]),_:1})]),_:1})}var F=t.r(j,[[`render`,_sfc_render],[`__scopeId`,`data-v-6ee9020f`]]),I=d.useQuestionView;async function loadSubcourse(e){let t;switch(e){case`chess`:t=await Promise.resolve().then(()=>require(`./chess-C_2RQEuq.cjs`));break;case`french`:t=await Promise.resolve().then(()=>require(`./french-x9P8RRn8.cjs`));break;case`math`:t=await Promise.resolve().then(()=>require(`./math-BWlIa6-l.cjs`));break;case`piano`:t=await Promise.resolve().then(()=>require(`./piano-Btvkzjfz.cjs`));break;case`pitch`:t=await Promise.resolve().then(()=>require(`./pitch-DsopN5IR.cjs`));break;case`sightSing`:t=await Promise.resolve().then(()=>require(`./sightsing-CtagQ0FJ.cjs`));break;case`typing`:t=await Promise.resolve().then(()=>require(`./typing-CBPjtwrg.cjs`));break;case`wordWork`:t=await Promise.resolve().then(()=>require(`./word-work-C5MTSapy.cjs`));break}let n=t.default;return L.courses.find(e=>e.name===n.name)||L.courses.push(n),n}async function loadAllSubcourses(){await Promise.all([`chess`,`french`,`math`,`piano`,`pitch`,`sightSing`,`typing`,`wordWork`].map(e=>loadSubcourse(e)))}var AllCourseWare=class{courseWareList;get courses(){return this.courseWareList}constructor(e){this.courseWareList=e}getCourseWare(e){return this.courseWareList.find(t=>t.name===e)}cachedRawViews=null;allViewsRaw(){if(!this.cachedRawViews){let e=this.allViews();this.cachedRawViews=Object.fromEntries(Object.entries(e).map(([e,t])=>[e,(0,u.markRaw)(t)]))}return this.cachedRawViews}allViews(){let e={};return this.courseWareList.forEach(t=>{Object.assign(e,t.allViewsMap)}),e}getView(e){let t;t=typeof e==`string`?f.NameSpacer.getViewDescriptor(e):e;let n=this.getCourseWare(t.course);if(n){let e=n.getQuestion(t.questionType);if(e){let r=e.views.find(e=>e.name===t.view);if(r)return r;throw console.error(`QuestionView ${t.view} not found in course ${t.course}
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});require('./assets/index.css');const e=require(`./shapes-C_-mvrCc.cjs`),t=require(`./CourseWare-DSeyTAtH.cjs`),n=require(`./chess-BWes0jGA.cjs`),r=require(`./french-Bxet7hJm.cjs`),i=require(`./math-B1oDAkOy.cjs`),a=require(`./piano-CefQUc72.cjs`),o=require(`./pitch-C-lh9ezH.cjs`),s=require(`./sightsing-Cr_SJ5Vc.cjs`),c=require(`./typing-CK-glKhm.cjs`),l=require(`./word-work-fNbCLNuN.cjs`);let u=require(`vue`),d=require(`@vue-skuilder/common-ui`),f=require(`@vue-skuilder/common`),p=require(`@vue-skuilder/db`);var m=new t.t(`default`,[t.n]),h=(0,u.defineComponent)({name:`PianoRangeVisualizer`,props:{lowestNote:{type:Number,required:!0},highestNote:{type:Number,required:!0},maxWidth:{type:Number,default:1e3}},setup(e){let t=(0,u.ref)(null),n=(0,u.ref)(800),r=(0,u.computed)(()=>{let e=0;for(let t=21;t<=108;t++)isWhiteKey(t)&&e++;return e}),i=(0,u.computed)(()=>Math.min(22,n.value/Math.max(25,r.value))),a=(0,u.computed)(()=>i.value*.6),o=(0,u.computed)(()=>Math.min(e.maxWidth,i.value*r.value+10)),isWhiteKey=e=>{let t=e%12;return[0,2,4,5,7,9,11].includes(t)},getKeyPosition=e=>{let t=0;for(let n=21;n<e;n++)isWhiteKey(n)&&t++;return isWhiteKey(e)?t*i.value:t*i.value-a.value/2},getNoteLabel=e=>{let t=[`C`,`C#`,`D`,`D#`,`E`,`F`,`F#`,`G`,`G#`,`A`,`A#`,`B`],n=e%12,r=Math.floor(e/12)-1;return`${t[n]}${r}`};return(0,u.onMounted)(()=>{t.value&&(n.value=t.value.clientWidth,new ResizeObserver(e=>{for(let t of e)n.value=t.contentRect.width}).observe(t.value))}),{pianoWrapper:t,keyHeight:100,blackKeyHeight:60,whiteKeyWidth:i,blackKeyWidth:a,svgWidth:o,isWhiteKey,getKeyPosition,getNoteLabel}}}),g={class:`piano-range-container`},_={class:`piano-wrapper`,ref:`pianoWrapper`},v=[`width`,`height`],y={class:`background-keys`,opacity:`0.15`},b=[`x`,`width`,`height`],x=[`x`,`width`,`height`],S={class:`selected-range`},C=[`x`,`width`,`height`],w=[`x`,`width`,`height`],T={class:`range-markers`},E=[`x`,`height`],D=[`x`,`height`],O=[`x`,`y`],k=[`x`,`y`];function _sfc_render$1(e,t,n,r,i,a){return(0,u.openBlock)(),(0,u.createElementBlock)(`div`,g,[(0,u.createElementVNode)(`div`,_,[((0,u.openBlock)(),(0,u.createElementBlock)(`svg`,{width:e.svgWidth,height:e.keyHeight+20,class:`piano-svg`},[(0,u.createElementVNode)(`g`,y,[((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,null,(0,u.renderList)(88,t=>((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,{key:`bg-${t}`},[e.isWhiteKey(t+20)?((0,u.openBlock)(),(0,u.createElementBlock)(`rect`,{key:0,x:e.getKeyPosition(t+20),y:`0`,width:e.whiteKeyWidth,height:e.keyHeight,class:`white-key`,stroke:`#999`,"stroke-width":`1`},null,8,b)):(0,u.createCommentVNode)(``,!0)],64))),64)),((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,null,(0,u.renderList)(88,t=>((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,{key:`bg-black-${t}`},[e.isWhiteKey(t+20)?(0,u.createCommentVNode)(``,!0):((0,u.openBlock)(),(0,u.createElementBlock)(`rect`,{key:0,x:e.getKeyPosition(t+20),y:`0`,width:e.blackKeyWidth,height:e.blackKeyHeight,class:`black-key`},null,8,x))],64))),64))]),(0,u.createElementVNode)(`g`,S,[((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,null,(0,u.renderList)(128,t=>((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,{key:`white-${t}`},[e.isWhiteKey(t)&&t>=e.lowestNote&&t<=e.highestNote?((0,u.openBlock)(),(0,u.createElementBlock)(`rect`,{key:0,x:e.getKeyPosition(t),y:`0`,width:e.whiteKeyWidth,height:e.keyHeight,class:`white-key active`,stroke:`#666`,"stroke-width":`1`},null,8,C)):(0,u.createCommentVNode)(``,!0)],64))),64)),((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,null,(0,u.renderList)(128,t=>((0,u.openBlock)(),(0,u.createElementBlock)(u.Fragment,{key:`black-${t}`},[!e.isWhiteKey(t)&&t>=e.lowestNote&&t<=e.highestNote?((0,u.openBlock)(),(0,u.createElementBlock)(`rect`,{key:0,x:e.getKeyPosition(t),y:`0`,width:e.blackKeyWidth,height:e.blackKeyHeight,class:`black-key active`},null,8,w)):(0,u.createCommentVNode)(``,!0)],64))),64))]),(0,u.createElementVNode)(`g`,T,[(0,u.createElementVNode)(`rect`,{x:e.getKeyPosition(e.lowestNote)-2,y:`0`,width:4,height:e.keyHeight+5,class:`range-marker start`},null,8,E),(0,u.createElementVNode)(`rect`,{x:e.getKeyPosition(e.highestNote)+e.whiteKeyWidth-2,y:`0`,width:4,height:e.keyHeight+5,class:`range-marker end`},null,8,D)]),(0,u.createElementVNode)(`text`,{x:e.getKeyPosition(e.lowestNote)+3,y:e.keyHeight+12,class:`note-label`},(0,u.toDisplayString)(e.getNoteLabel(e.lowestNote)),9,O),(0,u.createElementVNode)(`text`,{x:e.getKeyPosition(e.highestNote)+e.whiteKeyWidth-3,y:e.keyHeight+12,"text-anchor":`end`,class:`note-label`},(0,u.toDisplayString)(e.getNoteLabel(e.highestNote)),9,k)],8,v))],512)])}e.r(_sfc_render$1,`_sfc_render`);var A=t.r(h,[[`render`,_sfc_render$1],[`__scopeId`,`data-v-4b232a8b`]]),j=(0,u.defineComponent)({name:`MidiConfig`,components:{PianoRangeVisualizer:A},props:{_id:{type:String,required:!0},user:{type:Object,required:!0}},setup(e){let t=(0,u.ref)(),n=(0,u.ref)(!0),r=(0,u.ref)([]),i=(0,u.ref)([]),o=(0,u.ref)(``),s=(0,u.ref)(``),c=(0,u.ref)(!1),l=(0,u.ref)(``),m=(0,u.ref)(``),h=(0,u.ref)(!1),g=(0,u.ref)(`full-88`),_=(0,u.ref)(21),v=(0,u.ref)(108),y=(0,u.ref)(``),b=(0,u.ref)(0),x=(0,u.ref)(0),S=(0,u.ref)([]),initNoteOptions=()=>{let e=[`C`,`C#`,`D`,`D#`,`E`,`F`,`F#`,`G`,`G#`,`A`,`A#`,`B`],t=[];for(let n=0;n<=127;n++){let r=Math.floor(n/12)-1,i=e[n%12];t.push({title:`${i}${r} (${n})`,value:n})}S.value=t},C=(0,u.ref)([{title:`Full 88-key Piano (A0-C8)`,value:`full-88`},{title:`76-key Keyboard (E1-G7)`,value:`76-key`},{title:`61-key Keyboard (C2-C7)`,value:`61-key`},{title:`49-key Keyboard (C3-C7)`,value:`49-key`},{title:`37-key Keyboard (C3-C6)`,value:`37-key`},{title:`25-key Keyboard (C4-C6)`,value:`25-key`},{title:`Custom Range`,value:`custom`}]),checkConfigChanged=()=>{h.value=o.value!==l.value||s.value!==m.value||g.value!==y.value||g.value===`custom`&&(_.value!==b.value||v.value!==x.value)},updateCustomRangeFromPreset=()=>{switch(g.value){case`full-88`:_.value=21,v.value=108;break;case`76-key`:_.value=28,v.value=103;break;case`61-key`:_.value=36,v.value=96;break;case`49-key`:_.value=48,v.value=96;break;case`37-key`:_.value=48,v.value=84;break;case`25-key`:_.value=60,v.value=84;break}checkConfigChanged()},updateRangeAndCheckChanges=()=>{_.value>=v.value&&(v.value=_.value+12),checkConfigChanged()},playSound=()=>{t.value?.play([{note:{number:64,name:`E`,octave:4},type:`noteon`,velocity:.4251968503937008,timestamp:0},{note:{number:64,name:`E`,octave:4},velocity:.3779527559055118,type:`noteoff`,timestamp:511.90500000002794},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5275590551181102,timestamp:535.8800000001211},{note:{number:60,name:`C`,octave:4},velocity:.33858267716535434,type:`noteoff`,timestamp:674.9899999999907},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5590551181102362,timestamp:1070.8800000000047},{note:{number:60,name:`C`,octave:4},velocity:.3464566929133858,type:`noteoff`,timestamp:1214.8999999999069},{note:{number:64,name:`E`,octave:4},type:`noteon`,velocity:.5118110236220472,timestamp:1424.9400000000605},{note:{number:64,name:`E`,octave:4},velocity:.2755905511811024,type:`noteoff`,timestamp:1576.9150000000373},{note:{number:62,name:`D`,octave:4},type:`noteon`,velocity:.3937007874015748,timestamp:1756.9149999999208},{note:{number:62,name:`D`,octave:4},velocity:.36220472440944884,type:`noteoff`,timestamp:1926.9899999998743},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5196850393700787,timestamp:1970.9600000000792},{note:{number:60,name:`C`,octave:4},velocity:.36220472440944884,type:`noteoff`,timestamp:2126.009999999893},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5984251968503937,timestamp:2502.0050000000047},{note:{number:60,name:`C`,octave:4},velocity:.3858267716535433,type:`noteoff`,timestamp:2853.920000000042},{note:{number:67,name:`G`,octave:4},type:`noteon`,velocity:.6850393700787402,timestamp:2875.8649999999907},{note:{number:67,name:`G`,octave:4},velocity:.6377952755905512,type:`noteoff`,timestamp:4497.004999999888}])},indicateHeardNotes=e=>{(0,d.alertUser)({text:`I hear a ${e.note.name}!`,status:f.Status.ok})};(0,u.watch)(o,()=>{t.value?.selectInput(o.value),checkConfigChanged()}),(0,u.watch)(s,()=>{t.value?.selectOutput(s.value),checkConfigChanged()});let retrieveSettings=async()=>{let t=await(await e.user.getCourseInterface(e._id)).getCourseSettings();if(t?.midiinput){let e=t.midiinput.toString();r.value.some(t=>t.value===e)&&(o.value=e,l.value=e)}if(t?.midioutput){let e=t.midioutput.toString();i.value.some(t=>t.value===e)&&(s.value=e,m.value=e)}t?.keyboardRange&&(y.value=t.keyboardRange.toString(),g.value=y.value),t?.lowestNote&&(b.value=parseInt(t.lowestNote.toString()),_.value=b.value),t?.highestNote&&(x.value=parseInt(t.highestNote.toString()),v.value=x.value),t?.lowestNote&&t?.highestNote&&!t?.keyboardRange&&(g.value=`custom`),h.value=!1},saveSettings=async()=>{c.value=!0,(await(0,p.getDataLayer)().getUserDB().getCourseInterface(e._id)).updateCourseSettings([{key:`midiinput`,value:o.value},{key:`midioutput`,value:s.value},{key:`keyboardRange`,value:g.value},{key:`lowestNote`,value:_.value},{key:`highestNote`,value:v.value}]),l.value=o.value,m.value=s.value,y.value=g.value,b.value=_.value,x.value=v.value,h.value=!1,c.value=!1,(0,d.alertUser)({text:`Settings updated.`,status:f.Status.ok})};return(0,u.onMounted)(async()=>{initNoteOptions();try{t.value=await a.r.instance(),n.value=t.value.state===`ready`||t.value.state===`nodevice`}catch(e){console.log(`Error on midi Init: ${e}`),n.value=!1}n.value&&(t.value?.addNoteonListenter(indicateHeardNotes),t.value?(r.value=t.value.inputs.filter(e=>e.state===`connected`).map(e=>({title:`${e.manufacturer}: ${e.name}`,value:e.id})),i.value=t.value?.outputs.filter(e=>e.state===`connected`).map(e=>({title:`${e.manufacturer}: ${e.name}`,value:e.id}))):(r.value=[{title:`No inputs available`,value:``}],i.value=[{title:`No outputs available`,value:``}]),await retrieveSettings(),!o.value&&r.value.length>0&&(o.value=r.value[0].value),!s.value&&i.value.length>0&&(s.value=i.value[0].value))}),{midiSupported:n,inputs:r,outputs:i,selectedInput:o,selectedOutput:s,updatePending:c,playSound,saveSettings,configChanged:h,lowestNote:_,highestNote:v,keyboardRangeOptions:C,selectedKeyboardRange:g,noteOptions:S,updateCustomRangeFromPreset,updateRangeAndCheckChanges}}}),M={key:0,class:`custom-range-inputs d-flex gap-4`},N={class:`d-flex justify-space-between mt-3`},P={key:1};function _sfc_render(e,t,n,r,i,a){let o=(0,u.resolveComponent)(`v-toolbar-title`),s=(0,u.resolveComponent)(`v-toolbar`),c=(0,u.resolveComponent)(`v-select`),l=(0,u.resolveComponent)(`v-divider`),d=(0,u.resolveComponent)(`piano-range-visualizer`),f=(0,u.resolveComponent)(`v-btn`),p=(0,u.resolveComponent)(`v-form`),m=(0,u.resolveComponent)(`v-card-text`),h=(0,u.resolveComponent)(`v-card`);return(0,u.openBlock)(),(0,u.createBlock)(h,null,{default:(0,u.withCtx)(()=>[(0,u.createVNode)(s,{dense:``},{default:(0,u.withCtx)(()=>[(0,u.createVNode)(o,null,{default:(0,u.withCtx)(()=>t[5]||=[(0,u.createTextVNode)(`Configure Midi Device`)]),_:1})]),_:1}),(0,u.createVNode)(m,null,{default:(0,u.withCtx)(()=>[e.midiSupported?((0,u.openBlock)(),(0,u.createBlock)(p,{key:0,onsubmit:`return false;`},{default:(0,u.withCtx)(()=>[(0,u.createVNode)(c,{modelValue:e.selectedInput,"onUpdate:modelValue":t[0]||=t=>e.selectedInput=t,items:e.inputs,label:`Select Input`,hint:`Play some notes on your input device to test the connection`},null,8,[`modelValue`,`items`]),(0,u.createVNode)(c,{modelValue:e.selectedOutput,"onUpdate:modelValue":t[1]||=t=>e.selectedOutput=t,items:e.outputs,label:`Select Output`},null,8,[`modelValue`,`items`]),(0,u.createVNode)(l,{class:`my-4`}),t[8]||=(0,u.createElementVNode)(`h3`,{class:`text-subtitle-1 mb-2`},`Keyboard Range`,-1),(0,u.createVNode)(c,{modelValue:e.selectedKeyboardRange,"onUpdate:modelValue":[t[2]||=t=>e.selectedKeyboardRange=t,e.updateCustomRangeFromPreset],items:e.keyboardRangeOptions,label:`Select Keyboard Range`},null,8,[`modelValue`,`items`,`onUpdate:modelValue`]),e.selectedKeyboardRange===`custom`?((0,u.openBlock)(),(0,u.createElementBlock)(`div`,M,[(0,u.createVNode)(c,{modelValue:e.lowestNote,"onUpdate:modelValue":[t[3]||=t=>e.lowestNote=t,e.updateRangeAndCheckChanges],items:e.noteOptions,label:`Lowest Note`},null,8,[`modelValue`,`items`,`onUpdate:modelValue`]),(0,u.createVNode)(c,{modelValue:e.highestNote,"onUpdate:modelValue":[t[4]||=t=>e.highestNote=t,e.updateRangeAndCheckChanges],items:e.noteOptions,label:`Highest Note`},null,8,[`modelValue`,`items`,`onUpdate:modelValue`])])):(0,u.createCommentVNode)(``,!0),(0,u.createVNode)(d,{"lowest-note":e.lowestNote,"highest-note":e.highestNote},null,8,[`lowest-note`,`highest-note`]),(0,u.createElementVNode)(`div`,N,[(0,u.createVNode)(f,{color:`primary`,onClick:e.playSound},{default:(0,u.withCtx)(()=>t[6]||=[(0,u.createTextVNode)(`Test midi output`)]),_:1},8,[`onClick`]),(0,u.createVNode)(f,{loading:e.updatePending,disabled:!e.configChanged&&!e.updatePending,color:`info`,class:`save-button`,onClick:e.saveSettings},{default:(0,u.withCtx)(()=>t[7]||=[(0,u.createTextVNode)(` Save these settings `)]),_:1},8,[`loading`,`disabled`,`onClick`])])]),_:1})):((0,u.openBlock)(),(0,u.createElementBlock)(`div`,P,t[9]||=[(0,u.createElementVNode)(`p`,null,`This quilt requires a midi input device, which is not supported by this browser.`,-1),(0,u.createElementVNode)(`div`,null,[(0,u.createElementVNode)(`p`,null,`Try one of the following browsers:`),(0,u.createElementVNode)(`ul`,null,[(0,u.createElementVNode)(`li`,null,[(0,u.createElementVNode)(`a`,{href:`https://www.google.com/chrome/`},`Google Chrome`)]),(0,u.createElementVNode)(`li`,null,[(0,u.createElementVNode)(`a`,{href:`https://www.microsoft.com/edge`},`Microsoft Edge`)]),(0,u.createElementVNode)(`li`,null,[(0,u.createElementVNode)(`a`,{href:`https://brave.com/`},`Brave`)])])],-1)]))]),_:1})]),_:1})}var F=t.r(j,[[`render`,_sfc_render],[`__scopeId`,`data-v-6ee9020f`]]),I=d.useQuestionView;async function loadSubcourse(e){let t;switch(e){case`chess`:t=await Promise.resolve().then(()=>require(`./chess-BVYo88i5.cjs`));break;case`french`:t=await Promise.resolve().then(()=>require(`./french-x9P8RRn8.cjs`));break;case`math`:t=await Promise.resolve().then(()=>require(`./math-BWlIa6-l.cjs`));break;case`piano`:t=await Promise.resolve().then(()=>require(`./piano-Btvkzjfz.cjs`));break;case`pitch`:t=await Promise.resolve().then(()=>require(`./pitch-DsopN5IR.cjs`));break;case`sightSing`:t=await Promise.resolve().then(()=>require(`./sightsing-CtagQ0FJ.cjs`));break;case`typing`:t=await Promise.resolve().then(()=>require(`./typing-CBPjtwrg.cjs`));break;case`wordWork`:t=await Promise.resolve().then(()=>require(`./word-work-C5MTSapy.cjs`));break}let n=t.default;return L.courses.find(e=>e.name===n.name)||L.courses.push(n),n}async function loadAllSubcourses(){await Promise.all([`chess`,`french`,`math`,`piano`,`pitch`,`sightSing`,`typing`,`wordWork`].map(e=>loadSubcourse(e)))}var AllCourseWare=class{courseWareList;get courses(){return this.courseWareList}constructor(e){this.courseWareList=e}getCourseWare(e){return this.courseWareList.find(t=>t.name===e)}cachedRawViews=null;allViewsRaw(){if(!this.cachedRawViews){let e=this.allViews();this.cachedRawViews=Object.fromEntries(Object.entries(e).map(([e,t])=>[e,(0,u.markRaw)(t)]))}return this.cachedRawViews}allViews(){let e={};return this.courseWareList.forEach(t=>{Object.assign(e,t.allViewsMap)}),e}getView(e){let t;t=typeof e==`string`?f.NameSpacer.getViewDescriptor(e):e;let n=this.getCourseWare(t.course);if(n){let e=n.getQuestion(t.questionType);if(e){let r=e.views.find(e=>e.name===t.view);if(r)return r;throw console.error(`QuestionView ${t.view} not found in course ${t.course}
2
2
 
3
3
  descriptor: ${JSON.stringify(t)}
4
4
 
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { r as e, t } from "./shapes-BQUVJdp5.js";
2
2
  import { i as n, n as r, r as i, t as a } from "./CourseWare-BTFRjgBR.js";
3
- import { t as o } from "./chess-BbHATAzk.js";
3
+ import { t as o } from "./chess-E2uOAyQS.js";
4
4
  import { t as s } from "./french-Dk7YG8Td.js";
5
5
  import { t as c } from "./math-B4HbgYf6.js";
6
6
  import { a as l, i as u, n as d, o as f, r as p, t as m } from "./piano-DF1g6yaX.js";
@@ -621,7 +621,7 @@ async function loadSubcourse(e) {
621
621
  let t;
622
622
  switch (e) {
623
623
  case "chess":
624
- t = await import("./chess-X1bmWmh3.js");
624
+ t = await import("./chess-Lfm7Fsvs.js");
625
625
  break;
626
626
  case "french":
627
627
  t = await import("./french-evUMlbbq.js");
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.1.40",
6
+ "version": "0.2.1",
7
7
  "type": "module",
8
8
  "sideEffects": false,
9
9
  "main": "./dist/index.cjs.js",
@@ -44,9 +44,9 @@
44
44
  "lint:check": "eslint ."
45
45
  },
46
46
  "dependencies": {
47
- "@vue-skuilder/common": "0.1.40",
48
- "@vue-skuilder/common-ui": "0.1.40",
49
- "@vue-skuilder/db": "0.1.40",
47
+ "@vue-skuilder/common": "0.2.1",
48
+ "@vue-skuilder/common-ui": "0.2.1",
49
+ "@vue-skuilder/db": "0.2.1",
50
50
  "moment": "^2.29.4",
51
51
  "paper": "^0.12.3",
52
52
  "vue": "^3.5.13"
@@ -69,5 +69,5 @@
69
69
  "peerDependencies": {
70
70
  "vue": "^3.2.0"
71
71
  },
72
- "stableVersion": "0.1.40"
72
+ "stableVersion": "0.2.1"
73
73
  }
@@ -1 +0,0 @@
1
- require(`./CourseWare-DSeyTAtH.cjs`);const e=require(`./chess-BsgVZARV.cjs`);exports.default=e.t;