@gui-chat-plugin/music 1.0.0 → 1.1.0
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.
- package/dist/vue.cjs +1 -1
- package/package.json +2 -2
package/dist/vue.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=require(`./samples-msJuWhn1.cjs`);let l=require(`vue`),u=require(`opensheetmusicdisplay`),d=require(`@isamu/osmd-audio-player`);d=s(d);let f=require(`jspdf`),p=require(`svg2pdf.js`);var m={class:`w-full h-full overflow-y-auto`},h={class:`min-h-full flex flex-col p-4`},g={key:0,class:`mb-4 text-center`},_={class:`text-2xl font-bold text-gray-900`},v={class:`mb-4 flex gap-2 items-center justify-center`},y=[`disabled`],b={class:`text-xl`},x=[`disabled`],S={class:`flex items-center gap-2`},C=(0,l.defineComponent)({__name:`View`,props:{selectedResult:{},sendTextMessage:{type:Function}},setup(e){let t=e,n=(0,l.ref)(null),r=null,i=null,a=(0,l.ref)(!1),o=(0,l.ref)(!1),s=(0,l.ref)(!1),c=(0,l.ref)(200),C=(0,l.ref)(!1),w=(0,l.ref)(!1),T=async()=>{if(!(!n.value||!t.selectedResult.data?.musicXML))try{n.value.innerHTML=``,a.value=!1,o.value=!1,r=new u.OpenSheetMusicDisplay(n.value,{autoResize:!0,backend:`svg`,drawTitle:!1,followCursor:!0}),await r.load(t.selectedResult.data.musicXML),await r.render(),i||=new d.default,await i.loadScore(r);let e=r.Sheet?.SourceMeasures?.[0]?.TempoExpressions;if(e&&e.length>0){let t=e[0],n=t.TempoInBpm||t.tempoInBpm;n&&(c.value=n)}i.on(`iteration`,e=>{!C.value&&e&&e.length===0&&(i.stop(),o.value=!1)}),a.value=!0}catch(e){console.error(`Error rendering music:`,e),n.value&&(n.value.innerHTML=`<div class="text-red-500">Error rendering sheet music: ${e instanceof Error?e.message:`Unknown error`}</div>`)}},E=async()=>{if(!n.value||!a.value)return;let e=n.value.querySelector(`svg`);if(e){s.value=!0;try{let n=e.viewBox.baseVal.width||e.clientWidth,r=e.viewBox.baseVal.height||e.clientHeight,i=new f.jsPDF({orientation:n>r?`landscape`:`portrait`,unit:`pt`,format:`a4`}),a=i.internal.pageSize.getWidth(),o=i.internal.pageSize.getHeight(),s=Math.min(a/n,o/r),c=n*s,l=r*s;await(0,p.svg2pdf)(e,i,{x:(a-c)/2,y:(o-l)/2,width:c,height:l});let u=`${(t.selectedResult.title||`sheet-music`).replace(/[^a-zA-Z0-9]/g,`_`)}.pdf`;i.save(u)}catch(e){console.error(`Error exporting PDF:`,e)}finally{s.value=!1}}},D=async()=>{!i||!a.value||(i.setBpm(Math.max(30,Math.min(300,c.value))),i.metronomeVolume=w.value?.7:0,i.isLooping=C.value,await i.play(),o.value=!0)},O=()=>{i&&(i.stop(),o.value=!1)};return(0,l.watch)(c,()=>{i&&i.setBpm(Math.max(30,Math.min(300,c.value)))}),(0,l.watch)(C,()=>{i&&(i.isLooping=C.value)}),(0,l.watch)(w,()=>{i&&(i.metronomeVolume=w.value?.7:0)}),(0,l.onMounted)(()=>{T()}),(0,l.watch)(()=>t.selectedResult.data?.musicXML,()=>{T()}),(0,l.onUnmounted)(()=>{i&&i.stop()}),(t,r)=>((0,l.openBlock)(),(0,l.createElementBlock)(`div`,m,[(0,l.createElementVNode)(`div`,h,[e.selectedResult.title?((0,l.openBlock)(),(0,l.createElementBlock)(`div`,g,[(0,l.createElementVNode)(`h2`,_,(0,l.toDisplayString)(e.selectedResult.title),1)])):(0,l.createCommentVNode)(``,!0),(0,l.createElementVNode)(`div`,v,[(0,l.createElementVNode)(`button`,{onClick:r[0]||=e=>o.value?O():D(),disabled:!a.value,class:(0,l.normalizeClass)([`px-4 py-2 text-white rounded disabled:bg-gray-300 disabled:cursor-not-allowed flex items-center gap-1`,o.value?`bg-red-500`:`bg-blue-500`])},[(0,l.createElementVNode)(`span`,b,(0,l.toDisplayString)(o.value?`⏹`:`▶`),1),(0,l.createTextVNode)(` `+(0,l.toDisplayString)(o.value?`Stop`:`Play`),1)],10,y),(0,l.createElementVNode)(`button`,{onClick:E,disabled:!a.value||s.value,class:`px-4 py-2 text-white bg-green-600 rounded disabled:bg-gray-300 disabled:cursor-not-allowed flex items-center gap-1`},[r[2]||=(0,l.createElementVNode)(`span`,{class:`text-xl`},`⬇`,-1),(0,l.createTextVNode)(` `+(0,l.toDisplayString)(s.value?`Exporting...`:`PDF`),1)],8,x),(0,l.createElementVNode)(`label`,S,[r[3]||=(0,l.createTextVNode)(` Tempo `,-1),(0,l.withDirectives)((0,l.createElementVNode)(`input`,{"onUpdate:modelValue":r[1]||=e=>c.value=e,type:`number`,min:`30`,max:`300`,class:`w-20 px-2 py-1 border border-gray-300 rounded`},null,512),[[l.vModelText,c.value,void 0,{number:!0}]]),r[4]||=(0,l.createTextVNode)(` bpm `,-1)])]),(0,l.createElementVNode)(`div`,{ref_key:`musicContainer`,ref:n,class:`flex-1 flex items-center justify-center bg-white rounded-lg p-4`},null,512)])]))}}),w={class:`text-center p-4 bg-purple-50 rounded`},T={key:0,class:`text-xs text-gray-600 mt-1 truncate`},E=(0,l.defineComponent)({__name:`Preview`,props:{result:{}},setup(e){return(t,n)=>((0,l.openBlock)(),(0,l.createElementBlock)(`div`,w,[n[0]||=(0,l.createElementVNode)(`div`,{class:`text-purple-600 font-medium`},`🎵 Sheet Music`,-1),e.result.title?((0,l.openBlock)(),(0,l.createElementBlock)(`div`,T,(0,l.toDisplayString)(e.result.title),1)):(0,l.createCommentVNode)(``,!0)]))}}),D={toolDefinition:c.r,execute:c.n,generatingMessage:`Rendering sheet music...`,isEnabled:()=>!0,viewComponent:C,previewComponent:E,samples:c.t},O={plugin:D};exports.TOOL_DEFINITION=c.r,exports.default=O,exports.executeMusic=c.n,exports.plugin=D;
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=require(`./samples-msJuWhn1.cjs`);let l=require(`vue`),u=require(`opensheetmusicdisplay`),d=require(`@isamu/osmd-audio-player`);d=s(d,1);let f=require(`jspdf`),p=require(`svg2pdf.js`);var m={class:`w-full h-full overflow-y-auto`},h={class:`min-h-full flex flex-col p-4`},g={key:0,class:`mb-4 text-center`},_={class:`text-2xl font-bold text-gray-900`},v={class:`mb-4 flex gap-2 items-center justify-center`},y=[`disabled`],b={class:`text-xl`},x=[`disabled`],S={class:`flex items-center gap-2`},C=(0,l.defineComponent)({__name:`View`,props:{selectedResult:{},sendTextMessage:{type:Function}},setup(e){let t=e,n=(0,l.ref)(null),r=null,i=null,a=(0,l.ref)(!1),o=(0,l.ref)(!1),s=(0,l.ref)(!1),c=(0,l.ref)(200),C=(0,l.ref)(!1),w=(0,l.ref)(!1),T=async()=>{if(!(!n.value||!t.selectedResult.data?.musicXML))try{n.value.innerHTML=``,a.value=!1,o.value=!1,r=new u.OpenSheetMusicDisplay(n.value,{autoResize:!0,backend:`svg`,drawTitle:!1,followCursor:!0}),await r.load(t.selectedResult.data.musicXML),await r.render(),i||=new d.default,await i.loadScore(r);let e=r.Sheet?.SourceMeasures?.[0]?.TempoExpressions;if(e&&e.length>0){let t=e[0],n=t.TempoInBpm||t.tempoInBpm;n&&(c.value=n)}i.on(`iteration`,e=>{!C.value&&e&&e.length===0&&(i.stop(),o.value=!1)}),a.value=!0}catch(e){console.error(`Error rendering music:`,e),n.value&&(n.value.innerHTML=`<div class="text-red-500">Error rendering sheet music: ${e instanceof Error?e.message:`Unknown error`}</div>`)}},E=async()=>{if(!n.value||!a.value)return;let e=n.value.querySelector(`svg`);if(e){s.value=!0;try{let n=e.viewBox.baseVal.width||e.clientWidth,r=e.viewBox.baseVal.height||e.clientHeight,i=new f.jsPDF({orientation:n>r?`landscape`:`portrait`,unit:`pt`,format:`a4`}),a=i.internal.pageSize.getWidth(),o=i.internal.pageSize.getHeight(),s=Math.min(a/n,o/r),c=n*s,l=r*s;await(0,p.svg2pdf)(e,i,{x:(a-c)/2,y:(o-l)/2,width:c,height:l});let u=`${(t.selectedResult.title||`sheet-music`).replace(/[^a-zA-Z0-9]/g,`_`)}.pdf`;i.save(u)}catch(e){console.error(`Error exporting PDF:`,e)}finally{s.value=!1}}},D=async()=>{!i||!a.value||(i.setBpm(Math.max(30,Math.min(300,c.value))),i.metronomeVolume=w.value?.7:0,i.isLooping=C.value,await i.play(),o.value=!0)},O=()=>{i&&(i.stop(),o.value=!1)};return(0,l.watch)(c,()=>{i&&i.setBpm(Math.max(30,Math.min(300,c.value)))}),(0,l.watch)(C,()=>{i&&(i.isLooping=C.value)}),(0,l.watch)(w,()=>{i&&(i.metronomeVolume=w.value?.7:0)}),(0,l.onMounted)(()=>{T()}),(0,l.watch)(()=>t.selectedResult.data?.musicXML,()=>{T()}),(0,l.onUnmounted)(()=>{i&&i.stop()}),(t,r)=>((0,l.openBlock)(),(0,l.createElementBlock)(`div`,m,[(0,l.createElementVNode)(`div`,h,[e.selectedResult.title?((0,l.openBlock)(),(0,l.createElementBlock)(`div`,g,[(0,l.createElementVNode)(`h2`,_,(0,l.toDisplayString)(e.selectedResult.title),1)])):(0,l.createCommentVNode)(``,!0),(0,l.createElementVNode)(`div`,v,[(0,l.createElementVNode)(`button`,{onClick:r[0]||=e=>o.value?O():D(),disabled:!a.value,class:(0,l.normalizeClass)([`px-4 py-2 text-white rounded disabled:bg-gray-300 disabled:cursor-not-allowed flex items-center gap-1`,o.value?`bg-red-500`:`bg-blue-500`])},[(0,l.createElementVNode)(`span`,b,(0,l.toDisplayString)(o.value?`⏹`:`▶`),1),(0,l.createTextVNode)(` `+(0,l.toDisplayString)(o.value?`Stop`:`Play`),1)],10,y),(0,l.createElementVNode)(`button`,{onClick:E,disabled:!a.value||s.value,class:`px-4 py-2 text-white bg-green-600 rounded disabled:bg-gray-300 disabled:cursor-not-allowed flex items-center gap-1`},[r[2]||=(0,l.createElementVNode)(`span`,{class:`text-xl`},`⬇`,-1),(0,l.createTextVNode)(` `+(0,l.toDisplayString)(s.value?`Exporting...`:`PDF`),1)],8,x),(0,l.createElementVNode)(`label`,S,[r[3]||=(0,l.createTextVNode)(` Tempo `,-1),(0,l.withDirectives)((0,l.createElementVNode)(`input`,{"onUpdate:modelValue":r[1]||=e=>c.value=e,type:`number`,min:`30`,max:`300`,class:`w-20 px-2 py-1 border border-gray-300 rounded`},null,512),[[l.vModelText,c.value,void 0,{number:!0}]]),r[4]||=(0,l.createTextVNode)(` bpm `,-1)])]),(0,l.createElementVNode)(`div`,{ref_key:`musicContainer`,ref:n,class:`flex-1 flex items-center justify-center bg-white rounded-lg p-4`},null,512)])]))}}),w={class:`text-center p-4 bg-purple-50 rounded`},T={key:0,class:`text-xs text-gray-600 mt-1 truncate`},E=(0,l.defineComponent)({__name:`Preview`,props:{result:{}},setup(e){return(t,n)=>((0,l.openBlock)(),(0,l.createElementBlock)(`div`,w,[n[0]||=(0,l.createElementVNode)(`div`,{class:`text-purple-600 font-medium`},`🎵 Sheet Music`,-1),e.result.title?((0,l.openBlock)(),(0,l.createElementBlock)(`div`,T,(0,l.toDisplayString)(e.result.title),1)):(0,l.createCommentVNode)(``,!0)]))}}),D={toolDefinition:c.r,execute:c.n,generatingMessage:`Rendering sheet music...`,isEnabled:()=>!0,viewComponent:C,previewComponent:E,samples:c.t},O={plugin:D};exports.TOOL_DEFINITION=c.r,exports.default=O,exports.executeMusic=c.n,exports.plugin=D;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gui-chat-plugin/music",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "MusicXML sheet music plugin for GUI Chat",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@isamu/osmd-audio-player": "^1.0.0",
|
|
44
|
-
"gui-chat-protocol": "^0.0
|
|
44
|
+
"gui-chat-protocol": "^0.1.0",
|
|
45
45
|
"jspdf": "^4.2.1",
|
|
46
46
|
"svg2pdf.js": "^2.7.0"
|
|
47
47
|
},
|