1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[94871],{94288:(e,t,r)=>{r.d(t,{J:()=>s});var a=r(95155),n=r(12115),i=r(46195),o=r(21567);let s=n.forwardRef((e,t)=>{let{className:r,...n}=e;return(0,a.jsx)(i.b,{ref:t,className:(0,o.cn)("text-sm font-medium text-black dark:text-white leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",r),...n})});s.displayName=i.b.displayName},3697:(e,t,r)=>{r.d(t,{A:()=>s});var a=r(95155),n=r(12115),i=r(5900),o=r(21567);let s=n.forwardRef((e,t)=>{let{className:r,...n}=e;return(0,a.jsxs)(i.bL,{ref:t,className:(0,o.cn)("relative flex w-full touch-none select-none items-center",r),...n,children:[(0,a.jsx)(i.CC,{className:"relative h-2 w-full grow overflow-hidden rounded-full bg-slate-100/20",children:(0,a.jsx)(i.Q6,{className:"absolute h-full bg-purple-500"})}),(0,a.jsx)(i.zi,{className:"block h-5 w-5 rounded-full border-2 border-purple-500 bg-white ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"})]})});s.displayName=i.bL.displayName},51569:(e,t,r)=>{r.d(t,{B:()=>n});var a=r(12115);let n=e=>{let{onSpacebar:t,disabled:r=!1}=e,n=(0,a.useCallback)(e=>{r||"Space"!==e.code||(e.preventDefault(),t())},[t,r]);(0,a.useEffect)(()=>(window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)),[n])}},51691:(e,t,r)=>{r.d(t,{Z:()=>n});var a=r(95155);r(12115);let n=e=>{let{history:t,max:r=10}=e;if(0===t.length)return null;let n=t.slice(-r);return(0,a.jsx)("div",{className:"flex items-center justify-center gap-1.5 mb-3 sm:mb-4 flex-wrap",children:n.map(e=>{var t;let r=e.isCorrect?"bg-emerald-500/15 border-emerald-500/40 text-emerald-700 dark:text-emerald-300":"bg-red-500/15 border-red-500/40 text-red-700 dark:text-red-300";return(0,a.jsx)("span",{className:"inline-flex items-center justify-center min-w-[26px] h-6 px-1.5 rounded-md border text-[10px] font-semibold tabular-nums ".concat(r),title:e.isCorrect?"Correct":"Incorrect",children:null!==(t=e.label)&&void 0!==t?t:e.isCorrect?"â":"â"},e.id)})})}},87836:(e,t,r)=>{r.d(t,{O:()=>b});var a=r(95155),n=r(12115),i=r(2178),o=r(16863),s=r(74501);let l={emerald:{default:"border-emerald-300 dark:border-emerald-700 bg-emerald-50 dark:bg-emerald-950/40 text-emerald-700 dark:text-emerald-300",hover:"hover:border-emerald-400 hover:bg-emerald-100 dark:hover:bg-emerald-900/50",selected:"border-emerald-500 bg-emerald-200 dark:bg-emerald-900/70 text-emerald-800 dark:text-emerald-200 ring-2 ring-emerald-500/40",mutedDefault:"border-emerald-200 dark:border-emerald-800 bg-emerald-50/60 dark:bg-emerald-950/20 text-emerald-600 dark:text-emerald-400",mutedHover:"hover:border-emerald-300 hover:bg-emerald-100/70 dark:hover:bg-emerald-900/30",mutedSelected:"border-emerald-400 bg-emerald-100 dark:bg-emerald-900/50 text-emerald-700 dark:text-emerald-300 ring-2 ring-emerald-400/30"},amber:{default:"border-amber-300 dark:border-amber-700 bg-amber-50 dark:bg-amber-950/40 text-amber-700 dark:text-amber-300",hover:"hover:border-amber-400 hover:bg-amber-100 dark:hover:bg-amber-900/50",selected:"border-amber-500 bg-amber-200 dark:bg-amber-900/70 text-amber-800 dark:text-amber-200 ring-2 ring-amber-500/40",mutedDefault:"border-amber-200 dark:border-amber-800 bg-amber-50/60 dark:bg-amber-950/20 text-amber-600 dark:text-amber-400",mutedHover:"hover:border-amber-300 hover:bg-amber-100/70 dark:hover:bg-amber-900/30",mutedSelected:"border-amber-400 bg-amber-100 dark:bg-amber-900/50 text-amber-700 dark:text-amber-300 ring-2 ring-amber-400/30"},cyan:{default:"border-cyan-300 dark:border-cyan-700 bg-cyan-50 dark:bg-cyan-950/40 text-cyan-700 dark:text-cyan-300",hover:"hover:border-cyan-400 hover:bg-cyan-100 dark:hover:bg-cyan-900/50",selected:"border-cyan-500 bg-cyan-200 dark:bg-cyan-900/70 text-cyan-800 dark:text-cyan-200 ring-2 ring-cyan-500/40",mutedDefault:"border-cyan-200 dark:border-cyan-800 bg-cyan-50/60 dark:bg-cyan-950/20 text-cyan-600 dark:text-cyan-400",mutedHover:"hover:border-cyan-300 hover:bg-cyan-100/70 dark:hover:bg-cyan-900/30",mutedSelected:"border-cyan-400 bg-cyan-100 dark:bg-cyan-900/50 text-cyan-700 dark:text-cyan-300 ring-2 ring-cyan-400/30"},violet:{default:"border-violet-300 dark:border-violet-700 bg-violet-50 dark:bg-violet-950/40 text-violet-700 dark:text-violet-300",hover:"hover:border-violet-400 hover:bg-violet-100 dar
1k:hover:bg-violet-900/50",selected:"border-violet-500 bg-violet-200 dark:bg-violet-900/70 text-violet-800 dark:text-violet-200 ring-2 ring-violet-500/40",mutedDefault:"border-violet-200 dark:border-violet-800 bg-violet-50/60 dark:bg-violet-950/20 text-violet-600 dark:text-violet-400",mutedHover:"hover:border-violet-300 hover:bg-violet-100/70 dark:hover:bg-violet-900/30",mutedSelected:"border-violet-400 bg-violet-100 dark:bg-violet-900/50 text-violet-700 dark:text-violet-300 ring-2 ring-violet-400/30"},red:{default:"border-red-300 dark:border-red-700 bg-red-50 dark:bg-red-950/40 text-red-700 dark:text-red-300",hover:"hover:border-red-400 hover:bg-red-100 dark:hover:bg-red-900/50",selected:"border-red-500 bg-red-200 dark:bg-red-900/70 text-red-800 dark:text-red-200 ring-2 ring-red-500/40",mutedDefault:"border-red-200 dark:border-red-800 bg-red-50/60 dark:bg-red-950/20 text-red-600 dark:text-red-400",mutedHover:"hover:border-red-300 hover:bg-red-100/70 dark:hover:bg-red-900/30",mutedSelected:"border-red-400 bg-red-100 dark:bg-red-900/50 text-red-700 dark:text-red-300 ring-2 ring-red-400/30"},sky:{default:"border-sky-300 dark:border-sky-700 bg-sky-50 dark:bg-sky-950/40 text-sky-700 dark:text-sky-300",hover:"hover:border-sky-400 hover:bg-sky-100 dark:hover:bg-sky-900/50",selected:"border-sky-500 bg-sky-200 dark:bg-sky-900/70 text-sky-800 dark:text-sky-200 ring-2 ring-sky-500/40",mutedDefault:"border-sky-200 dark:border-sky-800 bg-sky-50/60 dark:bg-sky-950/20 text-sky-600 dark:text-sky-400",mutedHover:"hover:border-sky-300 hover:bg-sky-100/70 dark:hover:bg-sky-900/30",mutedSelected:"border-sky-400 bg-sky-100 dark:bg-sky-900/50 text-sky-700 dark:text-sky-300 ring-2 ring-sky-400/30"},rose:{default:"border-rose-300 dark:border-rose-700 bg-rose-50 dark:bg-rose-950/40 text-rose-700 dark:text-rose-300",hover:"hover:border-rose-400 hover:bg-rose-100 dark:hover:bg-rose-900/50",selected:"border-rose-500 bg-rose-200 dark:bg-rose-900/70 text-rose-800 dark:text-rose-200 ring-2 ring-rose-500/40",mutedDefault:"border-rose-200 dark:border-rose-800 bg-rose-50/60 dark:bg-rose-950/20 text-rose-600 dar
1k:text-rose-400",mutedHover:"hover:border-rose-300 hover:bg-rose-100/70 dark:hover:bg-rose-900/30",mutedSelected:"border-rose-400 bg-rose-100 dark:bg-rose-900/50 text-rose-700 dark:text-rose-300 ring-2 ring-rose-400/30"},fuchsia:{default:"border-fuchsia-300 dark:border-fuchsia-700 bg-fuchsia-50 dark:bg-fuchsia-950/40 text-fuchsia-700 dark:text-fuchsia-300",hover:"hover:border-fuchsia-400 hover:bg-fuchsia-100 dark:hover:bg-fuchsia-900/50",selected:"border-fuchsia-500 bg-fuchsia-200 dark:bg-fuchsia-900/70 text-fuchsia-800 dark:text-fuchsia-200 ring-2 ring-fuchsia-500/40",mutedDefault:"border-fuchsia-200 dark:border-fuchsia-800 bg-fuchsia-50/60 dark:bg-fuchsia-950/20 text-fuchsia-600 dark:text-fuchsia-400",mutedHover:"hover:border-fuchsia-300 hover:bg-fuchsia-100/70 dark:hover:bg-fuchsia-900/30",mutedSelected:"border-fuchsia-400 bg-fuchsia-100 dark:bg-fuchsia-900/50 text-fuchsia-700 dark:text-fuchsia-300 ring-2 ring-fuchsia-400/30"}},d=Object.fromEntries(Object.entries({I:"emerald",i:"emerald",ii:"amber","ii\xb0":"amber",iii:"cyan",bIII:"cyan","bIII+":"cyan",IV:"violet",iv:"violet",V:"red",v:"red",vi:"sky","vi\xb0":"sky",bVI:"sky","vii\xb0":"rose",bVII:"fuchsia"}).map(e=>{let[t,r]=e;return[t,l[r]]}));function c(e){let t=e.indexOf("/");return!(t<0)&&(e.startsWith("V7/")||e.startsWith("vii\xb07/"))?e.slice(t+1):null}let m={default:"border-slate-200 dark:border-border bg-slate-50 dark:bg-card/80 text-slate-700 dark:text-slate-200",hover:"hover:border-slate-400 hover:bg-slate-100 dark:hover:bg-surface2",selected:"border-slate-500 bg-slate-200 dark:bg-surface2 text-slate-800 dark:text-slate-200 ring-2 ring-slate-500/40",mutedDefault:"border-slate-200/70 dark:border-border/70 bg-slate-50/60 dark:bg-card text-slate-600 dark:text-slate-300",mutedHover:"hover:border-slate-300 hover:bg-slate-100/70 dark:hover:bg-surface2/40",mutedSelected:"border-slate-400 bg-slate-100 dark:bg-surface2/70 text-slate-700 dark:text-slate-200 ring-2 ring-slate-400/30"},u=e=>{let t,{degree:r,onClick:n,disabled:o=!1,selected:s=!1,isCorrect:l=null,showResult:u=!1,muted:b=!1}=e,x=function(e){let t=c(e);if(t)return d[t]||d[t.toLowerCase()]||m;let r=function(e){if(e.startsWith("V7/")||e.startsWith("vii\xb07/"))return null;let t=e.match(/^(.+)\/(3|5)$/);return t?t[1]:null}(e);return r?d[r]||m:d[e]||m}(r),h=null!==c(r);return t=u&&s?l?"border-green-500 bg-green-100 dark:bg-green-900/70 text-green-700 dark:text-green-200 shadow-lg ring-2 ring-green-500/40":"border-red-500 bg-red-100 dark:bg-red-900/70 text-red-700 dark:text-red-200 shadow-lg ring-2 ring-red-500/40":s?b?"".concat(x.mutedSelected," shadow-md"):"".concat(x.selected," shadow-lg"):b?"".concat(x.mutedDefault," ").concat(x.mutedHover):"".concat(x.default," ").concat(x.hover),(0,a.jsx)(i.P.button,{whileTap:{scale:o?1:.96},whileHover:{scale:o?1:1.03},onClick:n,disabled:o,className:"\n relative px-4 sm:px-6 py-4 sm:py-5 rounded-2xl\n border-2 ".concat(h?"border-dashed":""," ").concat(t,"\n font-bold text-lg sm:text-xl\n transition-all duration-200\n ").concat(o?"opacity-40 cursor-not-allowed":"cursor-pointer","\n min-w-[76px] sm:min-w-[90px]\n flex items-center justify-center\n shadow-sm\n "),children:(0,a.jsx)("span",{children:(e=>{if(e.includes("\xb0")){let t=e.split("\xb0");return(0,a.jsxs)(a.Fragment,{children:[t[0],(0,a.jsx)("sup",{className:"text-sm",children:"\xb0"}),t[1]]})}return e})(r)})})},b=e=>{let{exerciseType:t,onSelect:r,selectedAnswer:i=null,correctAnswer:l=null,showResult:d=!1,disabled:c=!1,enabledDegrees:m,enabledSecondaries:b,degreeOptions:x=o.om,secondaryDominantOptions:h,secondaryDiminishedOptions:g,levelDegrees:f,includeSlashChords:p=!1,mixedSubtypes:v}=e,y=e=>e?(0,s.t)(e):e,k=n.useMemo(()=>f&&0!==f.length?new Set(f.map(y)):null,[f]),j="mixed"===t,N=v&&v.length>0?new Set(v):null,w="diatonic-seventh"===t||"diatonic-triad"===t||j&&(!N||N.has("diatonic-triad")||N.has("diatonic-seventh")),I="secondary-dominant"===t||j&&(!N||N.has("secondary-dominant")),F="secondary-diminished"===t||j&&(!N||N.has("secondary-diminished")),C=h||o.Jv,M=g||o.TE,S=n.useMemo(()=>
1{if(!k)return!1;let e=[];return w&&e.push(x),I&&e.push(C),F&&e.push(M),e.some(e=>e.some(e=>k.has(y(e))))},[k,w,I,F,x,C,M]),V=e=>k&&S?e.filter(e=>k.has(y(e))):e,B=e=>k?k.has(y(e))||!0:!m||m[e],R=w?k?V(x):m?x.filter(e=>m[e]):x:[],T=I?j?C:k?V(C):b?C.filter(e=>{let t=b[e];return void 0===t||t}):C:[],D=F?j?M:k?V(M):b?M.filter(e=>{let t=b[e];return void 0===t||t}):M:[],A=p&&w;return(0,a.jsxs)("div",{className:"space-y-6",children:[A?R.length>0&&(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-xs text-muted-foreground text-center mb-3 uppercase tracking-wider",children:"Diatonic (with slash chords)"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-x-2 sm:gap-x-3 gap-y-2 justify-center",children:R.map(e=>(0,a.jsx)("div",{className:"flex flex-col items-stretch gap-1.5 sm:gap-2",children:[e,"".concat(e,"/3"),"".concat(e,"/5")].map((t,n)=>(0,a.jsx)(u,{degree:t,onClick:()=>r(t),disabled:c||!B(e),selected:i===t,isCorrect:d&&i===t?l===t:null,showResult:d,muted:n>0},t))},e))})]}):R.length>0&&(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-xs text-muted-foreground text-center mb-3 uppercase tracking-wider",children:"Diatonic"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2 sm:gap-3 justify-center",children:R.map(e=>(0,a.jsx)(u,{degree:e,onClick:()=>r(e),disabled:c||!B(e),selected:i===e,isCorrect:d&&i===e?l===e:null,showResult:d},e))})]}),(T.length>0||D.length>0)&&(0,a.jsxs)("div",{children:[(0,a.jsxs)("p",{className:"text-xs text-muted-foreground text-center mb-3 uppercase tracking-wider",children:["Secondary ",(0,a.jsx)("span",{className:"opacity-60",children:"(dashed = resolves to colored degree)"})]}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2 sm:gap-3 justify-center",children:[...T,...D].map(e=>(0,a.jsx)(u,{degree:e,onClick:()=>r(e),disabled:c,selected:i===e,isCorrect:d&&i===e?l===e:null,showResult:d},e))})]})]})}},94871:(e,t,r)=>{r.r(t),r.d(t,{FunctioneerExercise:()=>h,default:()=>g});var a=r(95155),n=r(12115),i=r(2178),o=r(86835),s=r(92048),l=r(13242),d=r(1129),c=r(51691),m=r(40456),u=r(76909);let b=["root-position","close-position","shell","rootless","drop-2","drop-3","drop-2-4","spread","kenny-barron","fourth-chords","so-what","cluster","upper-structure"],x="earonman_functioneer_voicing",h=e=>{var t;let{settings:r=m.zq,onSettingsChange:h,onBack:g,onBackToSettings:f,levelId:p,levelName:v,levelDescription:y,attemptsAllowed:k,requiredCorrect:j,levelDegrees:N,levelScaleType:w,levelExerciseType:I,levelIncludeSlashChords:F,levelMixedSubtypes:C,forcedMode:M,embedded:S,isGameOver:V,onComplete:B,onAnswer:R}
1=e,[T,D]=(0,n.useState)(r),[A,q]=(0,n.useState)(null!==(t=null!=M?M:r.playbackMode)&&void 0!==t?t:"single"),[E,z]=(0,n.useState)(!1),[P,O]=(0,n.useState)([]),Q=null!=M?M:A,H=(0,n.useCallback)(e=>{D(t=>{let r=e(t);return null==h||h(r),r})},[h]),$=(0,n.useCallback)(e=>{D(e),null==h||h(e)},[h]),G=(0,n.useCallback)((e,t,r,a)=>{let n=a?e?a.correct:"".concat(a.selected," â ").concat(a.correct):void 0;O(t=>[...t,{id:t.length+1,isCorrect:e,label:n}].slice(-20)),null==R||R(e,t,r,a)},[R]),L=(0,n.useCallback)(()=>{H(e=>({...e,autoAdvance:!e.autoAdvance}))},[H]),_=(0,n.useCallback)(()=>{H(e=>({...e,voicing:{...e.voicing,addBass:!e.voicing.addBass}}))},[H]),W=(0,n.useCallback)(e=>{!function(e){try{window.localStorage.setItem(x,e)}catch(e){}}(e),H(t=>({...t,voicing:{...t.voicing,type:e,octave:(0,u.gz)(e)}}))},[H]);(0,n.useEffect)(()=>{if(r!==m.zq)return;let e=function(){try{let e=window.localStorage.getItem(x);return e&&b.includes(e)?e:null}catch(e){return null}}();e&&D(t=>t.voicing.type===e?t:{...t,voicing:{...t.voicing,type:e,octave:(0,u.gz)(e)}})},[]);let J=(0,n.useMemo)(()=>{let e=T.voicing.type;return m.mo["rootless-a"===e||"rootless-b"===e?"rootless":e].name},[T.voicing.type]),Z=(0,n.useCallback)(e=>{M||(q(e),H(t=>({...t,playbackMode:e})),O([]))},[M,H]),K=!M,U=(0,n.useMemo)(()=>"progression"===Q?"Identify the 4-chord progression":"Identify the harmonic function",[Q]);return(0,a.jsxs)("div",{className:"w-full",children:[(0,a.jsxs)("div",{className:"text-center pt-3 sm:pt-6 px-3",children:[(0,a.jsx)("h1",{className:"text-xl sm:text-2xl font-bold ear-title",children:null!=v?v:"Functioneer"}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-muted-foreground mt-1",children:null!=y?y:U})]}),(0,a.jsxs)("div",{className:"flex items-center justify-center gap-2 sm:gap-3 mt-3 px-3 flex-wrap",children:[K&&(0,a.jsx)("div",{className:"inline-flex p-0.5 rounded-full border border-border/60 bg-muted/40",children:["single","progression"].map(e=>{let t=Q===e;return(0,a.jsx)("button",{type:"button",onClick:()=>Z(e),className:"px-3 sm:px-4 py-1 rounded-full text-xs sm:text-sm font-medium transition-all ".concat(t?"bg-violet-600 text-white shadow-sm":"text-muted-foreground hover:text-foreground"),children:"single"===e?"Single":"Progression"},e)})}),(0,a.jsxs)("button",{type:"button",onClick:L,className:"px-3 py-1 rounded-full text-xs font-medium border transition-all ".concat(T.autoAdvance?"bg-emerald-500/15 border-emerald-500/40 text-emerald-700 dark:text-emerald-300":"bg-muted/40 border-border/60 text-muted-foreground hover:text-foreground"),title:"Automatically advance to the next question after a correct answer",children:["Auto-advance ",T.autoAdvance?"on":"off"]}),(0,a.jsxs)("label",{className:"relative inline-flex items-center px-3 py-1 rounded-full text-xs font-medium border border-border/60 bg-muted/40 text-muted-foreground hover:text-foreground transition-all cursor-pointer",title:"Playback voicing style",children:[(0,a.jsx)("span",{className:"opacity-70 mr-1",children:"Voicing:"}),(0,a.jsx)("span",{className:"text-foreground font-semibold",children:J}),(0,a.jsx)("span",{className:"ml-1 opacity-60",children:"â¾"}),(0,a.jsx)("select",{value:"rootless-a"===T.voicing.type||"rootless-b"===T.voicing.type?"rootless":T.voicing.type,onCh
1ange:e=>W(e.target.value),className:"absolute inset-0 opacity-0 cursor-pointer","aria-label":"Voicing style",children:b.map(e=>(0,a.jsx)("option",{value:e,children:m.mo[e].name},e))})]}),(0,a.jsxs)("button",{type:"button",onClick:_,className:"px-3 py-1 rounded-full text-xs font-medium border transition-all ".concat(T.voicing.addBass?"bg-violet-500/15 border-violet-500/40 text-violet-700 dark:text-violet-300":"bg-muted/40 border-border/60 text-muted-foreground hover:text-foreground"),title:"Play a separate bass note an octave below the chord",children:["Bass ",T.voicing.addBass?"on":"off"]}),(0,a.jsxs)("button",{type:"button",onClick:()=>z(!0),className:"inline-flex items-center gap-1 px-3 py-1 rounded-full text-xs font-medium border border-border/60 bg-muted/40 text-muted-foreground hover:text-foreground transition-all",title:"How to listen",children:[(0,a.jsx)(o.A,{className:"h-3.5 w-3.5"}),"Help"]})]}),(0,a.jsx)("div",{className:"mt-3 px-3",children:(0,a.jsx)(c.Z,{history:P})}),(0,a.jsx)(i.P.div,{initial:{opacity:0,y:4},animate:{opacity:1,y:0},transition:{duration:.18},children:"progression"===Q?(0,a.jsx)(l.E,{settings:T,onSettingsChange:$,onBack:g,onBackToSettings:f,levelId:p,levelScaleType:w,levelDegrees:N,attemptsAllowed:k,requiredCorrect:j,isGameOver:V,onComplete:B,onAnswer:G,hideHeader:!0,hideVoicingPanel:!0,embedded:S}):(0,a.jsx)(s.k,{settings:T,onSettingsChange:$,onBack:g,onBackToSettings:f,levelId:p,levelName:v,levelDescription:y,attemptsAllowed:k,requiredCorrect:j,levelDegrees:N,levelScaleType:w,levelExerciseType:I,levelIncludeSlashChords:F,levelMixedSubtypes:C,isGameOver:V,onComplete:B,onAnswer:G,hideHeader:!0,hideVoicingPanel:!0,embedded:S})},Q),(0,a.jsx)(d.N,{open:E,onClose:()=>z(!1)})]})},g=h},1129:(e,t,r)=>{r.d(t,{N:()=>l});var a=r(95155);r(12115);var n=r(25683),i=r(2178),o=r(40767);let s=[{title:"1. Listen to the bass",body:"The bass note is the strongest cue. Sing the tonic, then sing the bass of the target chord â the interval tells you the root of the degree."},{title:"2. Listen to the chord quality",body:"Major (I, IV), minor (ii, iii, vi), dominant (V) and diminished (vii\xb0) each have a distinct color. Quality + bass narrows it down to one or two options."},{title:"3. Use intervals as a tiebreaker",body:"If two degrees feel possible, mentally hum the tonic and the chord root. The interval (3rd, 4th, 5th, etc.) confirms the answer."}],l=e=>{let{open:t,onClose:r}=e;return(0,a.jsx)(n.N,{children:t&&(0,a.jsx)(i.P.div,{initial:{opacity:0}
1,animate:{opacity:1},exit:{opacity:0},className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:r,children:(0,a.jsxs)(i.P.div,{initial:{opacity:0,scale:.95,y:8},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.95,y:8},transition:{duration:.18},className:"w-full max-w-md rounded-2xl border border-border/60 bg-background shadow-2xl",onClick:e=>e.stopPropagation(),children:[(0,a.jsxs)("div",{className:"flex items-center justify-between px-5 py-4 border-b border-border/60",children:[(0,a.jsx)("h2",{className:"text-base font-semibold",children:"How to listen"}),(0,a.jsx)("button",{type:"button",onClick:r,className:"rounded-lg p-1.5 text-muted-foreground hover:bg-muted transition-colors","aria-label":"Close help",children:(0,a.jsx)(o.A,{className:"h-4 w-4"})})]}),(0,a.jsx)("div",{className:"px-5 py-4 space-y-4",children:s.map(e=>(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium text-sm mb-1",children:e.title}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-muted-foreground leading-relaxed",children:e.body})]},e.title))}),(0,a.jsx)("div",{className:"px-5 py-3 border-t border-border/60",children:(0,a.jsx)("button",{type:"button",onClick:r,className:"w-full rounded-lg bg-violet-600 hover:bg-violet-700 text-white text-sm font-medium py-2 transition-colors",children:"Got it"})})]})})})}},13242:(e,t,r)=>{r.d(t,{E:()=>p});var a=r(95155),n=r(12115),i=r(2178),o=r(11536),s=r(45220),l=r(87364),d=r(43226),c=r(31523),m=r(51569),u=r(76909),b=r(40456),x=r(74501);let h={I:"bg-cyan-100 dark:bg-cyan-900/50 text-cyan-700 dark:text-cyan-300 border-cyan-300 dark:border-cyan-700",i:"bg-cyan-100 dark:bg-cyan-900/50 text-cyan-700 dark:text-cyan-300 border-cyan-300 dark:border-cyan-700",ii:"bg-amber-100 dark:bg-amber-900/50 text-amber-700 dark:text-amber-300 border-amber-300 dark:border-amber-700","ii\xb0":"bg-amber-100 dark:bg-amber-900/50 text-amber-700 dark:text-amber-300 border-amber-300 dark:border-amber-700",iii:"bg-teal-100 dark:bg-teal-900/50 text-teal-700 dark:text-teal-300 border-teal-300 dark:border-teal-700",bIII:"bg-teal-100 dark:bg-teal-900/50 text-teal-700 dark:text-teal-300 border-teal-300 dark:border-teal-700","bIII+":"bg-emerald-100 dark:bg-emerald-900/50 text-emerald-700 dark:text-emerald-300 border-emerald-300 dark:border-emerald-700",IV:"bg-yellow-100 dark:bg-yellow-900/50 text-yellow-700 dark:text-yellow-300 border-yellow-300 dark:border-yellow-700",iv:"bg-yellow-100 dark:bg-yellow-900/50 text-yellow-700 dark:text-yellow-300 border-yellow-300 dark:border-yellow-700",V:"bg-red-100 dark:bg-red-900/50 text-red-700 dark:text-red-300 border-red-300 dark:border-red-700",v:"bg-red-100 dark:bg-red-900/50 text-red-700 dark:text-red-300 border-red-300 dark:border-red-700",vi:"bg-sky-100 dark:bg-sky-900/50 text-sky-700 dark:text-sky-300 border-sky-300 dark:border-sky-700","vi\xb0":"bg-lime-100 dark:bg-lime-900/50 text-lime-700 dark:text-lime-300 border-lime-300 dark:border-lime-700",bVI:"bg-sky-100 dark:bg-sky-900/50 text-sky-700 dark:text-sky-300 border-sky-300 dark:border-sky-700","vii\xb0":"bg-orange-100 dark:bg-orange-900/50 text-orange-700 dark:text-orange-300 border-orange-300 dark:border-orange-700",bVII:"bg-orange-100 dark:bg-orange-900/50 text-orange-700 dark:text-orange-300 border-orange-300 dark:border-orange-700"},g="bg-slate-100 dark:bg-card text-slate-700 dark:text-slate-300 border-slate-300 dark:border-border",f={major:{I:"I",ii:"ii",iii:"iii",IV:"IV",V:"V",vi:"vi","vii\xb0":"vii\xb0"},"natural-minor":{I:"i",ii:"ii\xb0",iii:"bIII",IV:"iv",V:"v",vi:"bVI","vii\xb0":"bVII"},"harmonic-minor":{I:"i",ii:"ii\xb0",iii:"bIII+",IV:"iv",V:"V",vi:"bVI","vii\xb0":"vii\xb0"},"melodic-minor":{I:"i",ii:"ii",iii:"bIII+",IV:"IV",V:"V",vi:"vi\xb0","vii\xb0":"vii\xb0"}},p=e=>{var t,r;let{settings:p=b.zq,onSettingsChange:v,onBackToSettings:y,onBack:k,levelId:j,levelScaleType:N,levelDegrees:w,attemptsAllowed:I=20,requiredCorrect:F=15,onComplete:C,onAnswer:M,isGameOver:S,hideHeader:V,hideVoicingPanel:B,embedded:R}=e,{soundManager:T,isInitialized:D}
1=(0,c.q)(),[A,q]=(0,n.useState)(p),[E,z]=(0,n.useState)(!1),[P,O]=(0,n.useState)(null),[Q,H]=(0,n.useState)([,,,,].fill("")),[$,G]=(0,n.useState)(0),[L,_]=(0,n.useState)(!1),[W,J]=(0,n.useState)(null),[Z,K]=(0,n.useState)(!1),[U,Y]=(0,n.useState)(-1),[X,ee]=(0,n.useState)(!1),[et,er]=(0,n.useState)(!1),[ea,en]=(0,n.useState)(0),[ei,eo]=(0,n.useState)(0),[es,el]=(0,n.useState)(0),[ed,ec]=(0,n.useState)(0),em=(0,n.useRef)(!1),eu=(0,n.useRef)(0),eb=(0,n.useRef)(()=>{}),ex=null!=N?N:A.scaleType,eh=(0,n.useMemo)(()=>{let e=(0,x.iz)(ex);if(!w||0===w.length)return e;let t=new Set(w.map(x.t)),r=e.filter(e=>t.has((0,x.t)(e)));return r.length>0?r:e},[ex,w]),eg=Q.every(e=>e.length>0),ef=(0,n.useCallback)((e,t)=>{let r=f[t];return e.map(e=>r[e]||e)},[]),ep=(0,n.useCallback)((e,t,r,a)=>{let n="major"===t?"I":"i",i=(0,x.c6)(e,A.mode,r.octave,r,t,!1),o=[],s=i;for(let n of a){let a=(0,x.fT)(e,n,t,r.octave,r,!1),i=(0,x.tN)(s,a);o.push(i),s=i}return{key:e,scaleType:t,tonicDegree:n,tonicChord:i,chords:o,degrees:a}},[A.mode]),ev=(0,n.useCallback)(()=>{let e=(0,x.VP)(),t=()=>eh[Math.floor(Math.random()*eh.length)],r=[];for(let e=0;e<4;e++){let n=t();if(e>=2&&r[e-1]===r[e-2]&&n===r[e-1]){var a;let e=eh.filter(e=>e!==n);n=null!==(a=e[Math.floor(Math.random()*e.length)])&&void 0!==a?a:n}r.push(n)}return ep(e,ex,A.voicing,r)},[eh,ep,ef,A.voicing]),ey=(0,n.useCallback)((e,t)=>ep(e.key,e.scaleType,t,e.degrees),[ep]);(0,n.useEffect)(()=>{D&&!P&&O(ev())},[D,P,ev]);let ek=(0,n.useCallback)(()=>{if(eu.current+=1,T)try{T.stopAllSounds()}catch(e){}Y(-1),ee(!1),K(!1)},[T]),ej=(0,n.useCallback)(async()=>{if(!P||!T)return;if(Z){ek();return}let e=++eu.current;K(!0),Y(-1),ee(!0);let t=e=>new Promise(t=>setTimeout(t,e));try{try{T.stopAllSounds()}catch(e){}let r=(0,x.Qg)(P.tonicChord.notes);if(T.playMusicSequence(r,!0),await t(1400),eu.current!==e||(ee(!1),await t(600),eu.current!==e))return;for(let r=0;r<P.chords.length;r++){if(eu.current!==e)return;Y(r);let a=(0,x.Qg)(P.chords[r].notes);T.playMusicSequence(a,!0),await t(1500)}await t(400)}finally{eu.current===e&&(Y(-1),ee(!1),K(!1))}},[P,T,Z,ek]);(0,n.useEffect)(()=>{eb.current=ej},[ej]);let eN="".concat(null!==(t=null==P?void 0:P.key)&&void 0!==t?t:"","|").concat(null!==(r=null==P?void 0:P.degrees.join(","))&&void 0!==r?r:"");(0,n.useEffect)(()=>{if(!P||!D||L||et||S)return;let e=setTimeout(()=>{var e;return null===(e=eb.current)||void 0===e?void 0:e.call(eb)},500);return()=>clearTimeout(e)},[eN,D,L,et,S]),(0,n.useEffect)(()=>()=>{if(eu.current+=1,T)try{T.stopAllSounds()}catch(e){}},[T]),(0,m.B)({onSpacebar:ej,disabled:et||!!S});let ew=e=>{if(L||S)return;let t=[...Q];t[$]=e,H(t);let r=t.findIndex((e,t)=>t>$&&!e);if(r>=0){G(r);return}let a=t.findIndex(e=>!e);if(a>=0){G(a);return}G(Math.min($+1,3))},eI=()=>{if(L||S)return;let e=[...Q];if(e[$]){e[$]="",H(e);return}if($>0){let t=$-1;e[t]="",H(e),G(t)}},eF=()=>{L||S||(H([,,,,].fill("")),G(0))},eC=(0,n.useRef)(()=>{}),eM=()=>{if(!P||L||!eg||S)return;let e=Q.every((e,t)=>e===P.degrees[t]),t=ea+1,r=e?ei+1:ei;J(e),_(!0),en(t),e?(eo(r),el(e=>{let t=e+1;return t>ed&&ec(t),t})):el(0),null==M||M(e,t,r,{selected:Q.join("-"),correct:P.degrees.join("-")}),j&&(r>=F||t>=I)&&(er(!0),em.current||(em.current=!0,setTimeout(()=>null==C?void 0:C({correct:r,total:t}),1200)))},eS=()=>{if(!et){if(j&&ea>=I){null==C||C({correct:ei,total:ea});return}O(ev()),H([,,,,].fill("")),G(0),_(!1),J(null)}};if((0,n.useEffect)(()=>{eC.current=eM}),(0,n.useEffect)(()=>{if(!eg||L||S||et)return;let e=setTimeout(()=>{var e;return null===(e=eC.current)||void 0===e?void 0:e.call(eC)},250);return()=>clearTimeout(e)},[eg,L,S,et]),(0,n.useEffect)(()=>{if(!R)return window.innerWidth<640&&(document.body.style.overflow="hidden",document.documentElement.style.overflow="hidden"),()=>{document.body.style.overflow="",document.documentElement.style.overflow=""}},[R]),!D)return(0,a.jsx)("div",{className:"flex items-center justify-center p-8",children:(0,a.jsxs)("div",{className:"text-center",children:[(0,a.jsx)("div",{className:"animate-spin h-8 w-8 border-2 border-violet-400 border-t-transparent rounded-full mx-auto mb-4"}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:"Loading audio..."})]})});let eV=j?ea/I*100:0;return(0,a.jsxs)("div",{className:"max-w-3xl mx-auto p-3 sm:p-4 pb-[calc(80px+env(safe-area-inset-bottom))] sm:pb-4",children:[!V&&(0,a.jsxs)("div",{className:"text-center mb-3 sm:mb-6",children:[(0,a.jsx)("h2",{className:"text-xl sm:text-2xl font-bold ear-title",children:"Functioneer"}),(0,a.jsxs)("p",{className:"text-xs sm:text-sm text-muted-foreground",children:[null==P?void 0:P.key," ",ex," ",(0,a.jsx)("span",{className:"hidden sm:inline",children:"⢠Progressions"})]})]}),(0,a.jsx)("div",{className:"flex flex-wrap items-center justify-center gap-2 sm:gap-4 mb-3 sm:mb-6",children:(0,a.jsxs)("div",{className:"flex items-center gap-2 sm:gap-4 text-sm",children:[(0,a.jsxs)("div",{className:"text-center px-2 sm:px-3 py-1 sm:py-1.5 rounded-lg sm:rounded-xl bg-green-100 dark:bg-green-950/50 border border-green-300 dark:border-green-700",children:[(0,a.jsx)("span",{className:"font-bold text-green-700 dark:text-green-300 tabular-nums",children:ei}),(0,a.jsx)("span",{className:"text-green-600/60 dark:text-green-400/60 mx-0.5 sm:mx-1",children:"/"}),(0,a.jsx)("span",{className:"text-green-600 dark:text-green-400 tabular-nums",children:ea})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1 px-2 sm:px-3 py-1 sm:py-1.5 rounded-lg sm:rounded-xl bg-amber-100 dar
1k:bg-amber-950/50 border border-amber-300 dark:border-amber-700",title:"Correct answers in a row",children:[(0,a.jsx)("span",{className:"text-sm",children:"\uD83D\uDD25"}),(0,a.jsx)("span",{className:"font-bold text-amber-700 dark:text-amber-300 tabular-nums",children:es}),(0,a.jsx)("span",{className:"text-amber-600/70 dark:text-amber-400/70 text-xs ml-0.5 hidden sm:inline",children:"streak"})]})]})}),j&&(0,a.jsxs)("div",{className:"mb-6",children:[(0,a.jsx)("div",{className:"h-2 bg-muted rounded-full overflow-hidden",children:(0,a.jsx)(i.P.div,{className:"h-full bg-gradient-to-r from-violet-500 to-purple-500",initial:{width:0},animate:{width:"".concat(eV,"%")},transition:{duration:.3}})}),(0,a.jsxs)("div",{className:"flex justify-between mt-1.5 text-xs text-muted-foreground",children:[(0,a.jsxs)("span",{children:[ea," / ",I," attempts"]}),(0,a.jsxs)("span",{children:[ei," / ",F," required"]})]})]}),(0,a.jsx)("div",{className:"mb-3 sm:mb-6",children:!B&&(0,a.jsx)(u.Dm,{voicing:A.voicing,onChange:e=>{let t={...A,voicing:e};q(t),null==v||v(t),P&&O(ey(P,e))},isExpanded:E,onToggleExpand:()=>z(!E)})}),(0,a.jsxs)("div",{className:"sm:rounded-2xl sm:border sm:border-border/60 sm:bg-background/80 sm:shadow-sm sm:p-6",children:[B?(0,a.jsxs)("div",{className:"flex flex-col items-center gap-3 mb-4 sm:mb-6",children:[(0,a.jsx)("button",{type:"button",onClick:ej,"aria-label":Z?"Stop":"Play",className:"w-20 h-20 sm:w-24 sm:h-24 rounded-full border-2 flex items-center justify-center transition-all shadow-lg ".concat(Z?"bg-[#FF8F1B]/30 border-[#FF8F1B] scale-95 animate-pulse":"bg-[#FF8F1B]/15 border-[#FF8F1B] hover:bg-[#FF8F1B]/25 active:scale-95"),children:Z?(0,a.jsx)("span",{className:"text-3xl sm:text-4xl text-slate-200",children:"âª"}):(0,a.jsx)(s.A,{size:36,className:"text-slate-200"})}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(d.$,{onClick:eS,disabled:L||et||!!S,variant:"secondary",size:"sm",className:"h-9 px-3 text-[#FF8F1B] border border-[#FF8F1B]/40 bg-[#FF8F1B]/10 hover:bg-[#FF8F1B]/20",title:"Skip to next question",children:"Skip"}),(0,a.jsx)(d.$,{onClick:eI,disabled:L,size:"sm",variant:"secondary",className:"h-9 px-3",children:(0,a.jsx)(o.lBk,{size:12})}),(0,a.jsx)(d.$,{onClick:eF,disabled:L,size:"sm",variant:"secondary",className:"h-9 px-3",children:"Clear"})]})]}):(0,a.jsxs)("div",{className:"flex justify-center gap-2 sm:gap-3 mb-4 sm:mb-6",children:[(0,a.jsx)(d.$,{onClick:ej,size:"default",className:"rounded-lg sm:rounded-xl w-[84px] sm:w-[96px] h-10 sm:h-11 font-medium shadow-lg ".concat(Z?"bg-red-500 hover:bg-red-600 text-white":"bg-emerald-500 hover:bg-emerald-600 text-white"),children:Z?(0,a.jsxs)("span",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"inline-block w-3 h-3 bg-white rounded-sm"}),"Stop"]}):(0,a.jsxs)("span",{className:"flex items-center gap-2",children:[(0,a.jsx)(o.gSK,{size:12}),"Listen"]})}),(0,a.jsx)(d.$,{onClick:eS,disabled:L||et||!!S,size:"default",variant:"secondary",className:"rounded-lg sm:rounded-xl h-10 sm:h-11 px-3 text-[#FF8F1B] border border-[#FF8F1B]/40 bg-[#FF8F1B]/10 hover:bg-[#FF8F1B]/20",title:"Skip to next question",children:"Skip"}),(0,a.jsx)(d.$,{onClick:eI,disabled:L,size:"default",variant:"secondary",className:"rounded-lg sm:rounded-xl h-10 sm:h-11 px-3",children:(0,a.jsx)(o.lBk,{size:12})}),(0,a.jsx)(d.$,{onClick:eF,disabled:L,size:"default",variant:"secondary",className:"rounded-lg sm:rounded-xl h-10 sm:h-11 px-3",children:"Clear"})]}),(0,a.jsxs)("div",{className:"mb-4 sm:mb-6",children:[(0,a.jsx)("p",{className:"text-center text-xs sm:text-sm text-muted-foreground mb-3 hidden sm:block",children:"Fill all 4 slots â it submits automatically."}),(0,a.jsx)("div",{className:"flex items-center justify-center gap-2 sm:gap-3 mb-3 sm:mb-4",children:Q.map((e,t)=>{let r=U===t,n=e?h[e]||g:"",o=e?n:"border-border bg-muted/40 text-foreground",s=$!==t||L?"":"ring-2 ring-violet-500/60 border-violet-500";return(0,a.jsx)(i.P.button,{type:"button",onClick:()=>!L&&G(t),animate:{scale:r?1.1:1},className:"w-14 h-12 sm:w-16 sm:h-14 rounded-lg sm:rounded-xl border-2 font-bold text-sm sm:text-base transition-all ".concat(o," ").concat(s," ").concat(r?"ring-2 ring-violet-500 shadow-lg scale-110":""),children:e||"..."},t)})}),!L&&(0,a.jsx)("div",{className:"text-center mb-3",children:(0,a.jsxs)("span",{className:"text-xs text-violet-600 dar
1k:text-violet-300",children:["Active slot: ",$+1]})}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2 sm:gap-3 justify-center",children:eh.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>ew(e),disabled:L,className:"px-3 sm:px-4 py-2 rounded-lg border font-bold text-xs sm:text-sm transition-all ".concat(h[e]||g," ").concat(L?"opacity-50 cursor-not-allowed":"hover:scale-105"),children:e},e))})]}),!L&&(0,a.jsx)("div",{className:"flex justify-center mb-4 sm:mb-6",children:(0,a.jsx)("span",{className:"text-xs text-muted-foreground",children:eg?"Submittingâ¦":"Pick chord ".concat($+1," of ").concat(4)})}),(0,a.jsx)("div",{className:"min-h-[140px] sm:min-h-[200px] mt-4 sm:mt-6",children:L&&P&&(0,a.jsxs)("div",{className:"text-center animate-in fade-in duration-200",children:[(0,a.jsx)("div",{className:"flex items-center justify-center gap-3 mb-3 sm:mb-4",children:W?(0,a.jsxs)("div",{className:"flex items-center gap-2 px-3 sm:px-4 py-1.5 sm:py-2 rounded-lg sm:rounded-xl bg-green-100 dark:bg-green-950/50 border border-green-300 dark:border-green-700",children:[(0,a.jsx)(o.CMH,{className:"text-green-600 dark:text-green-400",size:14}),(0,a.jsx)("span",{className:"font-medium text-sm sm:text-base text-green-700 dark:text-green-300",children:"Correct!"})]}):(0,a.jsxs)("div",{className:"flex items-center gap-2 px-3 sm:px-4 py-1.5 sm:py-2 rounded-lg sm:rounded-xl bg-red-100 dark:bg-red-950/50 border border-red-300 dark:border-red-700",children:[(0,a.jsx)(o.QCr,{className:"text-red-600 dark:text-red-400",size:14}),(0,a.jsx)("span",{className:"font-medium text-sm sm:text-base text-red-700 dark:text-red-300",children:"Incorrect"})]})}),(0,a.jsxs)("div",{className:"mb-4 sm:mb-6",children:[(0,a.jsx)("div",{className:"flex items-center justify-center gap-1 sm:gap-2 mb-2 flex-wrap",children:P.degrees.map((e,t)=>(0,a.jsxs)(n.Fragment,{children:[(0,a.jsx)("span",{className:"px-2 sm:px-4 py-1.5 sm:py-2.5 rounded-md sm:rounded-lg border-2 font-bold text-sm sm:text-base min-w-[38px] sm:min-w-[50px] text-center ".concat(h[e]||g),children:e}),t<P.degrees.length-1&&(0,a.jsx)("span",{className:"text-muted-foreground text-xs sm:text-base",children:"â"})]},t))}),(0,a.jsxs)("p",{className:"text-xs sm:text-sm text-muted-foreground",children:["Your answer: ",Q.join(" - ")]})]}),(0,a.jsx)(d.$,{onClick:eS,disabled:et,className:"bg-violet-600 hover:bg-violet-700 text-white rounded-lg sm:rounded-xl px-6 sm:px-8 font-medium shadow-lg",children:et?"Finishing...":j&&ea>=I?"Finish":(0,a.jsxs)("span",{className:"flex items-center gap-2",children:["Next ",(0,a.jsx)(o.Z0P,{size:12})]})})]})})]}),!V&&(k||y)&&(0,a.jsx)("div",{className:"hidden sm:flex justify-center gap-4 mt-6 sm:mt-8",children:(0,a.jsxs)(d.$,{onClick:k||y,variant:"secondary",className:"flex items-center gap-2",children:[(0,a.jsx)(l.A,{className:"h-4 w-4"})," ",j?"Back to Map":"Back to Settings"]})})]})}},92048:(e,t,r)=>{r.d(t,{k:()=>h});var a=r(95155),n=r(12115),i=r(11536),o=r(45220),s=r(87364),l=r(43226),d=r(31523),c=r(51569),m=r(87836),u=r(76909),b=r(40456),x=r(74501);let h=e=>{let{settings:t=b.zq,onSettingsChange:r,onBackToSettings:h,onBack:g,levelId:f,levelName:p,levelDescription:v,onComplete:y,onAnswer:k,attemptsAllowed:j=20,requiredCorrect:N=15,levelDegrees:w,levelScaleType:I,levelExerciseType:F,levelIncludeSlashChords:C=!1,levelMixedSubtypes:M,isGameOver:S,hideHeader:V,hideVoicingPanel:B,embedded:R}=e,{soundManager:T,isInitialized:D}=(0,d.q)(),A=n.useMemo(()=>{if(Array.isArray(w))return w;if("string"==typeof w)try{let e=JSON.parse(w);if(Array.isArray(e))return e}catch(e){}},[w]),q=n.useMemo(()=>{if(Array.isArray(M))return M;if("string"==typeof M)try{let e=JSON.parse(M);if(Array.isArray(e))return e}catch(e){}},[M]),[E,z]=(0,n.useState)(t),[P,O]=(0,n.useState)(!1);(0,n.useEffect)(()=>{z(e=>e===t?e:t)},[t]);let[Q,H]=(0,n.useState)(null),[$,G]=(0,n.useState)(null),[L,_]=(0,n.use
1State)(!1),[W,J]=(0,n.useState)(null),[Z,K]=(0,n.useState)(!1),[U,Y]=(0,n.useState)(!1),[X,ee]=(0,n.useState)(0),[et,er]=(0,n.useState)(0),[ea,en]=(0,n.useState)(0),[ei,eo]=(0,n.useState)(0),es=null!=I?I:E.scaleType,el=(e,t)=>{var r;return 0===e.length?t:null!==(r=e[Math.floor(Math.random()*e.length)])&&void 0!==r?r:t},ed=(0,n.useCallback)((e,t)=>{var r;let{key:a,mode:n,correctAnswer:i,exerciseType:o}=e,s=i.startsWith("V7/")||i.startsWith("vii\xb07/"),l=null!==(r=e.usedTriad)&&void 0!==r?r:"diatonic-triad"===o;if(s){let r=(0,x.c6)(a,n,t.octave,t,es,!1),o=(0,x.xX)(a,i,t.octave,t,es),s=(0,x.tN)(r,o),l=(0,x.RK)(a,i,t.octave,t,es),d=(0,x.tN)(s,l);return{...e,targetChord:s,contextChords:[r],resolutionChord:d}}{let r=i.match(/^(.+)\/(3|5)$/),o=r?r[1]:i,s=r?"3"===r[2]?1:2:0,d=s>0||C&&l,c=d?{...t,addBass:!1}:t,m=(0,x.c6)(a,n,t.octave,t,es,l),u=(0,x.fT)(a,o,es,t.octave,c,l),b=(0,x.sN)(u,s,{addLowBass:d}),h=d?b:(0,x.tN)(m,b);return{...e,targetChord:h,contextChords:[m]}}},[es,C]),ec=t.voicing.type,em=t.voicing.octave,eu=t.voicing.addBass;(0,n.useEffect)(()=>{H(e=>e?ed(e,t.voicing):e)},[ec,em,eu,ed]);let eb=(0,n.useCallback)(()=>{let e=(0,x.VP)(),t=E.mode,r=E.voicing,a=null!=F?F:E.exerciseType,n="mixed"===a&&q&&q.length>0?q:["diatonic-triad","diatonic-seventh","secondary-dominant","secondary-diminished"],i="mixed"===a?n[Math.floor(Math.random()*n.length)]:a,o="diatonic-triad"===a||"diatonic-triad"===i;if("secondary-dominant"===i||"secondary-diminished"===i){let n;let o=(0,x.x5)(es,"secondary-dominant"),s=(0,x.x5)(es,"secondary-diminished"),l=e=>{if(!A||0===A.length)return e;let t=new Set(A.map(x.t)),r=e.filter(e=>t.has((0,x.t)(e)));return r.length>0?r:e},d=l(o),c=l(s);A||"major"!==es||(d=o.filter(e=>E.enabledSecondaryDominants[e]),c=s.filter(e=>E.enabledSecondaryDominants[e]),0===d.length&&(d=o),0!==c.length||(c=s));let m=(n="secondary-dominant"===i?d:"secondary-diminished"===i?c:Math.random()>.5?d:c)[0]||d[0]||c[0]||"V7/V",u=el(n,m),b=(0,x.c6)(e,t,r.octave,r,es,!1),h=(0,x.xX)(e,u,r.octave,r,es),g=(0,x.tN)(b,h),f=(0,x.RK)(e,u,r.octave,r,es),p=(0,x.tN)(g,f);return{key:e,mode:t,targetChord:g,contextChords:[b],resolutionChord:p,exerciseType:"mixed"===a?"mixed":u.startsWith("vii")?"secondary-diminished":"secondary-dominant",correctAnswer:u,usedTriad:!1}}{let n;let i=(0,x.iz)(es);A&&A.length>0?0===(n=A.map(x.t).filter(e=>i.includes(e))).length&&(n=i):n=i.filter(e=>E.enabledDegrees[e]);let s=n[Math.floor(Math.random()*n.length)]||i[0],l=!!C&&o,d=l?{...r,addBass:!1}:r,c=(0,x.c6)(e,t,r.octave,r,es,o),m=(0,x.fT)(e,s,es,r.octave,d,o),u=0;l&&(u=Math.floor(3*Math.random()));let b=(0,x.sN)(m,u,{addLowBass:l});return{key:e,mode:t,targetChord:l?b:(0,x.tN)(c,b),contextChords:[c],exerciseType:"mixed"===a?"mixed":o?"diatonic-triad":"diatonic-seventh",correctAnswer:0===u?s:"".concat(s,"/").concat(1===u?3:5),usedTriad:o}}},[E,A,F,es,C,q]);(0,n.useEffect)(()=>{D&&!Q&&H(eb())},[D,Q,eb]);let ex=(0,n.useCallback)(async()=>{if(Q&&T&&!Z){K(!0);try{if(E.playContext&&Q.contextChords.length>0){let e=(0,x.Qg)(Q.contextChords[0].notes);T.playMusicSequence(e,!0),await new Promise(e=>setTimeout(e,1200))}let e=(0,x.Qg)(Q.targetChord.notes);if(T.playMusicSequence(e,!0),E.playResolution&&Q.resolutionChord){await new Promise(e=>setTimeout(e,1200));let e=(0,x.Qg)(Q.resolutionChord.notes);T.playMusicSequence(e,!0)}}finally{setTimeout(()=>K(!1),1e3)}}},[Q,T,E,Z]);(0,n.useEffect)(()=>{if(Q&&D&&!L&&!U&&!S){let e=setTimeout(()=>ex(),500);return()=>clearTimeout(e)}},[null==Q?void 0:Q.correctAnswer,D,U,S]),(0,c.B)({onSpacebar:ex,disabled:Z||U||!!S});let eh=()=>{if(f&&X>=j){null==y||y({correct:et,total:X});return}G(null),_(!1),J(null),H(eb())};return((0,n.useEffect)(()=>{if(L&&E.autoAdvance&&W&&!U&&!S){let e=setTimeout(eh,1500);return()=>clearTimeout(e)}},[L,E.autoAdvance,W,U,S]),(0,n.useEffect)(()=>{if(!R)return window.innerWidth<640&&(document.body.style.overflow="hidden",document.documentElement.style.overflow="hidden"),()=>{document.body.style.overflow="",document.documentElement.style.overflow=""}},[R]),D)?(0,a.jsxs)("div",{className:"w-full max-w-4xl mx-auto p-3 sm:p-6 pb-[calc(80px+env(safe-area-inset-bottom))] sm:pb-6",children:[!f&&!V&&(0,a.jsxs)("div",{className:"text-center mb-3 sm:mb-6",children:[(0,a.jsx)("h1",{className:"text-xl sm:text-2xl font-bold ear-title",children:"Functioneer"}),(0,a.jsxs)("p",{className:"text-xs sm:text-sm text-muted-foreground mt-1",children:[(null==Q?void 0:Q.key)||"..."," ",(null==Q?void 0:Q.mode)==="minor"?"minor":"Major"," ",(0,a.jsx)("span",{className:"hidden sm:inline",children:"⢠Harmonic Function Training"})]})]}),(0,a.jsx)("div",{className:"flex flex-wrap items-center justify-center gap-2 sm:gap-4 mb-3 sm:mb-6",children:(0,a.jsxs)("div",{className:"flex items-center gap-2 sm:gap-4 text-sm",children:[(0,a.jsxs)("div",{className:"text-center px-2 sm:px-3 py-1 sm:py-1.5 rounded-lg sm:rounded-xl bg-green-100 dark:bg-green-950/50 border border-green-300 dark:border-green-700",children:[(0,a.jsx)("span",{className:"font-bold text-green-700 dark:text-green-300 tabular-nums",children:et}),(0,a.jsx)("span",{className:"text-green-600/60 dark:text-green-400/60 mx-0.5 sm:mx-1",children:"/"}),(0,a.jsx)("span",{className:"text-green-600 dark:text-green-400 tabular-nums",children:X})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1 px-2 sm:px-3 py-1 sm:py-1.5 rounded-lg sm:rounded-xl bg-amber-100 dar
1k:bg-amber-950/50 border border-amber-300 dark:border-amber-700",title:"Correct answers in a row",children:[(0,a.jsx)("span",{className:"text-sm",children:"\uD83D\uDD25"}),(0,a.jsx)("span",{className:"font-bold text-amber-700 dark:text-amber-300 tabular-nums",children:ea}),(0,a.jsx)("span",{className:"text-amber-600/70 dark:text-amber-400/70 text-xs ml-0.5 hidden sm:inline",children:"streak"})]})]})}),f&&(0,a.jsxs)("div",{className:"mb-6 flex justify-between text-xs text-muted-foreground px-1",children:[(0,a.jsxs)("span",{children:[X," / ",j," attempts"]}),(0,a.jsxs)("span",{children:[et," / ",N," required"]})]}),!B&&(0,a.jsx)("div",{className:"mb-3 sm:mb-6",children:(0,a.jsx)(u.Dm,{voicing:E.voicing,onChange:e=>{let t={...E,voicing:e};z(t),null==r||r(t),Q&&H(ed(Q,e))},isExpanded:P,onToggleExpand:()=>O(!P)})}),(0,a.jsxs)("div",{className:"sm:rounded-2xl sm:border sm:border-border/60 sm:bg-background/80 sm:shadow-sm sm:p-6",children:[B?(0,a.jsxs)("div",{className:"flex flex-col items-center gap-3 mb-4 sm:mb-6",children:[(0,a.jsx)("button",{type:"button",onClick:ex,disabled:Z,"aria-label":Z?"Playing":"Play",className:"w-20 h-20 sm:w-24 sm:h-24 rounded-full border-2 flex items-center justify-center transition-all shadow-lg ".concat(Z?"bg-[#FF8F1B]/30 border-[#FF8F1B] scale-95 animate-pulse":"bg-[#FF8F1B]/15 border-[#FF8F1B] hover:bg-[#FF8F1B]/25 active:scale-95"," disabled:opacity-55"),children:Z?(0,a.jsx)("span",{className:"text-3xl sm:text-4xl text-slate-200",children:"âª"}):(0,a.jsx)(o.A,{size:36,className:"text-slate-200"})}),(0,a.jsx)(l.$,{onClick:eh,disabled:Z||U||!!S,variant:"secondary",size:"sm",className:"h-9 px-3 text-[#FF8F1B] border border-[#FF8F1B]/40 bg-[#FF8F1B]/10 hover:bg-[#FF8F1B]/20",title:"Skip to next question",children:"Skip"})]}):(0,a.jsxs)("div",{className:"flex justify-center gap-2 sm:gap-3 mb-4 sm:mb-8",children:[(0,a.jsx)(l.$,{onClick:ex,disabled:Z,size:"default",className:"gap-2 h-10 sm:h-11 w-[72px] sm:w-[88px]",children:Z?(0,a.jsx)("span",{className:"animate-pulse",children:"âª"}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.gSK,{size:12}),"Play"]})}),(0,a.jsx)(l.$,{onClick:eh,disabled:Z||U||!!S,variant:"secondary",size:"default",className:"h-10 sm:h-11 px-3 text-[#FF8F1B] border border-[#FF8F1B]/40 bg-[#FF8F1B]/10 hover:bg-[#FF8F1B]/20",title:"Skip to next question",children:"Skip"})]}),(0,a.jsx)("div",{className:"text-center mb-4 sm:mb-6 hidden sm:block",children:(0,a.jsx)("p",{className:"text-neutral-500 text-sm",children:(null==Q?void 0:Q.exerciseType)==="diatonic-seventh"||(null==Q?void 0:Q.exerciseType)==="diatonic-triad"?"Listen to the tonic followed by the chord. Identify the scale degree.":"Listen to the tonic, secondary dominant, and its resolution."})}),(0,a.jsx)(m.O,{exerciseType:(null==Q?void 0:Q.exerciseType)||E.exerciseType,onSelect:e=>{if(L||!Q||S)return;G(e);let t=e===Q.correctAnswer;J(t),_(!0);let r=X+1,a=t?et+1:et;ee(r),t?(er(a),en(e=>{let t=e+1;return t>ei&&eo(t),t})):en(0),null==k||k(t,r,a,{selected:String(e),correct:String(Q.correctAnswer)}),f&&(a>=N||r>=j)&&(Y(!0),setTimeout(()=>null==y?void 0:y({correct:a,total:r}),1500))},selectedAnswer:$,correctAnswer:L?null==Q?void 0:Q.correctAnswer:null,showResult:L,disabled:L,enabledDegrees:E.enabledDegrees,enabledSecondaries:E.enabledSecondaryDominants,degreeOptions:(0,x.iz)(null!=I?I:E.scaleType),secondaryDominantOptions:(0,x.x5)(es,"secondary-dominant"),secondaryDiminishedOptions:(0,x.x5)(es,"secondary-diminished"),levelDegrees:A,includeSlashChords:C,mixedSubtypes:q}),(0,a.jsx)("div",{className:"mt-4 sm:mt-8 min-h-[120px] sm:min-h-[180px]",children:L&&Q&&(0,a.jsxs)("div",{className:"animate-in fade-in duration-200",children:[(0,a.jsx)("div",{className:"flex items-center justify-center gap-3 mb-3 sm:mb-4",children:W?(0,a.jsxs)("div",{className:"flex items-center gap-2 px-3 sm:px-4 py-1.5 sm:py-2 rounded-lg sm:rounded-xl bg-green-100 dark:bg-green-950/50 border border-green-300 dark:border-green-700",children:[(0,a.jsx)(i.CMH,{className:"text-green-600 dark:text-green-400",size:14}),(0,a.jsx)("span",{className:"font-medium text-sm sm:text-base text-green-700 dark:text-green-300",children:"Correct!"})]}):(0,a.jsxs)("div",{className:"flex items-center gap-2 px-3 sm:px-4 py-1.5 sm:py-2 rounded-lg sm:rounded-xl bg-red-100 dark:bg-red-950/50 border border-red-300 dark:border-red-700",children:[(0,a.jsx)(i.QCr,{className:"text-red-600 dark:text-red-400",size:14}),(0,a.jsxs)("span",{className:"font-medium text-sm sm:text-base text-red-700 dark:text-red-300",children:[(0,a.jsx)("span",{className:"hidden sm:inline",children:"Incorrect â "}),"Answer: ",(0,a.jsxs)("span",{className:"font-semibold",children:["[",Q.correctAnswer,"]"]})]})]})}),(0,a.jsx)("div",{className:"text-center text-sm mb-3 sm:mb-4 hidden sm:block",children:(0,a.jsxs)("p",{className:"px-4 py-2 rounded-xl bg-slate-100 dar
1k:bg-card border border-slate-300 dark:border-border inline-block",children:[(0,a.jsxs)("span",{className:"text-slate-600 dark:text-slate-400",children:[Q.key," ",Q.mode,": "]}),(0,a.jsxs)("span",{className:"font-semibold text-slate-800 dark:text-slate-200",children:[Q.targetChord.root.replace(/\/[0-9]+/g,""),"diatonic-triad"===Q.exerciseType?function(e){switch(e){case"maj7":case"7":default:return"";case"min7":case"minMaj7":return"m";case"m7b5":case"dim7":return"\xb0";case"maj7#5":return"+"}}(Q.targetChord.quality):Q.targetChord.quality]})]})}),(()=>{let e=Q.targetChord.root,t=(0,b.HZ)(e);return t?(0,a.jsx)("div",{className:"text-center mb-3 sm:mb-4 hidden sm:block",children:(0,a.jsxs)("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 rounded-lg bg-gradient-to-r from-purple-50 to-indigo-50 dark:from-purple-950/30 dark:to-indigo-950/30 border border-purple-200 dark:border-purple-800",children:[(0,a.jsx)("span",{className:"w-4 h-4 rounded-full border shadow-sm",style:{backgroundColor:t.color}}),(0,a.jsxs)("span",{className:"text-xs text-purple-700 dark:text-purple-300",children:[(0,a.jsx)("span",{className:"font-medium",children:"Messiaen:"})," ",(0,a.jsxs)("span",{className:"italic",children:['"',e.replace(/[0-9]/g,"")," is ",t.name,'"']})]})]})}):null})(),(0,a.jsx)("div",{className:"flex justify-center",children:(0,a.jsx)(l.$,{onClick:eh,className:"bg-violet-600 hover:bg-violet-700 text-white rounded-lg sm:rounded-xl px-6 sm:px-8 font-medium shadow-lg",children:f&&X>=j?"Finish":(0,a.jsxs)("span",{className:"flex items-center gap-2",children:["Next ",(0,a.jsx)(i.Z0P,{size:12})]})})})]})})]}),!V&&(g||h)&&(0,a.jsx)("div",{className:"hidden sm:flex justify-center gap-4 mt-6 sm:mt-8",children:(0,a.jsxs)(l.$,{onClick:g||h,variant:"secondary",className:"flex items-center gap-2",children:[(0,a.jsx)(s.A,{className:"h-4 w-4"})," ",f?"Back to Map":"Back to Settings"]})})]}):(0,a.jsx)("div",{className:"flex items-center justify-center min-h-[400px]",children:(0,a.jsxs)("div",{className:"text-center",children:[(0,a.jsx)("div",{className:"animate-spin h-8 w-8 border-2 border-violet-400 border-t-transparent rounded-full mx-auto mb-4"}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:"Loading audio..."})]})})}},76909:(e,t,r)=>{r.d(t,{Dm:()=>x,gz:()=>b});var a=r(95155);r(12115);var n=r(2178),i=r(51889),o=r(11536),s=r(94288),l=r(3697),d=r(40456);let c=["root-position","shell","rootless","drop-2","drop-3","drop-2-4","fourth-chords","so-what","cluster","upper-structure"];function m(e){return"rootless-a"===e||"rootless-b"===e?"rootless":e}let u=["drop-2","drop-3","drop-2-4","spread","kenny-barron","fourth-chords","upper-structure"];function b(e){return u.includes(e)?4:3}let x=e=>{let{voicing:t,onChange:r,isExpanded:u=!1,onToggleExpand:x}=e,h=e=>{var a,n;if(e.type&&e.type!==t.type){let n=b(e.type);r({...t,...e,octave:n,bassOctave:null!==(a=t.bassOctave)&&void 0!==a?a:2})}else r({...t,...e,bassOctave:null!==(n=t.bassOctave)&&void 0!==n?n:2})};return(0,a.jsxs)("div",{className:"rounded-xl sm:rounded-2xl border border-border/60 bg-muted/20 overflow-hidden",children:[(0,a.jsxs)("button",{onClick:x,className:"w-full flex items-center justify-between px-3 sm:px-5 py-2.5 sm:py-4 hover:bg-muted/40 transition-colors",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 sm:gap-3",children:[(0,a.jsx)("div",{className:"p-1.5 sm:p-2 bg-amber-500/15 rounded-lg sm:rounded-xl",children:(0,a.jsx)(i.yRe,{className:"text-amber-600 dark:text-amber-300 text-base sm:text-lg"})}),(0,a.jsxs)("div",{className:"text-left",children:[(0,a.jsx)("h3",{className:"font-semibold text-foreground/80 text-xs sm:text-sm",children:"Playback Voicing"}),(0,a.jsx)("p",{className:"text-[10px] sm:text-xs text-muted-foreground",children:d.mo[m(t.type)].name})]})]}),(0,a.jsx)("div",{className:"text-muted-foreground",children:u?(0,a.jsx)(o.Ucs,{size:12}):(0,a.jsx)(o.Vr3,{size:12})})]}),u&&(0,a.jsx)(n.P.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.2},className:"border-t border-border/60",children:(0,a.jsxs)("div",{className:"p-3 sm:p-5 space-y-4 sm:sp
1ace-y-6",children:[(0,a.jsxs)("div",{className:"space-y-2 sm:space-y-3",children:[(0,a.jsx)(s.J,{className:"text-[10px] sm:text-xs font-medium text-muted-foreground uppercase tracking-wider",children:"Voicing Style"}),(0,a.jsx)("div",{className:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-1.5 sm:gap-2",children:c.map(e=>{let r=m(t.type)===e,{name:i}=d.mo[e];return(0,a.jsx)(n.P.button,{onClick:()=>h({type:e}),whileTap:{scale:.98},className:"\n relative px-2 sm:px-3 py-1.5 sm:py-2.5 rounded-lg sm:rounded-xl text-center transition-all duration-200\n ".concat(r?"border border-amber-500/70 bg-amber-500/15 text-amber-600 dark:text-amber-300 font-semibold":"border border-border/60 bg-muted/40 text-muted-foreground hover:border-amber-400/60 hover:text-foreground","\n "),children:(0,a.jsx)("span",{className:"text-xs sm:text-sm",children:i})},e)})})]}),(0,a.jsxs)("div",{className:"space-y-2 sm:space-y-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)(s.J,{className:"text-[10px] sm:text-xs font-medium text-muted-foreground uppercase tracking-wider",children:"Register"}),(0,a.jsxs)("span",{className:"text-xs sm:text-sm font-semibold text-amber-600 dark:text-amber-300 tabular-nums",children:["Octave ",t.octave]})]}),(0,a.jsx)(l.A,{value:[t.octave],onValueChange:e=>{let[t]=e;return h({octave:t})},min:3,max:4,step:1,className:"w-full"}),(0,a.jsxs)("div",{className:"flex justify-between text-[10px] sm:text-xs text-muted-foreground",children:[(0,a.jsx)("span",{children:"Low"}),(0,a.jsx)("span",{children:"High"})]})]}),(0,a.jsx)("div",{className:"pt-3 border-t border-border/60 hidden sm:block",children:(0,a.jsx)("p",{className:"text-xs text-muted-foreground text-center",children:"Bass note can be toggled on/off from the toolbar above the exercise."})})]})})]})}},16863:(e,t,r)=>{r.d(t,{Jv:()=>o,R0:()=>a,TE:()=>s,jU:()=>n,om:()=>i});let a={I:{degree:1,romanNumeral:"I",quality:"maj7",function:"tonic",intervalFromRoot:0},ii:{degree:2,romanNumeral:"ii",quality:"min7",function:"subdominant",intervalFromRoot:2},iii:{degree:3,romanNumeral:"iii",quality:"min7",function:"tonic",intervalFromRoot:4},IV:{degree:4,romanNumeral:"IV",quality:"maj7",function:"subdominant",intervalFromRoot:5},V:{degree:5,romanNumeral:"V",quality:"7",function:"dominant",intervalFromRoot:7},vi:{degree:6,romanNumeral:"vi",quality:"min7",function:"tonic",intervalFromRoot:9},"vii\xb0":{degree:7,romanNumeral:"vii\xb0",quality:"m7b5",function:"dominant",intervalFromRoot:11}},n={tonic:"Tonic (T)",subdominant:"Subdominant (S)",dominant:"Dominant (D)"},i=["I","ii","iii","IV","V","vi","vii\xb0"],o=["V7/ii","V7/iii","V7/IV","V7/V","V7/vi"],s=["vii\xb07/ii","vii\xb07/iii","vii\xb07/IV","vii\xb07/V","vii\xb07/vi"]},47235:(e,t,r)=>{r.d(t,{EC:()=>a,GD:()=>i,Hy:()=>o,Y_:()=>n});let a={i:{degree:1,romanNumeral:"i",quality:"min7",function:"tonic",intervalFromRoot:0},"ii\xb0":{degree:2,romanNumeral:"ii\xb0",quality:"m7b5",function:"subdominant",intervalFromRoot:2},bIII:{degree:3,romanNumeral:"bIII",quality:"maj7",function:"tonic",intervalFromRoot:3},iv:{degree:4,romanNumeral:"iv",quality:"min7",function:"subdominant",intervalFromRoot:5},v:{degree:5,romanNumeral:"v",quality:"min7",function:"dominant",intervalFromRoot:7},bVI:{degree:6,romanNumeral:"bVI",quality:"maj7",function:"subdominant",intervalFromRoot:8},bVII:{degree:7,romanNumeral:"bVII",quality:"7",function:"dominant",intervalFromRoot:10}},n={i:{degree:1,romanNumeral:"i",quality:"minMaj7",function:"tonic",intervalFromRoot:0},"ii\xb0":{degree:2,romanNumeral:"ii\xb0",quality:"m7b5",function:"subdominant",intervalFromRoot:2},"bIII+":{degree:3,romanNumeral:"bIII+",quality:"maj7#5",function:"tonic",intervalFromRoot:3},iv:{degree:4,romanNumeral:"iv",quality:"min7",function:"subdominant",intervalFromRoot:5},V:{degree:5,romanNumeral:"V",quality:"7",function:"dominant",intervalFromRoot:7},bVI:{degree:6,romanNumeral:"bVI",quality:"maj7",function:"subdominant",intervalFromRoot:8},"vii\xb0":{degree:7,romanNumeral:"vii\xb0",quality:"dim7",function:"dominant",intervalFromRoot:11}},i={i:{degree:1,romanNumeral:"i",quality:"minMaj7",function:"tonic",intervalFromRoot:0},ii:{degree:2,romanNumeral:"ii",quality:"min7",function:"subdominant",intervalFromRoot:2},"bIII+":{degree:3,romanNumeral:"bIII+",quality:"maj7#5",function:"tonic",intervalFromRoot:3},IV:{degree:4,romanNumeral:"IV",quality:"7",function:"subdominant",intervalFromRoot:5},V:{degree:5,romanNumeral:"V",quality:"7",function:"dominant",intervalFromRoot:7},"vi\xb0":{degree:6,romanNumeral:"vi\xb0",quality:"m7b5",function:"subdominant",intervalFromRoot:9},"vii\xb0":{degree:7,romanNumeral:"vii\xb0",quality:"m7b5",function:"dominant",intervalFromRoot:11}},o={major:{name:"Major (Ionian)",shortName:"Major",description:"The bright, happy major scale"},"natural-minor":{name:"Natural Minor (Aeolian)",shortName:"Nat. Minor",description:"The natural minor with bVII"},"harmonic-minor":{name:"Harmonic Minor",shortName:"Harm. Minor",description:"Minor with raised 7th for V7"},"melodic-minor":{name:"Melodic Minor (Jazz)",shortName:"Mel. Minor",description:"Jazz minor with raised 6th & 7th"}}},40456:(e,t,r)=>{r.d(t,{DF:()=>a,HZ:()=>o,mo:()=>s,zq:()=>n});let a=["C","Db","D","Eb","E","F","Gb","G","Ab","A","Bb","B"],n={exerciseType:"diatonic-seventh",playbackMode:"single",difficulty:"intermediate",mode:"major",scaleType:"major",enabledDegrees:{I:!0,ii:!0,iii:!0,IV:!0,V:!0,vi:!0,"vii\xb0":!0}
1,enabledSecondaryDominants:{"V7/ii":!0,"V7/iii":!0,"V7/IV":!0,"V7/V":!0,"V7/vi":!0,"vii\xb07/ii":!1,"vii\xb07/iii":!1,"vii\xb07/IV":!1,"vii\xb07/V":!1,"vii\xb07/vi":!1},playContext:!0,playResolution:!0,autoAdvance:!1,voicing:{type:"root-position",octave:3,addBass:!0,bassOctave:2}},i={C:{color:"#FFFFFF",name:"white",tailwind:"bg-white text-gray-800 border-gray-300"},"C#":{color:"#9B59B6",name:"violet",tailwind:"bg-violet-500 text-white border-violet-600"},Db:{color:"#9B59B6",name:"violet",tailwind:"bg-violet-500 text-white border-violet-600"},D:{color:"#F1C40F",name:"golden yellow",tailwind:"bg-yellow-400 text-gray-800 border-yellow-500"},"D#":{color:"#F8BBD9",name:"pink",tailwind:"bg-pink-300 text-gray-800 border-pink-400"},Eb:{color:"#F8BBD9",name:"pink",tailwind:"bg-pink-300 text-gray-800 border-pink-400"},E:{color:"#3498DB",name:"blue",tailwind:"bg-blue-500 text-white border-blue-600"},F:{color:"#2ECC71",name:"green",tailwind:"bg-green-500 text-white border-green-600"},"F#":{color:"#E67E22",name:"orange",tailwind:"bg-orange-500 text-white border-orange-600"},Gb:{color:"#E67E22",name:"orange",tailwind:"bg-orange-500 text-white border-orange-600"},G:{color:"#E74C3C",name:"red",tailwind:"bg-red-500 text-white border-red-600"},"G#":{color:"#7D8C9C",name:"violet-grey",tailwind:"bg-slate-400 text-white border-slate-500"},Ab:{color:"#7D8C9C",name:"violet-grey",tailwind:"bg-slate-400 text-white border-slate-500"},A:{color:"#2980B9",name:"dark blue",tailwind:"bg-blue-700 text-white border-blue-800"},"A#":{color:"#BDC3C7",name:"silver grey",tailwind:"bg-gray-400 text-gray-800 border-gray-500"},Bb:{color:"#BDC3C7",name:"silver grey",tailwind:"bg-gray-400 text-gray-800 border-gray-500"},B:{color:"#D4A574",name:"golden brown",tailwind:"bg-amber-600 text-white border-amber-700"}};function o(e){return i[e.replace(/[0-9]/g,"")]}let s={"root-position":{name:"Root Position",description:"Basic 1-3-5-7 voicing"},"close-position":{name:"Close Position",description:"Compact voicing in inversions"},"drop-2":{name:"Drop 2",description:"Second voice dropped an octave"},"drop-3":{name:"Drop 3",description:"Third voice dropped an octave"},"drop-2-4":{name:"Drop 2+4",description:"Voices 2 & 4 dropped an octave"},spread:{name:"Spread",description:"Open, wide spacing"},shell:{name:"Shell",description:"Guide tones only (3rd & 7th)"},rootless:{name:"Rootless",description:"3-5-7-9 or 7-9-3-5 (random per chord)"},"rootless-a":{name:"Rootless A",description:"3-5-7-9 (no root)"},"rootless-b":{name:"Rootless B",description:"7-9-3-5 (no root)"},"fourth-chords":{name:"Fourth Chords",description:"Quartal harmony (stacked 4ths)"},"so-what":{name:"So What",description:"Bill Evans style (4-4-4-3)"},"kenny-barron":{name:"Kenny Barron",description:"Wide pianistic min7 (1-5-9-b3-b7)"},cluster:{name:"Cluster",description:"Herbie Hancock min7 texture"},"upper-structure":{name:"Upper Structure",description:"Triad over bass note"}}},74501:(e,t,r)=>{r.d(t,{Qg:()=>L,RK:()=>Q,VP:()=>_,c6:()=>H,fT:()=>P,hQ:()=>q,iz:()=>D,sN:()=>$,t:()=>A,tN:()=>G,x5:()=>E,xX:()=>O,xj:()=>T});var a=r(81798),n=r(40456),i=r(16863),o=r(47235);let s=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],l=["C","Db","D","Eb","E","F","Gb","G","Ab","A","Bb","B"],d=new Set(["F","Bb","Eb","Ab","Db","Gb"]),c={major:[0,2,4,5,7,9,11],"natural-minor":[0,2,3,5,7,8,10],"harmonic-minor":[0,2,3,5,7,8,11],"melodic-minor":[0,2,3,5,7,9,11]},m={major:i.R0,"natural-minor":o.EC,"harmonic-minor":o.Y_,"melodic-minor":o.GD},u={major:["ii","iii","IV","V","vi"],"natural-minor":["ii\xb0","bIII","iv","v","bVI"],"harmonic-minor":["ii\xb0","bIII+","iv","V","bVI"],"melodic-minor":["ii","bIII+","IV","V","vi\xb0"]},b={maj7:[0,4,7,11],min7:[0,3,7,10],7:[0,4,7,10],m7b5:[0,3,6,10],dim7:[0,3,6,9],minMaj7:[0,3,7,11],"maj7#5":[0,4,8,11]},x={maj7:[0,4,7],min7:[0,3,7],7:[0,4,7],m7b5:[0,3,6],dim7:[0,3,6],minMaj7:[0,3,7],"maj7#5":[0,4,8]},h=new Set(["maj7","min7","7","m7b5","dim7","minMaj7","maj7#5"]),g={"root-position":{preferredBottomMidi:48,bottomMidiRange:[40,60],nativeQualities:h,fallbackChain:[],hiddenInTriad:!1},"close-position":{preferredBottomMidi:60,bottomMidiRange:[55,72],nativeQualities:h,fallbackChain:[],hiddenInTriad:!1},"drop-2":{preferredBottomMidi:50,bottomMidiRange:[43,62],nativeQualities:h,fallbackChain:[],hiddenInTriad:!1},"drop-3":{preferredBottomMidi:48,bottomMidiRange:[40,60],nativeQualities:h,fallbackChain:[],hiddenInTriad:!1},"drop-2-4":{preferredBottomMidi:45,bottomMidiRange:[38,56],nativeQualities:h,fallbackChain:[],hiddenInTriad:!0},spread:{preferredBottomMidi:48,bottomMidiRange:[40,56],nativeQualities:h,fallbackChain:[],hiddenInTriad:!0},shell:{preferredBottomMidi:50,bottomMidiRange:[43,62],nativeQualities:h,fallbackChain:[],hiddenInTriad:!1},rootless:{preferredBottomMidi:55,bottomMidiRange:[48,64],nativeQualities:new Set(["maj7","min7","7","m7b5","dim7","minMaj7"]),fallbackChain:["drop-2"],hiddenInTriad:!1},"rootless-a":{preferredBottomMidi:52,bottomMidiRange:[48,56],nativeQualities:new Set(["maj7","min7","7","m7b5","dim7","minMaj7"]),fallbackChain:["drop-2"],hiddenInTriad:!1},"rootless-b":{preferredBottomMidi:58,bottomMidiRange:[55,64],nativeQualities:new Set(["maj7","min7","7","m7b5","dim7","minMaj7"]),fallbackChain:["drop-2"],hiddenInTriad:!1},"fourth-chords":{preferredBottomMidi:52,bottomMidiRange:[45,60],nativeQualities:new Set(["maj7","7"]),fallbackChain:["drop-2"],hiddenInTriad:!0},"so-what":{preferredBottomMidi:48,bottomMidiRange:[43,56],nativeQualities:new Set(["maj7","min7"]),fallbackChain:["fourth-chords","drop-2"],hiddenInTriad:!0},"kenny-barron":{preferredBottomMidi:48,bottomMidiRange:[43,56],nativeQualities:new Set(["min7","minMaj7"]),fallbackChain:["so-what","fourth-chords","drop-2"],hiddenInTriad:!0},cluster:{preferredBottomMidi:60,bottomMidiRange:[55,67],nativeQualities:h,fallbackChain:[],hiddenInTriad:!0},"upper-structure":{preferredBottomMidi:38,bottomMidiRange:[36,44],nativeQualities:new Set(["7"]),fallbackChain:["so-what","fourth-chords","drop-2"],allowedFunctions:new Set(["dominant"]),hiddenInTriad:!0}};function f(e,t){return t?x[e]:b[e]}function p(e){let t=[],r=-1/0;for(let a of e){for(;a<=r;)a+=12;t.push(a),r=a}return t}function v(e,t){let r=((t-e)%12+12)%12,a=r-12;return Math.abs(r)<=Math.abs(a)?r:a}function y(e){let t;switch(e){case"maj7":t=.5>Math.random()?[4,7,11,14]:[4,7,9,14];break;case"min7":t=[3,7,10,14];break;case"7":t=[4,9,10,14];break;case"m7b5":t=[3,6,10,14];break;case"dim7":t=[3,6,9,14];break;case"minMaj7":t=[3,7,11,14];break;case"maj7#5":t=[4,8,11,14];break;default:t=[4,7,11,14]}return p(t)}function k(e){let t;switch(e){case"maj7":t=.5>Math.random()?[11,14,16,19]:[9,14,16,19];break;case"min7":t=[10,14,15,19];break;case"7":t=[10,14,16,21];break;case"m7b5":t=[10,14,15,18];break;case"dim7":t=[9,14,15,18];break;case"minMaj7":t=[11,14,15,19];break;case"maj7#5":t=[11,14,16,20];break;default:t=[11,14,16,19]}return p(t)}let j={"root-position":(e,t)=>
1f(e,t),"close-position":(e,t)=>{let r=f(e,t),a=Math.floor(Math.random()*r.length);return p([...r.slice(a),...r.slice(0,a)])},"drop-2":(e,t)=>{if(t){let[t,r,a]=x[e];return[t,a,r+12]}let[r,a,n,i]=b[e];return[n-12,r,a,i]},"drop-3":(e,t)=>{if(t){let[t,r,a]=x[e];return[r-12,t,a]}let[r,a,n,i]=b[e];return[a-12,r,n,i]},"drop-2-4":(e,t)=>{if(t){let[t,r,a]=x[e];return[t-12,a,r+12]}let[r,a,n,i]=b[e];return[r-12,n-12,a,i]},spread:(e,t)=>{if(t){let[t,r,a]=x[e];return[t,a,r+12]}let[r,a,n,i]=b[e];return[r,n,a+12,i+12]},shell:(e,t)=>{if(t){let[t,r]=x[e];return[t,r]}let[,r,,a]=b[e];return[r,a]},rootless:e=>.5>Math.random()?y(e):k(e),"rootless-a":e=>y(e),"rootless-b":e=>k(e),"fourth-chords":e=>{if("maj7"===e)return .5>Math.random()?[4,9,14,19]:[4,9,14,19,24];if("7"===e){let e=p([-2,4,9,14,19]);return .5>Math.random()?[4,10,14,19,24]:e}return b[e]},"so-what":e=>"min7"===e?[0,5,10,15,19]:"maj7"===e?[4,9,14,19,23]:b[e],"kenny-barron":e=>"min7"===e?[0,7,14,15,22,29]:"minMaj7"===e?[0,7,14,15,23]:b[e],cluster:(e,t,r,a)=>(function(e,t,r){let a=f(e,t),n=[];a.length>=2&&n.push(a[1]),!t&&a.length>=4&&n.push(a[3]),("m7b5"===e||"dim7"===e)&&a.length>=3&&!n.includes(a[2])&&n.push(a[2]);let i=r.scaleTonesFromChordRoot.map(e=>w(e)).filter(e=>!n.includes(e));!function(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}(i);let o=[...n];for(let e of i){if(o.length>=5)break;o.includes(e)||o.push(e)}return o.sort((e,t)=>e-t),o})(e,t,a),"upper-structure":(e,t,r,a)=>"7"===e&&"dominant"===r?function(e){let t=.5>Math.random()?[-12,-8,-2]:[-12,-2,4],r=function(e){if(!e)return[14];let{ninth:t,thirteenth:r}=e;return"flat"===r?"flat"===t?[13]:"sharp"===t?[20]:[13,20]:"flat"===t?[21]:"sharp"===t?[20]:[14]}(null!=e?e:null),a=r[Math.floor(Math.random()*r.length)],n=[a,a+4,a+7],i=Math.floor(2*Math.random());for(let e=0;e<i;e++)n.push(n.shift()+12);return[...t,...n]}(a.dominantAlteration):b[e]};function N(){let e=["drop-2","drop-3","drop-2-4"];return e[Math.floor(Math.random()*e.length)]}function w(e){return(e%12+12)%12}function I(e){return d.has(e)?l:s}function F(e){let t=e.replace(/\/-?\d+$/,"").replace(/-?\d+$/,""),r=s.indexOf(t);if(r>=0||(r=l.indexOf(t))>=0)return r;let n=a.L7.enharmonic(t);return(r=s.indexOf(n))>=0||(r=l.indexOf(n))>=0?r:0}function C(e){let t=e.match(/^([A-Ga-g][#b]?)\/-?(\d+)$/);if(t){let e=t[1];return(parseInt(t[2],10)+1)*12+F(e)}let r=e.match(/^([A-Ga-g][#b]?)-?(\d+)$/);if(r){let e=r[1];return(parseInt(r[2],10)+1)*12+F(e)}return 60}function M(e,t){let r=I(t),a=w(e),n=Math.floor(e/12)-1;return"".concat(r[a],"/").concat(n)}function S(e){let t=e.match(/^V(?:7)?\/(.+)$/);if(null==t?void 0:t[1])return{targetDegree:t[1],quality:"7",function:"dominant",rootOffsetFromTarget:7,kind:"dominant"};let r=e.match(/^vii°(?:7)?\/(.+)$/);return(null==r?void 0:r[1])?{targetDegree:r[1],quality:"dim7",function:"dominant",rootOffsetFromTarget:11,kind:"diminished"}:null}function V(e,t){return u[e].map(e=>"dominant"===t?"V7/".concat(e):"vii\xb07/".concat(e))}function B(e,t,r){if(0===e.length||0===t.length)return t;let a=g[r],n=[...t].sort((e,t)=>e-t),i=n[0],o=n[n.length-1],s=Math.max(...e),l=(a.bottomMidiRange[0]+a.bottomMidiRange[1])/2,d=e=>1.2*(Math.max(0,a.bottomMidiRange[0]-e)+Math.max(0,e-a.bottomMidiRange[1]))+.25*Math.abs(e-l),c=Math.max(a.bottomMidiRange[0]-6,40),m=a.bottomMidiRange[1]+6,u=Math.round((s-o)/12),b=Array.from(new Set([u,u-1,u+1,0])),x=null,h=Number.POSITIVE_INFINITY;for(let r of b){let a=i+12*r;if(a<c||a>m)continue;let n=t.map(e=>e+12*r),o=function(e,t){if(0===e.length||0===t.length)return 0;let r=[...e].sort((e,t)=>e-t),a=[...t].sort((e,t)=>e-t),n=function(e){let t=Math.abs(e);switch(t){case 0:return 0;case 1:return 1;case 2:return 2;case 3:return 8;case 4:return 18;case 5:return 32;default:return 50+(t-6)*10}}(a[a.length-1]-r[r.length-1]),i=.5*Math.abs(a[0]-r[0]),o=r.slice(1,-1),s=a.slice(1,-1),l=0,d=Math.min(o.length,s.length);for(let e=0;e<d;e++)l+=Math.abs(s[e]-o[e]);return n+i+(l+=3*Math.abs(o.length-s.length))}(e,n)+d(a);o<h&&(x=n,h=o)}return null!=x?x:t}let R=new Set(["rootless-a","rootless-b","fourth-chords","so-what","kenny-barron","cluster"]);function T(e){return m[e]}function D(e){return Object.keys(m[e])}function A(e){let t={viio:"vii\xb0",iio:"ii\xb0",vio:"vi\xb0","III+":"bIII+",III:"bIII",VI:"bVI",VII:"bVII"};return t[e]?t[e]:e.replace(/viio/g,"vii\xb0").replace(RegExp("(?<![A-Za-z])iio(?![A-Za-z])","g"),"ii\xb0").replace(RegExp("(?<![A-Za-z])vio(?![A-Za-z])","g"),"vi\xb0")}function q(e){return D(e).reduce((e,t)=>
1(e[t]=!0,e),{})}function E(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"diatonic-seventh",r=D(e),a=V(e,"dominant"),n=V(e,"diminished");switch(t){case"secondary-dominant":return a;case"secondary-diminished":return n;case"mixed":return[...r,...a,...n];default:return r}}function z(e,t,r){var a;let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:3,i=arguments.length>4?arguments[4]:void 0,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],s=arguments.length>6?arguments[6]:void 0,l=function(e,t){let r=m[e][t];if(r)return{intervalFromRoot:r.intervalFromRoot,quality:r.quality,function:r.function};let a=S(t);if(!a)return null;let n=m[e][a.targetDegree];return n?{intervalFromRoot:w(n.intervalFromRoot+a.rootOffsetFromTarget),quality:a.quality,function:a.function}:null}(r,t);if(!l)throw Error("Unknown degree ".concat(t," for scale type ").concat(r));let d=i||{type:"root-position",octave:n,addBass:!1,bassOctave:2},u=function(e,t,r){let a=F(e);return I(r)[w(a+t)]}(e,l.intervalFromRoot,e),b=C("".concat(u,"/").concat(d.octave||n)),x=c[r].map(e=>w(e-l.intervalFromRoot)),h=function(e,t){let r=S(t);if(r){if("dominant"!==r.kind)return null;let t=m[e][r.targetDegree];if(!t)return null;switch(t.quality){case"min7":case"minMaj7":return{ninth:"flat-or-sharp",thirteenth:"flat"};case"m7b5":case"dim7":return{ninth:"flat",thirteenth:"flat"};case"maj7#5":return{ninth:"sharp",thirteenth:"flat"};default:return{ninth:"natural",thirteenth:"natural"}}}let a=m[e][t];if(!a||"7"!==a.quality)return null;let n=new Set(c[e].map(e=>w(e-a.intervalFromRoot))),i=n.has(2)?"natural":n.has(1)?"flat":n.has(3)?"sharp":"natural",o=n.has(9)?"natural":n.has(8)?"flat":"natural";return"natural"===i&&"natural"===o?null:{ninth:i,thirteenth:o}}(r,t),f=function(e,t,r,a,n,i,o){let s=function(e,t,r){let a=g[e];if(a.allowedFunctions&&!a.allowedFunctions.has(r)){for(let e of a.fallbackChain){let a=g[e];if((!a.allowedFunctions||a.allowedFunctions.has(r))&&a.nativeQualities.has(t))return e}return N()}if(a.nativeQualities.has(t))return e;for(let e of a.fallbackChain){let a=g[e];if((!a.allowedFunctions||a.allowedFunctions.has(r))&&a.nativeQualities.has(t))return e}return N()}(r,t,n),l={scaleTonesFromChordRoot:i,dominantAlteration:o},d=j[s](t,a,n,l),c=("upper-structure"===s?d:function(e,t,r){let a=r.dominantAlteration;if(!a||"7"!==t)return e;let n=function(e){switch(e){case"flat":return 1;case"sharp":return 3;case"flat-or-sharp":return .75>Math.random()?1:3;default:return 2}}(a.ninth),i="flat"===a.thirteenth?8:9;return p(e.map(e=>{let t=w(e);return 2===t?e+v(2,n):9===t?e+v(9,i):e}))}(d,t,l)).map(t=>e+t),m=g[s],u=[...c].sort((e,t)=>e-t)[0],b=12*Math.round((m.preferredBottomMidi-u)/12);return{midi:c=c.map(e=>e+b),resolvedVoicing:s}}(b,l.quality,d.type,o,l.function,x,h),y=null!==(a=null==s?void 0:s.notes.map(C))&&void 0!==a?a:[],k=f.midi;y.length>0&&(k=B(y,k,f.resolvedVoicing)),d.addBass&&(k=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(0===e.length)return[t];let a=[...e].sort((e,t)=>e-t),n=t;for(;n>=a[0];)n-=12;for(r&&(n-=12);n<24;)n+=12;return[n,...e]}(k,C("".concat(u,"/").concat(d.bassOctave)),R.has(f.resolvedVoicing))),k.sort((e,t)=>e-t);let V=k.map(t=>M(t,e)),T=S(t);return{root:"".concat(u,"/").concat(d.octave||n),quality:l.quality,notes:V,degree:T?void 0:t,secondaryNotation:T?t:void 0,function:l.function,__resolvedVoicing:f.resolvedVoicing}}function P(e,t,r){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:3,n=arguments.length>4?arguments[4]:void 0,i=arguments.length>5&&void 0!==arguments[5]&&arguments[5];return z(e,t,r,a,n,i)}function O(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:3,a=arguments.length>3?arguments[3]:void 0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"major";return z(e,t,n,r,a,!1)}function Q(e,t){var r,a;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:3,i=arguments.length>3?arguments[3]:void 0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"major",s=null!==(a=null===(r=S(t))||void 0===r?void 0:r.targetDegree)&&void 0!==a?a:null;if(!s)throw Error("Cannot derive resolution degree from ".concat(t));return z(e,s,o,n,i,!1)}function H(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1];let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:3,r=arguments.length>3?arguments[3]:void 0,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"major",n=arguments.length>5&&void 0!==arguments[5]&&arguments[5];return z(e,"major"===a?"I":"i",a,t,r,n)}function $(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(0===e.notes.length)return e;let a=e.root.replace(/\/.*/,""),n=[...e.notes].sort((e,t)=>
1C(e)-C(t));for(let e=0;e<t&&n.length>1;e++){let e=n.shift();n.push(M(C(e)+12,a)),n.sort((e,t)=>C(e)-C(t))}return r.addLowBass&&n.length>0&&(n=[M(C(n[0])-12,a),...n]),{...e,notes:n}}function G(e,t){if(0===e.notes.length||0===t.notes.length)return t;let r=B(e.notes.map(C),t.notes.map(C),t.__resolvedVoicing||"drop-2"),a=t.root.replace(/\/.*/,"");return{...t,notes:r.map(e=>M(e,a))}}function L(e){return e.map(e=>e.replace("/",""))}function _(e){let t=e?n.DF.filter(t=>t!==e):[...n.DF];return t[Math.floor(Math.random()*t.length)]}[...i.Jv,...i.TE]}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.