diff --git a/packages/chord-chart-studio/build/assets/index-BeOzSnWz.js b/packages/chord-chart-studio/build/assets/index-COv2kAVA.js
similarity index 67%
rename from packages/chord-chart-studio/build/assets/index-BeOzSnWz.js
rename to packages/chord-chart-studio/build/assets/index-COv2kAVA.js
index e2bbcf4..1b2856f 100644
--- a/packages/chord-chart-studio/build/assets/index-BeOzSnWz.js
+++ b/packages/chord-chart-studio/build/assets/index-COv2kAVA.js
@@ -50,11 +50,11 @@ She _broke your throne and she _cut your hair
And _from your lips she _drew the halle_lujah
#c
-`;function Kn(){const e=W(),t=e.getState();Z(t).length===0&&(e.dispatch(U("Hallelujah - Leonard Cohen",Un)),e.dispatch(U("Getting started",Vn)))}class ze extends C.Component{constructor(t){super(t),this.state={error:null,errorInfo:null}}componentDidCatch(t,n){this.setState({error:t,errorInfo:n})}render(){return this.state.errorInfo?r.jsxs("div",{className:"ErrorBoundary",children:[r.jsx("h2",{children:"Something went wrong"}),r.jsxs("details",{style:{whiteSpace:"pre-wrap"},open:!0,children:[this.state.error&&this.state.error.toString(),r.jsx("br",{}),this.state.errorInfo.componentStack]})]}):this.props.children}}ze.propTypes={children:i.any};let z;function Yn(e,t){const n=document.getElementById("app");z||(z=Pe(n)),z.render(r.jsx(It,{store:W(),children:r.jsx(C.StrictMode,{children:r.jsx(ze,{children:r.jsx(e,{...t})})})}))}let K,Ve;const Jn={init(e){const t=e.map(n=>({...n,action:s=>({Controller:n.action,params:s.params})}));K=new Mt(t,{errorHandler(n,s){console.error(`Error: Cannot find route for path: ${s.pathname}`)}}),Ve=Ot(K,{stringifyQueryParams:Ie.stringify})}};function G(e,t=!0){const n=new URL(e,window.location.origin);return K.resolve(n.pathname).then(({Controller:s,params:o}={})=>{if(s){t&&Qn(e);const a=Ie.parse(n.search,{ignoreQueryPrefix:!0});Yn(s,{...o,...a})}})}function Ue(e,t){try{return Ve(e,t)}catch(n){console.error(n.toString())}}function Qn(e){window.history.pushState({url:e},null,e)}window.addEventListener("popstate",()=>{const e=window.location.pathname+window.location.search;G(e,!1)});function Xn(){const t=Me(Z).map(n=>r.jsx(Zn,{song:n},n.id));return r.jsxs("div",{children:["Full Library",r.jsx("ul",{children:t})]})}const Zn=({song:e})=>{const t=n=>{n.preventDefault(),G(Ue("songView",{songId:e.id}))};return r.jsx("li",{children:r.jsx("a",{href:`/song/${e.id}`,onClick:t,children:e.title})})},er=[{name:"library",path:"/library",action:Xn}];function tr({songId:e}){const t=Me(s=>ee(s,e)),n=s=>{s.preventDefault(),G(Ue("library"))};return r.jsxs("div",{children:[r.jsx("a",{href:"",onClick:n,children:"Go back to list"}),r.jsx("br",{}),r.jsx("b",{children:t.title}),r.jsx("p",{children:t.content})]})}const nr=[{name:"songView",path:"/songView/:songId",action:tr}],Ke=e=>v(D,{mode:e}),rr=()=>v(Le),sr=()=>v(ke),ir=""+new URL("logo-D2B3txiq.svg",import.meta.url).href;function or(){return r.jsx("div",{className:"logo",children:r.jsx("div",{className:"logo-isExpanded",children:r.jsx("div",{className:"logo-img",children:r.jsxs("svg",{className:"stacked",children:[r.jsx("title",{children:"Chord Chart Studio"}),r.jsx("use",{href:ir+"#stacked"})]})})})})}const ar=C.memo(or);function Ye(e){const{iconName:t}=e,n=["icon","material-icons"];return r.jsx("i",{className:n.join(" "),children:t})}Ye.propTypes={iconName:i.string.isRequired};const x=C.memo(Ye);function Je(e){const{label:t,icon:n,editorMode:s,setEditorMode:o,isActive:a,isDisabled:l}=e,c=["mainNavEntry"];a&&c.push("mainNavEntry-isActive"),l&&c.push("mainNavEntry-isDisabled");function d(){l||o(s)}return r.jsxs("li",{className:c.join(" "),onClick:d,children:[r.jsx("span",{className:"mainNavEntry-icon",children:r.jsx(x,{iconName:n})}),t]})}Je.propTypes={label:i.string.isRequired,icon:i.string.isRequired,editorMode:i.string.isRequired,setEditorMode:i.func.isRequired,isActive:i.bool.isRequired,isDisabled:i.bool.isRequired};const lr=C.memo(Je);function Qe(e){const{currentMode:t,allEntries:n,setEditorMode:s,selectedId:o}=e;return r.jsx("nav",{className:"mainNav",children:r.jsx("ul",{className:"mainNav-entries",children:n.map((a,l)=>r.jsx(lr,{isActive:!!o&&a.editorMode===t,isDisabled:!o,setEditorMode:s,...a},l))})})}Qe.propTypes={currentMode:i.string.isRequired,setEditorMode:i.func.isRequired,selectedId:i.string,allEntries:i.arrayOf(i.shape({id:i.string.isRequired,label:i.string.isRequired,icon:i.string.isRequired,editorMode:i.string.isRequired}))};const cr=C.memo(Qe),E=({children:e,isDisabled:t,buttonName:n,onClick:s,type:o})=>{const a=["Button"];return o==="primary"&&a.push("Button-primary"),o==="secondary"&&a.push("Button-secondary"),t&&a.push("Button-isDisabled"),r.jsx("button",{className:a.join(" "),disabled:t,type:"button",name:n,onClick:s,children:e})};E.propTypes={children:i.string.isRequired,isDisabled:i.bool,buttonName:i.string.isRequired,type:i.string.isRequired,onClick:i.func.isRequired};E.defaultProps={isDisabled:!1};const dr="https://chord-chart-studio.netlify.app",ie=()=>{const e=()=>{window.open(dr,"_blank").focus()};return r.jsxs("div",{className:"userGuide",children:[r.jsx("div",{className:"userGuide-isCollapsed",children:r.jsx(x,{iconName:"help_outline"})}),r.jsx("div",{className:"userGuide-isExpanded",children:r.jsx(E,{buttonName:"userGuide",type:"primary",onClick:e,children:"User Guide"})})]})};ie.propTypes={};ie.defaultProps={};const ur=C.memo(ie),pr=()=>({"chord-chart-studio":"v0.14.0","chord-symbol":"v4.0.0","chord-mark":"v0.16.2"});function mr(){const e=pr();return r.jsx("div",{className:"versions",children:r.jsxs("div",{className:"versions-isExpanded",children:["Chord Chart Studio ",e["chord-chart-studio"],r.jsx("br",{}),"ChordMark ",e["chord-mark"]," ",r.jsx("br",{}),"ChordSymbol ",e["chord-symbol"]," ",r.jsx("br",{}),"Logo by"," ",r.jsx("a",{href:"https://spelling-bee-assistant.app/",target:"_blank",rel:"noreferrer",children:"Dieter Raber"})]})})}const hr=C.memo(mr),gr=e=>e.songImporter.content,fr=e=>e.songImporter.inputFormat,yr=e=>e.songImporter.title,br=e=>e.songImporter.isImporting,xr=e=>e.songImporter.isFromWeb;function oe(e){const{children:t,closeModal:n}=e;return R.useEffect(()=>{const s=o=>{o.key==="Escape"&&n()};return window.addEventListener("keyup",s),()=>{window.removeEventListener("keyup",s)}}),r.jsxs("section",{className:"mod-ModalContainer",children:[r.jsx("div",{className:"mod-Overlay",onClick:n,"data-testid":"modal-overlay"}),r.jsx("div",{className:"mod-ContentContainer",children:t})]})}oe.propTypes={children:i.element.isRequired,closeModal:i.func.isRequired};const Xe=({cancelImport:e,chordMarkContent:t,importFile:n,title:s,content:o,error:a})=>{const l=s?'Import "'+s+'"':"Import song",c=()=>{n(s||"[untitled]",t)};return r.jsxs("div",{className:"sim-Header_Container",children:[r.jsx("div",{className:"sim-Header_Title",children:l}),r.jsxs("div",{className:"sim-Header_Actions",children:[r.jsx(E,{onClick:e,buttonName:"cancel",type:"secondary",children:"CANCEL"}),r.jsx(E,{onClick:c,buttonName:"import",type:"primary",isDisabled:o===""||a!=="",children:"IMPORT"})]})]})};Xe.propTypes={cancelImport:i.func.isRequired,chordMarkContent:i.string,content:i.string,error:i.string,importFile:i.func.isRequired,title:i.string};const Ze=50*1024,Cr=e=>new Promise((t,n)=>{if(e.length){const s=e[0];Rr(s)?n(Fr(s.size)):vr(s)?s.text().then(o=>{t({content:o,title:jr(s)})}).catch(o=>{n(o)}):n(Tr(s))}else n(Nr())}),jr=e=>e.name.substr(0,e.name.lastIndexOf(".")),Rr=e=>e.size>Ze,vr=e=>e.type.indexOf("text")===0||e.type.length===0,Fr=e=>"The selected file is too big: "+ve(e,{round:0})+" (maximum allowed file size is "+ve(Ze,{round:0})+").",Tr=e=>"Cannot import file of type "+e.type+".",Nr=()=>"No file selected.",Sr="text/*,.cho,.crd,.chopro,.chord,.pro,.txt,.md",et=({setContent:e})=>{const t=n=>{Cr(n.target.files).then(s=>{e(s.content,s.title)}).catch(s=>{e(s)})};return r.jsxs("div",{children:[r.jsx("label",{htmlFor:"importSong-Input",className:"Button Button-primary",children:"Select File"}),r.jsx("input",{id:"importSong-Input",name:"importSong-Input",type:"file",className:"sim-InputFile_Input",onChange:t,accept:Sr})]})};et.propTypes={setContent:i.func.isRequired};function ae(e){const{content:t,setContent:n,isDisabled:s}=e,o=l=>{n(l.target.value)},a=["sim-Input_Textarea"];return s&&a.push("sim-Input_Textarea-Disabled"),r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"sim-Input_Header",children:[r.jsx(x,{iconName:"arrow_drop_down"}),"Copy/paste below",r.jsx(x,{iconName:"arrow_drop_down"})]}),r.jsx("textarea",{className:a.join(" "),onChange:o,value:t,disabled:s,"data-testid":"sim-input"})]})}ae.propTypes={content:i.string.isRequired,isDisabled:i.bool.isRequired,setContent:i.func.isRequired};ae.defaultProps={};function le(e){const{inputFormat:t,error:n}=e;return r.jsxs("div",{className:"sim-Preview_Error",children:[r.jsxs("p",{children:["There was an error when trying to parse the song in the specified input format (",t,").",r.jsx("br",{}),"Please correct the input or try another format.",r.jsx("br",{}),"The error was:"]}),r.jsxs("p",{children:['"',n,'"']}),r.jsx("p",{children:'Hint: most of the time, this is related to an unclosed "[" or "{" or an unsupported ChordPro directive'})]})}le.propTypes={error:i.string,inputFormat:i.string.isRequired};le.defaultProps={};function ce(e){const{setInputFormat:t,inputFormat:n,id:s,label:o,isDisabled:a}=e,l=u=>{a||t(u.target.value)},c=["sim-InputFormat_Entry"],d=["sim-InputFormat_Label"];return a&&(c.push("sim-InputFormat_Entry-Disabled"),d.push("sim-InputFormat_Label-Disabled")),r.jsxs(r.Fragment,{children:[r.jsx("input",{className:c.join(" "),type:"radio",name:"inputFormat",id:s,value:s,onChange:l,checked:n===s}),r.jsx("label",{className:d.join(" "),htmlFor:s,children:o})]})}ce.propTypes={setInputFormat:i.func.isRequired,inputFormat:i.string.isRequired,id:i.string.isRequired,label:i.string.isRequired,isDisabled:i.bool.isRequired};ce.defaultProps={};const wr=[{id:"auto",label:"Detect"},{id:"chordPro",label:"Bracketed chords (ChordPro)"},{id:"chordsOverLyrics",label:"Chords over lyrics (Ultimate Guitar...)"}];function de(e){const{setInputFormat:t,inputFormat:n,disableAll:s}=e,o=wr.map(a=>r.jsx(ce,{setInputFormat:t,id:a.id,label:a.label,inputFormat:n,isDisabled:s},a.id));return r.jsxs("div",{className:"sim-InputFormat",children:["Input format:",o]})}de.propTypes={disableAll:i.bool.isRequired,setInputFormat:i.func.isRequired,inputFormat:i.string.isRequired};de.defaultProps={};function ue(e){const{cancelImport:t,content:n,importFile:s,isFromWeb:o,isImporting:a,setContent:l,setInputFormat:c,inputFormat:d,title:u}=e;if(!a)return null;let h="",m="";try{h=Lt(n,{inputFormat:d})}catch(f){m=f.message}return r.jsx(oe,{closeModal:t,children:r.jsxs("div",{className:"sim-SongImporterModal_Container","data-testid":"song-importer",children:[r.jsx(Xe,{cancelImport:t,chordMarkContent:h,content:n,error:m,importFile:s,title:u}),r.jsxs("div",{className:"sim-TwoColumns_Container",children:[r.jsx("div",{className:"sim-Column_Container",children:r.jsx(et,{setContent:l})}),r.jsx("div",{className:"sim-Column_Container",children:r.jsx(de,{inputFormat:d,setInputFormat:c,disableAll:o===!0})})]}),r.jsxs("div",{className:"sim-TwoColumns_Container sim-TwoColumns_Container-autoHeight",children:[r.jsx("div",{className:"sim-Column_Container",children:r.jsx(ae,{content:n,setContent:l,isDisabled:o})}),r.jsxs("div",{className:"sim-Column_Container",children:[r.jsxs("div",{className:"sim-Input_Header",children:[r.jsx(x,{iconName:"arrow_drop_down"}),"ChordMark preview",r.jsx(x,{iconName:"arrow_drop_down"})]}),r.jsx("div",{className:"sim-Preview_Container","data-testid":"sim-preview",children:m?r.jsx(le,{inputFormat:d,error:m}):h})]})]})]})})}ue.propTypes={cancelImport:i.func.isRequired,content:i.string.isRequired,importFile:i.func.isRequired,isFromWeb:i.bool.isRequired,isImporting:i.bool.isRequired,setContent:i.func.isRequired,setInputFormat:i.func.isRequired,inputFormat:i.string.isRequired,title:i.string};ue.defaultProps={};const Er=N(e=>({content:gr(e),isFromWeb:xr(e),isImporting:br(e),inputFormat:fr(e),title:yr(e)}),{setContent:Mn,setInputFormat:On,cancelImport:Bn,importFile:U})(ue),_r=[{id:"edit",label:"Edit",icon:"create",editorMode:"edit"},{id:"play",label:"Screen view",icon:"music_note",editorMode:"play"},{id:"print",label:"Print/PDF Preview",icon:"print",editorMode:"print"},{id:"export",label:"Export Preview",icon:"save_alt",editorMode:"export"}];function pe(e){const{editorMode:t,isLeftBarCollapsed:n,isRightBarCollapsed:s,toggleLeftBar:o,toggleRightBar:a,setEditorMode:l,selectedId:c,leftBar:d,rightBar:u}=e,h=["leftBar"];n&&h.push("leftBar-isCollapsed");const m=["rightBar"];return s&&m.push("rightBar-isCollapsed"),r.jsxs("div",{className:"appLayout-wrapper",children:[r.jsx(Er,{}),r.jsxs("section",{className:h.join(" "),children:[r.jsxs("div",{className:"leftBar-content",onClick:n?o:null,children:[r.jsx(ar,{}),d]}),r.jsx("div",{className:"leftBar-collapser",onClick:o,"data-testid":"leftBar-collapser",children:r.jsx("span",{className:"leftBar-collapserIcon",children:r.jsx(x,{iconName:"keyboard_arrow_left"})})})]}),r.jsxs("section",{className:"appLayout-main",children:[r.jsx("section",{className:"appLayout-header",children:r.jsx(cr,{allEntries:_r,currentMode:t,setEditorMode:l,selectedId:c})}),r.jsx("section",{className:"appLayout-content",children:e.children})]}),r.jsxs("section",{className:m.join(" "),children:[r.jsx("div",{className:"rightBar-collapser",onClick:a,"data-testid":"rightBar-collapser",children:r.jsx("span",{className:"rightBar-collapserIcon",children:r.jsx(x,{iconName:"keyboard_arrow_right"})})}),r.jsxs("div",{className:"rightBar-content",onClick:s?a:null,children:[r.jsx(ur,{}),u,r.jsx(hr,{})]})]})]})}pe.propTypes={children:i.element,isLeftBarCollapsed:i.bool,isRightBarCollapsed:i.bool,selectedId:i.string,toggleLeftBar:i.func.isRequired,toggleRightBar:i.func.isRequired,editorMode:i.string.isRequired,setEditorMode:i.func.isRequired,leftBar:i.element.isRequired,rightBar:i.element.isRequired};pe.defaultProps={isLeftBarCollapsed:!1,isRightBarCollapsed:!1};const qr=N(e=>({editorMode:_(e),isLeftBarCollapsed:tn(e),isRightBarCollapsed:nn(e),selectedId:S(e)}),{toggleLeftBar:rr,toggleRightBar:sr,setEditorMode:Ke})(pe),Pr=e=>v(re,{id:e}),Ir=e=>v(Ae,{id:e});function Mr(e,t={},n=!1){return nt(e,t,n,"text")}function tt(e,t={},n=!1){return nt(e,t,n,"html")}function nt(e,t,n,s){if(n)switch(t.chartFormat){case"chordmark":{const a=M(e,t);return s==="html"?a:Se(a)}case"chordmarkSrc":return s==="html"?V(e):e;case"chordpro":{t.customRenderer=At();const a=M(e,t);return s==="html"?V(a):a}case"ultimateGuitar":{t.customRenderer=Fe();const a=M(e,{...t,customRenderer:Fe(),printBarSeparators:"grids",printChordsDuration:"never",printSubBeatDelimiters:!1,printInlineTimeSignatures:!1,chordSymbolRenderer:kt({customFilters:[Bt()],useShortNamings:!0,accidentalsType:t.accidentalsType==="auto"?"original":t.accidentalsType,...t})})+`
+`;function Kn(){const e=W(),t=e.getState();Z(t).length===0&&(e.dispatch(U("Hallelujah - Leonard Cohen",Un)),e.dispatch(U("Getting started",Vn)))}class ze extends C.Component{constructor(t){super(t),this.state={error:null,errorInfo:null}}componentDidCatch(t,n){this.setState({error:t,errorInfo:n})}render(){return this.state.errorInfo?r.jsxs("div",{className:"ErrorBoundary",children:[r.jsx("h2",{children:"Something went wrong"}),r.jsxs("details",{style:{whiteSpace:"pre-wrap"},open:!0,children:[this.state.error&&this.state.error.toString(),r.jsx("br",{}),this.state.errorInfo.componentStack]})]}):this.props.children}}ze.propTypes={children:i.any};let z;function Yn(e,t){const n=document.getElementById("app");z||(z=Pe(n)),z.render(r.jsx(It,{store:W(),children:r.jsx(C.StrictMode,{children:r.jsx(ze,{children:r.jsx(e,{...t})})})}))}const Jn="/app";let K,Ve;const Qn={init(e){const t=e.map(n=>({...n,path:Jn+n.path,action:s=>({Controller:n.action,params:s.params})}));K=new Mt(t,{errorHandler(n,s){console.error(`Error: Cannot find route for path: ${s.pathname}`)}}),Ve=Ot(K,{stringifyQueryParams:Ie.stringify})}};function G(e,t=!0){const n=new URL(e,window.location.origin);return K.resolve(n.pathname).then(({Controller:s,params:o}={})=>{if(s){t&&Xn(e);const a=Ie.parse(n.search,{ignoreQueryPrefix:!0});Yn(s,{...o,...a})}})}function Ue(e,t){try{return Ve(e,t)}catch(n){console.error(n.toString())}}function Xn(e){window.history.pushState({url:e},null,e)}window.addEventListener("popstate",()=>{const e=window.location.pathname+window.location.search;G(e,!1)});function Zn(){const t=Me(Z).map(n=>r.jsx(er,{song:n},n.id));return r.jsxs("div",{children:["Full Library",r.jsx("ul",{children:t})]})}const er=({song:e})=>{const t=n=>{n.preventDefault(),G(Ue("songView",{songId:e.id}))};return r.jsx("li",{children:r.jsx("a",{href:`/song/${e.id}`,onClick:t,children:e.title})})},tr=[{name:"library",path:"/library",action:Zn}];function nr({songId:e}){const t=Me(s=>ee(s,e)),n=s=>{s.preventDefault(),G(Ue("library"))};return r.jsxs("div",{children:[r.jsx("a",{href:"",onClick:n,children:"Go back to list"}),r.jsx("br",{}),r.jsx("b",{children:t.title}),r.jsx("p",{children:t.content})]})}const rr=[{name:"songView",path:"/songView/:songId",action:nr}],Ke=e=>v(D,{mode:e}),sr=()=>v(Le),ir=()=>v(ke),or="/app/assets/logo-D2B3txiq.svg";function ar(){return r.jsx("div",{className:"logo",children:r.jsx("div",{className:"logo-isExpanded",children:r.jsx("div",{className:"logo-img",children:r.jsxs("svg",{className:"stacked",children:[r.jsx("title",{children:"Chord Chart Studio"}),r.jsx("use",{href:or+"#stacked"})]})})})})}const lr=C.memo(ar);function Ye(e){const{iconName:t}=e,n=["icon","material-icons"];return r.jsx("i",{className:n.join(" "),children:t})}Ye.propTypes={iconName:i.string.isRequired};const x=C.memo(Ye);function Je(e){const{label:t,icon:n,editorMode:s,setEditorMode:o,isActive:a,isDisabled:l}=e,c=["mainNavEntry"];a&&c.push("mainNavEntry-isActive"),l&&c.push("mainNavEntry-isDisabled");function d(){l||o(s)}return r.jsxs("li",{className:c.join(" "),onClick:d,children:[r.jsx("span",{className:"mainNavEntry-icon",children:r.jsx(x,{iconName:n})}),t]})}Je.propTypes={label:i.string.isRequired,icon:i.string.isRequired,editorMode:i.string.isRequired,setEditorMode:i.func.isRequired,isActive:i.bool.isRequired,isDisabled:i.bool.isRequired};const cr=C.memo(Je);function Qe(e){const{currentMode:t,allEntries:n,setEditorMode:s,selectedId:o}=e;return r.jsx("nav",{className:"mainNav",children:r.jsx("ul",{className:"mainNav-entries",children:n.map((a,l)=>r.jsx(cr,{isActive:!!o&&a.editorMode===t,isDisabled:!o,setEditorMode:s,...a},l))})})}Qe.propTypes={currentMode:i.string.isRequired,setEditorMode:i.func.isRequired,selectedId:i.string,allEntries:i.arrayOf(i.shape({id:i.string.isRequired,label:i.string.isRequired,icon:i.string.isRequired,editorMode:i.string.isRequired}))};const dr=C.memo(Qe),E=({children:e,isDisabled:t,buttonName:n,onClick:s,type:o})=>{const a=["Button"];return o==="primary"&&a.push("Button-primary"),o==="secondary"&&a.push("Button-secondary"),t&&a.push("Button-isDisabled"),r.jsx("button",{className:a.join(" "),disabled:t,type:"button",name:n,onClick:s,children:e})};E.propTypes={children:i.string.isRequired,isDisabled:i.bool,buttonName:i.string.isRequired,type:i.string.isRequired,onClick:i.func.isRequired};E.defaultProps={isDisabled:!1};const ur="https://chord-chart-studio.netlify.app",ie=()=>{const e=()=>{window.open(ur,"_blank").focus()};return r.jsxs("div",{className:"userGuide",children:[r.jsx("div",{className:"userGuide-isCollapsed",children:r.jsx(x,{iconName:"help_outline"})}),r.jsx("div",{className:"userGuide-isExpanded",children:r.jsx(E,{buttonName:"userGuide",type:"primary",onClick:e,children:"User Guide"})})]})};ie.propTypes={};ie.defaultProps={};const pr=C.memo(ie),mr=()=>({"chord-chart-studio":"v0.14.0","chord-symbol":"v4.0.0","chord-mark":"v0.16.2"});function hr(){const e=mr();return r.jsx("div",{className:"versions",children:r.jsxs("div",{className:"versions-isExpanded",children:["Chord Chart Studio ",e["chord-chart-studio"],r.jsx("br",{}),"ChordMark ",e["chord-mark"]," ",r.jsx("br",{}),"ChordSymbol ",e["chord-symbol"]," ",r.jsx("br",{}),"Logo by"," ",r.jsx("a",{href:"https://spelling-bee-assistant.app/",target:"_blank",rel:"noreferrer",children:"Dieter Raber"})]})})}const gr=C.memo(hr),fr=e=>e.songImporter.content,yr=e=>e.songImporter.inputFormat,br=e=>e.songImporter.title,xr=e=>e.songImporter.isImporting,Cr=e=>e.songImporter.isFromWeb;function oe(e){const{children:t,closeModal:n}=e;return R.useEffect(()=>{const s=o=>{o.key==="Escape"&&n()};return window.addEventListener("keyup",s),()=>{window.removeEventListener("keyup",s)}}),r.jsxs("section",{className:"mod-ModalContainer",children:[r.jsx("div",{className:"mod-Overlay",onClick:n,"data-testid":"modal-overlay"}),r.jsx("div",{className:"mod-ContentContainer",children:t})]})}oe.propTypes={children:i.element.isRequired,closeModal:i.func.isRequired};const Xe=({cancelImport:e,chordMarkContent:t,importFile:n,title:s,content:o,error:a})=>{const l=s?'Import "'+s+'"':"Import song",c=()=>{n(s||"[untitled]",t)};return r.jsxs("div",{className:"sim-Header_Container",children:[r.jsx("div",{className:"sim-Header_Title",children:l}),r.jsxs("div",{className:"sim-Header_Actions",children:[r.jsx(E,{onClick:e,buttonName:"cancel",type:"secondary",children:"CANCEL"}),r.jsx(E,{onClick:c,buttonName:"import",type:"primary",isDisabled:o===""||a!=="",children:"IMPORT"})]})]})};Xe.propTypes={cancelImport:i.func.isRequired,chordMarkContent:i.string,content:i.string,error:i.string,importFile:i.func.isRequired,title:i.string};const Ze=50*1024,jr=e=>new Promise((t,n)=>{if(e.length){const s=e[0];vr(s)?n(Tr(s.size)):Fr(s)?s.text().then(o=>{t({content:o,title:Rr(s)})}).catch(o=>{n(o)}):n(Nr(s))}else n(Sr())}),Rr=e=>e.name.substr(0,e.name.lastIndexOf(".")),vr=e=>e.size>Ze,Fr=e=>e.type.indexOf("text")===0||e.type.length===0,Tr=e=>"The selected file is too big: "+ve(e,{round:0})+" (maximum allowed file size is "+ve(Ze,{round:0})+").",Nr=e=>"Cannot import file of type "+e.type+".",Sr=()=>"No file selected.",wr="text/*,.cho,.crd,.chopro,.chord,.pro,.txt,.md",et=({setContent:e})=>{const t=n=>{jr(n.target.files).then(s=>{e(s.content,s.title)}).catch(s=>{e(s)})};return r.jsxs("div",{children:[r.jsx("label",{htmlFor:"importSong-Input",className:"Button Button-primary",children:"Select File"}),r.jsx("input",{id:"importSong-Input",name:"importSong-Input",type:"file",className:"sim-InputFile_Input",onChange:t,accept:wr})]})};et.propTypes={setContent:i.func.isRequired};function ae(e){const{content:t,setContent:n,isDisabled:s}=e,o=l=>{n(l.target.value)},a=["sim-Input_Textarea"];return s&&a.push("sim-Input_Textarea-Disabled"),r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"sim-Input_Header",children:[r.jsx(x,{iconName:"arrow_drop_down"}),"Copy/paste below",r.jsx(x,{iconName:"arrow_drop_down"})]}),r.jsx("textarea",{className:a.join(" "),onChange:o,value:t,disabled:s,"data-testid":"sim-input"})]})}ae.propTypes={content:i.string.isRequired,isDisabled:i.bool.isRequired,setContent:i.func.isRequired};ae.defaultProps={};function le(e){const{inputFormat:t,error:n}=e;return r.jsxs("div",{className:"sim-Preview_Error",children:[r.jsxs("p",{children:["There was an error when trying to parse the song in the specified input format (",t,").",r.jsx("br",{}),"Please correct the input or try another format.",r.jsx("br",{}),"The error was:"]}),r.jsxs("p",{children:['"',n,'"']}),r.jsx("p",{children:'Hint: most of the time, this is related to an unclosed "[" or "{" or an unsupported ChordPro directive'})]})}le.propTypes={error:i.string,inputFormat:i.string.isRequired};le.defaultProps={};function ce(e){const{setInputFormat:t,inputFormat:n,id:s,label:o,isDisabled:a}=e,l=u=>{a||t(u.target.value)},c=["sim-InputFormat_Entry"],d=["sim-InputFormat_Label"];return a&&(c.push("sim-InputFormat_Entry-Disabled"),d.push("sim-InputFormat_Label-Disabled")),r.jsxs(r.Fragment,{children:[r.jsx("input",{className:c.join(" "),type:"radio",name:"inputFormat",id:s,value:s,onChange:l,checked:n===s}),r.jsx("label",{className:d.join(" "),htmlFor:s,children:o})]})}ce.propTypes={setInputFormat:i.func.isRequired,inputFormat:i.string.isRequired,id:i.string.isRequired,label:i.string.isRequired,isDisabled:i.bool.isRequired};ce.defaultProps={};const Er=[{id:"auto",label:"Detect"},{id:"chordPro",label:"Bracketed chords (ChordPro)"},{id:"chordsOverLyrics",label:"Chords over lyrics (Ultimate Guitar...)"}];function de(e){const{setInputFormat:t,inputFormat:n,disableAll:s}=e,o=Er.map(a=>r.jsx(ce,{setInputFormat:t,id:a.id,label:a.label,inputFormat:n,isDisabled:s},a.id));return r.jsxs("div",{className:"sim-InputFormat",children:["Input format:",o]})}de.propTypes={disableAll:i.bool.isRequired,setInputFormat:i.func.isRequired,inputFormat:i.string.isRequired};de.defaultProps={};function ue(e){const{cancelImport:t,content:n,importFile:s,isFromWeb:o,isImporting:a,setContent:l,setInputFormat:c,inputFormat:d,title:u}=e;if(!a)return null;let h="",m="";try{h=Lt(n,{inputFormat:d})}catch(f){m=f.message}return r.jsx(oe,{closeModal:t,children:r.jsxs("div",{className:"sim-SongImporterModal_Container","data-testid":"song-importer",children:[r.jsx(Xe,{cancelImport:t,chordMarkContent:h,content:n,error:m,importFile:s,title:u}),r.jsxs("div",{className:"sim-TwoColumns_Container",children:[r.jsx("div",{className:"sim-Column_Container",children:r.jsx(et,{setContent:l})}),r.jsx("div",{className:"sim-Column_Container",children:r.jsx(de,{inputFormat:d,setInputFormat:c,disableAll:o===!0})})]}),r.jsxs("div",{className:"sim-TwoColumns_Container sim-TwoColumns_Container-autoHeight",children:[r.jsx("div",{className:"sim-Column_Container",children:r.jsx(ae,{content:n,setContent:l,isDisabled:o})}),r.jsxs("div",{className:"sim-Column_Container",children:[r.jsxs("div",{className:"sim-Input_Header",children:[r.jsx(x,{iconName:"arrow_drop_down"}),"ChordMark preview",r.jsx(x,{iconName:"arrow_drop_down"})]}),r.jsx("div",{className:"sim-Preview_Container","data-testid":"sim-preview",children:m?r.jsx(le,{inputFormat:d,error:m}):h})]})]})]})})}ue.propTypes={cancelImport:i.func.isRequired,content:i.string.isRequired,importFile:i.func.isRequired,isFromWeb:i.bool.isRequired,isImporting:i.bool.isRequired,setContent:i.func.isRequired,setInputFormat:i.func.isRequired,inputFormat:i.string.isRequired,title:i.string};ue.defaultProps={};const _r=N(e=>({content:fr(e),isFromWeb:Cr(e),isImporting:xr(e),inputFormat:yr(e),title:br(e)}),{setContent:Mn,setInputFormat:On,cancelImport:Bn,importFile:U})(ue),qr=[{id:"edit",label:"Edit",icon:"create",editorMode:"edit"},{id:"play",label:"Screen view",icon:"music_note",editorMode:"play"},{id:"print",label:"Print/PDF Preview",icon:"print",editorMode:"print"},{id:"export",label:"Export Preview",icon:"save_alt",editorMode:"export"}];function pe(e){const{editorMode:t,isLeftBarCollapsed:n,isRightBarCollapsed:s,toggleLeftBar:o,toggleRightBar:a,setEditorMode:l,selectedId:c,leftBar:d,rightBar:u}=e,h=["leftBar"];n&&h.push("leftBar-isCollapsed");const m=["rightBar"];return s&&m.push("rightBar-isCollapsed"),r.jsxs("div",{className:"appLayout-wrapper",children:[r.jsx(_r,{}),r.jsxs("section",{className:h.join(" "),children:[r.jsxs("div",{className:"leftBar-content",onClick:n?o:null,children:[r.jsx(lr,{}),d]}),r.jsx("div",{className:"leftBar-collapser",onClick:o,"data-testid":"leftBar-collapser",children:r.jsx("span",{className:"leftBar-collapserIcon",children:r.jsx(x,{iconName:"keyboard_arrow_left"})})})]}),r.jsxs("section",{className:"appLayout-main",children:[r.jsx("section",{className:"appLayout-header",children:r.jsx(dr,{allEntries:qr,currentMode:t,setEditorMode:l,selectedId:c})}),r.jsx("section",{className:"appLayout-content",children:e.children})]}),r.jsxs("section",{className:m.join(" "),children:[r.jsx("div",{className:"rightBar-collapser",onClick:a,"data-testid":"rightBar-collapser",children:r.jsx("span",{className:"rightBar-collapserIcon",children:r.jsx(x,{iconName:"keyboard_arrow_right"})})}),r.jsxs("div",{className:"rightBar-content",onClick:s?a:null,children:[r.jsx(pr,{}),u,r.jsx(gr,{})]})]})]})}pe.propTypes={children:i.element,isLeftBarCollapsed:i.bool,isRightBarCollapsed:i.bool,selectedId:i.string,toggleLeftBar:i.func.isRequired,toggleRightBar:i.func.isRequired,editorMode:i.string.isRequired,setEditorMode:i.func.isRequired,leftBar:i.element.isRequired,rightBar:i.element.isRequired};pe.defaultProps={isLeftBarCollapsed:!1,isRightBarCollapsed:!1};const Pr=N(e=>({editorMode:_(e),isLeftBarCollapsed:tn(e),isRightBarCollapsed:nn(e),selectedId:S(e)}),{toggleLeftBar:sr,toggleRightBar:ir,setEditorMode:Ke})(pe),Ir=e=>v(re,{id:e}),Mr=e=>v(Ae,{id:e});function Or(e,t={},n=!1){return nt(e,t,n,"text")}function tt(e,t={},n=!1){return nt(e,t,n,"html")}function nt(e,t,n,s){if(n)switch(t.chartFormat){case"chordmark":{const a=M(e,t);return s==="html"?a:Se(a)}case"chordmarkSrc":return s==="html"?V(e):e;case"chordpro":{t.customRenderer=At();const a=M(e,t);return s==="html"?V(a):a}case"ultimateGuitar":{t.customRenderer=Fe();const a=M(e,{...t,customRenderer:Fe(),printBarSeparators:"grids",printChordsDuration:"never",printSubBeatDelimiters:!1,printInlineTimeSignatures:!1,chordSymbolRenderer:kt({customFilters:[Bt()],useShortNamings:!0,accidentalsType:t.accidentalsType==="auto"?"original":t.accidentalsType,...t})})+`
Created with Chord Chart Studio (https://chord-chart-studio.netlify.app)`;return s==="html"?V(a):a}}const o=M(e,{...t,wrapChordLyricLines:!0});return s==="html"?o:Se(o)}function M(e,t){try{const n=Dt(e);return Wt(n,{...t})}catch(n){return n.message}}function V(e){return e.split(`
`).map(t=>t===""?" ":t).map(t=>`${t}`).join("")}function Se(e){return e.match(/(
.*?<\/p>)/gm).map(n=>q(n)).map(n=>n===" "?"":n).join(`
-`)}function Or(){const t=W().getState(),n=S(t),s=ee(t,n),o={chartFormat:p(t,"editorPreferences","chartFormat"),transposeValue:p(t,"songPreferences","transposeValue"),accidentalsType:p(t,"songPreferences","accidentalsType"),symbolType:p(t,"songPreferences","symbolType"),chartType:p(t,"songFormatting","chartType"),alignChordsWithLyrics:p(t,"songFormatting","alignChordsWithLyrics"),alignBars:p(t,"songFormatting","alignBars"),autoRepeatChords:p(t,"songFormatting","autoRepeatChords"),expandSectionCopy:p(t,"songFormatting","expandSectionCopy")},a=Mr(s.content,o,!0),l=o.chartFormat==="chordpro"?"cho":"txt",c=`${s.title}.${l}`,d=new Blob([a],{type:"text/plain;charset=utf-8",endings:"native"});Gt.saveAs(d,c)}function rt(e){const{confirmAction:t,confirmTitle:n="OK",cancelAction:s,cancelTitle:o="CANCEL",children:a}=e;return r.jsx(oe,{closeModal:s,children:r.jsxs("section",{className:"mod-ModalConfirmContainer",children:[r.jsx("div",{className:"mod-ModalConfirmMessage",children:a}),r.jsxs("div",{className:"mod-ModalConfirmButtons",children:[r.jsx(E,{onClick:s,type:"secondary",buttonName:"cancel",children:o}),r.jsx(E,{onClick:t,type:"primary",buttonName:"confirm",children:n})]})]})})}rt.propTypes={confirmAction:i.func.isRequired,confirmTitle:i.string,cancelAction:i.func.isRequired,cancelTitle:i.string,children:i.node.isRequired};function st(e){const{selected:t,deleteFile:n,isDeleting:s,setIsDeleting:o}=e;if(!s)return null;const a=()=>o(!1),l=()=>{o(!1),n(t)};return r.jsxs(rt,{confirmAction:l,confirmTitle:"DELETE",cancelAction:a,children:["Are you sure you want to delete this file?",r.jsx("br",{}),"This action cannot be undone."]})}st.propTypes={deleteFile:i.func.isRequired,isDeleting:i.bool.isRequired,selected:i.string.isRequired,setIsDeleting:i.func.isRequired};function it(e){const{icon:t,text:n,action:s,isDisabled:o}=e,a=["fileManagerAction"];o&&a.push("fileManagerAction-isDisabled");const l=()=>{o||s()};return r.jsx("span",{className:a.join(" "),onClick:l,children:r.jsxs("span",{className:"fileManagerAction-icon",children:[r.jsx(x,{iconName:t})," ",n]})})}it.propTypes={icon:i.string.isRequired,text:i.string.isRequired,action:i.func.isRequired,isDisabled:i.bool.isRequired};const Lr=C.memo(it);function ot(e){const{selected:t,createFile:n,deleteFile:s,enableRename:o,startImport:a,exportAsText:l,printFile:c}=e,d=[{icon:"upload",text:"Import",action:a,isDisabled:!1},{icon:"add_circle",text:"New",action:n,isDisabled:!1},{icon:"create",text:"Rename",action:o,isDisabled:!t},{icon:"delete",text:"Delete",action:s,isDisabled:!t},{icon:"print",text:"Print",action:c,isDisabled:!t},{icon:"download",text:"Export",action:l,isDisabled:!t}];return r.jsx("div",{className:"fileManager-actionsList",children:d.map((u,h)=>R.createElement(Lr,{...u,key:h}))})}ot.propTypes={selected:i.string,createFile:i.func.isRequired,deleteFile:i.func.isRequired,enableRename:i.func.isRequired,exportAsText:i.func.isRequired,printFile:i.func.isRequired,startImport:i.func.isRequired};const kr=C.memo(ot);function at(e){const[t,n]=R.useState(e.title),{fileId:s,isSelected:o,isRenamed:a,defaultTitle:l,selectFile:c,enableRename:d,updateFile:u}=e,h=["fileManagerEntry"];o&&h.push("fileManagerEntry-isSelected"),a&&h.push("fileManagerEntry-isRenamed");const m=C.createRef();R.useEffect(()=>{a&&m.current.focus()},[a,m]);function f(){o||c(s)}function g(b){a||(d(s),b.target.select())}function y(b){if(a&&b.which===13){b.preventDefault(),window.getSelection().removeAllRanges();const $=b.target.value;j($)}}function w(b){n(b.target.value)}function T(b){a&&b.target.select()}function F(b){if(a){const $=b.target.value;j($)}}function j(b){b=b||l,u(s,{title:b}),n(b),m.current.scrollLeft=0}return r.jsx("li",{className:h.join(" "),onClick:f,onDoubleClick:g,children:r.jsx("input",{className:"fileManagerEntry-input",ref:m,type:"text",value:t,readOnly:a?null:"readOnly",autoFocus:a?"autoFocus":null,onChange:w,onBlur:F,onFocus:T,onKeyPress:y})})}at.propTypes={title:i.string.isRequired,fileId:i.string.isRequired,isSelected:i.bool.isRequired,isRenamed:i.bool.isRequired,defaultTitle:i.string.isRequired,selectFile:i.func.isRequired,enableRename:i.func.isRequired,updateFile:i.func.isRequired};function lt(e){const[t,n]=R.useState(!1),{allTitles:s,selected:o,renamed:a,defaultTitle:l,createFile:c,deleteFile:d,enableRename:u,startImport:h,selectFile:m,updateFile:f,setEditorMode:g}=e;return r.jsxs("div",{className:"fileManager",children:[r.jsx(st,{deleteFile:d,isDeleting:t,selected:o,setIsDeleting:n}),r.jsx("div",{className:"fileManager-isCollapsed",children:r.jsx("span",{className:"fileManager-icon",children:r.jsx(x,{iconName:"file_copy"})})}),r.jsxs("div",{className:"fileManager-isExpanded",children:[r.jsx(kr,{selected:o,createFile:()=>c(l),deleteFile:()=>n(!0),enableRename:()=>u(o),startImport:()=>h(),exportAsText:()=>{g("export"),setTimeout(()=>Or(),0)},printFile:()=>{g("print"),setTimeout(()=>window.print(),0)}}),r.jsx("ul",{className:"fileManager-entriesList",children:s.map(y=>r.jsx(at,{title:y.title,defaultTitle:l,fileId:y.id,isSelected:o===y.id,isRenamed:a===y.id,selectFile:m,updateFile:f,enableRename:u},y.id))})]})]})}lt.propTypes={allTitles:i.arrayOf(i.shape({title:i.string.isRequired,id:i.string.isRequired})).isRequired,selected:i.string.isRequired,renamed:i.string.isRequired,defaultTitle:i.string.isRequired,selectFile:i.func.isRequired,createFile:i.func.isRequired,deleteFile:i.func.isRequired,enableRename:i.func.isRequired,startImport:i.func.isRequired,updateFile:i.func.isRequired,setEditorMode:i.func.isRequired};const Br=N(e=>({selected:S(e),renamed:rn(e),defaultTitle:sn(e),allTitles:Z(e)}),{selectFile:Pr,createFile:$n,deleteFile:zn,updateFile:$e,enableRename:Ir,setEditorMode:Ke,startImport:Ln})(lt);function ct(e){return J.sanitize(e)}function me(e){const{content:t,useChartFormat:n}=e,s=L(e,["chartFormat","transposeValue","accidentalsType","symbolType","chartType","alignChordsWithLyrics","alignBars","autoRepeatChords","expandSectionCopy"]),o=tt(t,s,n);return r.jsx("div",{className:"songRenderer",children:r.jsx("div",{dangerouslySetInnerHTML:{__html:ct(o)}})})}me.propTypes={useChartFormat:i.bool.isRequired,chartFormat:i.string.isRequired,content:i.string};me.defaultProps={content:"",useChartFormat:!1};const he=N(e=>({transposeValue:p(e,"songPreferences","transposeValue"),accidentalsType:p(e,"songPreferences","preferredAccidentals"),symbolType:p(e,"songPreferences","symbolType"),chartFormat:p(e,"editorPreferences","chartFormat"),chartType:p(e,"songFormatting","chartType"),alignChordsWithLyrics:p(e,"songFormatting","alignChordsWithLyrics"),alignBars:p(e,"songFormatting","alignBars"),autoRepeatChords:p(e,"songFormatting","autoRepeatChords"),expandSectionCopy:p(e,"songFormatting","expandSectionCopy")}))(me);function dt(e){const{selectedFile:t}=e,n=["editorPreview"];return r.jsx("div",{className:n.join(" "),children:r.jsx(he,{content:t.content})})}dt.propTypes={selectedFile:i.object.isRequired};function Ar(){return[Ht(),Te({"Mod-z":$t,"Mod-y":zt}),Te(Vt)]}const Dr=new Ut({nodes:{doc:{content:"block+"},paragraph:{content:"inline*",group:"block",parseDOM:[{tag:"p"}],toDOM(){return["p",0]}},hard_break:{inline:!0,group:"inline",selectable:!1,parseDOM:[{tag:"br"}],toDOM(){return["br"]}},text:{group:"inline"}}});function Wr(e){return e.toJSON().doc.content.map(n=>n.content?n.content.reduce((s,o)=>(s+=o.text||`
+`)}function Lr(){const t=W().getState(),n=S(t),s=ee(t,n),o={chartFormat:p(t,"editorPreferences","chartFormat"),transposeValue:p(t,"songPreferences","transposeValue"),accidentalsType:p(t,"songPreferences","accidentalsType"),symbolType:p(t,"songPreferences","symbolType"),chartType:p(t,"songFormatting","chartType"),alignChordsWithLyrics:p(t,"songFormatting","alignChordsWithLyrics"),alignBars:p(t,"songFormatting","alignBars"),autoRepeatChords:p(t,"songFormatting","autoRepeatChords"),expandSectionCopy:p(t,"songFormatting","expandSectionCopy")},a=Or(s.content,o,!0),l=o.chartFormat==="chordpro"?"cho":"txt",c=`${s.title}.${l}`,d=new Blob([a],{type:"text/plain;charset=utf-8",endings:"native"});Gt.saveAs(d,c)}function rt(e){const{confirmAction:t,confirmTitle:n="OK",cancelAction:s,cancelTitle:o="CANCEL",children:a}=e;return r.jsx(oe,{closeModal:s,children:r.jsxs("section",{className:"mod-ModalConfirmContainer",children:[r.jsx("div",{className:"mod-ModalConfirmMessage",children:a}),r.jsxs("div",{className:"mod-ModalConfirmButtons",children:[r.jsx(E,{onClick:s,type:"secondary",buttonName:"cancel",children:o}),r.jsx(E,{onClick:t,type:"primary",buttonName:"confirm",children:n})]})]})})}rt.propTypes={confirmAction:i.func.isRequired,confirmTitle:i.string,cancelAction:i.func.isRequired,cancelTitle:i.string,children:i.node.isRequired};function st(e){const{selected:t,deleteFile:n,isDeleting:s,setIsDeleting:o}=e;if(!s)return null;const a=()=>o(!1),l=()=>{o(!1),n(t)};return r.jsxs(rt,{confirmAction:l,confirmTitle:"DELETE",cancelAction:a,children:["Are you sure you want to delete this file?",r.jsx("br",{}),"This action cannot be undone."]})}st.propTypes={deleteFile:i.func.isRequired,isDeleting:i.bool.isRequired,selected:i.string.isRequired,setIsDeleting:i.func.isRequired};function it(e){const{icon:t,text:n,action:s,isDisabled:o}=e,a=["fileManagerAction"];o&&a.push("fileManagerAction-isDisabled");const l=()=>{o||s()};return r.jsx("span",{className:a.join(" "),onClick:l,children:r.jsxs("span",{className:"fileManagerAction-icon",children:[r.jsx(x,{iconName:t})," ",n]})})}it.propTypes={icon:i.string.isRequired,text:i.string.isRequired,action:i.func.isRequired,isDisabled:i.bool.isRequired};const kr=C.memo(it);function ot(e){const{selected:t,createFile:n,deleteFile:s,enableRename:o,startImport:a,exportAsText:l,printFile:c}=e,d=[{icon:"upload",text:"Import",action:a,isDisabled:!1},{icon:"add_circle",text:"New",action:n,isDisabled:!1},{icon:"create",text:"Rename",action:o,isDisabled:!t},{icon:"delete",text:"Delete",action:s,isDisabled:!t},{icon:"print",text:"Print",action:c,isDisabled:!t},{icon:"download",text:"Export",action:l,isDisabled:!t}];return r.jsx("div",{className:"fileManager-actionsList",children:d.map((u,h)=>R.createElement(kr,{...u,key:h}))})}ot.propTypes={selected:i.string,createFile:i.func.isRequired,deleteFile:i.func.isRequired,enableRename:i.func.isRequired,exportAsText:i.func.isRequired,printFile:i.func.isRequired,startImport:i.func.isRequired};const Br=C.memo(ot);function at(e){const[t,n]=R.useState(e.title),{fileId:s,isSelected:o,isRenamed:a,defaultTitle:l,selectFile:c,enableRename:d,updateFile:u}=e,h=["fileManagerEntry"];o&&h.push("fileManagerEntry-isSelected"),a&&h.push("fileManagerEntry-isRenamed");const m=C.createRef();R.useEffect(()=>{a&&m.current.focus()},[a,m]);function f(){o||c(s)}function g(b){a||(d(s),b.target.select())}function y(b){if(a&&b.which===13){b.preventDefault(),window.getSelection().removeAllRanges();const $=b.target.value;j($)}}function w(b){n(b.target.value)}function T(b){a&&b.target.select()}function F(b){if(a){const $=b.target.value;j($)}}function j(b){b=b||l,u(s,{title:b}),n(b),m.current.scrollLeft=0}return r.jsx("li",{className:h.join(" "),onClick:f,onDoubleClick:g,children:r.jsx("input",{className:"fileManagerEntry-input",ref:m,type:"text",value:t,readOnly:a?null:"readOnly",autoFocus:a?"autoFocus":null,onChange:w,onBlur:F,onFocus:T,onKeyPress:y})})}at.propTypes={title:i.string.isRequired,fileId:i.string.isRequired,isSelected:i.bool.isRequired,isRenamed:i.bool.isRequired,defaultTitle:i.string.isRequired,selectFile:i.func.isRequired,enableRename:i.func.isRequired,updateFile:i.func.isRequired};function lt(e){const[t,n]=R.useState(!1),{allTitles:s,selected:o,renamed:a,defaultTitle:l,createFile:c,deleteFile:d,enableRename:u,startImport:h,selectFile:m,updateFile:f,setEditorMode:g}=e;return r.jsxs("div",{className:"fileManager",children:[r.jsx(st,{deleteFile:d,isDeleting:t,selected:o,setIsDeleting:n}),r.jsx("div",{className:"fileManager-isCollapsed",children:r.jsx("span",{className:"fileManager-icon",children:r.jsx(x,{iconName:"file_copy"})})}),r.jsxs("div",{className:"fileManager-isExpanded",children:[r.jsx(Br,{selected:o,createFile:()=>c(l),deleteFile:()=>n(!0),enableRename:()=>u(o),startImport:()=>h(),exportAsText:()=>{g("export"),setTimeout(()=>Lr(),0)},printFile:()=>{g("print"),setTimeout(()=>window.print(),0)}}),r.jsx("ul",{className:"fileManager-entriesList",children:s.map(y=>r.jsx(at,{title:y.title,defaultTitle:l,fileId:y.id,isSelected:o===y.id,isRenamed:a===y.id,selectFile:m,updateFile:f,enableRename:u},y.id))})]})]})}lt.propTypes={allTitles:i.arrayOf(i.shape({title:i.string.isRequired,id:i.string.isRequired})).isRequired,selected:i.string.isRequired,renamed:i.string.isRequired,defaultTitle:i.string.isRequired,selectFile:i.func.isRequired,createFile:i.func.isRequired,deleteFile:i.func.isRequired,enableRename:i.func.isRequired,startImport:i.func.isRequired,updateFile:i.func.isRequired,setEditorMode:i.func.isRequired};const Ar=N(e=>({selected:S(e),renamed:rn(e),defaultTitle:sn(e),allTitles:Z(e)}),{selectFile:Ir,createFile:$n,deleteFile:zn,updateFile:$e,enableRename:Mr,setEditorMode:Ke,startImport:Ln})(lt);function ct(e){return J.sanitize(e)}function me(e){const{content:t,useChartFormat:n}=e,s=L(e,["chartFormat","transposeValue","accidentalsType","symbolType","chartType","alignChordsWithLyrics","alignBars","autoRepeatChords","expandSectionCopy"]),o=tt(t,s,n);return r.jsx("div",{className:"songRenderer",children:r.jsx("div",{dangerouslySetInnerHTML:{__html:ct(o)}})})}me.propTypes={useChartFormat:i.bool.isRequired,chartFormat:i.string.isRequired,content:i.string};me.defaultProps={content:"",useChartFormat:!1};const he=N(e=>({transposeValue:p(e,"songPreferences","transposeValue"),accidentalsType:p(e,"songPreferences","preferredAccidentals"),symbolType:p(e,"songPreferences","symbolType"),chartFormat:p(e,"editorPreferences","chartFormat"),chartType:p(e,"songFormatting","chartType"),alignChordsWithLyrics:p(e,"songFormatting","alignChordsWithLyrics"),alignBars:p(e,"songFormatting","alignBars"),autoRepeatChords:p(e,"songFormatting","autoRepeatChords"),expandSectionCopy:p(e,"songFormatting","expandSectionCopy")}))(me);function dt(e){const{selectedFile:t}=e,n=["editorPreview"];return r.jsx("div",{className:n.join(" "),children:r.jsx(he,{content:t.content})})}dt.propTypes={selectedFile:i.object.isRequired};function Dr(){return[Ht(),Te({"Mod-z":$t,"Mod-y":zt}),Te(Vt)]}const Wr=new Ut({nodes:{doc:{content:"block+"},paragraph:{content:"inline*",group:"block",parseDOM:[{tag:"p"}],toDOM(){return["p",0]}},hard_break:{inline:!0,group:"inline",selectable:!1,parseDOM:[{tag:"br"}],toDOM(){return["br"]}},text:{group:"inline"}}});function Gr(e){return e.toJSON().doc.content.map(n=>n.content?n.content.reduce((s,o)=>(s+=o.text||`
`,s),""):"").join(`
-`)}function we(e){const t={ALLOWED_TAGS:["p","#text"],KEEP_CONTENT:!1};return J.sanitize(e,t)}function Gr(e){const t=we(e).split(`
-`).map(s=>`${s}
`).join(""),n=document.createElement("div");return n.innerHTML=we(t),n}function Hr(e){return Kt.create({doc:Yt.fromSchema(Dr).parse(Gr(e),{preserveWhitespace:"full"}),plugins:Ar()})}function $r(e,t,n){return new Jt(null,{state:e,dispatchTransaction:function(o){const{state:a,transactions:l}=this.state.applyTransaction(o);this.updateState(a),l.some(c=>c.docChanged)&&t(n,{content:Wr(a)})}})}function H(e){const{selectedFileId:t,editorContent:n,updateFile:s}=e,o=R.useRef(),a=R.useRef(),l=zr(t);function c(){return t&&(!o.current||l!==t)}function d(){return u()&&!t}function u(){return o.current&&o.current.dom.parentNode}function h(){o.current.dom.parentNode.removeChild(o.current.dom)}return R.useEffect(()=>{if(c()){u()&&h();const m=Hr(n);o.current=$r(m,s,t),a.current.appendChild(o.current.dom),H.editorView=o.current}else d()&&h()}),r.jsx("div",{className:"prosemirrorWrapper",ref:a})}H.defaultProps={selectedFileId:"",editorContent:""};H.propTypes={selectedFileId:i.string,editorContent:i.string,updateFile:i.func.isRequired};function zr(e){const t=R.useRef();return R.useEffect(()=>{t.current=e}),t.current}function ut(e){const{selectedFile:t,updateFile:n,theme:s}=e,o=["songEditor-preview","cmTheme-"+s,"cmTheme-fadeRepeats"];return r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"songEditor-headers",children:[r.jsxs("div",{className:"songEditor-sourceHeader",children:[r.jsx(x,{iconName:"arrow_drop_down"}),"ChordMark source (",r.jsx("a",{href:"https://chordmark.netlify.app/docs/getting-started",target:"_blank",rel:"noreferrer",className:"link1",children:"tutorial"}),")",r.jsx(x,{iconName:"arrow_drop_down"})]}),r.jsxs("div",{className:"songEditor-previewHeader",children:[r.jsx(x,{iconName:"arrow_drop_down"}),"Result preview",r.jsx(x,{iconName:"arrow_drop_down"})]})]}),r.jsx(Qt,{children:r.jsxs("div",{className:"songEditor",children:[r.jsx(Ne,{group:"a",children:r.jsx("div",{className:"songEditor-source",children:r.jsx(H,{editorContent:t.content,updateFile:n,selectedFileId:t.id})})}),r.jsx(Ne,{group:"a",children:r.jsx("div",{className:o.join(" "),children:r.jsx(dt,{selectedFile:t})})})]})})]})}ut.propTypes={selectedFile:i.object,theme:i.string.isRequired,updateFile:i.func.isRequired};const Vr=N(e=>({theme:p(e,"editorPreferences","theme")}))(ut);function pt(e){const{selectedFile:t}=e,n=C.createRef(),s=o=>{(o.metaKey||o.ctrlKey)&&o.key.toLowerCase()==="a"&&(o.preventDefault(),window.getSelection().selectAllChildren(n.current))};return R.useEffect(()=>(window.addEventListener("keydown",s),()=>{window.removeEventListener("keydown",s)})),r.jsx("div",{className:"exportPreview exp-SongRenderer",ref:n,children:r.jsx(he,{content:t.content,useChartFormat:!0})})}pt.propTypes={selectedFile:i.object.isRequired};function mt(e){const{theme:t,selectedFile:n,fontSize:s,columnsCount:o}=e,a=["playRendererWrapper1"];a.push("cmTheme-"+t),a.push("cmSong--fontSize"+s);const l=["playRenderer"];return l.push("playRenderer--columns-"+o),r.jsx("div",{className:a.join(" "),"data-testid":"playRendererWrapper1",children:r.jsx("div",{className:"playRendererWrapper2",children:r.jsx("div",{className:l.join(" "),"data-testid":"playRenderer",children:r.jsx(he,{content:n.content})})})})}mt.propTypes={theme:i.string.isRequired,fontSize:i.number.isRequired,selectedFile:i.object.isRequired,columnsCount:i.number.isRequired};const Ur=N(e=>({theme:p(e,"editorPreferences","theme"),fontSize:p(e,"songFormatting","fontSize"),columnsCount:p(e,"songFormatting","columnsCount")}))(mt);function ge(e){const{pageHeader:t,allColumnsLines:n,documentSize:s,documentMargins:o,fontSize:a}=e,l=n.map((u,h)=>{const m=u.join("");return r.jsx("div",{className:"printPreview-pageColumn","data-testid":"printPreview-pageColumn",dangerouslySetInnerHTML:{__html:ct(m)}},h)}),c=["printPreview-page"];c.push("printPreview-page--"+s),c.push("cmSong--fontSize"+a),c.push("cmSong");const d=["printPreview-pageContentWrapper"];return d.push("printPreview-pageContentWrapper--padding"+o),r.jsx("div",{className:c.join(" "),"data-testid":"printPreview-page",children:r.jsx("div",{className:d.join(" "),"data-testid":"printPreview-pageContentWrapper",children:r.jsxs("div",{className:"printPreview-pageContent",children:[t,r.jsx("div",{className:"printPreview-pageColumnWrapper",children:l})]})})})}ge.defaultProps={allColumnsLines:[]};ge.propTypes={pageHeader:i.element,allColumnsLines:i.arrayOf(i.arrayOf(i.string)),documentSize:i.string.isRequired,documentMargins:i.number.isRequired,fontSize:i.number.isRequired};const fe=C.memo(ge);function ye(e){const{title:t}=e;return r.jsx("div",{className:"printPreview-pageHeader",children:t})}ye.defaultProps={allColumnsLines:[]};ye.propTypes={title:i.string.isRequired};const ht=C.memo(ye),be={emptyLine:"cmEmptyLine",chordLine:"cmChordLine",textLine:"cmLyricLine"};function Kr(e,{columnsCount:t,firstPageHeight:n,normalPageHeight:s,columnBreakOnSection:o,noEmptyLinesOnColumnStart:a=!0,noOrphanTextLine:l=!0}){const c=Zr({columnsCount:t,firstPageHeight:n,normalPageHeight:s,noEmptyLinesOnColumnStart:a});let d=[],u=0;return(n||s)>0&&e.forEach((m,f)=>{Yr(c,m,d,a)&&(d.push(m),u+=m.height),d.length>0&&Jr(m,e[f+1],{noOrphanTextLine:l,columnBreakOnSection:o})&&(c.fitsOnCurrentColumn(u)?c.insert(d):c.fitsOnNextColumn(u)?c.insertOnNextColumn(d):c.insert(d),d=[],u=0)}),c.get()}function Yr(e,t,n,s){return!(Y(t)&&!e.fitsOnCurrentColumn(t.height)&&n.length===0&&s===!0)}function Jr(e,t,{noOrphanTextLine:n,columnBreakOnSection:s}){if(Y(e)||!t)return!0;const o=Qr(e)&&Xr(t);if(n===!0&&o)return!1;const a=Y(t);return!(s===!0&&!a)}function Y(e){return xe(e.content,be.emptyLine)}function Qr(e){return xe(e.content,be.chordLine)}function Xr(e){return xe(e.content,be.textLine)}function xe(e,t){return e.indexOf(t)>-1}function Zr({firstPageHeight:e,normalPageHeight:t,columnsCount:n}){const s=[];let o=0,a=0,l=u(),c=0;s[o]=[],s[o][a]=[];function d(g){g.forEach(y=>{h(c+y.height)&&m(),s[o][a].push(y.content),c+=y.height})}function u(){return o===0&&e?e:t}function h(g){return g>l}function m(){f()?(o++,s[o]=[],a=0):a++,s[o][a]=[],c=0,l=u()}function f(){return a===n-1}return{insert(g){d(g)},insertOnNextColumn(g){m(),d(g)},fitsOnCurrentColumn(g){return c+g<=l},fitsOnNextColumn(g){const y=o===0&&a{const a=()=>(R.useLayoutEffect(()=>{const l=t(n);o(l)}),r.jsx("div",{children:e}));s.render(r.jsx(a,{}))}).then(o=>(s.unmount(),n.parentNode.removeChild(n),o))}function Ce(e,t=[]){for(let n=t.length||0;n{const d=[];return c.querySelectorAll(ts.line).forEach(u=>{d.push(es(u))}),d})}async function rs(e,{columnsCount:t,documentSize:n,documentMargins:s,fontSize:o}){const a=r.jsx(fe,{pageHeader:r.jsx(ht,{title:e}),allColumnsLines:Ce(t),documentSize:n,documentMargins:s,fontSize:o});return await gt(a,c=>{const d=c.querySelector(".printPreview-pageContent"),u=c.querySelector(".printPreview-pageColumnWrapper");return{firstPageHeight:Ee(u),normalPageHeight:Ee(d)}})}function ft(e){const[t,n]=R.useState([]),{title:s,allLines:o,columnsCount:a,columnBreakOnSection:l,documentSize:c,documentMargins:d,fontSize:u}=e;R.useLayoutEffect(()=>{(async()=>{const f={columnsCount:a,documentSize:c,documentMargins:d,fontSize:u},g=await ns(o,f),{normalPageHeight:y,firstPageHeight:w}=await rs(s,f),T=o.map((j,b)=>({content:j,height:g[b]})),F=Kr(T,{columnsCount:a,columnBreakOnSection:l,normalPageHeight:y,firstPageHeight:w});n(F)})()},[o,s,a,l,c,d,u]);const h=t.map((m,f)=>r.jsx(fe,{pageHeader:f===0?r.jsx(ht,{title:s}):null,allColumnsLines:Ce(a,m),documentSize:c,documentMargins:d,fontSize:u},f));return r.jsx(C.Fragment,{children:h})}ft.propTypes={title:i.string.isRequired,allLines:i.arrayOf(i.string).isRequired,columnsCount:i.number.isRequired,columnBreakOnSection:i.bool.isRequired,documentSize:i.string.isRequired,documentMargins:i.number.isRequired,fontSize:i.number.isRequired};function yt(e){const{selectedFile:t}=e,n=L(e,["transposeValue","accidentalsType","symbolType","chartType","alignChordsWithLyrics","alignBars","autoRepeatChords","expandSectionCopy"]),o=tt(t.content||"",{...n}).match(/(.*?<\/p>)/gm),a=["printPreview","cmTheme-print"];return r.jsx("div",{className:a.join(" "),"data-testid":"printPreview",children:r.jsx(ft,{title:t.title||"",allLines:o,columnsCount:e.columnsCount,columnBreakOnSection:e.columnBreakOnSection,documentSize:e.documentSize||"a4",documentMargins:e.documentMargins,fontSize:e.fontSize})})}yt.propTypes={chartType:i.string.isRequired,selectedFile:i.object.isRequired,columnsCount:i.number.isRequired,columnBreakOnSection:i.bool.isRequired,documentSize:i.string,documentMargins:i.number.isRequired,fontSize:i.number.isRequired};const ss=N(e=>({accidentalsType:p(e,"songPreferences","preferredAccidentals"),transposeValue:p(e,"songPreferences","transposeValue"),symbolType:p(e,"songPreferences","symbolType"),chartType:p(e,"songFormatting","chartType"),alignChordsWithLyrics:p(e,"songFormatting","alignChordsWithLyrics"),alignBars:p(e,"songFormatting","alignBars"),autoRepeatChords:p(e,"songFormatting","autoRepeatChords"),expandSectionCopy:p(e,"songFormatting","expandSectionCopy"),columnsCount:p(e,"songFormatting","columnsCount"),columnBreakOnSection:p(e,"songFormatting","columnBreakOnSection"),documentMargins:p(e,"songFormatting","documentMargins"),fontSize:p(e,"songFormatting","fontSize")}))(yt);function bt(e){const{editorMode:t}=e;switch(t){case"edit":return r.jsx(Vr,{...e});case"play":return r.jsx(Ur,{...e});case"print":return r.jsx(ss,{...e});case"export":return r.jsx(pt,{...e})}}bt.propTypes={editorMode:i.string.isRequired};const is=N(e=>({selectedFile:ee(e,S(e))||{},editorMode:_(e)}),{updateFile:$e})(bt);function xt(e){const{id:t,allWidgets:n,nonInteractableWidgets:s,hiddenWidgets:o,setOption:a,getEntryComponent:l}=e,c=["optionsPanel","optionsPanel-"+t];let d,u,h,m,f,g,y;const w=n.widgetsOrder.filter(F=>!o.includes(F)).map(F=>(d=n.allWidgets[F],d.type==="optionsGroup"?(y=d.groupWidgetsOrder.filter(j=>!o.includes(j)).map(j=>(u=d.allGroupWidgets[j],g=!s.includes(F)&&!s.includes(j),T(j,u,g))),y.length===0?null:(m=l(d.type),f=!s.includes(F),r.jsx(m,{isInteractable:f,label:d.label,icon:d.icon,children:y},F))):T(F,d,!s.includes(F))));function T(F,j,b){return h=l(j.type),r.jsx(h,{isInteractable:b,optionContext:j.option.context,optionKey:j.option.key,optionValue:e[j.option.key],setOption:a,label:j.label,...j.typeOptions},F)}return r.jsx("div",{className:c.join(" "),children:w})}xt.propTypes={id:i.string.isRequired,allWidgets:i.object.isRequired,nonInteractableWidgets:i.arrayOf(i.string).isRequired,hiddenWidgets:i.arrayOf(i.string).isRequired,setOption:i.func.isRequired,getEntryComponent:i.func.isRequired};function je(e){const{isInteractable:t,icon:n,label:s}=e,o=["sb-optionsGroup"];a()||o.push("sb-optionsGroup-isNotInteractable");function a(){return t&&e.children&&e.children.length>0}return r.jsxs("div",{className:o.join(" "),children:[r.jsxs("div",{className:"sb-optionsGroup-title",children:[r.jsx("span",{className:"sb-optionsGroup-iconTitle",children:r.jsx(x,{iconName:n})})," ",s]}),r.jsx("div",{className:"sb-optionsGroup-content",children:e.children})]})}je.propTypes={isInteractable:i.bool.isRequired,icon:i.string.isRequired,label:i.string.isRequired,children:i.arrayOf(i.element)};je.defaultProps={};function Ct(e){const{isSelected:t,isInteractable:n,label:s,onClick:o}=e;let a;const l=["sb-optionSelectChoice"];t&&(l.push("sb-optionSelectChoice-isSelected"),a=r.jsx("span",{className:"sb-optionSelectChoice-checkIcon",children:r.jsx(x,{iconName:"check"})})),n||l.push("sb-optionSelectChoice-isNotInteractable");function c(){n&&o()}return r.jsxs("div",{className:l.join(" "),onClick:c,children:[r.jsx("div",{className:"sb-optionSelectChoice-check",children:t&&a}),r.jsx("div",{className:"sb-optionSelectChoice-label",children:s})]})}Ct.propTypes={isSelected:i.bool.isRequired,isInteractable:i.bool.isRequired,label:i.string.isRequired,onClick:i.func.isRequired};const os=C.memo(Ct);function jt(e){const[t,n]=R.useState(!1),{isInteractable:s,label:o,allChoices:a,optionContext:l,optionKey:c,optionValue:d,setOption:u}=e,h=["sb-optionSelect"];s||h.push("sb-optionSelect-isNotInteractable");const m=t?"keyboard_arrow_down":"keyboard_arrow_right";function f(){n(!t)}const g=t?r.jsx("div",{className:"sb-optionSelect-choices",children:a.map(T=>r.jsx(os,{label:T.label,isSelected:d===T.value,isInteractable:s,onClick:()=>{u(l,c,T.value)}},T.value))}):null,y=a.find(T=>d===T.value).label,w=t?o:r.jsxs("span",{children:[r.jsx("span",{children:o+": "}),r.jsx("span",{className:"sb-optionSelectChoice-activeLabel",children:y})]});return r.jsxs("div",{className:h.join(" "),children:[r.jsxs("div",{className:"sb-optionSelect-title",onClick:s?f:null,children:[r.jsx("div",{className:"sb-optionSelect-desc","data-testid":"selectLabel",children:w}),r.jsx("div",{className:"sb-optionSelect-toggle",children:r.jsx("span",{className:"sb-optionSelect-icon",children:r.jsx(x,{iconName:m})})})]}),g]})}jt.propTypes={isInteractable:i.bool.isRequired,label:i.string.isRequired,allChoices:i.array.isRequired,optionContext:i.string.isRequired,optionKey:i.string.isRequired,optionValue:i.string.isRequired,setOption:i.func.isRequired};function Re(e){const{isInteractable:t,label:n,min:s,max:o,showPlusSymbol:a,optionContext:l,optionKey:c,optionValue:d,setOption:u}=e,h=["sb-optionSlider"];t||h.push("sb-optionSlider-isNotInteractable");function m(g){u(l,c,Number.parseInt(g.target.value))}const f=d>0&&a?"+"+d:d;return r.jsxs("div",{className:h.join(" "),children:[r.jsx("div",{className:"sb-optionSlider-desc",children:n}),r.jsx("div",{className:"sb-optionSlider-value",children:f}),r.jsx("div",{className:"sb-optionSlider-range",children:r.jsx("input",{min:s,max:o,value:d,type:"range",onChange:t?m:null,disabled:!t})})]})}Re.propTypes={isInteractable:i.bool.isRequired,label:i.string.isRequired,min:i.number.isRequired,max:i.number.isRequired,showPlusSymbol:i.bool,optionContext:i.string.isRequired,optionKey:i.string.isRequired,optionValue:i.number.isRequired,setOption:i.func.isRequired};Re.defaultProps={showPlusSymbol:!0};const as=C.memo(Re);function Rt(e){const{isInteractable:t,label:n,optionContext:s,optionKey:o,optionValue:a,setOption:l}=e,c=["sb-optionToggle"];c.push(a===!0?"sb-optionToggle-isOn":"sb-optionToggle-isOff"),t||c.push("sb-optionToggle-isNotInteractable");function d(){l(s,o,!a)}return r.jsxs("div",{className:c.join(" "),onClick:t?d:null,children:[r.jsx("div",{className:"sb-optionToggle-desc",children:n}),r.jsx("div",{className:"sb-optionToggle-icon",children:r.jsx("span",{className:"sb-optionToggle-icon",children:r.jsx(x,{iconName:a===!0?"toggle_on":"toggle_off"})})})]})}Rt.propTypes={isInteractable:i.bool.isRequired,label:i.string.isRequired,optionContext:i.string.isRequired,optionKey:i.string.isRequired,optionValue:i.bool.isRequired,setOption:i.func.isRequired};const ls=C.memo(Rt);function cs(e){switch(e){case"optionsGroup":return je;case"select":return jt;case"slider":return as;case"toggle":return ls}}function ds(e){return r.jsx("div",{className:"sb-optionsPanel",children:r.jsx(xt,{...e,getEntryComponent:cs})})}function us(e){return r.jsxs("div",{className:"renderingOptionsPanel",children:[r.jsx("div",{className:"renderingOptionsPanel-isCollapsed",children:r.jsx("span",{className:"renderingOptionsPanel-icon",children:r.jsx(x,{iconName:"settings"})})}),r.jsx("div",{className:"renderingOptionsPanel-isExpanded",children:r.jsx(ds,{...e,id:"rendering"})})]})}const ps=(e,t,n)=>{if(!e)throw new TypeError("Cannot set an option without a context");if(!t)throw new TypeError("Cannot set an option without a key");return v(X,{context:e,key:t,value:n})};function ms(e,t,n,s){return N(o=>{const a={allWidgets:e,nonInteractableWidgets:t(o),hiddenWidgets:n(o)};let l,c;return e.widgetsOrder.forEach(d=>{l=e.allWidgets[d],l.groupWidgetsOrder.forEach(u=>{c=l.allGroupWidgets[u],a[c.option.key]=p(o,c.option.context,c.option.key)})}),a},{setOption:ps})(s)}const hs={widgetsOrder:["editorPreferences","key","preferences","layout"],allWidgets:{editorPreferences:{label:"Editor preferences",type:"optionsGroup",icon:"tune",groupWidgetsOrder:["theme","chartFormat"],allGroupWidgets:{theme:{label:"Theme",type:"select",typeOptions:{allChoices:[{id:"themeDark1",label:"Dark 1 (default)",value:"dark1"},{id:"themeDark2",label:"Dark 2",value:"dark2"},{id:"themeDark3",label:"Dark 3",value:"dark3"}]},option:{context:"editorPreferences",key:"theme"}},chartFormat:{label:"Export format",type:"select",typeOptions:{allChoices:[{id:"formatChordMark",label:"ChordMark",value:"chordmark"},{id:"formatChordMarkSrc",label:"ChordMark (Source)",value:"chordmarkSrc"},{id:"formatChordpro",label:"ChordPro",value:"chordpro"},{id:"formatUG",label:"UltimateGuitar",value:"ultimateGuitar"}]},option:{context:"editorPreferences",key:"chartFormat"}}}},key:{label:"Key",type:"optionsGroup",icon:"music_note",groupWidgetsOrder:["transposeValue","preferredAccidentals","symbolType"],allGroupWidgets:{transposeValue:{label:"Transpose",type:"slider",typeOptions:{min:-11,max:11,showPlusSymbol:!0},option:{context:"songPreferences",key:"transposeValue"}},preferredAccidentals:{label:"Preferred accidentals",type:"select",typeOptions:{allChoices:[{id:"preferredAccidentalsAuto",label:"Auto",value:"auto"},{id:"preferredAccidentalsSharp",label:"♯",value:"sharp"},{id:"preferredAccidentalsFlat",label:"♭",value:"flat"}]},option:{context:"songPreferences",key:"preferredAccidentals"}},symbolType:{label:"Symbols type",type:"select",typeOptions:{allChoices:[{id:"symbolTypeChord",label:"Chord symbols",value:"chord"},{id:"symbolTypeRoman",label:"Roman numerals",value:"roman"}]},option:{context:"songPreferences",key:"symbolType"}}}},preferences:{label:"Chart settings",type:"optionsGroup",icon:"tune",groupWidgetsOrder:["chartType","alignChordsWithLyrics","alignBars","autoRepeatChords","expandSectionCopy"],allGroupWidgets:{chartType:{label:"Type",type:"select",typeOptions:{allChoices:[{id:"typedisplayAll",label:"Show everything",value:"all"},{id:"typedisplayLyrics",label:"Lyrics only",value:"lyrics"},{id:"typedisplayChords",label:"Chords only",value:"chords"},{id:"typedisplayChordsFirstLyricLine",label:"Chords + First lyric line",value:"chordsFirstLyricLine"}]},option:{context:"songFormatting",key:"chartType"}},alignChordsWithLyrics:{label:"Align chords with lyrics",type:"toggle",option:{context:"songFormatting",key:"alignChordsWithLyrics"}},alignBars:{label:"Align bars",type:"toggle",option:{context:"songFormatting",key:"alignBars"}},autoRepeatChords:{label:"Auto repeat chords",type:"toggle",option:{context:"songFormatting",key:"autoRepeatChords"}},expandSectionCopy:{label:"Expand copied sections",type:"toggle",option:{context:"songFormatting",key:"expandSectionCopy"}}}},layout:{type:"optionsGroup",label:"Layout",icon:"view_compact",groupWidgetsOrder:["fontSize","columnsCount","columnBreakOnSection","documentMargins"],allGroupWidgets:{fontSize:{label:"Font size",type:"slider",typeOptions:{min:-5,max:5,showPlusSymbol:!0},option:{context:"songFormatting",key:"fontSize"}},columnsCount:{label:"Columns",type:"slider",typeOptions:{min:1,max:4},option:{context:"songFormatting",key:"columnsCount"}},columnBreakOnSection:{label:"Column Break on section",type:"toggle",option:{context:"songFormatting",key:"columnBreakOnSection"}},documentMargins:{label:"Margins",type:"slider",typeOptions:{min:1,max:5},option:{context:"songFormatting",key:"documentMargins"}}}}}},gs=e=>{const t=[],n=p(e,"songFormatting","chartType");n==="lyrics"?(t.push("alignChordsWithLyrics"),t.push("alignBars"),t.push("autoRepeatChords")):n==="chords"&&t.push("alignChordsWithLyrics");const s=p(e,"editorPreferences","chartFormat");return _(e)==="export"&&s==="chordmarkSrc"&&(t.push("chartType"),t.push("alignChordsWithLyrics"),t.push("alignBars"),t.push("autoRepeatChords"),t.push("expandSectionCopy")),t},fs=e=>{const t=[],n=Object.keys({...P(e,"editorPreferences"),...P(e,"songFormatting"),...P(e,"songPreferences")});if(!S(e))return n;const o=_(e),a=Xt(n,ne[o]);return t.push(...a),t},ys=ms(hs,gs,fs,us);function bs(){const e=r.jsx(Br,{}),t=r.jsx(ys,{});return r.jsx(qr,{leftBar:e,rightBar:t,children:r.jsx(is,{})})}const xs=[{name:"home",path:"/",action:bs},...er,...nr];Gn();function Cs(){In(),Kn();const e=window?window.location.pathname+window.location.search:"/";return Jn.init(xs),G(e)}Cs();
+`)}function we(e){const t={ALLOWED_TAGS:["p","#text"],KEEP_CONTENT:!1};return J.sanitize(e,t)}function Hr(e){const t=we(e).split(`
+`).map(s=>`${s}
`).join(""),n=document.createElement("div");return n.innerHTML=we(t),n}function $r(e){return Kt.create({doc:Yt.fromSchema(Wr).parse(Hr(e),{preserveWhitespace:"full"}),plugins:Dr()})}function zr(e,t,n){return new Jt(null,{state:e,dispatchTransaction:function(o){const{state:a,transactions:l}=this.state.applyTransaction(o);this.updateState(a),l.some(c=>c.docChanged)&&t(n,{content:Gr(a)})}})}function H(e){const{selectedFileId:t,editorContent:n,updateFile:s}=e,o=R.useRef(),a=R.useRef(),l=Vr(t);function c(){return t&&(!o.current||l!==t)}function d(){return u()&&!t}function u(){return o.current&&o.current.dom.parentNode}function h(){o.current.dom.parentNode.removeChild(o.current.dom)}return R.useEffect(()=>{if(c()){u()&&h();const m=$r(n);o.current=zr(m,s,t),a.current.appendChild(o.current.dom),H.editorView=o.current}else d()&&h()}),r.jsx("div",{className:"prosemirrorWrapper",ref:a})}H.defaultProps={selectedFileId:"",editorContent:""};H.propTypes={selectedFileId:i.string,editorContent:i.string,updateFile:i.func.isRequired};function Vr(e){const t=R.useRef();return R.useEffect(()=>{t.current=e}),t.current}function ut(e){const{selectedFile:t,updateFile:n,theme:s}=e,o=["songEditor-preview","cmTheme-"+s,"cmTheme-fadeRepeats"];return r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"songEditor-headers",children:[r.jsxs("div",{className:"songEditor-sourceHeader",children:[r.jsx(x,{iconName:"arrow_drop_down"}),"ChordMark source (",r.jsx("a",{href:"https://chordmark.netlify.app/docs/getting-started",target:"_blank",rel:"noreferrer",className:"link1",children:"tutorial"}),")",r.jsx(x,{iconName:"arrow_drop_down"})]}),r.jsxs("div",{className:"songEditor-previewHeader",children:[r.jsx(x,{iconName:"arrow_drop_down"}),"Result preview",r.jsx(x,{iconName:"arrow_drop_down"})]})]}),r.jsx(Qt,{children:r.jsxs("div",{className:"songEditor",children:[r.jsx(Ne,{group:"a",children:r.jsx("div",{className:"songEditor-source",children:r.jsx(H,{editorContent:t.content,updateFile:n,selectedFileId:t.id})})}),r.jsx(Ne,{group:"a",children:r.jsx("div",{className:o.join(" "),children:r.jsx(dt,{selectedFile:t})})})]})})]})}ut.propTypes={selectedFile:i.object,theme:i.string.isRequired,updateFile:i.func.isRequired};const Ur=N(e=>({theme:p(e,"editorPreferences","theme")}))(ut);function pt(e){const{selectedFile:t}=e,n=C.createRef(),s=o=>{(o.metaKey||o.ctrlKey)&&o.key.toLowerCase()==="a"&&(o.preventDefault(),window.getSelection().selectAllChildren(n.current))};return R.useEffect(()=>(window.addEventListener("keydown",s),()=>{window.removeEventListener("keydown",s)})),r.jsx("div",{className:"exportPreview exp-SongRenderer",ref:n,children:r.jsx(he,{content:t.content,useChartFormat:!0})})}pt.propTypes={selectedFile:i.object.isRequired};function mt(e){const{theme:t,selectedFile:n,fontSize:s,columnsCount:o}=e,a=["playRendererWrapper1"];a.push("cmTheme-"+t),a.push("cmSong--fontSize"+s);const l=["playRenderer"];return l.push("playRenderer--columns-"+o),r.jsx("div",{className:a.join(" "),"data-testid":"playRendererWrapper1",children:r.jsx("div",{className:"playRendererWrapper2",children:r.jsx("div",{className:l.join(" "),"data-testid":"playRenderer",children:r.jsx(he,{content:n.content})})})})}mt.propTypes={theme:i.string.isRequired,fontSize:i.number.isRequired,selectedFile:i.object.isRequired,columnsCount:i.number.isRequired};const Kr=N(e=>({theme:p(e,"editorPreferences","theme"),fontSize:p(e,"songFormatting","fontSize"),columnsCount:p(e,"songFormatting","columnsCount")}))(mt);function ge(e){const{pageHeader:t,allColumnsLines:n,documentSize:s,documentMargins:o,fontSize:a}=e,l=n.map((u,h)=>{const m=u.join("");return r.jsx("div",{className:"printPreview-pageColumn","data-testid":"printPreview-pageColumn",dangerouslySetInnerHTML:{__html:ct(m)}},h)}),c=["printPreview-page"];c.push("printPreview-page--"+s),c.push("cmSong--fontSize"+a),c.push("cmSong");const d=["printPreview-pageContentWrapper"];return d.push("printPreview-pageContentWrapper--padding"+o),r.jsx("div",{className:c.join(" "),"data-testid":"printPreview-page",children:r.jsx("div",{className:d.join(" "),"data-testid":"printPreview-pageContentWrapper",children:r.jsxs("div",{className:"printPreview-pageContent",children:[t,r.jsx("div",{className:"printPreview-pageColumnWrapper",children:l})]})})})}ge.defaultProps={allColumnsLines:[]};ge.propTypes={pageHeader:i.element,allColumnsLines:i.arrayOf(i.arrayOf(i.string)),documentSize:i.string.isRequired,documentMargins:i.number.isRequired,fontSize:i.number.isRequired};const fe=C.memo(ge);function ye(e){const{title:t}=e;return r.jsx("div",{className:"printPreview-pageHeader",children:t})}ye.defaultProps={allColumnsLines:[]};ye.propTypes={title:i.string.isRequired};const ht=C.memo(ye),be={emptyLine:"cmEmptyLine",chordLine:"cmChordLine",textLine:"cmLyricLine"};function Yr(e,{columnsCount:t,firstPageHeight:n,normalPageHeight:s,columnBreakOnSection:o,noEmptyLinesOnColumnStart:a=!0,noOrphanTextLine:l=!0}){const c=es({columnsCount:t,firstPageHeight:n,normalPageHeight:s,noEmptyLinesOnColumnStart:a});let d=[],u=0;return(n||s)>0&&e.forEach((m,f)=>{Jr(c,m,d,a)&&(d.push(m),u+=m.height),d.length>0&&Qr(m,e[f+1],{noOrphanTextLine:l,columnBreakOnSection:o})&&(c.fitsOnCurrentColumn(u)?c.insert(d):c.fitsOnNextColumn(u)?c.insertOnNextColumn(d):c.insert(d),d=[],u=0)}),c.get()}function Jr(e,t,n,s){return!(Y(t)&&!e.fitsOnCurrentColumn(t.height)&&n.length===0&&s===!0)}function Qr(e,t,{noOrphanTextLine:n,columnBreakOnSection:s}){if(Y(e)||!t)return!0;const o=Xr(e)&&Zr(t);if(n===!0&&o)return!1;const a=Y(t);return!(s===!0&&!a)}function Y(e){return xe(e.content,be.emptyLine)}function Xr(e){return xe(e.content,be.chordLine)}function Zr(e){return xe(e.content,be.textLine)}function xe(e,t){return e.indexOf(t)>-1}function es({firstPageHeight:e,normalPageHeight:t,columnsCount:n}){const s=[];let o=0,a=0,l=u(),c=0;s[o]=[],s[o][a]=[];function d(g){g.forEach(y=>{h(c+y.height)&&m(),s[o][a].push(y.content),c+=y.height})}function u(){return o===0&&e?e:t}function h(g){return g>l}function m(){f()?(o++,s[o]=[],a=0):a++,s[o][a]=[],c=0,l=u()}function f(){return a===n-1}return{insert(g){d(g)},insertOnNextColumn(g){m(),d(g)},fitsOnCurrentColumn(g){return c+g<=l},fitsOnNextColumn(g){const y=o===0&&a{const a=()=>(R.useLayoutEffect(()=>{const l=t(n);o(l)}),r.jsx("div",{children:e}));s.render(r.jsx(a,{}))}).then(o=>(s.unmount(),n.parentNode.removeChild(n),o))}function Ce(e,t=[]){for(let n=t.length||0;n{const d=[];return c.querySelectorAll(ns.line).forEach(u=>{d.push(ts(u))}),d})}async function ss(e,{columnsCount:t,documentSize:n,documentMargins:s,fontSize:o}){const a=r.jsx(fe,{pageHeader:r.jsx(ht,{title:e}),allColumnsLines:Ce(t),documentSize:n,documentMargins:s,fontSize:o});return await gt(a,c=>{const d=c.querySelector(".printPreview-pageContent"),u=c.querySelector(".printPreview-pageColumnWrapper");return{firstPageHeight:Ee(u),normalPageHeight:Ee(d)}})}function ft(e){const[t,n]=R.useState([]),{title:s,allLines:o,columnsCount:a,columnBreakOnSection:l,documentSize:c,documentMargins:d,fontSize:u}=e;R.useLayoutEffect(()=>{(async()=>{const f={columnsCount:a,documentSize:c,documentMargins:d,fontSize:u},g=await rs(o,f),{normalPageHeight:y,firstPageHeight:w}=await ss(s,f),T=o.map((j,b)=>({content:j,height:g[b]})),F=Yr(T,{columnsCount:a,columnBreakOnSection:l,normalPageHeight:y,firstPageHeight:w});n(F)})()},[o,s,a,l,c,d,u]);const h=t.map((m,f)=>r.jsx(fe,{pageHeader:f===0?r.jsx(ht,{title:s}):null,allColumnsLines:Ce(a,m),documentSize:c,documentMargins:d,fontSize:u},f));return r.jsx(C.Fragment,{children:h})}ft.propTypes={title:i.string.isRequired,allLines:i.arrayOf(i.string).isRequired,columnsCount:i.number.isRequired,columnBreakOnSection:i.bool.isRequired,documentSize:i.string.isRequired,documentMargins:i.number.isRequired,fontSize:i.number.isRequired};function yt(e){const{selectedFile:t}=e,n=L(e,["transposeValue","accidentalsType","symbolType","chartType","alignChordsWithLyrics","alignBars","autoRepeatChords","expandSectionCopy"]),o=tt(t.content||"",{...n}).match(/(.*?<\/p>)/gm),a=["printPreview","cmTheme-print"];return r.jsx("div",{className:a.join(" "),"data-testid":"printPreview",children:r.jsx(ft,{title:t.title||"",allLines:o,columnsCount:e.columnsCount,columnBreakOnSection:e.columnBreakOnSection,documentSize:e.documentSize||"a4",documentMargins:e.documentMargins,fontSize:e.fontSize})})}yt.propTypes={chartType:i.string.isRequired,selectedFile:i.object.isRequired,columnsCount:i.number.isRequired,columnBreakOnSection:i.bool.isRequired,documentSize:i.string,documentMargins:i.number.isRequired,fontSize:i.number.isRequired};const is=N(e=>({accidentalsType:p(e,"songPreferences","preferredAccidentals"),transposeValue:p(e,"songPreferences","transposeValue"),symbolType:p(e,"songPreferences","symbolType"),chartType:p(e,"songFormatting","chartType"),alignChordsWithLyrics:p(e,"songFormatting","alignChordsWithLyrics"),alignBars:p(e,"songFormatting","alignBars"),autoRepeatChords:p(e,"songFormatting","autoRepeatChords"),expandSectionCopy:p(e,"songFormatting","expandSectionCopy"),columnsCount:p(e,"songFormatting","columnsCount"),columnBreakOnSection:p(e,"songFormatting","columnBreakOnSection"),documentMargins:p(e,"songFormatting","documentMargins"),fontSize:p(e,"songFormatting","fontSize")}))(yt);function bt(e){const{editorMode:t}=e;switch(t){case"edit":return r.jsx(Ur,{...e});case"play":return r.jsx(Kr,{...e});case"print":return r.jsx(is,{...e});case"export":return r.jsx(pt,{...e})}}bt.propTypes={editorMode:i.string.isRequired};const os=N(e=>({selectedFile:ee(e,S(e))||{},editorMode:_(e)}),{updateFile:$e})(bt);function xt(e){const{id:t,allWidgets:n,nonInteractableWidgets:s,hiddenWidgets:o,setOption:a,getEntryComponent:l}=e,c=["optionsPanel","optionsPanel-"+t];let d,u,h,m,f,g,y;const w=n.widgetsOrder.filter(F=>!o.includes(F)).map(F=>(d=n.allWidgets[F],d.type==="optionsGroup"?(y=d.groupWidgetsOrder.filter(j=>!o.includes(j)).map(j=>(u=d.allGroupWidgets[j],g=!s.includes(F)&&!s.includes(j),T(j,u,g))),y.length===0?null:(m=l(d.type),f=!s.includes(F),r.jsx(m,{isInteractable:f,label:d.label,icon:d.icon,children:y},F))):T(F,d,!s.includes(F))));function T(F,j,b){return h=l(j.type),r.jsx(h,{isInteractable:b,optionContext:j.option.context,optionKey:j.option.key,optionValue:e[j.option.key],setOption:a,label:j.label,...j.typeOptions},F)}return r.jsx("div",{className:c.join(" "),children:w})}xt.propTypes={id:i.string.isRequired,allWidgets:i.object.isRequired,nonInteractableWidgets:i.arrayOf(i.string).isRequired,hiddenWidgets:i.arrayOf(i.string).isRequired,setOption:i.func.isRequired,getEntryComponent:i.func.isRequired};function je(e){const{isInteractable:t,icon:n,label:s}=e,o=["sb-optionsGroup"];a()||o.push("sb-optionsGroup-isNotInteractable");function a(){return t&&e.children&&e.children.length>0}return r.jsxs("div",{className:o.join(" "),children:[r.jsxs("div",{className:"sb-optionsGroup-title",children:[r.jsx("span",{className:"sb-optionsGroup-iconTitle",children:r.jsx(x,{iconName:n})})," ",s]}),r.jsx("div",{className:"sb-optionsGroup-content",children:e.children})]})}je.propTypes={isInteractable:i.bool.isRequired,icon:i.string.isRequired,label:i.string.isRequired,children:i.arrayOf(i.element)};je.defaultProps={};function Ct(e){const{isSelected:t,isInteractable:n,label:s,onClick:o}=e;let a;const l=["sb-optionSelectChoice"];t&&(l.push("sb-optionSelectChoice-isSelected"),a=r.jsx("span",{className:"sb-optionSelectChoice-checkIcon",children:r.jsx(x,{iconName:"check"})})),n||l.push("sb-optionSelectChoice-isNotInteractable");function c(){n&&o()}return r.jsxs("div",{className:l.join(" "),onClick:c,children:[r.jsx("div",{className:"sb-optionSelectChoice-check",children:t&&a}),r.jsx("div",{className:"sb-optionSelectChoice-label",children:s})]})}Ct.propTypes={isSelected:i.bool.isRequired,isInteractable:i.bool.isRequired,label:i.string.isRequired,onClick:i.func.isRequired};const as=C.memo(Ct);function jt(e){const[t,n]=R.useState(!1),{isInteractable:s,label:o,allChoices:a,optionContext:l,optionKey:c,optionValue:d,setOption:u}=e,h=["sb-optionSelect"];s||h.push("sb-optionSelect-isNotInteractable");const m=t?"keyboard_arrow_down":"keyboard_arrow_right";function f(){n(!t)}const g=t?r.jsx("div",{className:"sb-optionSelect-choices",children:a.map(T=>r.jsx(as,{label:T.label,isSelected:d===T.value,isInteractable:s,onClick:()=>{u(l,c,T.value)}},T.value))}):null,y=a.find(T=>d===T.value).label,w=t?o:r.jsxs("span",{children:[r.jsx("span",{children:o+": "}),r.jsx("span",{className:"sb-optionSelectChoice-activeLabel",children:y})]});return r.jsxs("div",{className:h.join(" "),children:[r.jsxs("div",{className:"sb-optionSelect-title",onClick:s?f:null,children:[r.jsx("div",{className:"sb-optionSelect-desc","data-testid":"selectLabel",children:w}),r.jsx("div",{className:"sb-optionSelect-toggle",children:r.jsx("span",{className:"sb-optionSelect-icon",children:r.jsx(x,{iconName:m})})})]}),g]})}jt.propTypes={isInteractable:i.bool.isRequired,label:i.string.isRequired,allChoices:i.array.isRequired,optionContext:i.string.isRequired,optionKey:i.string.isRequired,optionValue:i.string.isRequired,setOption:i.func.isRequired};function Re(e){const{isInteractable:t,label:n,min:s,max:o,showPlusSymbol:a,optionContext:l,optionKey:c,optionValue:d,setOption:u}=e,h=["sb-optionSlider"];t||h.push("sb-optionSlider-isNotInteractable");function m(g){u(l,c,Number.parseInt(g.target.value))}const f=d>0&&a?"+"+d:d;return r.jsxs("div",{className:h.join(" "),children:[r.jsx("div",{className:"sb-optionSlider-desc",children:n}),r.jsx("div",{className:"sb-optionSlider-value",children:f}),r.jsx("div",{className:"sb-optionSlider-range",children:r.jsx("input",{min:s,max:o,value:d,type:"range",onChange:t?m:null,disabled:!t})})]})}Re.propTypes={isInteractable:i.bool.isRequired,label:i.string.isRequired,min:i.number.isRequired,max:i.number.isRequired,showPlusSymbol:i.bool,optionContext:i.string.isRequired,optionKey:i.string.isRequired,optionValue:i.number.isRequired,setOption:i.func.isRequired};Re.defaultProps={showPlusSymbol:!0};const ls=C.memo(Re);function Rt(e){const{isInteractable:t,label:n,optionContext:s,optionKey:o,optionValue:a,setOption:l}=e,c=["sb-optionToggle"];c.push(a===!0?"sb-optionToggle-isOn":"sb-optionToggle-isOff"),t||c.push("sb-optionToggle-isNotInteractable");function d(){l(s,o,!a)}return r.jsxs("div",{className:c.join(" "),onClick:t?d:null,children:[r.jsx("div",{className:"sb-optionToggle-desc",children:n}),r.jsx("div",{className:"sb-optionToggle-icon",children:r.jsx("span",{className:"sb-optionToggle-icon",children:r.jsx(x,{iconName:a===!0?"toggle_on":"toggle_off"})})})]})}Rt.propTypes={isInteractable:i.bool.isRequired,label:i.string.isRequired,optionContext:i.string.isRequired,optionKey:i.string.isRequired,optionValue:i.bool.isRequired,setOption:i.func.isRequired};const cs=C.memo(Rt);function ds(e){switch(e){case"optionsGroup":return je;case"select":return jt;case"slider":return ls;case"toggle":return cs}}function us(e){return r.jsx("div",{className:"sb-optionsPanel",children:r.jsx(xt,{...e,getEntryComponent:ds})})}function ps(e){return r.jsxs("div",{className:"renderingOptionsPanel",children:[r.jsx("div",{className:"renderingOptionsPanel-isCollapsed",children:r.jsx("span",{className:"renderingOptionsPanel-icon",children:r.jsx(x,{iconName:"settings"})})}),r.jsx("div",{className:"renderingOptionsPanel-isExpanded",children:r.jsx(us,{...e,id:"rendering"})})]})}const ms=(e,t,n)=>{if(!e)throw new TypeError("Cannot set an option without a context");if(!t)throw new TypeError("Cannot set an option without a key");return v(X,{context:e,key:t,value:n})};function hs(e,t,n,s){return N(o=>{const a={allWidgets:e,nonInteractableWidgets:t(o),hiddenWidgets:n(o)};let l,c;return e.widgetsOrder.forEach(d=>{l=e.allWidgets[d],l.groupWidgetsOrder.forEach(u=>{c=l.allGroupWidgets[u],a[c.option.key]=p(o,c.option.context,c.option.key)})}),a},{setOption:ms})(s)}const gs={widgetsOrder:["editorPreferences","key","preferences","layout"],allWidgets:{editorPreferences:{label:"Editor preferences",type:"optionsGroup",icon:"tune",groupWidgetsOrder:["theme","chartFormat"],allGroupWidgets:{theme:{label:"Theme",type:"select",typeOptions:{allChoices:[{id:"themeDark1",label:"Dark 1 (default)",value:"dark1"},{id:"themeDark2",label:"Dark 2",value:"dark2"},{id:"themeDark3",label:"Dark 3",value:"dark3"}]},option:{context:"editorPreferences",key:"theme"}},chartFormat:{label:"Export format",type:"select",typeOptions:{allChoices:[{id:"formatChordMark",label:"ChordMark",value:"chordmark"},{id:"formatChordMarkSrc",label:"ChordMark (Source)",value:"chordmarkSrc"},{id:"formatChordpro",label:"ChordPro",value:"chordpro"},{id:"formatUG",label:"UltimateGuitar",value:"ultimateGuitar"}]},option:{context:"editorPreferences",key:"chartFormat"}}}},key:{label:"Key",type:"optionsGroup",icon:"music_note",groupWidgetsOrder:["transposeValue","preferredAccidentals","symbolType"],allGroupWidgets:{transposeValue:{label:"Transpose",type:"slider",typeOptions:{min:-11,max:11,showPlusSymbol:!0},option:{context:"songPreferences",key:"transposeValue"}},preferredAccidentals:{label:"Preferred accidentals",type:"select",typeOptions:{allChoices:[{id:"preferredAccidentalsAuto",label:"Auto",value:"auto"},{id:"preferredAccidentalsSharp",label:"♯",value:"sharp"},{id:"preferredAccidentalsFlat",label:"♭",value:"flat"}]},option:{context:"songPreferences",key:"preferredAccidentals"}},symbolType:{label:"Symbols type",type:"select",typeOptions:{allChoices:[{id:"symbolTypeChord",label:"Chord symbols",value:"chord"},{id:"symbolTypeRoman",label:"Roman numerals",value:"roman"}]},option:{context:"songPreferences",key:"symbolType"}}}},preferences:{label:"Chart settings",type:"optionsGroup",icon:"tune",groupWidgetsOrder:["chartType","alignChordsWithLyrics","alignBars","autoRepeatChords","expandSectionCopy"],allGroupWidgets:{chartType:{label:"Type",type:"select",typeOptions:{allChoices:[{id:"typedisplayAll",label:"Show everything",value:"all"},{id:"typedisplayLyrics",label:"Lyrics only",value:"lyrics"},{id:"typedisplayChords",label:"Chords only",value:"chords"},{id:"typedisplayChordsFirstLyricLine",label:"Chords + First lyric line",value:"chordsFirstLyricLine"}]},option:{context:"songFormatting",key:"chartType"}},alignChordsWithLyrics:{label:"Align chords with lyrics",type:"toggle",option:{context:"songFormatting",key:"alignChordsWithLyrics"}},alignBars:{label:"Align bars",type:"toggle",option:{context:"songFormatting",key:"alignBars"}},autoRepeatChords:{label:"Auto repeat chords",type:"toggle",option:{context:"songFormatting",key:"autoRepeatChords"}},expandSectionCopy:{label:"Expand copied sections",type:"toggle",option:{context:"songFormatting",key:"expandSectionCopy"}}}},layout:{type:"optionsGroup",label:"Layout",icon:"view_compact",groupWidgetsOrder:["fontSize","columnsCount","columnBreakOnSection","documentMargins"],allGroupWidgets:{fontSize:{label:"Font size",type:"slider",typeOptions:{min:-5,max:5,showPlusSymbol:!0},option:{context:"songFormatting",key:"fontSize"}},columnsCount:{label:"Columns",type:"slider",typeOptions:{min:1,max:4},option:{context:"songFormatting",key:"columnsCount"}},columnBreakOnSection:{label:"Column Break on section",type:"toggle",option:{context:"songFormatting",key:"columnBreakOnSection"}},documentMargins:{label:"Margins",type:"slider",typeOptions:{min:1,max:5},option:{context:"songFormatting",key:"documentMargins"}}}}}},fs=e=>{const t=[],n=p(e,"songFormatting","chartType");n==="lyrics"?(t.push("alignChordsWithLyrics"),t.push("alignBars"),t.push("autoRepeatChords")):n==="chords"&&t.push("alignChordsWithLyrics");const s=p(e,"editorPreferences","chartFormat");return _(e)==="export"&&s==="chordmarkSrc"&&(t.push("chartType"),t.push("alignChordsWithLyrics"),t.push("alignBars"),t.push("autoRepeatChords"),t.push("expandSectionCopy")),t},ys=e=>{const t=[],n=Object.keys({...P(e,"editorPreferences"),...P(e,"songFormatting"),...P(e,"songPreferences")});if(!S(e))return n;const o=_(e),a=Xt(n,ne[o]);return t.push(...a),t},bs=hs(gs,fs,ys,ps);function xs(){const e=r.jsx(Ar,{}),t=r.jsx(bs,{});return r.jsx(Pr,{leftBar:e,rightBar:t,children:r.jsx(os,{})})}const Cs=[{name:"home",path:"/",action:xs},...tr,...rr];Gn();function js(){In(),Kn();const e=window?window.location.pathname+window.location.search:"/";return Qn.init(Cs),G(e)}js();
diff --git a/packages/chord-chart-studio/build/index.html b/packages/chord-chart-studio/build/index.html
index 82166a4..545975a 100644
--- a/packages/chord-chart-studio/build/index.html
+++ b/packages/chord-chart-studio/build/index.html
@@ -20,10 +20,10 @@
href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet"
/>
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
diff --git a/packages/chord-chart-studio/build/registerSW.js b/packages/chord-chart-studio/build/registerSW.js
index 179c13c..cb2eee4 100644
--- a/packages/chord-chart-studio/build/registerSW.js
+++ b/packages/chord-chart-studio/build/registerSW.js
@@ -1 +1 @@
-if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}
\ No newline at end of file
+if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('/app/sw.js', { scope: '/app/' })})}
\ No newline at end of file
diff --git a/packages/chord-chart-studio/build/sw.js b/packages/chord-chart-studio/build/sw.js
index 9211e2b..5a2321f 100644
--- a/packages/chord-chart-studio/build/sw.js
+++ b/packages/chord-chart-studio/build/sw.js
@@ -1 +1 @@
-if(!self.define){let e,s={};const n=(n,o)=>(n=new URL(n+".js",o).href,s[n]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()})).then((()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e})));self.define=(o,t)=>{const i=e||("document"in self?document.currentScript.src:"")||location.href;if(s[i])return;let r={};const l=e=>n(e,i),u={module:{uri:i},exports:r,require:l};s[i]=Promise.all(o.map((e=>u[e]||l(e)))).then((e=>(t(...e),r)))}}define(["./workbox-f6d27052"],(function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"assets/index-1ovoJZ2z.css",revision:null},{url:"assets/index-BeOzSnWz.js",revision:null},{url:"assets/logo-D2B3txiq.svg",revision:null},{url:"assets/vendor-BPGk5lTF.js",revision:null},{url:"assets/vendor-D780UWrd.css",revision:null},{url:"icon.svg",revision:"22be856a58b037f4d448a78f2fc6dee6"},{url:"index.html",revision:"bb308b44aa4a03022bd9fc3556499ab0"},{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"))),e.registerRoute(/^https:\/\/fonts\.googleapis\.com/,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[]}),"GET"),e.registerRoute(/^https:\/\/fonts\.gstatic\.com/,new e.StaleWhileRevalidate({cacheName:"google-fonts-webfonts",plugins:[new e.CacheableResponsePlugin({statuses:[0,200]}),new e.ExpirationPlugin({maxAgeSeconds:31536e3,maxEntries:30})]}),"GET")}));
+if(!self.define){let e,s={};const n=(n,o)=>(n=new URL(n+".js",o).href,s[n]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()})).then((()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e})));self.define=(o,t)=>{const i=e||("document"in self?document.currentScript.src:"")||location.href;if(s[i])return;let r={};const l=e=>n(e,i),c={module:{uri:i},exports:r,require:l};s[i]=Promise.all(o.map((e=>c[e]||l(e)))).then((e=>(t(...e),r)))}}define(["./workbox-f6d27052"],(function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"assets/index-1ovoJZ2z.css",revision:null},{url:"assets/index-COv2kAVA.js",revision:null},{url:"assets/logo-D2B3txiq.svg",revision:null},{url:"assets/vendor-BPGk5lTF.js",revision:null},{url:"assets/vendor-D780UWrd.css",revision:null},{url:"icon.svg",revision:"22be856a58b037f4d448a78f2fc6dee6"},{url:"index.html",revision:"c2e2f3cf62a5d52328348442250ac568"},{url:"registerSW.js",revision:"6a7126f4909d378979bca200ff77879d"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"))),e.registerRoute(/^https:\/\/fonts\.googleapis\.com/,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[]}),"GET"),e.registerRoute(/^https:\/\/fonts\.gstatic\.com/,new e.StaleWhileRevalidate({cacheName:"google-fonts-webfonts",plugins:[new e.CacheableResponsePlugin({statuses:[0,200]}),new e.ExpirationPlugin({maxAgeSeconds:31536e3,maxEntries:30})]}),"GET")}));
diff --git a/packages/chord-chart-studio/src/core/router.js b/packages/chord-chart-studio/src/core/router.js
index e841e0a..deea994 100644
--- a/packages/chord-chart-studio/src/core/router.js
+++ b/packages/chord-chart-studio/src/core/router.js
@@ -4,6 +4,8 @@ import qs from 'qs';
import renderController from '../renderController';
+const base = '/app'; // duh!
+
let router;
let getUrl;
@@ -12,6 +14,7 @@ export default {
const allRoutesWithWrappedActions = allRoutes.map((route) => {
return {
...route,
+ path: base + route.path,
action: (context) => ({
Controller: route.action,
params: context.params,
diff --git a/packages/chord-chart-studio/vite.config.js b/packages/chord-chart-studio/vite.config.js
index da00a3c..8af67c9 100644
--- a/packages/chord-chart-studio/vite.config.js
+++ b/packages/chord-chart-studio/vite.config.js
@@ -5,7 +5,7 @@ import { VitePWA } from 'vite-plugin-pwa';
export default defineConfig({
root: 'src',
publicDir: '../public',
- base: './',
+ base: '/app/',
build: {
outDir: '../build',
emptyOutDir: true,